示例#1
0
 public function testDefaultConstruct()
 {
     $table = new Table('test');
     $table->addPrimary(true);
     $this->assertEquals('test', $table->getName());
     $columns = $table->getColumns();
     $this->assertCount(1, $columns);
     foreach ($columns as $column) {
         $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Column', $column);
     }
     $idColumn = $table->getColumn('id');
     $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Column', $idColumn);
     $this->assertEquals('id', $idColumn->getName());
     $this->assertEquals('integer', $idColumn->getType());
     $this->assertFalse($idColumn->allowNull());
     $this->assertNull($idColumn->getDefault());
     $this->assertTrue($idColumn->isSigned());
     $this->assertNull($idColumn->getLength());
     $this->assertNull($idColumn->getDecimals());
     $this->assertTrue($idColumn->isAutoincrement());
     $primaryColumns = $table->getPrimaryColumns();
     $this->assertCount(1, $primaryColumns);
     foreach ($primaryColumns as $primaryColumn) {
         $this->assertTrue(is_string($primaryColumn));
     }
 }
示例#2
0
 private function createIndexName($columns, $name = null)
 {
     if ($name) {
         return $name;
     }
     if (!is_array($columns)) {
         $columns = [$columns];
     }
     return 'idx_' . $this->table->getName() . '_' . implode('_', $columns);
 }
示例#3
0
 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;
 }
示例#4
0
 /**
  * generates rename table queries for mysql
  * @param Table $table
  * @param string $newTableName
  * @return array list of queries
  */
 public function renameTable(Table $table, $newTableName)
 {
     return ['RENAME TABLE ' . $this->escapeString($table->getName()) . ' TO ' . $this->escapeString($newTableName) . ';'];
 }
示例#5
0
 protected function dropKeyQuery(Table $table, $key)
 {
     return 'ALTER TABLE ' . $this->escapeString($table->getName()) . ' DROP ' . $key . ';';
 }
示例#6
0
 protected function createEnumSetColumn(Column $column, Table $table)
 {
     return sprintf($this->remapType($column), $table->getName(), $column->getName());
 }