diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f716e02..f4e24263 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ - Enh #360, #361: Implement `DMLQueryBuilder::insertReturningPks()` method (@Tigrov) - Chg #362: Replace column and table name quote character from ` to " (@Tigrov) - Enh #368: Provide `yiisoft/db-implementation` virtual package (@vjik) +- Enh #371: Adapt to conditions refactoring in `yiisoft/db` package (@vjik) ## 1.2.0 March 21, 2024 diff --git a/src/Builder/JsonOverlapsConditionBuilder.php b/src/Builder/JsonOverlapsConditionBuilder.php index 8958a79e..1112b8e9 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\QueryBuilderInterface; /** * Builds expressions for {@see JsonOverlapsCondition} for SQLite 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,13 +38,14 @@ 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); } - $values = $this->queryBuilder->buildExpression($values, $params); return "EXISTS(SELECT value FROM json_each($column) INTERSECT SELECT value FROM json_each($values))=1"; diff --git a/src/Builder/LikeConditionBuilder.php b/src/Builder/LikeConditionBuilder.php index bd6a60fa..85479b1f 100644 --- a/src/Builder/LikeConditionBuilder.php +++ b/src/Builder/LikeConditionBuilder.php @@ -22,7 +22,7 @@ public function __construct(QueryBuilderInterface $queryBuilder) public function build(ExpressionInterface $expression, array &$params = []): string { - if ($expression->getCaseSensitive() === true) { + if ($expression->caseSensitive === true) { throw new NotSupportedException('SQLite doesn\'t support case-sensitive "LIKE" conditions.'); } return parent::build($expression, $params); diff --git a/src/DQLQueryBuilder.php b/src/DQLQueryBuilder.php index 7f8a20cf..054b754f 100644 --- a/src/DQLQueryBuilder.php +++ b/src/DQLQueryBuilder.php @@ -10,8 +10,8 @@ use Yiisoft\Db\Query\QueryInterface; use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder; use Yiisoft\Db\QueryBuilder\Condition\InCondition; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; use Yiisoft\Db\Sqlite\Builder\InConditionBuilder; use Yiisoft\Db\Sqlite\Builder\JsonOverlapsConditionBuilder; use Yiisoft\Db\Sqlite\Builder\LikeConditionBuilder; diff --git a/tests/Builder/InconditionBuilderTest.php b/tests/Builder/InConditionBuilderTest.php similarity index 95% rename from tests/Builder/InconditionBuilderTest.php rename to tests/Builder/InConditionBuilderTest.php index 637d2f9a..134f5862 100644 --- a/tests/Builder/InconditionBuilderTest.php +++ b/tests/Builder/InConditionBuilderTest.php @@ -17,7 +17,7 @@ /** * @group sqlite */ -final class InconditionBuilderTest extends TestCase +final class InConditionBuilderTest extends TestCase { use TestTrait;