Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 78 additions & 61 deletions tests/framework/db/QueryBuilderTest.php

Large diffs are not rendered by default.

42 changes: 31 additions & 11 deletions tests/framework/db/cubrid/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

namespace yiiunit\framework\db\cubrid;

use Closure;
use PDO;
use yii\base\NotSupportedException;

/**
* @group db
Expand All @@ -35,16 +37,6 @@ public function columnTypes()
return array_merge(parent::columnTypes(), []);
}

public function checksProvider(): void
{
$this->markTestSkipped('Adding/dropping check constraints is not supported in CUBRID.');
}

public function defaultValuesProvider(): void
{
$this->markTestSkipped('Adding/dropping default constraints is not supported in CUBRID.');
}

public function testResetSequence(): void
{
$qb = $this->getQueryBuilder();
Expand All @@ -69,7 +61,7 @@ public function testCommentColumn(): void
parent::testCommentColumn();
}

public function upsertProvider()
public static function upsertProvider(): array
{
$concreteData = [
'regular values' => [
Expand Down Expand Up @@ -116,4 +108,32 @@ public function upsertProvider()

return $newData;
}

/**
* @dataProvider checksProvider
* @param string $sql
*/
public function testAddDropCheck($sql, Closure $builder): void
{
$this->expectException(NotSupportedException::class);
$this->expectExceptionMessageMatches(
'/^.*::(addCheck|dropCheck) is not supported by CUBRID.*$/',
);

parent::testAddDropCheck($sql, $builder);
}

/**
* @dataProvider defaultValuesProvider
* @param string $sql
*/
public function testAddDropDefaultValue($sql, Closure $builder): void
{
$this->expectException(NotSupportedException::class);
$this->expectExceptionMessageMatches(
'/^cubrid does not support (adding|dropping) default value constraints\.$/',
);

parent::testAddDropDefaultValue($sql, $builder);
}
}
62 changes: 30 additions & 32 deletions tests/framework/db/mssql/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
use yii\db\Expression;
use yii\db\Query;
use yiiunit\data\base\TraversableObject;
use yiiunit\framework\support\DbHelper;

/**
* @group db
Expand Down Expand Up @@ -254,7 +253,7 @@ public function columnTypes()
return array_merge(parent::columnTypes(), []);
}

public function batchInsertProvider()
public static function batchInsertProvider(): array
{
$data = parent::batchInsertProvider();

Expand All @@ -265,7 +264,7 @@ public function batchInsertProvider()
return $data;
}

public function insertProvider()
public static function insertProvider(): array
{
return [
'regular-values' => [
Expand All @@ -278,9 +277,9 @@ public function insertProvider()
'related_id' => null,
],
[],
$this->replaceQuotes('SET NOCOUNT ON;DECLARE @temporary_inserted TABLE ([id] int , [email] varchar(128) , [name] varchar(128) NULL, [address] text NULL, [status] int NULL, [profile_id] int NULL);' .
'SET NOCOUNT ON;DECLARE @temporary_inserted TABLE ([id] int , [email] varchar(128) , [name] varchar(128) NULL, [address] text NULL, [status] int NULL, [profile_id] int NULL);' .
'INSERT INTO [customer] ([email], [name], [address], [is_active], [related_id]) OUTPUT INSERTED.[id],INSERTED.[email],INSERTED.[name],INSERTED.[address],INSERTED.[status],INSERTED.[profile_id] INTO @temporary_inserted VALUES (:qp0, :qp1, :qp2, :qp3, :qp4);' .
'SELECT * FROM @temporary_inserted'),
'SELECT * FROM @temporary_inserted',
[
':qp0' => '[email protected]',
':qp1' => 'silverfire',
Expand All @@ -302,6 +301,7 @@ public function insertProvider()
[
':qp0' => null,
],
false,
],
'carry passed params' => [
'customer',
Expand All @@ -314,9 +314,9 @@ public function insertProvider()
'col' => new Expression('CONCAT(:phFoo, :phBar)', [':phFoo' => 'foo']),
],
[':phBar' => 'bar'],
$this->replaceQuotes('SET NOCOUNT ON;DECLARE @temporary_inserted TABLE ([id] int , [email] varchar(128) , [name] varchar(128) NULL, [address] text NULL, [status] int NULL, [profile_id] int NULL);' .
'SET NOCOUNT ON;DECLARE @temporary_inserted TABLE ([id] int , [email] varchar(128) , [name] varchar(128) NULL, [address] text NULL, [status] int NULL, [profile_id] int NULL);' .
'INSERT INTO [customer] ([email], [name], [address], [is_active], [related_id], [col]) OUTPUT INSERTED.[id],INSERTED.[email],INSERTED.[name],INSERTED.[address],INSERTED.[status],INSERTED.[profile_id] INTO @temporary_inserted VALUES (:qp1, :qp2, :qp3, :qp4, :qp5, CONCAT(:phFoo, :phBar));' .
'SELECT * FROM @temporary_inserted'),
'SELECT * FROM @temporary_inserted',
[
':phBar' => 'bar',
':qp1' => '[email protected]',
Expand Down Expand Up @@ -347,9 +347,9 @@ public function insertProvider()
'col' => new Expression('CONCAT(:phFoo, :phBar)', [':phFoo' => 'foo']),
]),
[':phBar' => 'bar'],
$this->replaceQuotes('SET NOCOUNT ON;DECLARE @temporary_inserted TABLE ([id] int , [email] varchar(128) , [name] varchar(128) NULL, [address] text NULL, [status] int NULL, [profile_id] int NULL);' .
'SET NOCOUNT ON;DECLARE @temporary_inserted TABLE ([id] int , [email] varchar(128) , [name] varchar(128) NULL, [address] text NULL, [status] int NULL, [profile_id] int NULL);' .
'INSERT INTO [customer] ([email], [name], [address], [is_active], [related_id]) OUTPUT INSERTED.[id],INSERTED.[email],INSERTED.[name],INSERTED.[address],INSERTED.[status],INSERTED.[profile_id] INTO @temporary_inserted SELECT [email], [name], [address], [is_active], [related_id] FROM [customer] WHERE ([email]=:qp1) AND ([name]=:qp2) AND ([address]=:qp3) AND ([is_active]=:qp4) AND ([related_id] IS NULL) AND ([col]=CONCAT(:phFoo, :phBar));' .
'SELECT * FROM @temporary_inserted'),
'SELECT * FROM @temporary_inserted',
[
':phBar' => 'bar',
':qp1' => '[email protected]',
Expand All @@ -375,7 +375,7 @@ public function testResetSequence(): void
$this->assertEquals($expected, $sql);
}

public function upsertProvider()
public static function upsertProvider(): array
{
$concreteData = [
'regular values' => [
Expand Down Expand Up @@ -430,7 +430,7 @@ public function upsertProvider()

public static function conditionProvider(): array
{
$data = array_merge(
return array_merge(
parent::conditionProvider(),
[
[
Expand Down Expand Up @@ -462,28 +462,26 @@ public static function conditionProvider(): array
],
//[ ['in', ['id', 'name'], (new Query())->select(['id', 'name'])->from('users')->where(['active' => 1])], 'EXISTS (SELECT 1 FROM (SELECT [[id]], [[name]] FROM [[users]] WHERE [[active]]=:qp0) AS a WHERE a.[[id]] = [[id AND a.]]name[[ = ]]name`)', [':qp0' => 1] ],
//[ ['not in', ['id', 'name'], (new Query())->select(['id', 'name'])->from('users')->where(['active' => 1])], 'NOT EXISTS (SELECT 1 FROM (SELECT [[id]], [[name]] FROM [[users]] WHERE [[active]]=:qp0) AS a WHERE a.[[id]] = [[id]] AND a.[[name = ]]name`)', [':qp0' => 1] ],
'composite in' => [
[
'in',
['id', 'name'],
[['id' => 1, 'name' => 'oy']],
],
'(([id] = :qp0 AND [name] = :qp1))',
[':qp0' => 1, ':qp1' => 'oy'],
],
'composite in using array objects' => [
[
'in',
new TraversableObject(['id', 'name']),
new TraversableObject([['id' => 1, 'name' => 'oy'], ['id' => 2, 'name' => 'yo']])
],
'(([id] = :qp0 AND [name] = :qp1) OR ([id] = :qp2 AND [name] = :qp3))',
[':qp0' => 1, ':qp1' => 'oy', ':qp2' => 2, ':qp3' => 'yo'],
],
],
);
$data['composite in'] = [
['in', ['id', 'name'], [['id' => 1, 'name' => 'oy']]],
'(([id] = :qp0 AND [name] = :qp1))',
[':qp0' => 1, ':qp1' => 'oy'],
];
$data['composite in using array objects'] = [
['in', new TraversableObject(['id', 'name']), new TraversableObject([
['id' => 1, 'name' => 'oy'],
['id' => 2, 'name' => 'yo'],
])],
'(([id] = :qp0 AND [name] = :qp1) OR ([id] = :qp2 AND [name] = :qp3))',
[':qp0' => 1, ':qp1' => 'oy', ':qp2' => 2, ':qp3' => 'yo'],
];

// adjust dbms specific escaping
foreach ($data as $i => $condition) {
$data[$i][1] = DbHelper::replaceQuotes($condition[1], 'sqlsrv');
}

return $data;
}

public function testAlterColumn(): void
Expand Down Expand Up @@ -845,7 +843,7 @@ public function testDropColumnOnDb(): void
$this->assertEquals(null, $schema->getColumn('bar'));
}

public function buildFromDataProvider()
public static function buildFromDataProvider(): array
{
$data = parent::buildFromDataProvider();
$data[] = ['[test]', '[[test]]'];
Expand Down
45 changes: 24 additions & 21 deletions tests/framework/db/mysql/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@

namespace yiiunit\framework\db\mysql;

use Closure;
use PDO;
use yii\base\DynamicModel;
use yii\base\NotSupportedException;
use yii\db\Expression;
use yii\db\JsonExpression;
use yii\db\Query;
use yii\db\Schema;
use yiiunit\framework\support\DbHelper;

/**
* @group db
Expand Down Expand Up @@ -166,7 +167,7 @@ public function columnTimeTypes()
return $columns;
}

public function primaryKeysProvider()
public static function primaryKeysProvider(): array
{
$result = parent::primaryKeysProvider();
$result['drop'][0] = 'ALTER TABLE {{T_constraints_1}} DROP PRIMARY KEY';
Expand All @@ -175,14 +176,14 @@ public function primaryKeysProvider()
return $result;
}

public function foreignKeysProvider()
public static function foreignKeysProvider(): array
{
$result = parent::foreignKeysProvider();
$result['drop'][0] = 'ALTER TABLE {{T_constraints_3}} DROP FOREIGN KEY [[CN_constraints_3]]';
return $result;
}

public function indexesProvider()
public static function indexesProvider(): array
{
$result = parent::indexesProvider();
$result['create'][0] = 'ALTER TABLE {{T_constraints_2}} ADD INDEX [[CN_constraints_2_single]] ([[C_index_1]])';
Expand All @@ -192,18 +193,13 @@ public function indexesProvider()
return $result;
}

public function uniquesProvider()
public static function uniquesProvider(): array
{
$result = parent::uniquesProvider();
$result['drop'][0] = 'DROP INDEX [[CN_unique]] ON {{T_constraints_1}}';
return $result;
}

public function defaultValuesProvider(): void
{
$this->markTestSkipped('Adding/dropping default constraints is not supported in MySQL.');
}

public function testResetSequence(): void
{
$qb = $this->getQueryBuilder();
Expand All @@ -217,7 +213,7 @@ public function testResetSequence(): void
$this->assertEquals($expected, $sql);
}

public function upsertProvider()
public static function upsertProvider(): array
{
$concreteData = [
'regular values' => [
Expand Down Expand Up @@ -266,7 +262,7 @@ public function upsertProvider()

public static function conditionProvider(): array
{
$data = array_merge(
return array_merge(
parent::conditionProvider(),
[
[
Expand Down Expand Up @@ -365,16 +361,9 @@ public static function conditionProvider(): array
]
],
);

// adjust dbms specific escaping
foreach ($data as $i => $condition) {
$data[$i][1] = DbHelper::replaceQuotes($condition[1], 'mysql');
}

return $data;
}

public function updateProvider()
public static function updateProvider(): array
{
$items = parent::updateProvider();

Expand All @@ -386,7 +375,7 @@ public function updateProvider()
[
'id' => 1,
],
$this->replaceQuotes('UPDATE [[profile]] SET [[description]]=:qp0 WHERE [[id]]=:qp1'),
'UPDATE [[profile]] SET [[description]]=:qp0 WHERE [[id]]=:qp1',
[
':qp0' => '{"abc":"def","0":123,"1":null}',
':qp1' => 1,
Expand Down Expand Up @@ -461,4 +450,18 @@ public function testDefaultValues(): void
$sql = $command->insert('negative_default_values', [])->getRawSql();
$this->assertEquals('INSERT INTO `negative_default_values` (`tinyint_col`) VALUES (DEFAULT)', $sql);
}

/**
* @dataProvider defaultValuesProvider
* @param string $sql
*/
public function testAddDropDefaultValue($sql, Closure $builder): void
{
$this->expectException(NotSupportedException::class);
$this->expectExceptionMessageMatches(
'/^mysql does not support (adding|dropping) default value constraints\.$/',
);

parent::testAddDropDefaultValue($sql, $builder);
}
}
Loading
Loading