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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
- Chg #1001: Remove `ParamInterface` (@vjik)
- Chg #1001: Add public properties `$type` and `$value` to `Param` class instead of `getType()` and `getValue()` methods that were removed (@vjik)
- Chg #1002: Remove specific condition interfaces (@vjik)
- Chg #1003: Refactor namespace of condition objects and use promoted properties instead of getters (@vjik)

## 1.3.0 March 21, 2024

Expand Down
2 changes: 2 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,3 +253,5 @@ Each table column has its own class in the `Yiisoft\Db\Schema\Column` namespace
`ConjunctionConditionInterface`, `ExistConditionInterface`, `HashConditionInterface`, `InConditionInterface`,
`LikeConditionInterface`, `NotConditionInterface`, `OverlapsConditionInterface`, `SimpleConditionInterface`;
- `ConditionInterface` moved to `Yiisoft\Db\QueryBuilder\Condition` namespace;
- Remove `AbstractConjunctionCondition` and `AbstractOverlapsConditionBuilder`;
- Change namespace of condition and condition builder classes;
5 changes: 2 additions & 3 deletions src/QueryBuilder/AbstractDQLQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -536,10 +536,9 @@ protected function defaultExpressionBuilders(): array
Query::class => QueryExpressionBuilder::class,
Param::class => ParamBuilder::class,
Expression::class => ExpressionBuilder::class,
Condition\AbstractConjunctionCondition::class => Condition\Builder\ConjunctionConditionBuilder::class,
Condition\NotCondition::class => Condition\Builder\NotConditionBuilder::class,
Condition\AndCondition::class => Condition\Builder\ConjunctionConditionBuilder::class,
Condition\OrCondition::class => Condition\Builder\ConjunctionConditionBuilder::class,
Condition\AndCondition::class => Condition\Builder\LogicalConditionBuilder::class,
Condition\OrCondition::class => Condition\Builder\LogicalConditionBuilder::class,
Condition\BetweenCondition::class => Condition\Builder\BetweenConditionBuilder::class,
Condition\InCondition::class => Condition\Builder\InConditionBuilder::class,
Condition\LikeCondition::class => Condition\Builder\LikeConditionBuilder::class,
Expand Down
35 changes: 0 additions & 35 deletions src/QueryBuilder/Condition/AbstractConjunctionCondition.php

This file was deleted.

24 changes: 6 additions & 18 deletions src/QueryBuilder/Condition/AbstractOverlapsCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,14 @@
*/
abstract class AbstractOverlapsCondition implements ConditionInterface
{
public function __construct(
private string|ExpressionInterface $column,
private iterable|ExpressionInterface $values,
) {
}

/**
* @return ExpressionInterface|string The column name or an Expression.
*/
public function getColumn(): string|ExpressionInterface
{
return $this->column;
}

/**
* @return ExpressionInterface|iterable An array of values that {@see columns} value should overlap.
* @param ExpressionInterface|string $column The column name or an expression.
* @param ExpressionInterface|iterable $values An array of values that {@see $columns} value should overlap.
*/
public function getValues(): iterable|ExpressionInterface
{
return $this->values;
public function __construct(
public readonly string|ExpressionInterface $column,
public readonly iterable|ExpressionInterface $values,
) {
}

/**
Expand Down
18 changes: 14 additions & 4 deletions src/QueryBuilder/Condition/AndCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,26 @@

namespace Yiisoft\Db\QueryBuilder\Condition;

use Yiisoft\Db\Expression\ExpressionInterface;

/**
* Condition that connects two or more SQL expressions with the `AND` operator.
*/
final class AndCondition extends AbstractConjunctionCondition
final class AndCondition implements ConditionInterface
{
/**
* @return string The operator that's represented by this condition class, such as `AND`, `OR`.
* @param array $expressions The expressions that are connected by this condition.
*
* @psalm-param array<array|ExpressionInterface|scalar> $expressions
*/
public function getOperator(): string
public function __construct(
public readonly array $expressions,
) {
}

public static function fromArrayDefinition(string $operator, array $operands): self
{
return 'AND';
/** @psalm-var array<array|ExpressionInterface|scalar> $operands */
return new self($operands);
}
}
46 changes: 10 additions & 36 deletions src/QueryBuilder/Condition/BetweenColumnsCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,44 +39,18 @@
*/
final class BetweenColumnsCondition implements ConditionInterface
{
public function __construct(
private array|int|string|Iterator|ExpressionInterface $value,
private string $operator,
private string|ExpressionInterface $intervalStartColumn,
private string|ExpressionInterface $intervalEndColumn
) {
}

/**
* @return ExpressionInterface|string The column name or expression that's the end of the interval.
*/
public function getIntervalEndColumn(): string|ExpressionInterface
{
return $this->intervalEndColumn;
}

/**
* @return ExpressionInterface|string The column name or expression that's the beginning of the interval.
*/
public function getIntervalStartColumn(): string|ExpressionInterface
{
return $this->intervalStartColumn;
}

/**
* @return string The operator to use (for example `BETWEEN` or `NOT BETWEEN`).
* @param array|ExpressionInterface|int|Iterator|string $value The value to compare against.
* @param string $operator The operator to use (for example `BETWEEN` or `NOT BETWEEN`).
* @param ExpressionInterface|string $intervalStartColumn The column name or expression that's the beginning of the interval.
* @param ExpressionInterface|string $intervalEndColumn The column name or expression that's the end of the interval.
*/
public function getOperator(): string
{
return $this->operator;
}

/**
* @return array|ExpressionInterface|int|Iterator|string The value to compare against.
*/
public function getValue(): array|int|string|Iterator|ExpressionInterface
{
return $this->value;
public function __construct(
public readonly array|int|string|Iterator|ExpressionInterface $value,
public readonly string $operator,
public readonly string|ExpressionInterface $intervalStartColumn,
public readonly string|ExpressionInterface $intervalEndColumn,
) {
}

/**
Expand Down
46 changes: 10 additions & 36 deletions src/QueryBuilder/Condition/BetweenCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,44 +12,18 @@
*/
final class BetweenCondition implements ConditionInterface
{
public function __construct(
private string|ExpressionInterface $column,
private string $operator,
private mixed $intervalStart,
private mixed $intervalEnd
) {
}

/**
* @return ExpressionInterface|string The column name.
*/
public function getColumn(): string|ExpressionInterface
{
return $this->column;
}

/**
* @return mixed End of the interval.
*/
public function getIntervalEnd(): mixed
{
return $this->intervalEnd;
}

/**
* @return mixed Beginning of the interval.
* @param ExpressionInterface|string $column The column name.
* @param string $operator The operator to use (for example `BETWEEN` or `NOT BETWEEN`).
* @param mixed $intervalStart Beginning of the interval.
* @param mixed $intervalEnd End of the interval.
*/
public function getIntervalStart(): mixed
{
return $this->intervalStart;
}

/**
* @return string The operator to use (for example `BETWEEN` or `NOT BETWEEN`).
*/
public function getOperator(): string
{
return $this->operator;
public function __construct(
public readonly string|ExpressionInterface $column,
public readonly string $operator,
public readonly mixed $intervalStart,
public readonly mixed $intervalEnd
) {
}

/**
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ public function __construct(private readonly QueryBuilderInterface $queryBuilder
*/
public function build(ExpressionInterface $expression, array &$params = []): string
{
$operator = $expression->getOperator();
$startColumn = $this->escapeColumnName($expression->getIntervalStartColumn(), $params);
$endColumn = $this->escapeColumnName($expression->getIntervalEndColumn(), $params);
$value = $this->createPlaceholder($expression->getValue(), $params);
$operator = $expression->operator;
$startColumn = $this->escapeColumnName($expression->intervalStartColumn, $params);
$endColumn = $this->escapeColumnName($expression->intervalEndColumn, $params);
$value = $this->createPlaceholder($expression->value, $params);
return "$value $operator $startColumn AND $endColumn";
}

Expand Down
12 changes: 7 additions & 5 deletions src/QueryBuilder/Condition/Builder/BetweenConditionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,18 @@ public function __construct(private readonly QueryBuilderInterface $queryBuilder
*/
public function build(ExpressionInterface $expression, array &$params = []): string
{
$operator = $expression->getOperator();
$column = $expression->getColumn();
$column = $column instanceof ExpressionInterface ? $this->queryBuilder->buildExpression($column) : $column;
$operator = $expression->operator;
$column = $expression->column;
$column = $column instanceof ExpressionInterface
? $this->queryBuilder->buildExpression($column)
: $column;

if (!str_contains($column, '(')) {
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);
}

$phName1 = $this->createPlaceholder($expression->getIntervalStart(), $params);
$phName2 = $this->createPlaceholder($expression->getIntervalEnd(), $params);
$phName1 = $this->createPlaceholder($expression->intervalStart, $params);
$phName2 = $this->createPlaceholder($expression->intervalEnd, $params);

return "$column $operator $phName1 AND $phName2";
}
Expand Down
7 changes: 3 additions & 4 deletions src/QueryBuilder/Condition/Builder/ExistsConditionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,8 @@ public function __construct(private readonly QueryBuilderInterface $queryBuilder
*/
public function build(ExpressionInterface $expression, array &$params = []): string
{
$operator = $expression->getOperator();
$query = $expression->getQuery();
$sql = $this->queryBuilder->buildExpression($query, $params);
return "$operator $sql";
return $expression->operator
. ' '
. $this->queryBuilder->buildExpression($expression->query, $params);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public function __construct(private readonly QueryBuilderInterface $queryBuilder
*/
public function build(ExpressionInterface $expression, array &$params = []): string
{
$hash = $expression->getHash() ?? [];
$hash = $expression->hash;
$parts = [];

/**
Expand Down
8 changes: 4 additions & 4 deletions src/QueryBuilder/Condition/Builder/InConditionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ public function __construct(protected QueryBuilderInterface $queryBuilder)
*/
public function build(ExpressionInterface $expression, array &$params = []): string
{
$column = $expression->getColumn();
$operator = strtoupper($expression->getOperator());
$values = $expression->getValues();
$column = $expression->column;
$operator = strtoupper($expression->operator);
$values = $expression->values;

if ($column === []) {
/** no columns to test against */
Expand Down Expand Up @@ -146,7 +146,7 @@ public function build(ExpressionInterface $expression, array &$params = []): str
protected function buildValues(InCondition $condition, iterable $values, array &$params = []): array
{
$sqlValues = [];
$column = $condition->getColumn();
$column = $condition->column;

if (is_array($column)) {
/** @psalm-var mixed $column */
Expand Down
6 changes: 3 additions & 3 deletions src/QueryBuilder/Condition/Builder/LikeConditionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public function __construct(
*/
public function build(ExpressionInterface $expression, array &$params = []): string
{
$values = $expression->getValue();
$values = $expression->value;
$escape = $expression->getEscapingReplacements();

if ($escape === []) {
Expand Down Expand Up @@ -97,7 +97,7 @@ public function build(ExpressionInterface $expression, array &$params = []): str
*/
protected function prepareColumn(LikeCondition $expression, array &$params): string
{
$column = $expression->getColumn();
$column = $expression->column;

if ($column instanceof ExpressionInterface) {
return $this->queryBuilder->buildExpression($column, $params);
Expand Down Expand Up @@ -143,7 +143,7 @@ protected function preparePlaceholderName(
*/
protected function parseOperator(LikeCondition $expression): array
{
$operator = strtoupper($expression->getOperator());
$operator = strtoupper($expression->operator);
if (!preg_match('/^(AND |OR |)((NOT |)I?LIKE)/', $operator, $matches)) {
throw new InvalidArgumentException("Invalid operator in like condition: \"$operator\"");
}
Expand Down
Loading
Loading