|
|
|
@ -166,6 +166,36 @@ class QueryBuilder extends \yii\db\QueryBuilder
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 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 |
|
|
|
|
* will have the specified value or 1. |
|
|
|
|
* @param string $tableName the name of the table whose primary key sequence will be reset |
|
|
|
|
* @param mixed $value the value for the primary key of the next new row inserted. If this is not set, |
|
|
|
|
* the next new row's primary key will have a value 1. |
|
|
|
|
* @return string the SQL statement for resetting sequence |
|
|
|
|
* @throws InvalidParamException if the table does not exist or there is no sequence associated with the table. |
|
|
|
|
*/ |
|
|
|
|
public function resetSequence($tableName, $value = null) |
|
|
|
|
{ |
|
|
|
|
$table = $this->db->getTableSchema($tableName); |
|
|
|
|
if ($table !== null && $table->sequenceName !== null) { |
|
|
|
|
$tableName = $this->db->quoteTableName($tableName); |
|
|
|
|
if ($value === null) { |
|
|
|
|
$key = $this->db->quoteColumnName(reset($table->primaryKey)); |
|
|
|
|
$value = "(SELECT COALESCE(MAX({$key}),0) FROM {$tableName})+1"; |
|
|
|
|
} else { |
|
|
|
|
$value = (int) $value; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return "DBCC CHECKIDENT ('{$tableName}', RESEED, {$value})"; |
|
|
|
|
} elseif ($table === null) { |
|
|
|
|
throw new InvalidParamException("Table not found: $tableName"); |
|
|
|
|
} else { |
|
|
|
|
throw new InvalidParamException("There is not sequence associated with table '$tableName'."); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Builds a SQL statement for enabling or disabling integrity check. |
|
|
|
|
* @param bool $check whether to turn on or off the integrity check. |
|
|
|
|
* @param string $schema the schema of the tables. Defaults to empty string, meaning the current or default schema. |
|
|
|
|