Esempio n. 1
0
 /**
  * generates create table query for pgsql
  * @param Table $table
  * @return array list of queries
  */
 public function createTable(Table $table)
 {
     $queries = [];
     $primaryKeys = $table->getPrimaryColumns();
     $enumSetColumns = [];
     foreach ($table->getColumns() as $column) {
         if (in_array($column->getType(), [Column::TYPE_ENUM, Column::TYPE_SET])) {
             $enumSetColumns[] = $column;
         }
     }
     if (!empty($enumSetColumns)) {
         foreach ($enumSetColumns as $column) {
             $queries[] = 'CREATE TYPE ' . $this->escapeString($table->getName() . '__' . $column->getName()) . ' AS ENUM (' . implode(',', array_map(function ($value) {
                 return "'{$value}'";
             }, $column->getValues())) . ');';
         }
     }
     $autoincrement = false;
     foreach ($primaryKeys as $primaryKey) {
         $primaryKeyColumn = $table->getColumn($primaryKey);
         if ($primaryKeyColumn->isAutoincrement()) {
             $autoincrement = true;
             break;
         }
     }
     if ($autoincrement) {
         $queries[] = 'CREATE SEQUENCE ' . $this->escapeString($table->getName() . '_seq') . ';';
     }
     $queries[] = $this->createTableQuery($table);
     foreach ($table->getIndexes() as $index) {
         $queries[] = $this->createIndex($index, $table);
     }
     return $queries;
 }
Esempio n. 2
0
 protected function addColumns(Table $table)
 {
     $columns = $table->getColumns();
     if (empty($columns)) {
         return [];
     }
     $query = 'ALTER TABLE ' . $this->escapeString($table->getName()) . ' ';
     $columnList = [];
     foreach ($columns as $column) {
         $columnList[] = 'ADD COLUMN ' . $this->createColumn($column, $table);
     }
     $query .= implode(',', $columnList) . ';';
     return [$query];
 }
Esempio n. 3
0
 /**
  * generates create table query for mysql
  * @param Table $table
  * @return array list of queries
  */
 public function createTable(Table $table)
 {
     $query = 'CREATE TABLE ' . $this->escapeString($table->getName()) . ' (';
     $columns = [];
     foreach ($table->getColumns() as $column) {
         $columns[] = $this->createColumn($column, $table);
     }
     $query .= implode(',', $columns);
     $primaryKey = $this->createPrimaryKey($table);
     $query .= $primaryKey ? ',' . $primaryKey : '';
     $query .= $this->createIndexes($table);
     $query .= $this->createForeignKeys($table);
     $query .= ')';
     $query .= $this->createTableCharset($table);
     $query .= ';';
     return [$query];
 }
Esempio n. 4
0
 public function testGetters()
 {
     $table = new Table('test');
     $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->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->addColumn(new Column('bodytext', 'text')));
     $columns = $table->getColumns();
     $this->assertCount(3, $columns);
     foreach ($columns as $column) {
         $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Column', $column);
     }
     $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Column', $table->getColumn('title'));
     $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->addIndex(new Index('title', 'title', 'unique')));
     $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->addIndex(new Index(['title', 'alias'], 'title_alias')));
     $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Table', $table->addIndex(new Index(['bodytext'], 'bodytext', 'fulltext')));
     $indexes = $table->getIndexes();
     $this->assertCount(3, $indexes);
     foreach ($indexes as $index) {
         $this->assertInstanceOf('\\Phoenix\\Database\\Element\\Index', $index);
     }
     $this->setExpectedException('\\Exception', 'Column "unknown_column" not found');
     $table->getColumn('unknown_column');
 }