From 891d0d23a974008205afb4a296001e7d3ecfc30f Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 20 Jul 2025 17:19:59 +0300 Subject: [PATCH 1/3] adapt --- src/Builder/JsonOverlapsConditionBuilder.php | 20 ++++++++++++++------ src/Builder/LikeConditionBuilder.php | 4 ++-- src/DQLQueryBuilder.php | 2 +- tests/QueryBuilderTest.php | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Builder/JsonOverlapsConditionBuilder.php b/src/Builder/JsonOverlapsConditionBuilder.php index c64d58a8c..e6cd73fda 100644 --- a/src/Builder/JsonOverlapsConditionBuilder.php +++ b/src/Builder/JsonOverlapsConditionBuilder.php @@ -8,18 +8,24 @@ use InvalidArgumentException; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; +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 MySQL 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}. * @@ -32,8 +38,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 ExpressionInterface) { $values = new JsonExpression($values); diff --git a/src/Builder/LikeConditionBuilder.php b/src/Builder/LikeConditionBuilder.php index b640be19d..a4202ab92 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 MySQL Server. */ -final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder +final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\LikeConditionBuilder { protected function prepareColumn(LikeCondition $expression, array &$params): string { $column = parent::prepareColumn($expression, $params); - if ($expression->getCaseSensitive() === true) { + if ($expression->caseSensitive === true) { $column = 'BINARY ' . $column; } diff --git a/src/DQLQueryBuilder.php b/src/DQLQueryBuilder.php index 3c40bd24b..faae4a216 100644 --- a/src/DQLQueryBuilder.php +++ b/src/DQLQueryBuilder.php @@ -8,7 +8,7 @@ use Yiisoft\Db\Mysql\Builder\JsonOverlapsConditionBuilder; use Yiisoft\Db\Mysql\Builder\LikeConditionBuilder; use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; use function ctype_digit; diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 798d6faec..86bb8cd08 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -17,7 +17,7 @@ use Yiisoft\Db\Mysql\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest; From ba75a91b0b889233c8fefd8416288f87b64b019d Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 20 Jul 2025 17:42:09 +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 9f4b32536..cee44120a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,7 +46,7 @@ - Chg #399: Rename `insertWithReturningPks()` to `insertReturningPks()` in `Command` and `DMLQueryBuilder` classes (@Tigrov) - Enh #403: Refactor `DMLQueryBuilder::upsert()`, allow use `EXCLUDED` table alias to access inserted values (@Tigrov) - Enh #405: Provide `yiisoft/db-implementation` virtual package (@vjik) -- Enh #407: Adapt to specific condition interfaces removing in `yiisoft/db` package (@vjik) +- Enh #407, #408: Adapt to conditions refactoring in `yiisoft/db` package (@vjik) ## 1.2.0 March 21, 2024 From 3980a50feccf7ca34ff42df71ab204aece146ba4 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Mon, 21 Jul 2025 11:34:21 +0300 Subject: [PATCH 3/3] refactor --- src/Builder/JsonOverlapsConditionBuilder.php | 2 +- src/Builder/LikeConditionBuilder.php | 2 +- src/DQLQueryBuilder.php | 2 +- tests/QueryBuilderTest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Builder/JsonOverlapsConditionBuilder.php b/src/Builder/JsonOverlapsConditionBuilder.php index e6cd73fda..63ef2e1e0 100644 --- a/src/Builder/JsonOverlapsConditionBuilder.php +++ b/src/Builder/JsonOverlapsConditionBuilder.php @@ -11,7 +11,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 a4202ab92..a39225c00 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 MySQL Server. */ -final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\LikeConditionBuilder +final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder { protected function prepareColumn(LikeCondition $expression, array &$params): string { diff --git a/src/DQLQueryBuilder.php b/src/DQLQueryBuilder.php index faae4a216..3c40bd24b 100644 --- a/src/DQLQueryBuilder.php +++ b/src/DQLQueryBuilder.php @@ -8,7 +8,7 @@ use Yiisoft\Db\Mysql\Builder\JsonOverlapsConditionBuilder; use Yiisoft\Db\Mysql\Builder\LikeConditionBuilder; use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; use function ctype_digit; diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 86bb8cd08..798d6faec 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -17,7 +17,7 @@ use Yiisoft\Db\Mysql\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; -use Yiisoft\Db\QueryBuilder\Condition\Overlaps\JsonOverlapsCondition; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest;