/** * @param Table $table * @throws SyncException */ public function addTable(Table $table) { $weight = count($table->getForeignKeys()); if (!isset($this->weights[$weight])) { $weightContainer = new Weight(); $weightContainer->setWeight($weight); $this->weights[$weight] = $weightContainer; } $this->weights[$weight]->addTableStatus($table->getOid()); }
/** * * @param Table $table * @param Table $parentTable * @param boolean $strict default false. If false, search in both ways * @return string * @throws \Exception */ private function getJoinCriteria(Table $table, Table $parentTable, $strict = false) { $libelle = ''; //Look for the FK object if ($table && count($table->getForeignKeys()) > 0) { foreach ($table->getForeignKeys() as $fk) { //var_dump($fk); if ($fk->getParentTable() == $parentTable->getOid()) { $cols = []; $refCols = []; $colNames = []; $refColNames = []; //var_dump($fk->getCols()); foreach ($fk->getCols() as $colId) { $col = $table->getAColumn($colId); if ($col) { $cols[] = $col; $colNames[] = $table->getAlias() . '.' . $col->getName(); } else { throw new \Exception('Unknwon column ID : ' . $colId . print_r($table->getColumns(), true)); } } if (count($cols) == 0) { throw new \Exception('No Column in the foreign key' . print_r($fk, true)); } $index = 0; foreach ($fk->getRefCols() as $colId) { $col = $parentTable->getAColumn($colId); if ($col) { if (count($cols) == 1 || $cols[$index]->getType() == $col->getType()) { $refCols[] = $col; $refColNames[] = $parentTable->getAlias() . '.' . $col->getName(); } else { throw new \Exception('Columns order not matching'); } } else { throw new \Exception('Unknwon column ID : ' . $colId . print_r($parentTable->getColumns(), true)); } $index++; } $libelle = '(' . implode(', ', $colNames) . ') = (' . implode(', ', $refColNames) . ')'; break; } } } if (empty($libelle) && !$strict) { $libelle = $this->getJoinCriteria($parentTable, $table, true); } if (empty($libelle)) { throw new \Exception('No foreign key possible'); } return $libelle; }
/** * Get tables linked to a given table (reference by and referenced by) * @param Table $parentTable * @return array array<Tables> */ public function getProximityTablesFrom(Table $parentTable) { $tables = []; foreach ($parentTable->getForeignKeys() as $fk) { $table = $this->getTableByOid($fk->getParentTable()); if (!isset($tables[$table->getOid()])) { $tables[$table->getOid()] = $table; } } foreach ($parentTable->getReferencedInTables() as $oid) { $table = $this->getTableByOid($oid); if (!isset($tables[$table->getOid()])) { $tables[$table->getOid()] = $table; } } return $tables; }
/** * @param Table $table */ private function enableUserTriggers(Table $table) { $tableFullName = $table->getSchema() . PgAnalyzer::DB_SEPARATOR . $table->getName(); $sql = "ALTER TABLE " . $tableFullName . " ENABLE TRIGGER USER"; $this->doctrine->getConnection($this->parameters->getManagerTo())->executeQuery($sql); }