Exemplo n.º 1
0
 public function addColumn($tableName, $columnName, $type, array $options = [])
 {
     $column = $this->getColumnDefinition($columnName, $type, $options);
     $ddl = new Ddl\AlterTable($tableName);
     $ddl->addColumn($column);
     $this->queryAdapter($ddl);
 }
Exemplo n.º 2
0
 /**
  * @param  Column\ColumnInterface $column
  * @return static
  */
 public function addColumn(Column\ColumnInterface $column)
 {
     if (!empty($this->renameColumns)) {
         trigger_error('One statement must rename a column, other separate statements must change table definition.', E_USER_DEPRECATED);
         return $this;
     }
     return parent::addColumn($column);
 }
Exemplo n.º 3
0
    /**
     * @covers Zend\Db\Sql\Ddl\AlterTable::getSqlString
     * @todo   Implement testGetSqlString().
     */
    public function testGetSqlString()
    {
        $at = new AlterTable('foo');
        $at->addColumn(new Column\Varchar('another', 255));
        $at->changeColumn('name', new Column\Varchar('new_name', 50));
        $at->dropColumn('foo');
        $at->addConstraint(new Constraint\ForeignKey('my_fk', 'other_id', 'other_table', 'id', 'CASCADE', 'CASCADE'));
        $at->dropConstraint('my_index');
        $expected = <<<EOS
ALTER TABLE "foo"
ADD COLUMN "another" VARCHAR(255) NOT NULL ,
CHANGE COLUMN "name" "new_name" VARCHAR(50) NOT NULL ,
DROP COLUMN "foo",
ADD CONSTRAINT "my_fk" FOREIGN KEY ("other_id") REFERENCES "other_table" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
DROP CONSTRAINT "my_index"
EOS;
        $this->assertEquals($expected, $at->getSqlString());
    }
Exemplo n.º 4
0
 /**
  * Create one table. if it is exsist, check the columns. if the column is exsist, change it's type, else create the column.
  * @param unknown $tableName
  * @param array $table
  */
 private function create_table($tableName, $tableStructureData)
 {
     $adapter = $this->adapter;
     $sql = new Sql($adapter);
     if (!in_array($tableName, $this->tables)) {
         // Create the $table
         $CreateTable = new Ddl\CreateTable($tableName);
         foreach ($tableStructureData['column'] as $column) {
             $CreateTable->addColumn($column);
         }
         foreach ($tableStructureData['constraint'] as $constraint) {
             $CreateTable->addConstraint($constraint);
         }
         $adapter->query($sql->getSqlStringForSqlObject($CreateTable), $adapter::QUERY_MODE_EXECUTE);
     } else {
         // Check the columns
         $columns = $this->getColumns($tableName);
         $constraints = $this->getConstraints($tableName);
         $AlterTable = new Ddl\AlterTable($tableName);
         foreach ($tableStructureData['column'] as $createColumn) {
             $column_exsist = false;
             foreach ($columns as $column) {
                 if ($createColumn->getName() == $column->getName()) {
                     $column_exsist = true;
                 }
             }
             if ($column_exsist) {
                 // Alter the table, change the column.
                 $AlterTable->changeColumn($createColumn->getName(), $createColumn);
             } else {
                 // Alter the table, add the column.
                 $AlterTable->addColumn($createColumn);
             }
         }
         // Delete exsisted constraints(mysql index) but PRIMARY KEY
         $exsisted_constraints = $this->getConstraints($tableName);
         foreach ($exsisted_constraints as $exsisted_constraint) {
             if ($exsisted_constraint->getType() != 'PRIMARY KEY') {
                 $adapter->query('ALTER TABLE `' . $tableName . '`
                              DROP index `' . str_replace('_zf_' . $tableName . '_', '', $exsisted_constraint->getName()) . '`', $adapter::QUERY_MODE_EXECUTE);
             }
         }
         // Add all constraints but PRIMARY KEY
         foreach ($tableStructureData['constraint'] as $constraint) {
             if ($constraint instanceof Constraint\PrimaryKey) {
                 // Do nothing
             } else {
                 // Add to DB
                 $AlterTable->addConstraint($constraint);
             }
         }
         $adapter->query($sql->getSqlStringForSqlObject($AlterTable), $adapter::QUERY_MODE_EXECUTE);
     }
 }