Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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 @@ -111,7 +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)
- Chg #1003, #1006: Refactor namespace of condition objects and use promoted properties instead of getters (@vjik)

## 1.3.0 March 21, 2024

Expand Down
21 changes: 11 additions & 10 deletions docs/guide/en/query/where.md
Original file line number Diff line number Diff line change
Expand Up @@ -276,16 +276,16 @@ Internally, the formats described are implicitly converted to object format befo
so it's possible to combine formats in a single condition:

```php
use Yiisoft\Db\QueryBuilder\Condition\InCondition;
use Yiisoft\Db\QueryBuilder\Condition\OrCondition;
use Yiisoft\Db\QueryBuilder\Condition\In;
use Yiisoft\Db\QueryBuilder\Condition\OrX;
use Yiisoft\Db\Query\Query;

/** @var Query $query */

$query->andWhere(
new OrCondition(
new OrX(
[
new InCondition('type', 'in', $types),
new In('type', 'in', $types),
['like', 'name', '%good%'],
'disabled=false',
],
Expand All @@ -297,12 +297,13 @@ Conversion from operator format into object format is performed according
to `Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder::conditionClasses` property
that maps operator names to representative class names.

- `AND`, `OR` => `Yiisoft\Db\QueryBuilder\Condition\ConjunctionCondition`;
- `NOT` => `Yiisoft\Db\QueryBuilder\Condition\NotCondition`;
- `IN`, `NOT IN` => `Yiisoft\Db\QueryBuilder\Condition\InCondition`;
- `BETWEEN`, `NOT BETWEEN` => `Yiisoft\Db\QueryBuilder\Condition\BetweenCondition`;
- `ARRAY OVERLAPS` => `Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition`;
- `JSON OVERLAPS` => `Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition`.
- `AND` => `Yiisoft\Db\QueryBuilder\Condition\AndX`;
- `OR` => `Yiisoft\Db\QueryBuilder\Condition\OrX`;
- `NOT` => `Yiisoft\Db\QueryBuilder\Condition\Not`;
- `IN`, `NOT IN` => `Yiisoft\Db\QueryBuilder\Condition\In`;
- `BETWEEN`, `NOT BETWEEN` => `Yiisoft\Db\QueryBuilder\Condition\Between`;
- `ARRAY OVERLAPS` => `Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps`;
- `JSON OVERLAPS` => `Yiisoft\Db\QueryBuilder\Condition\JsonOverlaps`.

## Appending conditions

Expand Down
19 changes: 11 additions & 8 deletions docs/guide/pt-BR/query/where.md
Original file line number Diff line number Diff line change
Expand Up @@ -251,16 +251,16 @@ Internamente, os formatos descritos são convertidos implicitamente para o forma
então é possível combinar formatos em uma única condição:

```php
use Yiisoft\Db\QueryBuilder\Condition\InCondition;
use Yiisoft\Db\QueryBuilder\Condition\OrCondition;
use Yiisoft\Db\QueryBuilder\Condition\In;
use Yiisoft\Db\QueryBuilder\Condition\OrX;
use Yiisoft\Db\Query\Query;

/** @var Query $query */

$query->andWhere(
new OrCondition(
new OrX(
[
new InCondition('type', 'in', $types),
new In('type', 'in', $types),
['like', 'name', '%good%'],
'disabled=false',
],
Expand All @@ -272,10 +272,13 @@ A conversão do formato operador para o formato objeto é realizada de acordo
com a propriedade `Yiisoft\Db\QueryBuilder\AbstractDQLQueryBuilder::conditionClasses`
que mapeia nomes de operadores para nomes de classes representativos.

- `AND`, `OR` => `Yiisoft\Db\QueryBuilder\Condition\ConjunctionCondition`.
- `NOT` => `Yiisoft\Db\QueryBuilder\Condition\NotCondition`.
- `IN`, `NOT IN` => `Yiisoft\Db\QueryBuilder\Condition\InCondition`.
- `BETWEEN`, `NOT BETWEEN` => `Yiisoft\Db\QueryBuilder\Condition\BetweenCondition`.
- `AND` => `Yiisoft\Db\QueryBuilder\Condition\AndX`;
- `OR` => `Yiisoft\Db\QueryBuilder\Condition\OrX`;
- `NOT` => `Yiisoft\Db\QueryBuilder\Condition\Not`;
- `IN`, `NOT IN` => `Yiisoft\Db\QueryBuilder\Condition\In`;
- `BETWEEN`, `NOT BETWEEN` => `Yiisoft\Db\QueryBuilder\Condition\Between`;
- `ARRAY OVERLAPS` => `Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps`;
- `JSON OVERLAPS` => `Yiisoft\Db\QueryBuilder\Condition\JsonOverlaps`.

## Anexando condições

Expand Down
58 changes: 29 additions & 29 deletions src/QueryBuilder/AbstractDQLQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
use Yiisoft\Db\Expression\CaseExpressionBuilder;
use Yiisoft\Db\Expression\StructuredExpression;
use Yiisoft\Db\Expression\StructuredExpressionBuilder;
use Yiisoft\Db\QueryBuilder\Condition\HashCondition;
use Yiisoft\Db\QueryBuilder\Condition\Hash;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\SimpleCondition;
use Yiisoft\Db\QueryBuilder\Condition\Simple;
use Yiisoft\Db\Query\Query;
use Yiisoft\Db\Query\QueryExpressionBuilder;
use Yiisoft\Db\Query\QueryInterface;
Expand Down Expand Up @@ -445,12 +445,12 @@ public function createConditionFromArray(array $condition): ConditionInterface
/** operator format: operator, operand 1, operand 2, ... */
if (isset($condition[0])) {
$operator = strtoupper((string) array_shift($condition));
$className = $this->conditionClasses[$operator] ?? SimpleCondition::class;
$className = $this->conditionClasses[$operator] ?? Simple::class;
return $className::fromArrayDefinition($operator, $condition);
}

/** hash format: 'column1' => 'value1', 'column2' => 'value2', ... */
return new HashCondition($condition);
return new Hash($condition);
}

public function getExpressionBuilder(ExpressionInterface $expression): object
Expand Down Expand Up @@ -503,21 +503,21 @@ public function setSeparator(string $separator): void
protected function defaultConditionClasses(): array
{
return [
'NOT' => Condition\NotCondition::class,
'AND' => Condition\AndCondition::class,
'OR' => Condition\OrCondition::class,
'BETWEEN' => Condition\BetweenCondition::class,
'NOT BETWEEN' => Condition\BetweenCondition::class,
'IN' => Condition\InCondition::class,
'NOT IN' => Condition\InCondition::class,
'LIKE' => Condition\LikeCondition::class,
'NOT LIKE' => Condition\LikeCondition::class,
'OR LIKE' => Condition\LikeCondition::class,
'OR NOT LIKE' => Condition\LikeCondition::class,
'EXISTS' => Condition\ExistsCondition::class,
'NOT EXISTS' => Condition\ExistsCondition::class,
'ARRAY OVERLAPS' => Condition\ArrayOverlapsCondition::class,
'JSON OVERLAPS' => Condition\JsonOverlapsCondition::class,
'NOT' => Condition\Not::class,
'AND' => Condition\AndX::class,
'OR' => Condition\OrX::class,
'BETWEEN' => Condition\Between::class,
'NOT BETWEEN' => Condition\Between::class,
'IN' => Condition\In::class,
'NOT IN' => Condition\In::class,
'LIKE' => Condition\Like::class,
'NOT LIKE' => Condition\Like::class,
'OR LIKE' => Condition\Like::class,
'OR NOT LIKE' => Condition\Like::class,
'EXISTS' => Condition\Exists::class,
'NOT EXISTS' => Condition\Exists::class,
'ARRAY OVERLAPS' => Condition\ArrayOverlaps::class,
'JSON OVERLAPS' => Condition\JsonOverlaps::class,
];
}

Expand All @@ -536,16 +536,16 @@ protected function defaultExpressionBuilders(): array
Query::class => QueryExpressionBuilder::class,
Param::class => ParamBuilder::class,
Expression::class => ExpressionBuilder::class,
Condition\NotCondition::class => Condition\Builder\NotConditionBuilder::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,
Condition\ExistsCondition::class => Condition\Builder\ExistsConditionBuilder::class,
SimpleCondition::class => Condition\Builder\SimpleConditionBuilder::class,
HashCondition::class => Condition\Builder\HashConditionBuilder::class,
Condition\BetweenColumnsCondition::class => Condition\Builder\BetweenColumnsConditionBuilder::class,
Condition\Not::class => Condition\Builder\NotBuilder::class,
Condition\AndX::class => Condition\Builder\LogicalBuilder::class,
Condition\OrX::class => Condition\Builder\LogicalBuilder::class,
Condition\Between::class => Condition\Builder\BetweenBuilder::class,
Condition\In::class => Condition\Builder\InBuilder::class,
Condition\Like::class => Condition\Builder\LikeBuilder::class,
Condition\Exists::class => Condition\Builder\ExistsBuilder::class,
Simple::class => Condition\Builder\SimpleBuilder::class,
Hash::class => Condition\Builder\HashBuilder::class,
Condition\BetweenColumns::class => Condition\Builder\BetweenColumnsBuilder::class,
JsonExpression::class => JsonExpressionBuilder::class,
ArrayExpression::class => ArrayExpressionBuilder::class,
StructuredExpression::class => StructuredExpressionBuilder::class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/**
* The base class for classes representing the array and JSON overlaps conditions.
*/
abstract class AbstractOverlapsCondition implements ConditionInterface
abstract class AbstractOverlaps implements ConditionInterface
{
/**
* @param ExpressionInterface|string $column The column name or an expression.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/**
* Condition that connects two or more SQL expressions with the `AND` operator.
*/
final class OrCondition implements ConditionInterface
final class AndX implements ConditionInterface
{
/**
* @param array $expressions The expressions that are connected by this condition.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
/**
* Condition that represents `ARRAY OVERLAPS` operator is used to check if a column of array type overlaps another array.
*/
final class ArrayOverlapsCondition extends AbstractOverlapsCondition
final class ArrayOverlaps extends AbstractOverlaps
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
/**
* Condition that's represented `BETWEEN` operator is used to check if a value is between two values.
*/
final class BetweenCondition implements ConditionInterface
final class Between implements ConditionInterface
{
/**
* @param ExpressionInterface|string $column The column name.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
* // NOW() NOT BETWEEN (SELECT time FROM log ORDER BY id ASC LIMIT 1) AND update_time
* ```
*/
final class BetweenColumnsCondition implements ConditionInterface
final class BetweenColumns implements ConditionInterface
{
/**
* @param array|ExpressionInterface|int|Iterator|string $value The value to compare against.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,26 @@
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\QueryBuilder\Condition\BetweenCondition;
use Yiisoft\Db\QueryBuilder\Condition\Between;
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;

use function str_contains;

/**
* Build an object of {@see BetweenCondition} into SQL expressions.
* Build an object of {@see Between} into SQL expressions.
*
* @implements ExpressionBuilderInterface<BetweenCondition>
* @implements ExpressionBuilderInterface<Between>
*/
class BetweenConditionBuilder implements ExpressionBuilderInterface
class BetweenBuilder implements ExpressionBuilderInterface
{
public function __construct(private readonly QueryBuilderInterface $queryBuilder)
{
}

/**
* Build SQL for {@see BetweenCondition}.
* Build SQL for {@see Between}.
*
* @param BetweenCondition $expression
* @param Between $expression
*
* @throws Exception
* @throws InvalidArgumentException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,27 @@
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\QueryBuilder\Condition\BetweenColumnsCondition;
use Yiisoft\Db\QueryBuilder\Condition\BetweenColumns;
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;
use Yiisoft\Db\Query\QueryInterface;

use function str_contains;

/**
* Build an object of {@see BetweenColumnsCondition} into SQL expressions.
* Build an object of {@see BetweenColumns} into SQL expressions.
*
* @implements ExpressionBuilderInterface<BetweenColumnsCondition>
* @implements ExpressionBuilderInterface<BetweenColumns>
*/
class BetweenColumnsConditionBuilder implements ExpressionBuilderInterface
class BetweenColumnsBuilder implements ExpressionBuilderInterface
{
public function __construct(private readonly QueryBuilderInterface $queryBuilder)
{
}

/**
* Build SQL for {@see BetweenColumnsCondition}.
* Build SQL for {@see BetweenColumns}.
*
* @param BetweenColumnsCondition $expression
* @param BetweenColumns $expression
*
* @throws Exception
* @throws InvalidArgumentException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,24 @@
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\QueryBuilder\Condition\ExistsCondition;
use Yiisoft\Db\QueryBuilder\Condition\Exists;
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;

/**
* Build an object of {@see ExistsCondition} into SQL expressions.
* Build an object of {@see Exists} into SQL expressions.
*
* @implements ExpressionBuilderInterface<ExistsCondition>
* @implements ExpressionBuilderInterface<Exists>
*/
class ExistsConditionBuilder implements ExpressionBuilderInterface
class ExistsBuilder implements ExpressionBuilderInterface
{
public function __construct(private readonly QueryBuilderInterface $queryBuilder)
{
}

/**
* Build SQL for {@see ExistsCondition}.
* Build SQL for {@see Exists}.
*
* @param ExistsCondition $expression
* @param Exists $expression
*
* @throws Exception
* @throws InvalidArgumentException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\QueryBuilder\Condition\HashCondition;
use Yiisoft\Db\QueryBuilder\Condition\InCondition;
use Yiisoft\Db\QueryBuilder\Condition\Hash;
use Yiisoft\Db\QueryBuilder\Condition\In;
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;
use Yiisoft\Db\Query\QueryInterface;

Expand All @@ -20,20 +20,20 @@
use function is_iterable;

/**
* Build an object of {@see HashCondition} into SQL expressions.
* Build an object of {@see Hash} into SQL expressions.
*
* @implements ExpressionBuilderInterface<HashCondition>
* @implements ExpressionBuilderInterface<Hash>
*/
class HashConditionBuilder implements ExpressionBuilderInterface
class HashBuilder implements ExpressionBuilderInterface
{
public function __construct(private readonly QueryBuilderInterface $queryBuilder)
{
}

/**
* Build SQL for {@see HashCondition}.
* Build SQL for {@see Hash}.
*
* @param HashCondition $expression
* @param Hash $expression
*
* @throws Exception
* @throws InvalidArgumentException
Expand All @@ -51,7 +51,7 @@ public function build(ExpressionInterface $expression, array &$params = []): str
foreach ($hash as $column => $value) {
if (is_iterable($value) || $value instanceof QueryInterface) {
/** IN condition */
$parts[] = $this->queryBuilder->buildCondition(new InCondition($column, 'IN', $value), $params);
$parts[] = $this->queryBuilder->buildCondition(new In($column, 'IN', $value), $params);
} else {
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);

Expand Down
Loading