From 1f9a46850cef5975171ba051c85703ca23a78202 Mon Sep 17 00:00:00 2001 From: resurtm Date: Wed, 22 May 2013 22:25:49 +0600 Subject: [PATCH] MSSQL initial query builder. --- framework/yii/db/QueryBuilder.php | 3 ++- framework/yii/db/mssql/QueryBuilder.php | 43 ++++++++++++++++++++++++++++++++ framework/yii/db/mysql/QueryBuilder.php | 7 +++--- framework/yii/db/sqlite/QueryBuilder.php | 5 ++-- 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/framework/yii/db/QueryBuilder.php b/framework/yii/db/QueryBuilder.php index 9e7749a..c0b4223 100644 --- a/framework/yii/db/QueryBuilder.php +++ b/framework/yii/db/QueryBuilder.php @@ -429,10 +429,11 @@ class QueryBuilder extends \yii\base\Object * Builds a SQL statement for enabling or disabling integrity check. * @param boolean $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. + * @param string $table the table name. Defaults to empty string, meaning that no table will be changed. * @return string the SQL statement for checking integrity * @throws NotSupportedException if this is not supported by the underlying DBMS */ - public function checkIntegrity($check = true, $schema = '') + public function checkIntegrity($check = true, $schema = '', $table = '') { throw new NotSupportedException($this->db->getDriverName() . ' does not support enabling/disabling integrity check.'); } diff --git a/framework/yii/db/mssql/QueryBuilder.php b/framework/yii/db/mssql/QueryBuilder.php index 9ba27b2..45a7507 100644 --- a/framework/yii/db/mssql/QueryBuilder.php +++ b/framework/yii/db/mssql/QueryBuilder.php @@ -7,6 +7,8 @@ namespace yii\db\mssql; +use yii\base\InvalidParamException; + /** * QueryBuilder is the query builder for MS SQL Server databases (version 2008 and above). * @@ -35,4 +37,45 @@ class QueryBuilder extends \yii\db\QueryBuilder Schema::TYPE_BOOLEAN => 'tinyint(1)', Schema::TYPE_MONEY => 'decimal(19,4)', ); + +// public function update($table, $columns, $condition, &$params) +// { +// return ''; +// } + +// public function delete($table, $condition, &$params) +// { +// return ''; +// } + +// public function buildLimit($limit, $offset) +// { +// return ''; +// } + +// public function resetSequence($table, $value = null) +// { +// return ''; +// } + + /** + * Builds a SQL statement for enabling or disabling integrity check. + * @param boolean $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. + * @param string $table the table name. Defaults to empty string, meaning that no table will be changed. + * @return string the SQL statement for checking integrity + * @throws InvalidParamException if the table does not exist or there is no sequence associated with the table. + */ + public function checkIntegrity($check = true, $schema = '', $table = '') + { + if ($schema !== '') { + $table = "{$schema}.{$table}"; + } + $table = $this->db->quoteTableName($table); + if ($this->db->getTableSchema($table) === null) { + throw new InvalidParamException("Table not found: $table"); + } + $enable = $check ? 'CHECK' : 'NOCHECK'; + return "ALTER TABLE {$table} {$enable} CONSTRAINT ALL"; + } } diff --git a/framework/yii/db/mysql/QueryBuilder.php b/framework/yii/db/mysql/QueryBuilder.php index a078b9a..7bf293b 100644 --- a/framework/yii/db/mysql/QueryBuilder.php +++ b/framework/yii/db/mysql/QueryBuilder.php @@ -120,12 +120,13 @@ class QueryBuilder extends \yii\db\QueryBuilder /** * Builds a SQL statement for enabling or disabling integrity check. * @param boolean $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. + * @param string $table the table name. Meaningless for MySQL. + * @param string $schema the schema of the tables. Meaningless for MySQL. * @return string the SQL statement for checking integrity */ - public function checkIntegrity($check = true, $schema = '') + public function checkIntegrity($check = true, $schema = '', $table = '') { - return 'SET FOREIGN_KEY_CHECKS=' . ($check ? 1 : 0); + return 'SET FOREIGN_KEY_CHECKS = ' . ($check ? 1 : 0); } /** diff --git a/framework/yii/db/sqlite/QueryBuilder.php b/framework/yii/db/sqlite/QueryBuilder.php index 3aa89e7..72d48f4 100644 --- a/framework/yii/db/sqlite/QueryBuilder.php +++ b/framework/yii/db/sqlite/QueryBuilder.php @@ -77,10 +77,11 @@ class QueryBuilder extends \yii\db\QueryBuilder /** * Enables or disables integrity check. * @param boolean $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. + * @param string $schema the schema of the tables. Meaningless for SQLite. + * @param string $table the table name. Meaningless for SQLite. * @throws NotSupportedException this is not supported by SQLite */ - public function checkIntegrity($check = true, $schema = '') + public function checkIntegrity($check = true, $schema = '', $table = '') { throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.'); }