From c93a75a0cee98370154cbe69e04b42c8fbff5b6c Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 20 Jul 2025 17:30:36 +0300 Subject: [PATCH 1/3] adapt --- src/Builder/ArrayOverlapsConditionBuilder.php | 20 +++++++++++++------ src/Builder/JsonOverlapsConditionBuilder.php | 20 +++++++++++++------ src/Builder/LikeConditionBuilder.php | 4 ++-- src/DQLQueryBuilder.php | 4 ++-- tests/QueryBuilderTest.php | 4 ++-- 5 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/Builder/ArrayOverlapsConditionBuilder.php b/src/Builder/ArrayOverlapsConditionBuilder.php index a0d10c51..fc3169dd 100644 --- a/src/Builder/ArrayOverlapsConditionBuilder.php +++ b/src/Builder/ArrayOverlapsConditionBuilder.php @@ -9,18 +9,24 @@ use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ArrayExpression; +use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Expression\JsonExpression; -use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\Builder\AbstractOverlapsConditionBuilder; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\ArrayOverlapsCondition; +use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; /** * Builds expressions for {@see ArrayOverlapsCondition} for PostgreSQL Server. * - * @extends AbstractOverlapsConditionBuilder + * @implements ExpressionBuilderInterface */ -final class ArrayOverlapsConditionBuilder extends AbstractOverlapsConditionBuilder +final class ArrayOverlapsConditionBuilder implements ExpressionBuilderInterface { + public function __construct( + private readonly QueryBuilderInterface $queryBuilder, + ) { + } + /** * Build SQL for {@see ArrayOverlapsCondition}. * @@ -33,8 +39,10 @@ final class ArrayOverlapsConditionBuilder extends AbstractOverlapsConditionBuild */ public function build(ExpressionInterface $expression, array &$params = []): string { - $column = $this->prepareColumn($expression->getColumn()); - $values = $expression->getValues(); + $column = $expression->column instanceof ExpressionInterface + ? $this->queryBuilder->buildExpression($expression->column) + : $this->queryBuilder->getQuoter()->quoteColumnName($expression->column); + $values = $expression->values; if ($values instanceof JsonExpression) { /** @psalm-suppress MixedArgument */ diff --git a/src/Builder/JsonOverlapsConditionBuilder.php b/src/Builder/JsonOverlapsConditionBuilder.php index 60180eb6..0dd1b955 100644 --- a/src/Builder/JsonOverlapsConditionBuilder.php +++ b/src/Builder/JsonOverlapsConditionBuilder.php @@ -9,18 +9,24 @@ use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ArrayExpression; +use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Expression\JsonExpression; -use Yiisoft\Db\QueryBuilder\Condition\Builder\AbstractOverlapsConditionBuilder; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; /** * Builds expressions for {@see JsonOverlapsCondition} for PostgreSQL Server. * - * @extends AbstractOverlapsConditionBuilder + * @implements ExpressionBuilderInterface */ -final class JsonOverlapsConditionBuilder extends AbstractOverlapsConditionBuilder +final class JsonOverlapsConditionBuilder implements ExpressionBuilderInterface { + public function __construct( + private readonly QueryBuilderInterface $queryBuilder, + ) { + } + /** * Build SQL for {@see JsonOverlapsCondition}. * @@ -33,8 +39,10 @@ final class JsonOverlapsConditionBuilder extends AbstractOverlapsConditionBuilde */ public function build(ExpressionInterface $expression, array &$params = []): string { - $column = $this->prepareColumn($expression->getColumn()); - $values = $expression->getValues(); + $column = $expression->column instanceof ExpressionInterface + ? $this->queryBuilder->buildExpression($expression->column) + : $this->queryBuilder->getQuoter()->quoteColumnName($expression->column); + $values = $expression->values; if ($values instanceof JsonExpression) { /** @psalm-suppress MixedArgument */ diff --git a/src/Builder/LikeConditionBuilder.php b/src/Builder/LikeConditionBuilder.php index cd4353fa..ac6025f7 100644 --- a/src/Builder/LikeConditionBuilder.php +++ b/src/Builder/LikeConditionBuilder.php @@ -9,13 +9,13 @@ /** * Build an object of {@see LikeCondition} into SQL expressions for PostgreSQL Server. */ -final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder +final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\LikeConditionBuilder { protected function parseOperator(LikeCondition $expression): array { [$andor, $not, $operator] = parent::parseOperator($expression); - $operator = match ($expression->getCaseSensitive()) { + $operator = match ($expression->caseSensitive) { true => 'LIKE', false => 'ILIKE', default => $operator, diff --git a/src/DQLQueryBuilder.php b/src/DQLQueryBuilder.php index 2b37f166..2106c52d 100644 --- a/src/DQLQueryBuilder.php +++ b/src/DQLQueryBuilder.php @@ -16,9 +16,9 @@ use Yiisoft\Db\Pgsql\Builder\StructuredExpressionBuilder; use Yiisoft\Db\Pgsql\Builder\JsonExpressionBuilder; use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder; -use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\ArrayOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; /** * Implements a DQL (Data Query Language) SQL statements for PostgreSQL Server. diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 1a573a41..35d574de 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -15,8 +15,8 @@ use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; -use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\ArrayOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest; From 85f3dd36addd7599b6dacdcbf9a5ddb5009eaaee Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 20 Jul 2025 17:42:56 +0300 Subject: [PATCH 2/3] changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df85c8d1..79972752 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,7 @@ - Chg #414: Rename `DMLQueryBuilder::insertWithReturningPks()` to `DMLQueryBuilder::insertReturningPks()` (@Tigrov) - Enh #415: Implement `CaseExpressionBuilder` class (@Tigrov) - Enh #420: Provide `yiisoft/db-implementation` virtual package (@vjik) -- Enh #424: Adapt to specific condition interfaces removing in `yiisoft/db` package (@vjik) +- Enh #424, #425: Adapt to conditions refactoring in `yiisoft/db` package (@vjik) ## 1.3.0 March 21, 2024 From 2573aeb38363c29d5d602659e05839051c9627bb Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Mon, 21 Jul 2025 11:38:37 +0300 Subject: [PATCH 3/3] refactor --- src/Builder/ArrayOverlapsConditionBuilder.php | 2 +- src/Builder/JsonOverlapsConditionBuilder.php | 2 +- src/Builder/LikeConditionBuilder.php | 2 +- src/DQLQueryBuilder.php | 4 ++-- tests/QueryBuilderTest.php | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Builder/ArrayOverlapsConditionBuilder.php b/src/Builder/ArrayOverlapsConditionBuilder.php index fc3169dd..9738687d 100644 --- a/src/Builder/ArrayOverlapsConditionBuilder.php +++ b/src/Builder/ArrayOverlapsConditionBuilder.php @@ -12,7 +12,7 @@ use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Expression\JsonExpression; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\ArrayOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; /** diff --git a/src/Builder/JsonOverlapsConditionBuilder.php b/src/Builder/JsonOverlapsConditionBuilder.php index 0dd1b955..9ce428bd 100644 --- a/src/Builder/JsonOverlapsConditionBuilder.php +++ b/src/Builder/JsonOverlapsConditionBuilder.php @@ -12,7 +12,7 @@ use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Expression\JsonExpression; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; /** diff --git a/src/Builder/LikeConditionBuilder.php b/src/Builder/LikeConditionBuilder.php index ac6025f7..26251255 100644 --- a/src/Builder/LikeConditionBuilder.php +++ b/src/Builder/LikeConditionBuilder.php @@ -9,7 +9,7 @@ /** * Build an object of {@see LikeCondition} into SQL expressions for PostgreSQL Server. */ -final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\LikeConditionBuilder +final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder { protected function parseOperator(LikeCondition $expression): array { diff --git a/src/DQLQueryBuilder.php b/src/DQLQueryBuilder.php index 2106c52d..54d37ab4 100644 --- a/src/DQLQueryBuilder.php +++ b/src/DQLQueryBuilder.php @@ -17,8 +17,8 @@ use Yiisoft\Db\Pgsql\Builder\JsonExpressionBuilder; use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder; use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\ArrayOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; /** * Implements a DQL (Data Query Language) SQL statements for PostgreSQL Server. diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 35d574de..1a573a41 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -15,8 +15,8 @@ use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\ArrayOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest;