Пример #1
0
 public function exportDataToCsv(PgAnalyzer $pgAnalyzer)
 {
     $fileNames = ['nodes' => self::NODE_FILENAME . '_' . time() . '.csv', 'links' => self::LINKS_FILENAME . '_' . time() . '.csv'];
     $handleNodes = fopen(sys_get_temp_dir() . DIRECTORY_SEPARATOR . $fileNames['nodes'], 'w');
     $handleLinks = fopen(sys_get_temp_dir() . DIRECTORY_SEPARATOR . $fileNames['links'], 'w');
     $headerNodes = ['tableId:ID', 'name', ':LABEL'];
     $headerLinks = [':START_ID', 'role', ':END_ID', ':TYPE'];
     fputcsv($handleNodes, $headerNodes);
     fputcsv($handleLinks, $headerLinks);
     foreach ($pgAnalyzer->getSchemas() as $schema) {
         foreach ($schema->getTables() as $table) {
             fputcsv($handleNodes, [$schema->getName() . PgAnalyzer::DB_SEPARATOR . $table->getName(), $table->getName(), $schema->getName() . '|Table' . (count($table->getChildTables()) ? '|Parent' : '') . (count($table->getParentTables()) ? '|Child' : '')], ",", "'");
             foreach ($table->getForeignKeys() as $fk) {
                 $parentTable = $pgAnalyzer->getTableByOid($fk->getParentTable());
                 fputcsv($handleLinks, [$table->getSchema() . PgAnalyzer::DB_SEPARATOR . $table->getName(), 'reference', $parentTable->getSchema() . PgAnalyzer::DB_SEPARATOR . $parentTable->getName(), 'FOREIGN_KEY'], ",", "'");
             }
             foreach ($table->getParentTables() as $parent) {
                 $parentTable = $pgAnalyzer->getTableByOid($parent->getOid());
                 fputcsv($handleLinks, [$table->getSchema() . PgAnalyzer::DB_SEPARATOR . $table->getName(), 'inherit', $parentTable->getSchema() . PgAnalyzer::DB_SEPARATOR . $parentTable->getName(), 'INHERIT'], ",", "'");
             }
         }
     }
     fclose($handleNodes);
     fclose($handleLinks);
     return $fileNames;
 }
Пример #2
0
 /**
  * @param $tableOid
  * @param $weight
  * @return string
  * @throws SyncException
  * @throws \rombar\PgExplorerBundle\Exceptions\ElementNotFoundException
  */
 private function syncTable($tableOid, Weight $weight)
 {
     $table = $this->fromAnalyzer->getTableByOid($tableOid);
     if ($this->isTableSynchronizable($table)) {
         $data = $this->getFromTableData($table);
         if (count($data) > 0) {
             $message = $this->insertData($table, $data);
         } else {
             $this->logger->addInfo('Table ' . $table->getSchema() . PgAnalyzer::DB_SEPARATOR . $table->getName() . ' is empty');
             $message = 'OK';
             //Nothing to do. Table is empty
         }
         if ($message == 'OK') {
             $weight->updateTableStatus($table->getOid(), true);
             return $message;
         } else {
             throw new SyncException('Table ' . $table->getSchema() . PgAnalyzer::DB_SEPARATOR . $table->getName() . ' not sync : ' . $message);
         }
     } else {
         $this->logger->addWarning('Table not Synchronizable (yet?) : ' . $table->getSchema() . PgAnalyzer::DB_SEPARATOR . $table->getName());
         return self::TABLE_NOT_SYNC;
     }
 }