diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 45d4c3644..e5ce4f7a8 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -5,6 +5,7 @@ namespace Yiisoft\Db\Pgsql\Tests; use Closure; +use InvalidArgumentException; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\DataProviderExternal; use PHPUnit\Framework\Attributes\TestWith; @@ -686,8 +687,6 @@ public static function dataBuildIdentifier(): iterable yield ['s.t.name', '"s"."t"."name"']; yield [['t', 'na.me'], '"t"."na.me"']; yield ['LOWER(name)', '"LOWER(name)"']; - yield ['[[name]]', '"[[name]]"']; - yield ['{{%t}}.name', '"{{%t}}"."name"']; yield ['*', '"*"']; yield ['arr[1]', '"arr[1]"']; yield ['a"b', '"a""b"']; @@ -701,4 +700,23 @@ public function testBuildIdentifier(string|array $name, string $expected): void $this->assertSame($expected, $qb->buildExpression(new Identifier($name))); } + + public static function dataBuildIdentifierWithQuoteSqlSequences(): iterable + { + yield ['[[name]]', '"[[name]]"']; + yield ['{{%t}}.name', '"{{%t}}"."name"']; + } + + #[DataProvider('dataBuildIdentifierWithQuoteSqlSequences')] + public function testBuildIdentifierWithQuoteSqlSequences(string|array $name, string $expected): void + { + $qb = $this->getSharedConnection()->getQueryBuilder(); + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage( + 'Identifier ' . $expected . ' must not contain sequences processed by ' + . '"Yiisoft\\Db\\Schema\\QuoterInterface::quoteSql()", such as "[[...]]" or "{{...}}".', + ); + $qb->buildExpression(new Identifier($name)); + } }