mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-17 23:09:10 +08:00
Merge pull request #519 from gevik/issue-466
Issue 466 (add/drop PrimaryKeys)
This commit is contained in:
@@ -652,6 +652,32 @@ class Command extends \yii\base\Component
|
||||
$sql = $this->db->getQueryBuilder()->alterColumn($table, $column, $type);
|
||||
return $this->setSql($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SQL command for adding a primary key constraint to an existing table.
|
||||
* The method will properly quote the table and column names.
|
||||
* @param string $name the name of the primary key constraint.
|
||||
* @param string $table the table that the primary key constraint will be added to.
|
||||
* @param string|array $columns comma separated string or array of columns that the primary key will consist of.
|
||||
* @return Command the command object itself.
|
||||
*/
|
||||
public function addPrimaryKey($name, $table, $columns)
|
||||
{
|
||||
$sql = $this->db->getQueryBuilder()->addPrimaryKey($name, $table, $columns);
|
||||
return $this->setSql($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SQL command for removing a primary key constraint to an existing table.
|
||||
* @param string $name the name of the primary key constraint to be removed.
|
||||
* @param string $table the table that the primary key constraint will be removed from.
|
||||
* @return Command the command object itself
|
||||
*/
|
||||
public function dropPrimarykey($name, $table)
|
||||
{
|
||||
$sql = $this->db->getQueryBuilder()->dropPrimarykey($name, $table);
|
||||
return $this->setSql($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SQL command for adding a foreign key constraint to an existing table.
|
||||
|
||||
@@ -268,6 +268,41 @@ class QueryBuilder extends \yii\base\Object
|
||||
{
|
||||
return "DROP TABLE " . $this->db->quoteTableName($table);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a SQL statement for adding a primary key constraint to an existing table.
|
||||
* @param string $name the name of the primary key constraint.
|
||||
* @param string $table the table that the primary key constraint will be added to.
|
||||
* @param string|array $columns comma separated string or array of columns that the primary key will consist of.
|
||||
* @return string the SQL statement for adding a primary key constraint to an existing table.
|
||||
*/
|
||||
public function addPrimaryKey($name, $table, $columns)
|
||||
{
|
||||
if (is_string($columns)) {
|
||||
$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
|
||||
}
|
||||
|
||||
foreach ($columns as $i=>$col) {
|
||||
$columns[$i]=$this->db->quoteColumnName($col);
|
||||
}
|
||||
|
||||
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
|
||||
. $this->db->quoteColumnName($name) . ' PRIMARY KEY ('
|
||||
. implode(', ', $columns). ' )';
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a SQL statement for removing a primary key constraint to an existing table.
|
||||
* @param string $name the name of the primary key constraint to be removed.
|
||||
* @param string $table the table that the primary key constraint will be removed from.
|
||||
* @return string the SQL statement for removing a primary key constraint from an existing table. *
|
||||
*/
|
||||
public function dropPrimarykey($name, $table)
|
||||
{
|
||||
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
|
||||
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a SQL statement for truncating a DB table.
|
||||
|
||||
@@ -88,6 +88,17 @@ class QueryBuilder extends \yii\db\QueryBuilder
|
||||
. ' DROP FOREIGN KEY ' . $this->db->quoteColumnName($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a SQL statement for removing a primary key constraint to an existing table.
|
||||
* @param string $name the name of the primary key constraint to be removed.
|
||||
* @param string $table the table that the primary key constraint will be removed from.
|
||||
* @return string the SQL statement for removing a primary key constraint from an existing table. *
|
||||
*/
|
||||
public function dropPrimarykey($name, $table)
|
||||
{
|
||||
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' DROP PRIMARY KEY';
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SQL statement for resetting the sequence value of a table's primary key.
|
||||
* The sequence will be reset such that the primary key of the next new row inserted
|
||||
|
||||
@@ -22,13 +22,13 @@ class QueryBuilder extends \yii\db\QueryBuilder
|
||||
*/
|
||||
public $typeMap = array(
|
||||
Schema::TYPE_PK => 'serial not null primary key',
|
||||
Schema::TYPE_STRING => 'varchar',
|
||||
Schema::TYPE_STRING => 'varchar(255)',
|
||||
Schema::TYPE_TEXT => 'text',
|
||||
Schema::TYPE_SMALLINT => 'smallint',
|
||||
Schema::TYPE_INTEGER => 'integer',
|
||||
Schema::TYPE_BIGINT => 'bigint',
|
||||
Schema::TYPE_FLOAT => 'double precision',
|
||||
Schema::TYPE_DECIMAL => 'numeric',
|
||||
Schema::TYPE_DECIMAL => 'numeric(10,0)',
|
||||
Schema::TYPE_DATETIME => 'timestamp',
|
||||
Schema::TYPE_TIMESTAMP => 'timestamp',
|
||||
Schema::TYPE_TIME => 'time',
|
||||
|
||||
@@ -43,6 +43,7 @@ class Schema extends \yii\db\Schema
|
||||
'circle' => self::TYPE_STRING,
|
||||
'date' => self::TYPE_DATE,
|
||||
'real' => self::TYPE_FLOAT,
|
||||
'decimal' => self::TYPE_DECIMAL,
|
||||
'double precision' => self::TYPE_DECIMAL,
|
||||
'inet' => self::TYPE_STRING,
|
||||
'smallint' => self::TYPE_SMALLINT,
|
||||
@@ -55,7 +56,6 @@ class Schema extends \yii\db\Schema
|
||||
'money' => self::TYPE_MONEY,
|
||||
'name' => self::TYPE_STRING,
|
||||
'numeric' => self::TYPE_STRING,
|
||||
'numrange' => self::TYPE_DECIMAL,
|
||||
'oid' => self::TYPE_BIGINT, // should not be used. it's pg internal!
|
||||
'path' => self::TYPE_STRING,
|
||||
'point' => self::TYPE_STRING,
|
||||
|
||||
@@ -179,4 +179,30 @@ class QueryBuilder extends \yii\db\QueryBuilder
|
||||
{
|
||||
throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a SQL statement for adding a primary key constraint to an existing table.
|
||||
* @param string $name the name of the primary key constraint.
|
||||
* @param string $table the table that the primary key constraint will be added to.
|
||||
* @param string|array $columns comma separated string or array of columns that the primary key will consist of.
|
||||
* @return string the SQL statement for adding a primary key constraint to an existing table.
|
||||
* @throws NotSupportedException this is not supported by SQLite
|
||||
*/
|
||||
public function addPrimaryKey($name, $table, $columns)
|
||||
{
|
||||
throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a SQL statement for removing a primary key constraint to an existing table.
|
||||
* @param string $name the name of the primary key constraint to be removed.
|
||||
* @param string $table the table that the primary key constraint will be removed from.
|
||||
* @return string the SQL statement for removing a primary key constraint from an existing table.
|
||||
* @throws NotSupportedException this is not supported by SQLite *
|
||||
*/
|
||||
public function dropPrimarykey($name, $table)
|
||||
{
|
||||
throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user