Fix #17413: Fixed MSSQL tests: QueryBuilderTest::testGetColumnType(), QueryBuilderTest::testResetSequence()

This commit is contained in:
Alexander Kartavenko
2019-07-09 11:47:55 +03:00
committed by Alexander Makarov
parent 2b9374558b
commit 55b06d2364
4 changed files with 72 additions and 38 deletions

View File

@ -4,7 +4,7 @@ Yii Framework 2 Change Log
2.0.23 under development 2.0.23 under development
------------------------ ------------------------
- no changes in this release. - Bug #17413: Fixed MSSQL tests: `QueryBuilderTest::testGetColumnType()`, `QueryBuilderTest::testResetSequence()` (alexkart)
2.0.22 July 02, 2019 2.0.22 July 02, 2019

View File

@ -416,4 +416,17 @@ class QueryBuilder extends \yii\db\QueryBuilder
{ {
return parent::update($table, $this->normalizeTableRowData($table, $columns, $params), $condition, $params); return parent::update($table, $this->normalizeTableRowData($table, $columns, $params), $condition, $params);
} }
/**
* {@inheritdoc}
*/
public function getColumnType($type)
{
$columnType = parent::getColumnType($type);
// remove unsupported keywords
$columnType = preg_replace("/\s*comment '.*'/i", '', $columnType);
$columnType = preg_replace('/ first$/i', '', $columnType);
return $columnType;
}
} }

View File

@ -7,6 +7,7 @@
namespace yiiunit\framework\db; namespace yiiunit\framework\db;
use yii\db\ColumnSchemaBuilder;
use yii\db\conditions\BetweenColumnsCondition; use yii\db\conditions\BetweenColumnsCondition;
use yii\db\cubrid\QueryBuilder as CubridQueryBuilder; use yii\db\cubrid\QueryBuilder as CubridQueryBuilder;
use yii\db\Expression; use yii\db\Expression;
@ -163,7 +164,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
[ [
'mysql' => 'tinyint(1) NOT NULL DEFAULT 1', 'mysql' => 'tinyint(1) NOT NULL DEFAULT 1',
'sqlite' => 'boolean NOT NULL DEFAULT 1', 'sqlite' => 'boolean NOT NULL DEFAULT 1',
'sqlsrv' => 'tinyint(1) NOT NULL DEFAULT 1', 'sqlsrv' => 'bit NOT NULL DEFAULT 1',
'cubrid' => 'smallint NOT NULL DEFAULT 1', 'cubrid' => 'smallint NOT NULL DEFAULT 1',
], ],
], ],
@ -175,7 +176,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'boolean', 'postgres' => 'boolean',
'sqlite' => 'boolean', 'sqlite' => 'boolean',
'oci' => 'NUMBER(1)', 'oci' => 'NUMBER(1)',
'sqlsrv' => 'tinyint(1)', 'sqlsrv' => 'bit',
'cubrid' => 'smallint', 'cubrid' => 'smallint',
], ],
], ],
@ -666,7 +667,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'smallint', 'postgres' => 'smallint',
'sqlite' => 'tinyint', 'sqlite' => 'tinyint',
'oci' => 'NUMBER(3)', 'oci' => 'NUMBER(3)',
'sqlsrv' => 'smallint', 'sqlsrv' => 'tinyint',
'cubrid' => 'smallint', 'cubrid' => 'smallint',
], ],
], ],
@ -700,7 +701,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
[ [
'mysql' => 'varchar(255) CHECK (value LIKE "test%")', 'mysql' => 'varchar(255) CHECK (value LIKE "test%")',
'sqlite' => 'varchar(255) CHECK (value LIKE "test%")', 'sqlite' => 'varchar(255) CHECK (value LIKE "test%")',
'sqlsrv' => 'varchar(255) CHECK (value LIKE "test%")', 'sqlsrv' => 'nvarchar(255) CHECK (value LIKE "test%")',
'cubrid' => 'varchar(255) CHECK (value LIKE "test%")', 'cubrid' => 'varchar(255) CHECK (value LIKE "test%")',
], ],
], ],
@ -720,7 +721,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'varchar(255) NOT NULL', 'postgres' => 'varchar(255) NOT NULL',
'sqlite' => 'varchar(255) NOT NULL', 'sqlite' => 'varchar(255) NOT NULL',
'oci' => 'VARCHAR2(255) NOT NULL', 'oci' => 'VARCHAR2(255) NOT NULL',
'sqlsrv' => 'varchar(255) NOT NULL', 'sqlsrv' => 'nvarchar(255) NOT NULL',
'cubrid' => 'varchar(255) NOT NULL', 'cubrid' => 'varchar(255) NOT NULL',
], ],
], ],
@ -730,7 +731,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
[ [
'mysql' => 'varchar(32) CHECK (value LIKE "test%")', 'mysql' => 'varchar(32) CHECK (value LIKE "test%")',
'sqlite' => 'varchar(32) CHECK (value LIKE "test%")', 'sqlite' => 'varchar(32) CHECK (value LIKE "test%")',
'sqlsrv' => 'varchar(32) CHECK (value LIKE "test%")', 'sqlsrv' => 'nvarchar(32) CHECK (value LIKE "test%")',
'cubrid' => 'varchar(32) CHECK (value LIKE "test%")', 'cubrid' => 'varchar(32) CHECK (value LIKE "test%")',
], ],
], ],
@ -750,7 +751,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'varchar(32)', 'postgres' => 'varchar(32)',
'sqlite' => 'varchar(32)', 'sqlite' => 'varchar(32)',
'oci' => 'VARCHAR2(32)', 'oci' => 'VARCHAR2(32)',
'sqlsrv' => 'varchar(32)', 'sqlsrv' => 'nvarchar(32)',
'cubrid' => 'varchar(32)', 'cubrid' => 'varchar(32)',
], ],
], ],
@ -762,7 +763,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'varchar(255)', 'postgres' => 'varchar(255)',
'sqlite' => 'varchar(255)', 'sqlite' => 'varchar(255)',
'oci' => 'VARCHAR2(255)', 'oci' => 'VARCHAR2(255)',
'sqlsrv' => 'varchar(255)', 'sqlsrv' => 'nvarchar(255)',
'cubrid' => 'varchar(255)', 'cubrid' => 'varchar(255)',
], ],
], ],
@ -772,7 +773,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
[ [
'mysql' => 'text CHECK (value LIKE "test%")', 'mysql' => 'text CHECK (value LIKE "test%")',
'sqlite' => 'text CHECK (value LIKE "test%")', 'sqlite' => 'text CHECK (value LIKE "test%")',
'sqlsrv' => 'text CHECK (value LIKE "test%")', 'sqlsrv' => 'nvarchar(max) CHECK (value LIKE "test%")',
'cubrid' => 'varchar CHECK (value LIKE "test%")', 'cubrid' => 'varchar CHECK (value LIKE "test%")',
], ],
], ],
@ -792,24 +793,24 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'text NOT NULL', 'postgres' => 'text NOT NULL',
'sqlite' => 'text NOT NULL', 'sqlite' => 'text NOT NULL',
'oci' => 'CLOB NOT NULL', 'oci' => 'CLOB NOT NULL',
'sqlsrv' => 'text NOT NULL', 'sqlsrv' => 'nvarchar(max) NOT NULL',
'cubrid' => 'varchar NOT NULL', 'cubrid' => 'varchar NOT NULL',
], ],
], ],
[ [
Schema::TYPE_TEXT . '(255) CHECK (value LIKE "test%")', Schema::TYPE_TEXT . ' CHECK (value LIKE "test%")',
$this->text(255)->check('value LIKE "test%"'), $this->text()->check('value LIKE "test%"'),
[ [
'mysql' => 'text CHECK (value LIKE "test%")', 'mysql' => 'text CHECK (value LIKE "test%")',
'sqlite' => 'text CHECK (value LIKE "test%")', 'sqlite' => 'text CHECK (value LIKE "test%")',
'sqlsrv' => 'text CHECK (value LIKE "test%")', 'sqlsrv' => 'nvarchar(max) CHECK (value LIKE "test%")',
'cubrid' => 'varchar CHECK (value LIKE "test%")', 'cubrid' => 'varchar CHECK (value LIKE "test%")',
], ],
Schema::TYPE_TEXT . ' CHECK (value LIKE "test%")', Schema::TYPE_TEXT . ' CHECK (value LIKE "test%")',
], ],
[ [
Schema::TYPE_TEXT . '(255) CHECK (value LIKE \'test%\')', Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
$this->text(255)->check('value LIKE \'test%\''), $this->text()->check('value LIKE \'test%\''),
[ [
'postgres' => 'text CHECK (value LIKE \'test%\')', 'postgres' => 'text CHECK (value LIKE \'test%\')',
'oci' => 'CLOB CHECK (value LIKE \'test%\')', 'oci' => 'CLOB CHECK (value LIKE \'test%\')',
@ -817,27 +818,27 @@ abstract class QueryBuilderTest extends DatabaseTestCase
Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')', Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
], ],
[ [
Schema::TYPE_TEXT . '(255) NOT NULL', Schema::TYPE_TEXT . ' NOT NULL',
$this->text(255)->notNull(), $this->text()->notNull(),
[ [
'mysql' => 'text NOT NULL', 'mysql' => 'text NOT NULL',
'postgres' => 'text NOT NULL', 'postgres' => 'text NOT NULL',
'sqlite' => 'text NOT NULL', 'sqlite' => 'text NOT NULL',
'oci' => 'CLOB NOT NULL', 'oci' => 'CLOB NOT NULL',
'sqlsrv' => 'text NOT NULL', 'sqlsrv' => 'nvarchar(max) NOT NULL',
'cubrid' => 'varchar NOT NULL', 'cubrid' => 'varchar NOT NULL',
], ],
Schema::TYPE_TEXT . ' NOT NULL', Schema::TYPE_TEXT . ' NOT NULL',
], ],
[ [
Schema::TYPE_TEXT . '(255)', Schema::TYPE_TEXT,
$this->text(255), $this->text(),
[ [
'mysql' => 'text', 'mysql' => 'text',
'postgres' => 'text', 'postgres' => 'text',
'sqlite' => 'text', 'sqlite' => 'text',
'oci' => 'CLOB', 'oci' => 'CLOB',
'sqlsrv' => 'text', 'sqlsrv' => 'nvarchar(max)',
'cubrid' => 'varchar', 'cubrid' => 'varchar',
], ],
Schema::TYPE_TEXT, Schema::TYPE_TEXT,
@ -850,7 +851,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'text', 'postgres' => 'text',
'sqlite' => 'text', 'sqlite' => 'text',
'oci' => 'CLOB', 'oci' => 'CLOB',
'sqlsrv' => 'text', 'sqlsrv' => 'nvarchar(max)',
'cubrid' => 'varchar', 'cubrid' => 'varchar',
], ],
], ],
@ -905,7 +906,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'timestamp(0) NOT NULL', 'postgres' => 'timestamp(0) NOT NULL',
'sqlite' => 'timestamp NOT NULL', 'sqlite' => 'timestamp NOT NULL',
'oci' => 'TIMESTAMP NOT NULL', 'oci' => 'TIMESTAMP NOT NULL',
'sqlsrv' => 'timestamp NOT NULL', 'sqlsrv' => 'datetime NOT NULL',
'cubrid' => 'timestamp NOT NULL', 'cubrid' => 'timestamp NOT NULL',
], ],
], ],
@ -921,7 +922,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'postgres' => 'timestamp(0)', 'postgres' => 'timestamp(0)',
'sqlite' => 'timestamp', 'sqlite' => 'timestamp',
'oci' => 'TIMESTAMP', 'oci' => 'TIMESTAMP',
'sqlsrv' => 'timestamp', 'sqlsrv' => 'datetime',
'cubrid' => 'timestamp', 'cubrid' => 'timestamp',
], ],
], ],
@ -931,7 +932,7 @@ abstract class QueryBuilderTest extends DatabaseTestCase
[ [
'postgres' => 'timestamp(0) NULL DEFAULT NULL', 'postgres' => 'timestamp(0) NULL DEFAULT NULL',
'sqlite' => 'timestamp NULL DEFAULT NULL', 'sqlite' => 'timestamp NULL DEFAULT NULL',
'sqlsrv' => 'timestamp NULL DEFAULT NULL', 'sqlsrv' => 'datetime NULL DEFAULT NULL',
'cubrid' => 'timestamp NULL DEFAULT NULL', 'cubrid' => 'timestamp NULL DEFAULT NULL',
], ],
], ],
@ -962,6 +963,9 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'sqlsrv' => 'int', 'sqlsrv' => 'int',
'cubrid' => "int COMMENT 'test comment'", 'cubrid' => "int COMMENT 'test comment'",
], ],
[
'sqlsrv' => 'integer',
]
], ],
[ [
Schema::TYPE_PK . " COMMENT 'test comment'", Schema::TYPE_PK . " COMMENT 'test comment'",
@ -972,6 +976,9 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'sqlsrv' => 'int IDENTITY PRIMARY KEY', 'sqlsrv' => 'int IDENTITY PRIMARY KEY',
'cubrid' => "int NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'test comment'", 'cubrid' => "int NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'test comment'",
], ],
[
'sqlsrv' => 'pk',
]
], ],
[ [
Schema::TYPE_PK . ' FIRST', Schema::TYPE_PK . ' FIRST',
@ -983,6 +990,9 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'sqlsrv' => 'int IDENTITY PRIMARY KEY', 'sqlsrv' => 'int IDENTITY PRIMARY KEY',
'cubrid' => 'int NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST', 'cubrid' => 'int NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST',
], ],
[
'sqlsrv' => 'pk',
]
], ],
[ [
Schema::TYPE_INTEGER . ' FIRST', Schema::TYPE_INTEGER . ' FIRST',
@ -994,6 +1004,9 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'sqlsrv' => 'int', 'sqlsrv' => 'int',
'cubrid' => 'int FIRST', 'cubrid' => 'int FIRST',
], ],
[
'sqlsrv' => 'integer',
]
], ],
[ [
Schema::TYPE_STRING . ' FIRST', Schema::TYPE_STRING . ' FIRST',
@ -1002,9 +1015,12 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'mysql' => 'varchar(255) FIRST', 'mysql' => 'varchar(255) FIRST',
'postgres' => 'varchar(255)', 'postgres' => 'varchar(255)',
'oci' => 'VARCHAR2(255)', 'oci' => 'VARCHAR2(255)',
'sqlsrv' => 'varchar(255)', 'sqlsrv' => 'nvarchar(255)',
'cubrid' => 'varchar(255) FIRST', 'cubrid' => 'varchar(255) FIRST',
], ],
[
'sqlsrv' => 'string',
]
], ],
[ [
Schema::TYPE_INTEGER . ' NOT NULL FIRST', Schema::TYPE_INTEGER . ' NOT NULL FIRST',
@ -1016,6 +1032,9 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'sqlsrv' => 'int NOT NULL', 'sqlsrv' => 'int NOT NULL',
'cubrid' => 'int NOT NULL FIRST', 'cubrid' => 'int NOT NULL FIRST',
], ],
[
'sqlsrv' => 'integer NOT NULL',
]
], ],
[ [
Schema::TYPE_STRING . ' NOT NULL FIRST', Schema::TYPE_STRING . ' NOT NULL FIRST',
@ -1024,9 +1043,12 @@ abstract class QueryBuilderTest extends DatabaseTestCase
'mysql' => 'varchar(255) NOT NULL FIRST', 'mysql' => 'varchar(255) NOT NULL FIRST',
'postgres' => 'varchar(255) NOT NULL', 'postgres' => 'varchar(255) NOT NULL',
'oci' => 'VARCHAR2(255) NOT NULL', 'oci' => 'VARCHAR2(255) NOT NULL',
'sqlsrv' => 'varchar(255) NOT NULL', 'sqlsrv' => 'nvarchar(255) NOT NULL',
'cubrid' => 'varchar(255) NOT NULL FIRST', 'cubrid' => 'varchar(255) NOT NULL FIRST',
], ],
[
'sqlsrv' => 'string NOT NULL',
]
], ],
]; ];
@ -1044,15 +1066,18 @@ abstract class QueryBuilderTest extends DatabaseTestCase
public function testGetColumnType() public function testGetColumnType()
{ {
if ($this->driverName === 'sqlsrv') {
$this->markTestSkipped('Should be fixed');
}
$qb = $this->getQueryBuilder(); $qb = $this->getQueryBuilder();
foreach ($this->columnTypes() as $item) { foreach ($this->columnTypes() as $item) {
/** @var ColumnSchemaBuilder $builder */
list($column, $builder, $expected) = $item; list($column, $builder, $expected) = $item;
$expectedColumnSchemaBuilder = isset($item[3]) ? $item[3] : $column; if (isset($item[3][$this->driverName])) {
$expectedColumnSchemaBuilder = $item[3][$this->driverName];
} elseif (isset($item[3]) && !is_array($item[3])) {
$expectedColumnSchemaBuilder = $item[3];
} else {
$expectedColumnSchemaBuilder = $column;
}
$this->assertEquals($expected, $qb->getColumnType($column)); $this->assertEquals($expected, $qb->getColumnType($column));
$this->assertEquals($expected, $qb->getColumnType($builder)); $this->assertEquals($expected, $qb->getColumnType($builder));

View File

@ -121,17 +121,13 @@ class QueryBuilderTest extends \yiiunit\framework\db\QueryBuilderTest
public function testResetSequence() public function testResetSequence()
{ {
if ($this->driverName === 'sqlsrv') {
$this->markTestSkipped('Should be fixed');
}
$qb = $this->getQueryBuilder(); $qb = $this->getQueryBuilder();
$expected = "DBCC CHECKIDENT ('[item]', RESEED, (SELECT COALESCE(MAX([id]),0) FROM [item])+1)"; $expected = "DBCC CHECKIDENT ('[item]', RESEED, (SELECT COALESCE(MAX([id]),0) FROM [item])+1)";
$sql = $qb->resetSequence('item'); $sql = $qb->resetSequence('item');
$this->assertEquals($expected, $sql); $this->assertEquals($expected, $sql);
$expected = "DBCC CHECKIDENT ('[item], RESEED, 4)"; $expected = "DBCC CHECKIDENT ('[item]', RESEED, 4)";
$sql = $qb->resetSequence('item', 4); $sql = $qb->resetSequence('item', 4);
$this->assertEquals($expected, $sql); $this->assertEquals($expected, $sql);
} }