Ejemplo n.º 1
0
 /**
  * @param $entityName
  * @return mixed
  */
 private function getEntitiesFromDatabase($entityName)
 {
     if ($this->dbSchema->isChildEntity($entityName)) {
         $entityInfo = $this->dbSchema->getEntityInfo($entityName);
         $parentReference = $entityInfo->parentReference;
         return $this->database->get_results("SELECT * FROM {$this->dbSchema->getPrefixedTableName($entityName)} ORDER BY {$parentReference}", ARRAY_A);
     }
     return $this->database->get_results("SELECT * FROM {$this->dbSchema->getPrefixedTableName($entityName)}", ARRAY_A);
 }
Ejemplo n.º 2
0
 private function getIdsForVpIds($referencesToUpdate)
 {
     if (count($referencesToUpdate) === 0) {
         return [[0, 0]];
     }
     $vpIds = array_map(function ($vpId) {
         return 'UNHEX("' . $vpId . '")';
     }, $referencesToUpdate);
     $vpIdsRestriction = join(', ', $vpIds);
     $result = $this->database->get_results("SELECT HEX(vp_id), id FROM {$this->database->vp_id} WHERE vp_id IN ({$vpIdsRestriction})", ARRAY_N);
     $result[] = [0, 0];
     return array_combine(array_column($result, 0), array_column($result, 1));
 }
Ejemplo n.º 3
0
 /**
  * Parses UPDATE query
  *
  * @param Parser $parser
  * @param DbSchemaInfo $schema
  * @param string $query
  * @param Database $database
  * @return ParsedQueryData
  */
 private function parseUpdateQuery($parser, $query, $schema, $database)
 {
     /** @var UpdateStatement $sqlStatement */
     $sqlStatement = $parser->statements[0];
     $table = $sqlStatement->tables[0]->table;
     $idColumns = $this->resolveIdColumns($schema, $table);
     if ($idColumns == null) {
         return null;
     }
     $parsedQueryData = new ParsedQueryData(ParsedQueryData::UPDATE_QUERY);
     $parsedQueryData->table = $table;
     $parsedQueryData->idColumnsNames = $idColumns;
     $parsedQueryData->entityName = $this->resolveEntityName($schema, $table);
     $selectSql = $this->getSelectQuery($parser, $idColumns);
     $where = $this->getWhereFragments($parser, $query, $sqlStatement);
     if (isset($where)) {
         $selectSql .= " WHERE " . join(' ', $where);
     }
     $parsedQueryData->sqlQuery = $selectSql;
     $parsedQueryData->ids = $database->get_results($selectSql, ARRAY_N);
     $parsedQueryData->data = $this->getColumnDataToSet($sqlStatement);
     return $parsedQueryData;
 }
Ejemplo n.º 4
0
 /**
  * Saves all already existing meta and M:N references for an entity that wasn't tracked yet
  *
  * @param array $data
  * @param string $entityName
  */
 private function storeRelatedEntities($data, $entityName)
 {
     $id = $data[$this->dbSchemaInfo->getEntityInfo($entityName)->idColumnName];
     foreach ($this->dbSchemaInfo->getAllEntityNames() as $referencedEntityName) {
         $entityInfo = $this->dbSchemaInfo->getEntityInfo($referencedEntityName);
         if ($this->dbSchemaInfo->isChildEntity($referencedEntityName) && $entityInfo->references[$entityInfo->parentReference] === $entityName) {
             $childEntities = $this->database->get_results("SELECT * FROM {$this->dbSchemaInfo->getPrefixedTableName($referencedEntityName)} WHERE `{$entityInfo->parentReference}` = '{$id}'", ARRAY_A);
             foreach ($childEntities as $childEntity) {
                 $childEntity = $this->vpidRepository->replaceForeignKeysWithReferences($referencedEntityName, $childEntity);
                 if (!$this->mirror->shouldBeSaved($referencedEntityName, $childEntity)) {
                     continue;
                 }
                 $id = $childEntity[$entityInfo->idColumnName];
                 $vpid = $this->vpidRepository->getVpidForEntity($referencedEntityName, $id);
                 if ($vpid) {
                     $childEntity[$entityInfo->vpidColumnName] = $vpid;
                 } else {
                     $childEntity = $this->vpidRepository->identifyEntity($referencedEntityName, $childEntity, $childEntity[$entityInfo->idColumnName]);
                 }
                 $childEntity = $this->shortcodesReplacer->replaceShortcodesInEntity($referencedEntityName, $childEntity);
                 $this->mirror->save($referencedEntityName, $childEntity);
             }
         }
     }
     foreach ($this->dbSchemaInfo->getAllMnReferences() as $mnReferenceDetails) {
         if ($mnReferenceDetails['source-entity'] === $entityName) {
             $junctionTable = $mnReferenceDetails['junction-table'];
             $prefixedJunctionTable = $this->dbSchemaInfo->getPrefixedTableName($junctionTable);
             $sourceColumn = $mnReferenceDetails['source-column'];
             $references = $this->database->get_results("SELECT * FROM `{$prefixedJunctionTable}` WHERE `{$sourceColumn}` = '{$id}'", ARRAY_A);
             foreach ($references as $reference) {
                 $reference = $this->vpidRepository->replaceForeignKeysWithReferences($junctionTable, $reference);
                 $this->mirror->save($junctionTable, $reference);
             }
         }
     }
 }