private function createNewTable(Table $table, $tmpTableName) { if (is_null($this->adapter)) { throw new PhoenixException('Missing adapter'); } $oldColumns = $this->adapter->tableInfo($table->getName()); $columns = array_merge($oldColumns, $table->getColumnsToChange()); $newTable = new Table($table->getName()); $columnNames = []; foreach ($columns as $column) { $columnNames[] = $column->getName(); if ($column->isAutoincrement()) { $newTable->addPrimary($column); continue; } $newTable->addColumn($column); } $queries = $this->createTable($newTable); $queries[] = 'INSERT INTO ' . $this->escapeString($newTable->getName()) . ' (' . implode(',', $this->escapeArray($columnNames)) . ') SELECT ' . implode(',', $this->escapeArray(array_keys($oldColumns))) . ' FROM ' . $this->escapeString($tmpTableName); return $queries; }
public function testColumns() { $table = new Table('test'); $table->addPrimary(true); $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->addColumn(new Column('title', 'string'))); $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->addColumn(new Column('total', 'int'))); $this->assertCount(3, $table->getColumns()); $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->changeColumn('title', new Column('new_title', 'string'))); $this->assertCount(3, $table->getColumns()); $this->assertCount(0, $table->getColumnsToChange()); $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->changeColumn('alias', new Column('new_alias', 'string'))); $this->assertCount(3, $table->getColumns()); $this->assertCount(1, $table->getColumnsToChange()); $this->assertCount(0, $table->getColumnsToDrop()); $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->dropColumn('title')); $this->assertCount(3, $table->getColumns()); $this->assertCount(1, $table->getColumnsToDrop()); }