public function testFieldGetters() { $table = new Table($this->readInputFile('table.sql')); $fieldNames = $table->getFieldNames(); foreach ($fieldNames as $field) { $this->assertTrue($table->hasField($field)); $this->assertInstanceOf('Diff\\Model\\Field', $table->getField($field)); } }
/** * @param Database $db * @param Table $tbl * @return Table */ public function getTableFields(Database $db, Table $tbl) { $query = sprintf('SHOW COLUMNS IN `%s` FROM `%s`', $tbl->getName(), $db->getName()); $stmt = $this->conn->query($query); while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { $field = new Field('', $row['Field']); $field->setType($row['Type'])->setNullable(strtoupper($row['Null']) == 'YES')->setDefaultValue($row['Default']); if ($row['Extra']) { if ($row['Extra'] == 'auto_increment') { $field->setAutoIncrement(true); } else { //things like on update? $field->setExtraString($row['Extra']); } } $tbl->addField($field, true); } return $tbl; }
/** * @param Table $table * @param Database $db * @return Table */ protected function addCreateStatement(Table $table, Database $db) { $stmt = $this->conn->query(sprintf('SHOW CREATE TABLE %s.%s', $db->getName(), $table->getName())); $create = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$create || !isset($create['Create Table'])) { return null; } $table->setStatement($create['Create Table'])->parse($create['Create Table']); $db->addTable($table); return $table; }
/** * @param Database $toCheck * @param Table $missing * @param Database $from * @return array */ protected function crossCheckDependencies(Database $toCheck, Table $missing, Database $from) { $renameCandidates = []; $possibleDrops = []; foreach ($toCheck as $name => $table) { if (!$from->hasTable($name)) { $possibleDrops[$name] = $table; } } $depString = $missing->getSortedDependencyString(); /** @var Table $table */ foreach ($possibleDrops as $name => $table) { if ($depString == $table->getSortedDependencyString()) { $renameCandidates[$name] = $table; } else { //X-check existing FK's /** @var ForeignKey $fk */ foreach ($table->getConstraints() as $fkName => $fk) { $missingFk = $missing->getConstraintByName($fkName); if ($missingFk && $missingFk->getReferences() === $fk->getReferences()) { $renameCandidates[$name] = ['table' => $table, 'similarity' => $table->getSimilarityPercentage($missing)]; } } } } return $renameCandidates; }