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; }
/** * @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; } }