public function getTableDefinition($tableName) { $tableSymbol = new Symbol($tableName); $res = $this->database->query("DESC ?", $tableSymbol); $columns = new \stdClass(); while ($row = $res->fetchRow()) { $type = $row['Type']; $field = $row['Field']; $phpType = $this->getTypeByString($type); if ('auto_increment' === $row['Extra']) { $phpType += Column::AUTO_ID; } $column = new Column($phpType); $columns->{$field} = $column; $column->schemaName = $field; $notNull = $row['Null'] === 'NO'; if ($row['Default'] !== null || !$notNull) { $column->setDefault($row['Default']); } $column->setFlag(Column::NOT_NULL, $notNull); } $definition = new Table($columns, $this->database, $tableName); $res = $this->database->query("SHOW INDEX FROM ?", $tableSymbol); $indexes = array(); $uniqueIndex = array(); foreach ($res as $row) { $indexes[$row['Key_name']][$row['Seq_in_index']] = $columns->{$row['Column_name']}; $uniqueIndex[$row['Key_name']] = !$row['Non_unique']; } foreach ($indexes as $indexName => $indexData) { ksort($indexData); $index = new Index(array_values($indexData)); $index->setName($indexName); $index->setType($uniqueIndex[$indexName] ? Index::TYPE_UNIQUE : Index::TYPE_KEY); if ($indexName === self::_PRIMARY) { $definition->setPrimaryKey($index->columns); } else { $definition->addIndex($index); } } return $definition; }
public function dropTable($tableName) { $this->database->query($this->generateDropTable($tableName)); }