From 2d61b7832d3453870140bc03af217b3d524b150c Mon Sep 17 00:00:00 2001 From: Tigrov Date: Sun, 30 Jun 2024 08:57:17 +0700 Subject: [PATCH] Improve --- src/Builder/JsonOverlapsConditionBuilder.php | 2 +- tests/QueryBuilderTest.php | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Builder/JsonOverlapsConditionBuilder.php b/src/Builder/JsonOverlapsConditionBuilder.php index 3f6565a3..dfb333c8 100644 --- a/src/Builder/JsonOverlapsConditionBuilder.php +++ b/src/Builder/JsonOverlapsConditionBuilder.php @@ -42,6 +42,6 @@ public function build(ExpressionInterface $expression, array &$params = []): str $values = $this->queryBuilder->buildExpression($values, $params); - return "ARRAY(SELECT jsonb_array_elements($column::jsonb))::text[] && $values::text[]"; + return "ARRAY(SELECT jsonb_array_elements_text($column::jsonb)) && $values::text[]"; } } diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 3c87faba..28d57168 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -10,6 +10,7 @@ use Yiisoft\Db\Exception\IntegrityException; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; +use Yiisoft\Db\Expression\Expression; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Pgsql\Column; use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; @@ -696,6 +697,13 @@ public function testArrayOverlapsConditionBuilder(): void $this->assertSame('"column"::text[] && ARRAY[:qp0, :qp1, :qp2]::text[]', $sql); $this->assertSame([':qp0' => 1, ':qp1' => 2, ':qp2' => 3], $params); + // Test column as Expression + $params = []; + $sql = $qb->buildExpression(new ArrayOverlapsCondition(new Expression('column'), [1, 2, 3]), $params); + + $this->assertSame('column::text[] && ARRAY[:qp0, :qp1, :qp2]::text[]', $sql); + $this->assertSame([':qp0' => 1, ':qp1' => 2, ':qp2' => 3], $params); + $db->close(); } @@ -708,7 +716,7 @@ public function testJsonOverlapsConditionBuilder(): void $sql = $qb->buildExpression(new JsonOverlapsCondition('column', [1, 2, 3]), $params); $this->assertSame( - 'ARRAY(SELECT jsonb_array_elements("column"::jsonb))::text[] && ARRAY[:qp0, :qp1, :qp2]::text[]', + 'ARRAY(SELECT jsonb_array_elements_text("column"::jsonb)) && ARRAY[:qp0, :qp1, :qp2]::text[]', $sql ); $this->assertSame([':qp0' => 1, ':qp1' => 2, ':qp2' => 3], $params);