/** * @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 $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 Database $base * @param Database $target * @return array */ public function dropRedundantTables(Database $base, Database $target) { $drop = []; /** @var Table $table */ foreach ($base->getTables() as $name => $table) { if (!$target->hasTable($name)) { $drop[] = $table->getDropQuery(); $table->unlinkTable(); } } return $drop; }