Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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, #425: Adapt to conditions refactoring in `yiisoft/db` package (@vjik)
- Enh #424, #425, #428: Adapt to conditions refactoring in `yiisoft/db` package (@vjik)

## 1.3.0 March 21, 2024

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@
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\ArrayOverlaps;
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;

/**
* Builds expressions for {@see ArrayOverlapsCondition} for PostgreSQL Server.
* Builds expressions for {@see ArrayOverlaps} for PostgreSQL Server.
*
* @implements ExpressionBuilderInterface<ArrayOverlapsCondition>
* @implements ExpressionBuilderInterface<ArrayOverlaps>
*/
final class ArrayOverlapsConditionBuilder implements ExpressionBuilderInterface
final class ArrayOverlapsBuilder implements ExpressionBuilderInterface
{
public function __construct(
private readonly QueryBuilderInterface $queryBuilder,
) {
}

/**
* Build SQL for {@see ArrayOverlapsCondition}.
* Build SQL for {@see ArrayOverlaps}.
*
* @param ArrayOverlapsCondition $expression The {@see ArrayOverlapsCondition} to be built.
* @param ArrayOverlaps $expression The {@see ArrayOverlaps} to be built.
*
* @throws Exception
* @throws InvalidArgumentException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\Expression\JsonExpression;
use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition;
use Yiisoft\Db\QueryBuilder\Condition\JsonOverlaps;
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;

/**
* Builds expressions for {@see JsonOverlapsCondition} for PostgreSQL Server.
* Builds expressions for {@see JsonOverlaps} for PostgreSQL Server.
*
* @implements ExpressionBuilderInterface<JsonOverlapsCondition>
* @implements ExpressionBuilderInterface<JsonOverlaps>
*/
final class JsonOverlapsConditionBuilder implements ExpressionBuilderInterface
final class JsonOverlapsBuilder implements ExpressionBuilderInterface
{
public function __construct(
private readonly QueryBuilderInterface $queryBuilder,
) {
}

/**
* Build SQL for {@see JsonOverlapsCondition}.
* Build SQL for {@see JsonOverlaps}.
*
* @param JsonOverlapsCondition $expression The {@see JsonOverlapsCondition} to be built.
* @param JsonOverlaps $expression The {@see JsonOverlaps} to be built.
*
* @throws Exception
* @throws InvalidArgumentException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@

namespace Yiisoft\Db\Pgsql\Builder;

use Yiisoft\Db\QueryBuilder\Condition\LikeCondition;
use Yiisoft\Db\QueryBuilder\Condition\Like;

/**
* Build an object of {@see LikeCondition} into SQL expressions for PostgreSQL Server.
* Build an object of {@see Like} into SQL expressions for PostgreSQL Server.
*/
final class LikeConditionBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder
final class LikeBuilder extends \Yiisoft\Db\QueryBuilder\Condition\Builder\LikeBuilder
{
protected function parseOperator(LikeCondition $expression): array
protected function parseOperator(Like $expression): array
{
[$andor, $not, $operator] = parent::parseOperator($expression);

Expand Down
26 changes: 13 additions & 13 deletions src/DQLQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@
use Yiisoft\Db\Expression\JsonExpression;
use Yiisoft\Db\Expression\StructuredExpression;
use Yiisoft\Db\Pgsql\Builder\ArrayExpressionBuilder;
use Yiisoft\Db\Pgsql\Builder\ArrayOverlapsConditionBuilder;
use Yiisoft\Db\Pgsql\Builder\ArrayOverlapsBuilder;
use Yiisoft\Db\Pgsql\Builder\CaseExpressionBuilder;
use Yiisoft\Db\Pgsql\Builder\JsonOverlapsConditionBuilder;
use Yiisoft\Db\Pgsql\Builder\LikeConditionBuilder;
use Yiisoft\Db\Pgsql\Builder\JsonOverlapsBuilder;
use Yiisoft\Db\Pgsql\Builder\LikeBuilder;
use Yiisoft\Db\Pgsql\Builder\StructuredExpressionBuilder;
use Yiisoft\Db\Pgsql\Builder\JsonExpressionBuilder;
use Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder;
use Yiisoft\Db\QueryBuilder\Condition\LikeCondition;
use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition;
use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition;
use Yiisoft\Db\QueryBuilder\Condition\Like;
use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps;
use Yiisoft\Db\QueryBuilder\Condition\JsonOverlaps;

/**
* Implements a DQL (Data Query Language) SQL statements for PostgreSQL Server.
Expand All @@ -36,10 +36,10 @@ protected function defaultConditionClasses(): array
{
return [
...parent::defaultConditionClasses(),
'ILIKE' => LikeCondition::class,
'NOT ILIKE' => LikeCondition::class,
'OR ILIKE' => LikeCondition::class,
'OR NOT ILIKE' => LikeCondition::class,
'ILIKE' => Like::class,
'NOT ILIKE' => Like::class,
'OR ILIKE' => Like::class,
'OR NOT ILIKE' => Like::class,
];
}

Expand All @@ -48,11 +48,11 @@ protected function defaultExpressionBuilders(): array
return [
...parent::defaultExpressionBuilders(),
ArrayExpression::class => ArrayExpressionBuilder::class,
ArrayOverlapsCondition::class => ArrayOverlapsConditionBuilder::class,
ArrayOverlaps::class => ArrayOverlapsBuilder::class,
JsonExpression::class => JsonExpressionBuilder::class,
JsonOverlapsCondition::class => JsonOverlapsConditionBuilder::class,
JsonOverlaps::class => JsonOverlapsBuilder::class,
StructuredExpression::class => StructuredExpressionBuilder::class,
LikeCondition::class => LikeConditionBuilder::class,
Like::class => LikeBuilder::class,
CaseExpression::class => CaseExpressionBuilder::class,
];
}
Expand Down
20 changes: 10 additions & 10 deletions tests/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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\ArrayOverlaps;
use Yiisoft\Db\QueryBuilder\Condition\JsonOverlaps;
use Yiisoft\Db\Schema\Column\ColumnInterface;
use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest;

Expand Down Expand Up @@ -456,34 +456,34 @@ public function testSelectScalar(array|bool|float|int|string $columns, string $e
parent::testSelectScalar($columns, $expected);
}

public function testArrayOverlapsConditionBuilder(): void
public function testArrayOverlapsBuilder(): void
{
$db = $this->getConnection();
$qb = $db->getQueryBuilder();

$params = [];
$sql = $qb->buildExpression(new ArrayOverlapsCondition('column', [1, 2, 3]), $params);
$sql = $qb->buildExpression(new ArrayOverlaps('column', [1, 2, 3]), $params);

$this->assertSame('"column"::text[] && ARRAY[1,2,3]::text[]', $sql);
$this->assertSame([], $params);

// Test column as Expression
$params = [];
$sql = $qb->buildExpression(new ArrayOverlapsCondition(new Expression('column'), [1, 2, 3]), $params);
$sql = $qb->buildExpression(new ArrayOverlaps(new Expression('column'), [1, 2, 3]), $params);

$this->assertSame('column::text[] && ARRAY[1,2,3]::text[]', $sql);
$this->assertSame([], $params);

$db->close();
}

public function testJsonOverlapsConditionBuilder(): void
public function testJsonOverlapsBuilder(): void
{
$db = $this->getConnection();
$qb = $db->getQueryBuilder();

$params = [];
$sql = $qb->buildExpression(new JsonOverlapsCondition('column', [1, 2, 3]), $params);
$sql = $qb->buildExpression(new JsonOverlaps('column', [1, 2, 3]), $params);

$this->assertSame(
'ARRAY(SELECT jsonb_array_elements_text("column"::jsonb)) && ARRAY[1,2,3]::text[]',
Expand All @@ -502,21 +502,21 @@ public function testOverlapsCondition(iterable|ExpressionInterface $values, int

$count = $query
->from('array_and_json_types')
->where(new ArrayOverlapsCondition('intarray_col', $values))
->where(new ArrayOverlaps('intarray_col', $values))
->count();

$this->assertSame($expectedCount, $count);

$count = $query
->from('array_and_json_types')
->setWhere(new JsonOverlapsCondition('json_col', $values))
->setWhere(new JsonOverlaps('json_col', $values))
->count();

$this->assertSame($expectedCount, $count);

$count = $query
->from('array_and_json_types')
->setWhere(new JsonOverlapsCondition('jsonb_col', $values))
->setWhere(new JsonOverlaps('jsonb_col', $values))
->count();

$this->assertSame($expectedCount, $count);
Expand Down
Loading