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
 private function createIndex(Index $index, Table $table)
 {
     $columns = [];
     foreach ($index->getColumns() as $column) {
         $columns[] = $this->escapeString($table->getColumn($column)->getName());
     }
     $query = 'CREATE ' . $index->getType() . ' ' . $this->escapeString($index->getName()) . ' ON ' . $this->escapeString($table->getName()) . ' (' . implode(',', $columns) . ');';
     return $query;
 }
Esempio n. 3
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');
 }