public static function updateHint($repository_phid, $old, $new, $type)
 {
     switch ($type) {
         case self::HINT_NONE:
             break;
         case self::HINT_REWRITTEN:
             if (!$new) {
                 throw new Exception(pht('When hinting a commit ("%s") as rewritten, you must provide ' . 'the commit it was rewritten into.', $old));
             }
             break;
         case self::HINT_UNREADABLE:
             if ($new) {
                 throw new Exception(pht('When hinting a commit ("%s") as unreadable, you must not ' . 'provide a new commit ("%s").', $old, $new));
             }
             break;
         default:
             $all_types = self::getAllHintTypes();
             throw new Exception(pht('Hint type ("%s") for commit ("%s") is not valid. Valid hints ' . 'are: %s.', $type, $old, implode(', ', $all_types)));
     }
     $table = new self();
     $table_name = $table->getTableName();
     $conn = $table->establishConnection('w');
     if ($type == self::HINT_NONE) {
         queryfx($conn, 'DELETE FROM %T WHERE repositoryPHID = %s AND oldCommitIdentifier = %s', $table_name, $repository_phid, $old);
     } else {
         queryfx($conn, 'INSERT INTO %T
       (repositoryPHID, oldCommitIdentifier, newCommitIdentifier, hintType)
       VALUES (%s, %s, %ns, %s)
       ON DUPLICATE KEY UPDATE
         newCommitIdentifier = VALUES(newCommitIdentifier),
         hintType = VALUES(hintType)', $table_name, $repository_phid, $old, $new, $type);
     }
 }
 public static function updateRepositoryURIs($repository_phid, array $uris)
 {
     $table = new self();
     $conn_w = $table->establishConnection('w');
     $sql = array();
     foreach ($uris as $key => $uri) {
         if (!strlen($uri)) {
             unset($uris[$key]);
             continue;
         }
         $sql[] = qsprintf($conn_w, '(%s, %s)', $repository_phid, $uri);
     }
     $table->openTransaction();
     queryfx($conn_w, 'DELETE FROM %T WHERE repositoryPHID = %s', $table->getTableName(), $repository_phid);
     if ($sql) {
         queryfx($conn_w, 'INSERT INTO %T (repositoryPHID, repositoryURI) VALUES %Q', $table->getTableName(), implode(', ', $sql));
     }
     $table->saveTransaction();
 }
 public static function clearCacheForAllUsers($key)
 {
     if (PhabricatorEnv::isReadOnly()) {
         return;
     }
     $table = new self();
     $conn_w = $table->establishConnection('w');
     $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
     queryfx($conn_w, 'DELETE FROM %T WHERE cacheIndex = %s', $table->getTableName(), PhabricatorHash::digestForIndex($key));
     unset($unguarded);
 }
 /**
  * Explicitly demote a device.
  */
 public static function demoteDevice($repository_phid, $device_phid)
 {
     $version = new self();
     $conn_w = $version->establishConnection('w');
     $table = $version->getTableName();
     queryfx($conn_w, 'DELETE FROM %T WHERE repositoryPHID = %s AND devicePHID = %s', $table, $repository_phid, $device_phid);
 }
Example #5
0
 protected function initReferences(&$configData)
 {
     /** @global \CDatabase $DB */
     global $DB;
     // Наполнение ссылок на другие таблицы или сущности
     $rawReferenceList = array();
     if (!empty($configData['reference']) && is_array($configData['reference'])) {
         foreach ($configData['reference'] as $rawReference) {
             $reference = array("table" => null, "entity" => null, "alias" => null, "type" => null, "condition" => null, "reference_field" => null, "self_field" => null);
             foreach ($reference as $refParam => &$refParamValue) {
                 if (!empty($rawReference[$refParam]) && is_string($rawReference[$refParam])) {
                     $refParamValue = $rawReference[$refParam];
                 }
             }
             $rawReferenceList[] = $reference;
         }
         unset($rawReference);
     }
     if (!empty($rawReferenceList)) {
         foreach ($rawReferenceList as &$reference) {
             $reference['fields'] = null;
             if (!empty($reference['entity'])) {
                 try {
                     $referenceConfigPath = self::normalizePath($reference['entity']);
                     if (substr($referenceConfigPath, 0, 1) != '/') {
                         $curConfigDir = dirname($this->configPath);
                         $referenceConfigPath = $curConfigDir . '/' . $reference['entity'];
                     }
                     $referenceConfigPath = self::normalizePath($referenceConfigPath);
                     if (null !== $this->parentRefConfig && $this->parentRefConfig->getConfigPath() == $referenceConfigPath) {
                         $refEntity = $this->parentRefConfig;
                     } else {
                         $refEntity = new self($referenceConfigPath, $this);
                     }
                     $reference['fields'] = $refEntity->getFieldsList(true);
                     // Если алиас связанной таблицы случайно не заполнен, то надо попробовать
                     // взять алиас из объекта связанной сущности + проверить не использовали ли мы его уже
                     // (т.е. не занят ли другой связанной таблицей относительно текущей сущносии)
                     // и только если алиас из объекта не подошел, только тогда выбрасываем исключение на неправильный алиас
                     if ((empty($reference['alias']) || !self::validateTblAlias($reference['alias'])) && !array_key_exists($refEntity->getAlias(), $this->reference)) {
                         $reference['alias'] = $refEntity->getAlias();
                     }
                     $reference['table'] = $refEntity->getTableName();
                 } catch (Err $e) {
                     if ($e->getCode() == Err::E_CFG_REF_ENTITY_SAME_CLASS) {
                         throw $e;
                     }
                     throw new Err(array('#REASON#' => $e->getMessage() . ' (' . Err::ID . $e->getCode() . ')'), Err::E_CFG_REF_READ_ENTITY_FAIL);
                 }
             } else {
                 if (!empty($reference['table']) && !self::validateTblName($reference['table'])) {
                     throw new Err('', Err::E_CFG_REF_WRG_NAME);
                 }
                 $rsColumns = $DB->Query('SHOW COLUMNS FROM ' . $reference['table']);
                 $refColumnsList = array();
                 while ($column = $rsColumns->Fetch()) {
                     $refColumnsList[] = $column['Field'];
                 }
                 if (empty($refColumnsList)) {
                     throw new Err(array('#REASON#' => 'OBX_CORE_DBENTITY_EDITOR_E_FETCH_TABLE_COLUMNS_FAILED'), Err::E_CFG_REF_READ_ENTITY_FAIL);
                 }
                 $reference['fields'] = $refColumnsList;
             }
             if (empty($reference['alias']) || !self::validateTblAlias($reference['alias'])) {
                 throw new Err('', Err::E_CFG_REF_WRG_ALIAS);
             }
             if (array_key_exists($reference['alias'], $this->reference)) {
                 throw new Err('', Err::E_CFG_REF_ALIAS_NOT_UQ);
             }
             if (empty($reference['type'])) {
                 throw new Err('', Err::E_CFG_REF_WRG_JOIN_TYPE);
             }
             switch ($reference['type']) {
                 case 'left_join':
                 case 'right_join':
                 case 'cross':
                     break;
                 default:
                     throw new Err('', Err::E_CFG_REF_WRG_JOIN_TYPE);
             }
             $refCondition = self::parseReferenceCondition($reference['condition']);
             if (null === $refCondition) {
                 throw new Err('', Err::E_CFG_REF_WRG_CONDITION);
             }
             if ($refCondition['left']['table'] == $this->tableAlias && $refCondition['right']['table'] == $reference['alias']) {
                 $reference['self_field'] = $refCondition['left']['field'];
                 $reference['reference_field'] = $refCondition['right']['field'];
             } elseif ($refCondition['right']['table'] == $this->tableAlias && $refCondition['left']['table'] == $reference['alias']) {
                 $reference['self_field'] = $refCondition['right']['field'];
                 $reference['reference_field'] = $refCondition['left']['field'];
             } else {
                 throw new Err('', Err::E_CFG_REF_WRG_CONDITION);
             }
             if (!in_array($reference['reference_field'], $reference['fields']) || empty($this->fields[$reference['self_field']])) {
                 throw new Err('', Err::E_CFG_REF_WRG_CONDITION);
             }
             $this->reference[$reference['alias']] = $reference;
         }
     }
 }