88use InvalidArgumentException ;
99use Yiisoft \Db \Exception \InvalidConfigException ;
1010use Yiisoft \Db \Exception \NotSupportedException ;
11+ use Yiisoft \Db \Expression \ExpressionBuilderInterface ;
1112use Yiisoft \Db \Expression \ExpressionInterface ;
1213use Yiisoft \Db \Expression \JsonExpression ;
13- use Yiisoft \Db \QueryBuilder \Condition \Builder \AbstractOverlapsConditionBuilder ;
1414use Yiisoft \Db \QueryBuilder \Condition \JsonOverlapsCondition ;
15+ use Yiisoft \Db \QueryBuilder \QueryBuilderInterface ;
1516
1617/**
1718 * Builds expressions for {@see JsonOverlapsCondition} for SQLite Server.
1819 *
19- * @extends AbstractOverlapsConditionBuilder <JsonOverlapsCondition>
20+ * @implements ExpressionBuilderInterface <JsonOverlapsCondition>
2021 */
21- final class JsonOverlapsConditionBuilder extends AbstractOverlapsConditionBuilder
22+ final class JsonOverlapsConditionBuilder implements ExpressionBuilderInterface
2223{
24+ public function __construct (
25+ private readonly QueryBuilderInterface $ queryBuilder ,
26+ ) {
27+ }
28+
2329 /**
2430 * Build SQL for {@see JsonOverlapsCondition}.
2531 *
@@ -32,13 +38,14 @@ final class JsonOverlapsConditionBuilder extends AbstractOverlapsConditionBuilde
3238 */
3339 public function build (ExpressionInterface $ expression , array &$ params = []): string
3440 {
35- $ column = $ this ->prepareColumn ($ expression ->getColumn ());
36- $ values = $ expression ->getValues ();
41+ $ column = $ expression ->column instanceof ExpressionInterface
42+ ? $ this ->queryBuilder ->buildExpression ($ expression ->column )
43+ : $ this ->queryBuilder ->getQuoter ()->quoteColumnName ($ expression ->column );
3744
45+ $ values = $ expression ->values ;
3846 if (!$ values instanceof ExpressionInterface) {
3947 $ values = new JsonExpression ($ values );
4048 }
41-
4249 $ values = $ this ->queryBuilder ->buildExpression ($ values , $ params );
4350
4451 return "EXISTS(SELECT value FROM json_each( $ column) INTERSECT SELECT value FROM json_each( $ values))=1 " ;
0 commit comments