示例#1
0
 protected function appendColumns()
 {
     $utility = $this->database()->getUtility();
     foreach ($this->table->getColumns(true) as $column) {
         $this->createLines->commaExpr(' ? ' . $utility->getColumnTypeString($column), new Symbol($column->schemaName));
     }
 }
示例#2
0
 private function readIndexes(Table $def)
 {
     $res = $this->database->select()->select('t.relname as table_name, i.relname as index_name, a.attname as column_name')->select('ix.indisunique::int as is_unique,ix.indisprimary::int as is_primary')->from('pg_class t, pg_class i, pg_index ix, pg_attribute a')->where('t.oid = ix.indrelid')->where('i.oid = ix.indexrelid')->where('a.attrelid = t.oid')->where('a.attnum = ANY(ix.indkey)')->where('t.relkind = \'r\'')->where('t.relname = ?', $def->schemaName)->order('t.relname, i.relname, ix.indnatts')->query()->fetchAll();
     $indexData = array();
     foreach ($res as $row) {
         if ($row['is_primary']) {
             $row['index_name'] = 'PRIMARY';
         }
         $indexData[$row['index_name']]['columns'][$row['column_name']] = $row['column_name'];
         $indexData[$row['index_name']]['is_unique'] = $row['is_unique'];
         $indexData[$row['index_name']]['is_primary'] = $row['is_unique'];
     }
     $columns = $def->getColumns();
     if (isset($indexData['PRIMARY'])) {
         $primaryKey = array();
         foreach ($indexData['PRIMARY']['columns'] as $columnName) {
             $primaryKey[] = $columns->{$columnName};
         }
         $def->setPrimaryKey($primaryKey);
         unset($indexData['PRIMARY']);
     }
     foreach ($indexData as $indexName => $indexInfo) {
         $indexColumns = array();
         foreach ($indexInfo['columns'] as $columnName) {
             $indexColumns[] = $columns->{$columnName};
         }
         $index = new Index($indexColumns);
         $index->setType($indexInfo['is_unique'] ? Index::TYPE_UNIQUE : Index::TYPE_KEY);
         $index->setName($indexName);
         $def->addIndex($index);
     }
 }
示例#3
0
 protected function processColumns()
 {
     $beforeColumns = $this->before->getColumns(true, true);
     foreach ($this->after->getColumns(true, true) as $columnName => $afterColumn) {
         $afterTypeString = $afterColumn->getTypeString();
         if (!isset($beforeColumns[$columnName])) {
             $this->alterLines->commaExpr('ADD COLUMN ? ' . $afterTypeString, new Symbol($afterColumn->schemaName));
         } else {
             $beforeColumn = $beforeColumns[$columnName];
             $beforeColumn->setFlag(Column::IS_REFLECTED);
             if ($beforeColumn->getTypeString() !== $afterTypeString) {
                 //var_dump('MODIFY:' . $beforeColumn->schemaName, $beforeColumn->getTypeString(), $afterTypeString);
                 $this->alterLines->commaExpr('MODIFY COLUMN ? ' . $afterTypeString, new Symbol($afterColumn->schemaName));
             }
             unset($beforeColumns[$columnName]);
         }
     }
     foreach ($beforeColumns as $columnName => $beforeColumn) {
         $this->alterLines->commaExpr('DROP COLUMN ?', new Symbol($beforeColumn->schemaName));
     }
 }