diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d66a8954..ab6aba6bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -107,11 +107,11 @@ - Enh #991: Improve types in `ConnectionInterface::transaction()` (@kikara) - Chg #998: Add `yiisoft/db-implementation` virtual package as dependency (@vjik) - Chg #999: Remove `requireTransaction()` method and `$isolationLevel` property from `AbstractCommand` (@vjik) -- Enh #1000: Prepare values in `HashCondition` (@vjik) +- Enh #1000: Prepare values in `Columns` (@vjik) - 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 diff --git a/docs/guide/en/query/where.md b/docs/guide/en/query/where.md index ddbc185ea..7ec904623 100644 --- a/docs/guide/en/query/where.md +++ b/docs/guide/en/query/where.md @@ -4,7 +4,7 @@ The `Yiisoft\Db\Query\Query::where()` method specifies the `WHERE` fragment of a You can use one of the four formats to specify a `WHERE` condition. - string format, `status=1`. -- hash format, `['status' => 1, 'type' => 2]`. +- key-value format, `['status' => 1, 'type' => 2]`. - operator format, `['like', 'name', 'test']`. - object format, `new LikeCondition('name', 'LIKE', 'test')`. @@ -60,7 +60,7 @@ WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15)) As you can see, the query builder is intelligent enough to handle values that are nulls or arrays. -You can also use subqueries with hash format like the following. +You can also use subqueries with key-value format like the following. ```php use Yiisoft\Db\Connection\ConnectionInterface; @@ -78,7 +78,7 @@ The relevant part of SQL is: WHERE `id` IN (SELECT `id` FROM `user`) ``` -Using the hash format, Yii DB internally applies parameter binding for values, so in contrast to the string format, +Using the key-value format, Yii DB internally applies parameter binding for values, so in contrast to the string format, here you don't have to add parameters manually. However, note that Yii DB never escapes column names, so if you pass a variable obtained from the user side as a column @@ -104,7 +104,7 @@ Operator format allows you to specify arbitrary conditions in a programmatic way ['operator', 'operand1', 'operand2', ...] ``` -Where the operands can each be specified in string format, hash format or operator format recursively, +Where the operands can each be specified in string format, key-value format or operator format recursively, while the operator can be one of the following: ### and @@ -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', ], @@ -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 @@ -343,7 +344,7 @@ $query->filterWhere(['username' => $username, 'email' => $email]); ``` The only difference between `Yiisoft\Db\Query\Query::filterWhere()` and `Yiisoft\Db\Query\Query::where()` -is that the former will ignore empty values provided in the condition in hash format. +is that the former will ignore empty values provided in the condition in key-value format. So, if `$email` is empty while `$username` isn't, the above code will result in the SQL condition `WHERE username=:username`. diff --git a/docs/guide/pt-BR/query/where.md b/docs/guide/pt-BR/query/where.md index ca246d07f..abeb68db4 100644 --- a/docs/guide/pt-BR/query/where.md +++ b/docs/guide/pt-BR/query/where.md @@ -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', ], @@ -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 diff --git a/src/Query/Query.php b/src/Query/Query.php index 458d42ada..97a328abc 100644 --- a/src/Query/Query.php +++ b/src/Query/Query.php @@ -882,9 +882,7 @@ private function filterCondition(array|string $condition): array|string if (!isset($condition[0])) { /** - * Hash format: 'column1' => 'value1', 'column2' => 'value2', ... - * - * @psalm-var mixed $value + * Key-value format: 'column1' => 'value1', 'column2' => 'value2', ... */ foreach ($condition as $name => $value) { if ($this->isEmpty($value)) { diff --git a/src/Query/QueryPartsInterface.php b/src/Query/QueryPartsInterface.php index 16c6263d1..cc2c167e1 100644 --- a/src/Query/QueryPartsInterface.php +++ b/src/Query/QueryPartsInterface.php @@ -644,10 +644,10 @@ public function union(QueryInterface|string $sql, bool $all = false): static; * * The `$condition` specified as an array can be in one of the following two formats: * - * - hash format: `['column1' => value1, 'column2' => value2, ...]` + * - key-value format: `['column1' => value1, 'column2' => value2, ...]` * - operator format: `[operator, operand1, operand2, ...]` * - * A condition in hash format represents the following SQL expression in general: + * A condition in key-value format represents the following SQL expression in general: * `column1=value1 AND column2=value2 AND ...`. In case when a value is an array, * an `IN` expression will be generated. And if a value is `null`, `IS NULL` will be used in the generated * expression. Below are some examples: diff --git a/src/QueryBuilder/AbstractDQLQueryBuilder.php b/src/QueryBuilder/AbstractDQLQueryBuilder.php index ab22cf1bc..b5001ccb1 100644 --- a/src/QueryBuilder/AbstractDQLQueryBuilder.php +++ b/src/QueryBuilder/AbstractDQLQueryBuilder.php @@ -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\Columns; 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; @@ -445,12 +445,15 @@ 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); + /** + * Key-value format: 'column1' => 'value1', 'column2' => 'value2', ... + * @psalm-var array $condition + */ + return new Columns($condition); } public function getExpressionBuilder(ExpressionInterface $expression): object @@ -503,21 +506,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, ]; } @@ -536,16 +539,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, + Columns::class => Condition\Builder\ColumnsBuilder::class, + Condition\BetweenColumns::class => Condition\Builder\BetweenColumnsBuilder::class, JsonExpression::class => JsonExpressionBuilder::class, ArrayExpression::class => ArrayExpressionBuilder::class, StructuredExpression::class => StructuredExpressionBuilder::class, diff --git a/src/QueryBuilder/Condition/AbstractOverlapsCondition.php b/src/QueryBuilder/Condition/AbstractOverlaps.php similarity index 97% rename from src/QueryBuilder/Condition/AbstractOverlapsCondition.php rename to src/QueryBuilder/Condition/AbstractOverlaps.php index 27810a68c..59507ef2e 100644 --- a/src/QueryBuilder/Condition/AbstractOverlapsCondition.php +++ b/src/QueryBuilder/Condition/AbstractOverlaps.php @@ -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. diff --git a/src/QueryBuilder/Condition/OrCondition.php b/src/QueryBuilder/Condition/AndX.php similarity index 92% rename from src/QueryBuilder/Condition/OrCondition.php rename to src/QueryBuilder/Condition/AndX.php index 0bf8bb606..4d4d747f6 100644 --- a/src/QueryBuilder/Condition/OrCondition.php +++ b/src/QueryBuilder/Condition/AndX.php @@ -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. diff --git a/src/QueryBuilder/Condition/ArrayOverlapsCondition.php b/src/QueryBuilder/Condition/ArrayOverlaps.php similarity index 75% rename from src/QueryBuilder/Condition/ArrayOverlapsCondition.php rename to src/QueryBuilder/Condition/ArrayOverlaps.php index 7c215b578..0aa3f367c 100644 --- a/src/QueryBuilder/Condition/ArrayOverlapsCondition.php +++ b/src/QueryBuilder/Condition/ArrayOverlaps.php @@ -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 { } diff --git a/src/QueryBuilder/Condition/BetweenCondition.php b/src/QueryBuilder/Condition/Between.php similarity index 97% rename from src/QueryBuilder/Condition/BetweenCondition.php rename to src/QueryBuilder/Condition/Between.php index 32dafe769..04550517a 100644 --- a/src/QueryBuilder/Condition/BetweenCondition.php +++ b/src/QueryBuilder/Condition/Between.php @@ -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. diff --git a/src/QueryBuilder/Condition/BetweenColumnsCondition.php b/src/QueryBuilder/Condition/BetweenColumns.php similarity index 98% rename from src/QueryBuilder/Condition/BetweenColumnsCondition.php rename to src/QueryBuilder/Condition/BetweenColumns.php index df38fff5f..e528125a0 100644 --- a/src/QueryBuilder/Condition/BetweenColumnsCondition.php +++ b/src/QueryBuilder/Condition/BetweenColumns.php @@ -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. diff --git a/src/QueryBuilder/Condition/Builder/BetweenConditionBuilder.php b/src/QueryBuilder/Condition/Builder/BetweenBuilder.php similarity index 84% rename from src/QueryBuilder/Condition/Builder/BetweenConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/BetweenBuilder.php index 255cf412a..5cd66dfe7 100644 --- a/src/QueryBuilder/Condition/Builder/BetweenConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/BetweenBuilder.php @@ -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 + * @implements ExpressionBuilderInterface */ -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 diff --git a/src/QueryBuilder/Condition/Builder/BetweenColumnsConditionBuilder.php b/src/QueryBuilder/Condition/Builder/BetweenColumnsBuilder.php similarity index 87% rename from src/QueryBuilder/Condition/Builder/BetweenColumnsConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/BetweenColumnsBuilder.php index 7dafffc78..625bf59c4 100644 --- a/src/QueryBuilder/Condition/Builder/BetweenColumnsConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/BetweenColumnsBuilder.php @@ -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 + * @implements ExpressionBuilderInterface */ -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 diff --git a/src/QueryBuilder/Condition/Builder/HashConditionBuilder.php b/src/QueryBuilder/Condition/Builder/ColumnsBuilder.php similarity index 67% rename from src/QueryBuilder/Condition/Builder/HashConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/ColumnsBuilder.php index 090e5723b..50ef1835a 100644 --- a/src/QueryBuilder/Condition/Builder/HashConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/ColumnsBuilder.php @@ -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\Columns; +use Yiisoft\Db\QueryBuilder\Condition\In; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; use Yiisoft\Db\Query\QueryInterface; @@ -20,20 +20,21 @@ use function is_iterable; /** - * Build an object of {@see HashCondition} into SQL expressions. + * Build an object of {@see Columns} into SQL expressions. * - * @implements ExpressionBuilderInterface + * @implements ExpressionBuilderInterface */ -class HashConditionBuilder implements ExpressionBuilderInterface +class ColumnsBuilder implements ExpressionBuilderInterface { - public function __construct(private readonly QueryBuilderInterface $queryBuilder) - { + public function __construct( + private readonly QueryBuilderInterface $queryBuilder, + ) { } /** - * Build SQL for {@see HashCondition}. + * Build SQL for {@see Columns}. * - * @param HashCondition $expression + * @param Columns $expression * * @throws Exception * @throws InvalidArgumentException @@ -42,16 +43,11 @@ public function __construct(private readonly QueryBuilderInterface $queryBuilder */ public function build(ExpressionInterface $expression, array &$params = []): string { - $hash = $expression->hash; $parts = []; - - /** - * @psalm-var array $hash - */ - foreach ($hash as $column => $value) { + foreach ($expression->values 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); diff --git a/src/QueryBuilder/Condition/Builder/ExistsConditionBuilder.php b/src/QueryBuilder/Condition/Builder/ExistsBuilder.php similarity index 73% rename from src/QueryBuilder/Condition/Builder/ExistsConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/ExistsBuilder.php index 1f52433ce..7d9297edb 100644 --- a/src/QueryBuilder/Condition/Builder/ExistsConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/ExistsBuilder.php @@ -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 + * @implements ExpressionBuilderInterface */ -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 diff --git a/src/QueryBuilder/Condition/Builder/InConditionBuilder.php b/src/QueryBuilder/Condition/Builder/InBuilder.php similarity index 94% rename from src/QueryBuilder/Condition/Builder/InConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/InBuilder.php index 37917cf26..9800b5f00 100644 --- a/src/QueryBuilder/Condition/Builder/InConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/InBuilder.php @@ -13,7 +13,7 @@ use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; -use Yiisoft\Db\QueryBuilder\Condition\InCondition; +use Yiisoft\Db\QueryBuilder\Condition\In; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; use Yiisoft\Db\Query\QueryInterface; @@ -31,20 +31,20 @@ use function strtoupper; /** - * Build an object of {@see InCondition} into SQL expressions. + * Build an object of {@see In} into SQL expressions. * - * @implements ExpressionBuilderInterface + * @implements ExpressionBuilderInterface */ -class InConditionBuilder implements ExpressionBuilderInterface +class InBuilder implements ExpressionBuilderInterface { public function __construct(protected QueryBuilderInterface $queryBuilder) { } /** - * Build SQL for {@see InCondition}. + * Build SQL for {@see In}. * - * @param InCondition $expression + * @param In $expression * * @throws Exception * @throws InvalidArgumentException @@ -80,7 +80,6 @@ public function build(ExpressionInterface $expression, array &$params = []): str return $this->buildCompositeInCondition($operator, $column, $values, $params); } - /** @psalm-var mixed $column */ $column = reset($column); } @@ -90,7 +89,6 @@ public function build(ExpressionInterface $expression, array &$params = []): str } $column->rewind(); - /** @psalm-var mixed $column */ $column = $column->current(); } @@ -131,7 +129,7 @@ public function build(ExpressionInterface $expression, array &$params = []): str } /** - * Builds `$values` to use in {@see InCondition}. + * Builds `$values` to use in {@see In}. * * @throws Exception * @throws InvalidArgumentException @@ -143,7 +141,7 @@ public function build(ExpressionInterface $expression, array &$params = []): str * @psalm-suppress MixedArrayTypeCoercion * @psalm-suppress MixedArrayOffset */ - protected function buildValues(InCondition $condition, iterable $values, array &$params = []): array + protected function buildValues(In $condition, iterable $values, array &$params = []): array { $sqlValues = []; $column = $condition->column; diff --git a/src/QueryBuilder/Condition/Builder/LikeConditionBuilder.php b/src/QueryBuilder/Condition/Builder/LikeBuilder.php similarity index 88% rename from src/QueryBuilder/Condition/Builder/LikeConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/LikeBuilder.php index ecf83f98f..9fb0f80ab 100644 --- a/src/QueryBuilder/Condition/Builder/LikeConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/LikeBuilder.php @@ -12,7 +12,7 @@ use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; -use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; +use Yiisoft\Db\QueryBuilder\Condition\Like; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; use function implode; @@ -23,11 +23,11 @@ use function strtr; /** - * Build an object of {@see LikeCondition} into SQL expressions. + * Build an object of {@see Like} into SQL expressions. * - * @implements ExpressionBuilderInterface + * @implements ExpressionBuilderInterface */ -class LikeConditionBuilder implements ExpressionBuilderInterface +class LikeBuilder implements ExpressionBuilderInterface { public function __construct( private readonly QueryBuilderInterface $queryBuilder, @@ -46,9 +46,9 @@ public function __construct( ]; /** - * Build SQL for {@see LikeCondition}. + * Build SQL for {@see Like}. * - * @param LikeCondition $expression + * @param Like $expression * * @throws Exception * @throws InvalidArgumentException @@ -95,7 +95,7 @@ public function build(ExpressionInterface $expression, array &$params = []): str * @throws InvalidConfigException * @throws NotSupportedException */ - protected function prepareColumn(LikeCondition $expression, array &$params): string + protected function prepareColumn(Like $expression, array &$params): string { $column = $expression->column; @@ -121,7 +121,7 @@ protected function prepareColumn(LikeCondition $expression, array &$params): str */ protected function preparePlaceholderName( string|ExpressionInterface $value, - LikeCondition $expression, + Like $expression, array|null $escape, array &$params, ): string { @@ -141,7 +141,7 @@ protected function preparePlaceholderName( * * @psalm-return array{0: string, 1: bool, 2: string} */ - protected function parseOperator(LikeCondition $expression): array + protected function parseOperator(Like $expression): array { $operator = strtoupper($expression->operator); if (!preg_match('/^(AND |OR |)((NOT |)I?LIKE)/', $operator, $matches)) { diff --git a/src/QueryBuilder/Condition/Builder/LogicalConditionBuilder.php b/src/QueryBuilder/Condition/Builder/LogicalBuilder.php similarity index 80% rename from src/QueryBuilder/Condition/Builder/LogicalConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/LogicalBuilder.php index 98dfd52c2..b781baf7c 100644 --- a/src/QueryBuilder/Condition/Builder/LogicalConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/LogicalBuilder.php @@ -10,8 +10,8 @@ use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; -use Yiisoft\Db\QueryBuilder\Condition\AndCondition; -use Yiisoft\Db\QueryBuilder\Condition\OrCondition; +use Yiisoft\Db\QueryBuilder\Condition\AndX; +use Yiisoft\Db\QueryBuilder\Condition\OrX; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; use function count; @@ -20,11 +20,11 @@ use function reset; /** - * Build an object of {@see AndCondition} or {@see OrCondition} into SQL expressions. + * Build an object of {@see AndX} or {@see OrX} into SQL expressions. * - * @implements ExpressionBuilderInterface + * @implements ExpressionBuilderInterface */ -final class LogicalConditionBuilder implements ExpressionBuilderInterface +final class LogicalBuilder implements ExpressionBuilderInterface { public function __construct( private readonly QueryBuilderInterface $queryBuilder @@ -32,9 +32,9 @@ public function __construct( } /** - * Build SQL for {@see AndCondition} or {@see OrCondition}. + * Build SQL for {@see AndX} or {@see OrX}. * - * @param AndCondition|OrCondition $expression + * @param AndX|OrX $expression * * @throws Exception * @throws InvalidArgumentException @@ -54,8 +54,8 @@ public function build(ExpressionInterface $expression, array &$params = []): str } $operator = match ($expression::class) { - AndCondition::class => 'AND', - OrCondition::class => 'OR', + AndX::class => 'AND', + OrX::class => 'OR', }; return '(' . implode(") $operator (", $parts) . ')'; diff --git a/src/QueryBuilder/Condition/Builder/NotConditionBuilder.php b/src/QueryBuilder/Condition/Builder/NotBuilder.php similarity index 78% rename from src/QueryBuilder/Condition/Builder/NotConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/NotBuilder.php index 3922fdac4..def268e66 100644 --- a/src/QueryBuilder/Condition/Builder/NotConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/NotBuilder.php @@ -10,24 +10,24 @@ use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; -use Yiisoft\Db\QueryBuilder\Condition\NotCondition; +use Yiisoft\Db\QueryBuilder\Condition\Not; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; /** - * Build an object of {@see NotCondition} into SQL expressions. + * Build an object of {@see Not} into SQL expressions. * - * @implements ExpressionBuilderInterface + * @implements ExpressionBuilderInterface */ -class NotConditionBuilder implements ExpressionBuilderInterface +class NotBuilder implements ExpressionBuilderInterface { public function __construct(private readonly QueryBuilderInterface $queryBuilder) { } /** - * Build SQL for {@see NotCondition}. + * Build SQL for {@see Not}. * - * @param NotCondition $expression + * @param Not $expression * * @throws Exception * @throws InvalidArgumentException diff --git a/src/QueryBuilder/Condition/Builder/SimpleConditionBuilder.php b/src/QueryBuilder/Condition/Builder/SimpleBuilder.php similarity index 82% rename from src/QueryBuilder/Condition/Builder/SimpleConditionBuilder.php rename to src/QueryBuilder/Condition/Builder/SimpleBuilder.php index 5ba3ab0e5..3ed75dd59 100644 --- a/src/QueryBuilder/Condition/Builder/SimpleConditionBuilder.php +++ b/src/QueryBuilder/Condition/Builder/SimpleBuilder.php @@ -10,26 +10,26 @@ use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ExpressionBuilderInterface; use Yiisoft\Db\Expression\ExpressionInterface; -use Yiisoft\Db\QueryBuilder\Condition\SimpleCondition; +use Yiisoft\Db\QueryBuilder\Condition\Simple; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; use function str_contains; /** - * Build an object of {@see SimpleCondition} into SQL expressions. + * Build an object of {@see Simple} into SQL expressions. * - * @implements ExpressionBuilderInterface + * @implements ExpressionBuilderInterface */ -class SimpleConditionBuilder implements ExpressionBuilderInterface +class SimpleBuilder implements ExpressionBuilderInterface { public function __construct(private readonly QueryBuilderInterface $queryBuilder) { } /** - * Build SQL for {@see SimpleCondition}. + * Build SQL for {@see Simple}. * - * @param SimpleCondition $expression + * @param Simple $expression * * @throws Exception * @throws InvalidArgumentException diff --git a/src/QueryBuilder/Condition/HashCondition.php b/src/QueryBuilder/Condition/Columns.php similarity index 61% rename from src/QueryBuilder/Condition/HashCondition.php rename to src/QueryBuilder/Condition/Columns.php index a7cad2251..51c613ef1 100644 --- a/src/QueryBuilder/Condition/HashCondition.php +++ b/src/QueryBuilder/Condition/Columns.php @@ -7,13 +7,15 @@ /** * Condition based on column-value pairs. */ -final class HashCondition implements ConditionInterface +final class Columns implements ConditionInterface { /** - * @param array $hash The condition specification. + * @param array $values The condition specification. + * + * @psalm-param array $values */ public function __construct( - public readonly array $hash = [], + public readonly array $values = [], ) { } @@ -22,6 +24,7 @@ public function __construct( */ public static function fromArrayDefinition(string $operator, array $operands): self { + /** @psalm-var array $operands */ return new self($operands); } } diff --git a/src/QueryBuilder/Condition/ExistsCondition.php b/src/QueryBuilder/Condition/Exists.php similarity index 95% rename from src/QueryBuilder/Condition/ExistsCondition.php rename to src/QueryBuilder/Condition/Exists.php index e415f3c73..b03c474c9 100644 --- a/src/QueryBuilder/Condition/ExistsCondition.php +++ b/src/QueryBuilder/Condition/Exists.php @@ -10,7 +10,7 @@ /** * Condition that represents `EXISTS` operator that checks whether a sub-query returns any rows */ -final class ExistsCondition implements ConditionInterface +final class Exists implements ConditionInterface { /** * @param string $operator The operator to use (for example, `EXISTS` or `NOT EXISTS`). diff --git a/src/QueryBuilder/Condition/InCondition.php b/src/QueryBuilder/Condition/In.php similarity index 98% rename from src/QueryBuilder/Condition/InCondition.php rename to src/QueryBuilder/Condition/In.php index 561d4df87..a001a6ec2 100644 --- a/src/QueryBuilder/Condition/InCondition.php +++ b/src/QueryBuilder/Condition/In.php @@ -12,7 +12,7 @@ /** * Condition that represents `IN` operator. */ -final class InCondition implements ConditionInterface +final class In implements ConditionInterface { /** * @param array|ExpressionInterface|Iterator|string $column The column name. If it's an array, a composite `IN` condition diff --git a/src/QueryBuilder/Condition/JsonOverlapsCondition.php b/src/QueryBuilder/Condition/JsonOverlaps.php similarity index 75% rename from src/QueryBuilder/Condition/JsonOverlapsCondition.php rename to src/QueryBuilder/Condition/JsonOverlaps.php index de6a47403..cd762da06 100644 --- a/src/QueryBuilder/Condition/JsonOverlapsCondition.php +++ b/src/QueryBuilder/Condition/JsonOverlaps.php @@ -7,6 +7,6 @@ /** * Condition that represents `JSON OVERLAPS` operator and is used to check if a column of JSON type overlaps an array. */ -final class JsonOverlapsCondition extends AbstractOverlapsCondition +final class JsonOverlaps extends AbstractOverlaps { } diff --git a/src/QueryBuilder/Condition/LikeCondition.php b/src/QueryBuilder/Condition/Like.php similarity index 98% rename from src/QueryBuilder/Condition/LikeCondition.php rename to src/QueryBuilder/Condition/Like.php index 298a5d467..168244e5c 100644 --- a/src/QueryBuilder/Condition/LikeCondition.php +++ b/src/QueryBuilder/Condition/Like.php @@ -16,7 +16,7 @@ /** * Condition that represents `LIKE` operator. */ -final class LikeCondition implements ConditionInterface +final class Like implements ConditionInterface { protected array|null $escapingReplacements = []; diff --git a/src/QueryBuilder/Condition/NotCondition.php b/src/QueryBuilder/Condition/Not.php similarity index 97% rename from src/QueryBuilder/Condition/NotCondition.php rename to src/QueryBuilder/Condition/Not.php index f96ba198f..ca937f9cd 100644 --- a/src/QueryBuilder/Condition/NotCondition.php +++ b/src/QueryBuilder/Condition/Not.php @@ -15,7 +15,7 @@ /** * Condition that represents `NOT` operator (negation). */ -final class NotCondition implements ConditionInterface +final class Not implements ConditionInterface { /** * @param array|ExpressionInterface|string|null $condition The condition to negate. diff --git a/src/QueryBuilder/Condition/AndCondition.php b/src/QueryBuilder/Condition/OrX.php similarity index 90% rename from src/QueryBuilder/Condition/AndCondition.php rename to src/QueryBuilder/Condition/OrX.php index 4a6ab6c02..4e6331a02 100644 --- a/src/QueryBuilder/Condition/AndCondition.php +++ b/src/QueryBuilder/Condition/OrX.php @@ -7,9 +7,9 @@ use Yiisoft\Db\Expression\ExpressionInterface; /** - * Condition that connects two or more SQL expressions with the `AND` operator. + * Condition that connects two or more SQL expressions with the `OR` operator. */ -final class AndCondition implements ConditionInterface +final class OrX implements ConditionInterface { /** * @param array $expressions The expressions that are connected by this condition. diff --git a/src/QueryBuilder/Condition/SimpleCondition.php b/src/QueryBuilder/Condition/Simple.php similarity index 96% rename from src/QueryBuilder/Condition/SimpleCondition.php rename to src/QueryBuilder/Condition/Simple.php index 4c54d0cc1..c8d9819ea 100644 --- a/src/QueryBuilder/Condition/SimpleCondition.php +++ b/src/QueryBuilder/Condition/Simple.php @@ -12,7 +12,7 @@ /** * Represents a simple condition like `"column" operator value`. */ -final class SimpleCondition implements ConditionInterface +final class Simple implements ConditionInterface { /** * @param ExpressionInterface|string $column The column name or an expression. diff --git a/tests/AbstractQueryBuilderTest.php b/tests/AbstractQueryBuilderTest.php index 9513f06f5..e608da75c 100644 --- a/tests/AbstractQueryBuilderTest.php +++ b/tests/AbstractQueryBuilderTest.php @@ -22,11 +22,11 @@ use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; -use Yiisoft\Db\QueryBuilder\Condition\AndCondition; -use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\JsonOverlapsCondition; -use Yiisoft\Db\QueryBuilder\Condition\OrCondition; -use Yiisoft\Db\QueryBuilder\Condition\SimpleCondition; +use Yiisoft\Db\QueryBuilder\Condition\AndX; +use Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps; +use Yiisoft\Db\QueryBuilder\Condition\JsonOverlaps; +use Yiisoft\Db\QueryBuilder\Condition\OrX; +use Yiisoft\Db\QueryBuilder\Condition\Simple; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Schema\QuoterInterface; use Yiisoft\Db\Tests\Provider\QueryBuilderProvider; @@ -1573,33 +1573,33 @@ public function testsCreateConditionFromArray(): void $qb = $this->getConnection()->getQueryBuilder(); $condition = $qb->createConditionFromArray(['and', 'a = 1', 'b = 2']); - $this->assertInstanceOf(AndCondition::class, $condition); + $this->assertInstanceOf(AndX::class, $condition); $this->assertSame(['a = 1', 'b = 2'], $condition->expressions); $condition = $qb->createConditionFromArray(['or', 'a = 1', 'b = 2']); - $this->assertInstanceOf(OrCondition::class, $condition); + $this->assertInstanceOf(OrX::class, $condition); $this->assertSame(['a = 1', 'b = 2'], $condition->expressions); $condition = $qb->createConditionFromArray(['and', 'a = 1', ['or', 'b = 2', 'c = 3']]); - $this->assertInstanceOf(AndCondition::class, $condition); + $this->assertInstanceOf(AndX::class, $condition); $this->assertSame(['a = 1', ['or', 'b = 2', 'c = 3']], $condition->expressions); $condition = $qb->createConditionFromArray(['or', 'a = 1', ['and', 'b = 2', 'c = 3']]); - $this->assertInstanceOf(OrCondition::class, $condition); + $this->assertInstanceOf(OrX::class, $condition); $this->assertSame(['a = 1', ['and', 'b = 2', 'c = 3']], $condition->expressions); $condition = $qb->createConditionFromArray(['and', 'a = 1', ['or', 'b = 2', ['and', 'c = 3', 'd = 4']]]); - $this->assertInstanceOf(AndCondition::class, $condition); + $this->assertInstanceOf(AndX::class, $condition); $this->assertSame(['a = 1', ['or', 'b = 2', ['and', 'c = 3', 'd = 4']]], $condition->expressions); $condition = $qb->createConditionFromArray(['or', 'a = 1', ['and', 'b = 2', ['or', 'c = 3', 'd = 4']]]); - $this->assertInstanceOf(OrCondition::class, $condition); + $this->assertInstanceOf(OrX::class, $condition); $this->assertSame(['a = 1', ['and', 'b = 2', ['or', 'c = 3', 'd = 4']]], $condition->expressions); $condition = $qb->createConditionFromArray( ['and', 'a = 1', ['or', 'b = 2', ['and', 'c = 3', ['or', 'd = 4', 'e = 5']]]] ); - $this->assertInstanceOf(AndCondition::class, $condition); + $this->assertInstanceOf(AndX::class, $condition); $this->assertSame( ['a = 1', ['or', 'b = 2', ['and', 'c = 3', ['or', 'd = 4', 'e = 5']]]], $condition->expressions, @@ -1613,13 +1613,13 @@ public function testCreateOverlapsConditionFromArray(): void $condition = $qb->createConditionFromArray(['array overlaps', 'column', [1, 2, 3]]); - $this->assertInstanceOf(ArrayOverlapsCondition::class, $condition); + $this->assertInstanceOf(ArrayOverlaps::class, $condition); $this->assertSame('column', $condition->column); $this->assertSame([1, 2, 3], $condition->values); $condition = $qb->createConditionFromArray(['json overlaps', 'column', [1, 2, 3]]); - $this->assertInstanceOf(JsonOverlapsCondition::class, $condition); + $this->assertInstanceOf(JsonOverlaps::class, $condition); $this->assertSame('column', $condition->column); $this->assertSame([1, 2, 3], $condition->values); } @@ -1916,7 +1916,7 @@ public function testGetExpressionBuilder(): void $qb = $db->getQueryBuilder(); - $simpleCondition = new SimpleCondition('a', '=', 1); + $simpleCondition = new Simple('a', '=', 1); $this->assertInstanceOf( ExpressionBuilderInterface::class, diff --git a/tests/AbstractQueryTest.php b/tests/AbstractQueryTest.php index 0271b7578..ae8604e3c 100644 --- a/tests/AbstractQueryTest.php +++ b/tests/AbstractQueryTest.php @@ -53,7 +53,7 @@ public function testAddParamsWithNameInt(): void } /** - * @depends testFilterWhereWithHashFormat + * @depends testFilterWhereWithKeyValueFormat * @depends testFilterWhereWithOperatorFormat * * @throws NotSupportedException @@ -111,10 +111,7 @@ public function testAndFilterHaving(): void $this->assertSame(['and', ['>', 'id', 1], ['>', 'id', 2]], $query->getHaving()); } - /** - * @throws NotSupportedException - */ - public function testAndFilterHavingWithHashFormat(): void + public function testAndFilterHavingWithKeyValueFormat(): void { $db = $this->getConnection(); @@ -209,10 +206,7 @@ public function testEmulateExecution(): void $this->assertSame([], $column); } - /** - * @throws NotSupportedException - */ - public function testFilterHavingWithHashFormat(): void + public function testFilterHavingWithKeyValueFormat(): void { $db = $this->getConnection(); @@ -298,7 +292,7 @@ public function testFilterRecursively(): void /** * @throws NotSupportedException */ - public function testFilterWhereWithHashFormat(): void + public function testFilterWhereWithKeyValueFormat(): void { $db = $this->getConnection(); @@ -464,10 +458,7 @@ public function testLimitOffset(): void $this->assertSame(5, $query->getOffset()); } - /** - * @throws NotSupportedException - */ - public function testOrFilterHavingHashFormat(): void + public function testOrFilterHavingKeyValueFormat(): void { $db = $this->getConnection(); @@ -477,10 +468,7 @@ public function testOrFilterHavingHashFormat(): void $this->assertSame(['status' => 1], $query->getHaving()); } - /** - * @throws NotSupportedException - */ - public function testOrFilterWhereHashFormat(): void + public function testOrFilterWhereKeyValueFormat(): void { $db = $this->getConnection(); diff --git a/tests/Db/QueryBuilder/Condition/AndConditionTest.php b/tests/Db/QueryBuilder/Condition/AndXTest.php similarity index 56% rename from tests/Db/QueryBuilder/Condition/AndConditionTest.php rename to tests/Db/QueryBuilder/Condition/AndXTest.php index b4f825264..c2799ee04 100644 --- a/tests/Db/QueryBuilder/Condition/AndConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/AndXTest.php @@ -5,18 +5,16 @@ namespace Yiisoft\Db\Tests\Db\QueryBuilder\Condition; use PHPUnit\Framework\TestCase; -use Yiisoft\Db\QueryBuilder\Condition\AndCondition; +use Yiisoft\Db\QueryBuilder\Condition\AndX; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class AndConditionTest extends TestCase +final class AndXTest extends TestCase { public function testConstructor(): void { - $andCondition = new AndCondition(['a' => 1, 'b' => 2]); + $andCondition = new AndX(['a' => 1, 'b' => 2]); $this->assertSame(['a' => 1, 'b' => 2], $andCondition->expressions); } diff --git a/tests/Db/QueryBuilder/Condition/BetweenColumnsConditionTest.php b/tests/Db/QueryBuilder/Condition/BetweenColumnsTest.php similarity index 75% rename from tests/Db/QueryBuilder/Condition/BetweenColumnsConditionTest.php rename to tests/Db/QueryBuilder/Condition/BetweenColumnsTest.php index 51972321b..71d71c0d9 100644 --- a/tests/Db/QueryBuilder/Condition/BetweenColumnsConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/BetweenColumnsTest.php @@ -6,18 +6,16 @@ use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\BetweenColumnsCondition; +use Yiisoft\Db\QueryBuilder\Condition\BetweenColumns; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class BetweenColumnsConditionTest extends TestCase +final class BetweenColumnsTest extends TestCase { public function testConstructor(): void { - $betweenColumnsCondition = new BetweenColumnsCondition(42, 'BETWEEN', 'min_value', 'max_value'); + $betweenColumnsCondition = new BetweenColumns(42, 'BETWEEN', 'min_value', 'max_value'); $this->assertSame(42, $betweenColumnsCondition->value); $this->assertSame('BETWEEN', $betweenColumnsCondition->operator); @@ -27,7 +25,7 @@ public function testConstructor(): void public function testFromArrayDefinition(): void { - $betweenColumnsCondition = BetweenColumnsCondition::fromArrayDefinition( + $betweenColumnsCondition = BetweenColumns::fromArrayDefinition( 'BETWEEN', [42, 'min_value', 'max_value'] ); @@ -43,7 +41,7 @@ public function testFromArrayDefinitionExceptionWithoutOperands(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'between' requires three operands."); - BetweenColumnsCondition::fromArrayDefinition('between', []); + BetweenColumns::fromArrayDefinition('between', []); } public function testFromArrayDefinitionExceptionOperandsValue(): void @@ -53,7 +51,7 @@ public function testFromArrayDefinitionExceptionOperandsValue(): void "Operator 'between' requires value to be array, int, string, Iterator or ExpressionInterface." ); - BetweenColumnsCondition::fromArrayDefinition('between', [false, 'min_value', 'max_value']); + BetweenColumns::fromArrayDefinition('between', [false, 'min_value', 'max_value']); } public function testFromArrayDefinitionExceptionOperandsIntervalStartColumn(): void @@ -63,7 +61,7 @@ public function testFromArrayDefinitionExceptionOperandsIntervalStartColumn(): v "Operator 'between' requires interval start column to be string or ExpressionInterface." ); - BetweenColumnsCondition::fromArrayDefinition('between', [42, false, 'max_value']); + BetweenColumns::fromArrayDefinition('between', [42, false, 'max_value']); } public function testFromArrayDefinitionExceptionOperandsIntervalEndColumn(): void @@ -73,6 +71,6 @@ public function testFromArrayDefinitionExceptionOperandsIntervalEndColumn(): voi "Operator 'between' requires interval end column to be string or ExpressionInterface." ); - BetweenColumnsCondition::fromArrayDefinition('between', [42, 'min_value', false]); + BetweenColumns::fromArrayDefinition('between', [42, 'min_value', false]); } } diff --git a/tests/Db/QueryBuilder/Condition/BetweenConditionTest.php b/tests/Db/QueryBuilder/Condition/BetweenTest.php similarity index 73% rename from tests/Db/QueryBuilder/Condition/BetweenConditionTest.php rename to tests/Db/QueryBuilder/Condition/BetweenTest.php index 8e62c01c7..1fb1deed3 100644 --- a/tests/Db/QueryBuilder/Condition/BetweenConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/BetweenTest.php @@ -6,18 +6,16 @@ use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\BetweenCondition; +use Yiisoft\Db\QueryBuilder\Condition\Between; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class BetweenConditionTest extends TestCase +final class BetweenTest extends TestCase { public function testConstructor(): void { - $betweenCondition = new BetweenCondition('date', 'BETWEEN', 1, 2); + $betweenCondition = new Between('date', 'BETWEEN', 1, 2); $this->assertSame('date', $betweenCondition->column); $this->assertSame('BETWEEN', $betweenCondition->operator); @@ -27,7 +25,7 @@ public function testConstructor(): void public function testFromArrayDefinition(): void { - $betweenCondition = BetweenCondition::fromArrayDefinition('BETWEEN', ['date', 1, 2]); + $betweenCondition = Between::fromArrayDefinition('BETWEEN', ['date', 1, 2]); $this->assertSame('date', $betweenCondition->column); $this->assertSame('BETWEEN', $betweenCondition->operator); @@ -40,7 +38,7 @@ public function testFromArrayDefinitionExceptionWithoutOperands(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'between' requires three operands."); - BetweenCondition::fromArrayDefinition('between', []); + Between::fromArrayDefinition('between', []); } public function testFromArrayDefinitionExceptionColumns(): void @@ -48,6 +46,6 @@ public function testFromArrayDefinitionExceptionColumns(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'between' requires column to be string or ExpressionInterface."); - BetweenCondition::fromArrayDefinition('between', [1, 'min_value', 'max_value']); + Between::fromArrayDefinition('between', [1, 'min_value', 'max_value']); } } diff --git a/tests/Db/QueryBuilder/Condition/Builder/BetweenColumnsConditionBuilderTest.php b/tests/Db/QueryBuilder/Condition/Builder/BetweenColumnsBuilderTest.php similarity index 50% rename from tests/Db/QueryBuilder/Condition/Builder/BetweenColumnsConditionBuilderTest.php rename to tests/Db/QueryBuilder/Condition/Builder/BetweenColumnsBuilderTest.php index 43e687975..4d7b11385 100644 --- a/tests/Db/QueryBuilder/Condition/Builder/BetweenColumnsConditionBuilderTest.php +++ b/tests/Db/QueryBuilder/Condition/Builder/BetweenColumnsBuilderTest.php @@ -5,16 +5,14 @@ namespace Yiisoft\Db\Tests\Db\QueryBuilder\Condition\Builder; use PHPUnit\Framework\TestCase; -use Yiisoft\Db\QueryBuilder\Condition\BetweenColumnsCondition; -use Yiisoft\Db\QueryBuilder\Condition\Builder\BetweenColumnsConditionBuilder; +use Yiisoft\Db\QueryBuilder\Condition\BetweenColumns; +use Yiisoft\Db\QueryBuilder\Condition\Builder\BetweenColumnsBuilder; use Yiisoft\Db\Tests\Support\TestTrait; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class BetweenColumnsConditionBuilderTest extends TestCase +final class BetweenColumnsBuilderTest extends TestCase { use TestTrait; @@ -22,12 +20,12 @@ public function testEscapeColumnName(): void { $db = $this->getConnection(); - $betweenColumnsCondition = new BetweenColumnsCondition(42, 'BETWEEN', '1', '100'); + $betweenColumnsCondition = new BetweenColumns(42, 'BETWEEN', '1', '100'); $params = []; $this->assertSame( ':qp0 BETWEEN [1] AND [100]', - (new BetweenColumnsConditionBuilder($db->getQueryBuilder()))->build($betweenColumnsCondition, $params) + (new BetweenColumnsBuilder($db->getQueryBuilder()))->build($betweenColumnsCondition, $params) ); $this->assertEquals([':qp0' => 42], $params); diff --git a/tests/Db/QueryBuilder/Condition/Builder/LikeConditionBuilderTest.php b/tests/Db/QueryBuilder/Condition/Builder/LikeBuilderTest.php similarity index 56% rename from tests/Db/QueryBuilder/Condition/Builder/LikeConditionBuilderTest.php rename to tests/Db/QueryBuilder/Condition/Builder/LikeBuilderTest.php index 0105c3349..6adb874f4 100644 --- a/tests/Db/QueryBuilder/Condition/Builder/LikeConditionBuilderTest.php +++ b/tests/Db/QueryBuilder/Condition/Builder/LikeBuilderTest.php @@ -6,16 +6,14 @@ use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\Builder\LikeConditionBuilder; -use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; +use Yiisoft\Db\QueryBuilder\Condition\Builder\LikeBuilder; +use Yiisoft\Db\QueryBuilder\Condition\Like; use Yiisoft\Db\Tests\Support\TestTrait; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class LikeConditionBuilderTest extends TestCase +final class LikeBuilderTest extends TestCase { use TestTrait; @@ -23,11 +21,11 @@ public function testOperatorException(): void { $db = $this->getConnection(); - $likeCondition = new LikeCondition('column', 'invalid', 'value'); + $likeCondition = new Like('column', 'invalid', 'value'); $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Invalid operator in like condition: "INVALID"'); - (new LikeConditionBuilder($db->getQueryBuilder()))->build($likeCondition); + (new LikeBuilder($db->getQueryBuilder()))->build($likeCondition); } } diff --git a/tests/Db/QueryBuilder/Condition/HashConditionTest.php b/tests/Db/QueryBuilder/Condition/ColumnsTest.php similarity index 50% rename from tests/Db/QueryBuilder/Condition/HashConditionTest.php rename to tests/Db/QueryBuilder/Condition/ColumnsTest.php index 0c2a6447a..646e602e9 100644 --- a/tests/Db/QueryBuilder/Condition/HashConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/ColumnsTest.php @@ -5,26 +5,24 @@ namespace Yiisoft\Db\Tests\Db\QueryBuilder\Condition; use PHPUnit\Framework\TestCase; -use Yiisoft\Db\QueryBuilder\Condition\HashCondition; +use Yiisoft\Db\QueryBuilder\Condition\Columns; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class HashConditionTest extends TestCase +final class ColumnsTest extends TestCase { public function testConstructor(): void { - $hashCondition = new HashCondition(['expired' => false, 'active' => true]); + $condition = new Columns(['expired' => false, 'active' => true]); - $this->assertSame(['expired' => false, 'active' => true], $hashCondition->hash); + $this->assertSame(['expired' => false, 'active' => true], $condition->values); } public function testFromArrayDefinition(): void { - $hashCondition = HashCondition::fromArrayDefinition('AND', ['expired' => false, 'active' => true]); + $condition = Columns::fromArrayDefinition('AND', ['expired' => false, 'active' => true]); - $this->assertSame(['expired' => false, 'active' => true], $hashCondition->hash); + $this->assertSame(['expired' => false, 'active' => true], $condition->values); } } diff --git a/tests/Db/QueryBuilder/Condition/ExistsConditionTest.php b/tests/Db/QueryBuilder/Condition/ExistsTest.php similarity index 76% rename from tests/Db/QueryBuilder/Condition/ExistsConditionTest.php rename to tests/Db/QueryBuilder/Condition/ExistsTest.php index 6087c0c92..7e6f559d5 100644 --- a/tests/Db/QueryBuilder/Condition/ExistsConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/ExistsTest.php @@ -8,14 +8,12 @@ use Yiisoft\Db\Connection\ConnectionInterface; use InvalidArgumentException; use Yiisoft\Db\Query\Query; -use Yiisoft\Db\QueryBuilder\Condition\ExistsCondition; +use Yiisoft\Db\QueryBuilder\Condition\Exists; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class ExistsConditionTest extends TestCase +final class ExistsTest extends TestCase { public function testConstructor(): void { @@ -23,7 +21,7 @@ public function testConstructor(): void ->select('id') ->from('users') ->where(['active' => 1]); - $existCondition = new ExistsCondition('EXISTS', $query); + $existCondition = new Exists('EXISTS', $query); $this->assertSame('EXISTS', $existCondition->operator); $this->assertSame($query, $existCondition->query); @@ -35,7 +33,7 @@ public function testFromArrayDefinition(): void ->select('id') ->from('users') ->where(['active' => 1]); - $existCondition = ExistsCondition::fromArrayDefinition('EXISTS', [$query]); + $existCondition = Exists::fromArrayDefinition('EXISTS', [$query]); $this->assertSame('EXISTS', $existCondition->operator); $this->assertSame($query, $existCondition->query); @@ -46,6 +44,6 @@ public function testFromArrayDefinitionExceptionQuery(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Sub query for EXISTS operator must be a Query object.'); - ExistsCondition::fromArrayDefinition('EXISTS', []); + Exists::fromArrayDefinition('EXISTS', []); } } diff --git a/tests/Db/QueryBuilder/Condition/InConditionTest.php b/tests/Db/QueryBuilder/Condition/InTest.php similarity index 74% rename from tests/Db/QueryBuilder/Condition/InConditionTest.php rename to tests/Db/QueryBuilder/Condition/InTest.php index 8e2c9541a..cd51a3f7a 100644 --- a/tests/Db/QueryBuilder/Condition/InConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/InTest.php @@ -6,18 +6,16 @@ use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\InCondition; +use Yiisoft\Db\QueryBuilder\Condition\In; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class InConditionTest extends TestCase +final class InTest extends TestCase { public function testConstructor(): void { - $inCondition = new InCondition('id', 'IN', [1, 2, 3]); + $inCondition = new In('id', 'IN', [1, 2, 3]); $this->assertSame('id', $inCondition->column); $this->assertSame('IN', $inCondition->operator); @@ -26,7 +24,7 @@ public function testConstructor(): void public function testFromArrayDefinition(): void { - $inCondition = InCondition::fromArrayDefinition('IN', ['id', [1, 2, 3]]); + $inCondition = In::fromArrayDefinition('IN', ['id', [1, 2, 3]]); $this->assertSame('id', $inCondition->column); $this->assertSame('IN', $inCondition->operator); @@ -38,7 +36,7 @@ public function testFromArrayDefinitionException(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'IN' requires two operands."); - InCondition::fromArrayDefinition('IN', []); + In::fromArrayDefinition('IN', []); } public function testFromArrayDefinitionExceptionColumn(): void @@ -46,7 +44,7 @@ public function testFromArrayDefinitionExceptionColumn(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'IN' requires column to be string, array or Iterator."); - InCondition::fromArrayDefinition('IN', [1, [1, 2, 3]]); + In::fromArrayDefinition('IN', [1, [1, 2, 3]]); } public function testFromArrayDefinitionExceptionValues(): void @@ -56,6 +54,6 @@ public function testFromArrayDefinitionExceptionValues(): void "Operator 'IN' requires values to be array, Iterator, int or QueryInterface." ); - InCondition::fromArrayDefinition('IN', ['id', false]); + In::fromArrayDefinition('IN', ['id', false]); } } diff --git a/tests/Db/QueryBuilder/Condition/LikeConditionTest.php b/tests/Db/QueryBuilder/Condition/LikeTest.php similarity index 77% rename from tests/Db/QueryBuilder/Condition/LikeConditionTest.php rename to tests/Db/QueryBuilder/Condition/LikeTest.php index f3fc63974..fe20bde9c 100644 --- a/tests/Db/QueryBuilder/Condition/LikeConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/LikeTest.php @@ -7,16 +7,16 @@ use PHPUnit\Framework\Attributes\TestWith; use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; +use Yiisoft\Db\QueryBuilder\Condition\Like; /** * @group db */ -final class LikeConditionTest extends TestCase +final class LikeTest extends TestCase { public function testConstructor(): void { - $likeCondition = new LikeCondition('id', 'LIKE', 'test'); + $likeCondition = new Like('id', 'LIKE', 'test'); $this->assertSame('id', $likeCondition->column); $this->assertSame('LIKE', $likeCondition->operator); @@ -26,7 +26,7 @@ public function testConstructor(): void public function testFromArrayDefinition(): void { - $likeCondition = LikeCondition::fromArrayDefinition('LIKE', ['id', 'test']); + $likeCondition = Like::fromArrayDefinition('LIKE', ['id', 'test']); $this->assertSame('id', $likeCondition->column); $this->assertSame('LIKE', $likeCondition->operator); @@ -39,7 +39,7 @@ public function testFromArrayDefinitionException(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'LIKE' requires two operands."); - LikeCondition::fromArrayDefinition('LIKE', []); + Like::fromArrayDefinition('LIKE', []); } public function testFromArrayDefinitionExceptionColumn(): void @@ -47,7 +47,7 @@ public function testFromArrayDefinitionExceptionColumn(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'LIKE' requires column to be string or ExpressionInterface."); - LikeCondition::fromArrayDefinition('LIKE', [false, 'test']); + Like::fromArrayDefinition('LIKE', [false, 'test']); } public function testFromArrayDefinitionExceptionValue(): void @@ -57,12 +57,12 @@ public function testFromArrayDefinitionExceptionValue(): void "Operator 'LIKE' requires value to be string, array, Iterator or ExpressionInterface." ); - LikeCondition::fromArrayDefinition('LIKE', ['id', false]); + Like::fromArrayDefinition('LIKE', ['id', false]); } public function testFromArrayDefinitionSetEscapingReplacements(): void { - $likeCondition = LikeCondition::fromArrayDefinition('LIKE', ['id', 'test', ['%' => '\%', '_' => '\_']]); + $likeCondition = Like::fromArrayDefinition('LIKE', ['id', 'test', ['%' => '\%', '_' => '\_']]); $this->assertSame('id', $likeCondition->column); $this->assertSame('LIKE', $likeCondition->operator); @@ -72,7 +72,7 @@ public function testFromArrayDefinitionSetEscapingReplacements(): void public function testSetEscapingReplacements(): void { - $likeCondition = new LikeCondition('id', 'LIKE', 'test'); + $likeCondition = new Like('id', 'LIKE', 'test'); $likeCondition->setEscapingReplacements(['%' => '\%', '_' => '\_']); $this->assertSame(['%' => '\%', '_' => '\_'], $likeCondition->getEscapingReplacements()); @@ -83,7 +83,7 @@ public function testSetEscapingReplacements(): void #[TestWith([false])] public function testFromArrayDefinitionCaseSensitive(?bool $caseSensitive): void { - $likeCondition = LikeCondition::fromArrayDefinition('LIKE', ['id', 'test', 'caseSensitive' => $caseSensitive]); + $likeCondition = Like::fromArrayDefinition('LIKE', ['id', 'test', 'caseSensitive' => $caseSensitive]); $this->assertSame('id', $likeCondition->column); $this->assertSame('LIKE', $likeCondition->operator); diff --git a/tests/Db/QueryBuilder/Condition/NotConditionTest.php b/tests/Db/QueryBuilder/Condition/NotTest.php similarity index 70% rename from tests/Db/QueryBuilder/Condition/NotConditionTest.php rename to tests/Db/QueryBuilder/Condition/NotTest.php index 40da90175..9e5af339c 100644 --- a/tests/Db/QueryBuilder/Condition/NotConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/NotTest.php @@ -6,25 +6,23 @@ use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\NotCondition; +use Yiisoft\Db\QueryBuilder\Condition\Not; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class NotConditionTest extends TestCase +final class NotTest extends TestCase { public function testConstructor(): void { - $notCondition = new NotCondition('id = 1'); + $notCondition = new Not('id = 1'); $this->assertSame('id = 1', $notCondition->condition); } public function testFromArrayDefinition(): void { - $notCondition = NotCondition::fromArrayDefinition('NOT', ['id = 1']); + $notCondition = Not::fromArrayDefinition('NOT', ['id = 1']); $this->assertSame('id = 1', $notCondition->condition); } @@ -34,7 +32,7 @@ public function testFromArrayDefinitionException(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'NOT' requires exactly one operand."); - NotCondition::fromArrayDefinition('NOT', []); + Not::fromArrayDefinition('NOT', []); } public function testFromArrayDefinitionExceptionCondition(): void @@ -44,6 +42,6 @@ public function testFromArrayDefinitionExceptionCondition(): void "Operator 'NOT' requires condition to be array, string, null or ExpressionInterface." ); - NotCondition::fromArrayDefinition('NOT', [false]); + Not::fromArrayDefinition('NOT', [false]); } } diff --git a/tests/Db/QueryBuilder/Condition/SimpleConditionTest.php b/tests/Db/QueryBuilder/Condition/SimpleTest.php similarity index 71% rename from tests/Db/QueryBuilder/Condition/SimpleConditionTest.php rename to tests/Db/QueryBuilder/Condition/SimpleTest.php index fa5e5990e..579db2aca 100644 --- a/tests/Db/QueryBuilder/Condition/SimpleConditionTest.php +++ b/tests/Db/QueryBuilder/Condition/SimpleTest.php @@ -6,18 +6,16 @@ use PHPUnit\Framework\TestCase; use InvalidArgumentException; -use Yiisoft\Db\QueryBuilder\Condition\SimpleCondition; +use Yiisoft\Db\QueryBuilder\Condition\Simple; /** * @group db - * - * @psalm-suppress PropertyNotSetInConstructor */ -final class SimpleConditionTest extends TestCase +final class SimpleTest extends TestCase { public function testConstructor(): void { - $simpleCondition = new SimpleCondition('id', '=', 1); + $simpleCondition = new Simple('id', '=', 1); $this->assertSame('id', $simpleCondition->column); $this->assertSame('=', $simpleCondition->operator); @@ -26,7 +24,7 @@ public function testConstructor(): void public function testFromArrayDefinition(): void { - $simpleCondition = SimpleCondition::fromArrayDefinition('=', ['id', 1]); + $simpleCondition = Simple::fromArrayDefinition('=', ['id', 1]); $this->assertSame('id', $simpleCondition->column); $this->assertSame('=', $simpleCondition->operator); @@ -38,7 +36,7 @@ public function testFromArrayDefinitionColumnException(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator '=' requires two operands."); - SimpleCondition::fromArrayDefinition('=', []); + Simple::fromArrayDefinition('=', []); } public function testFromArrayDefinitionValueException(): void @@ -46,7 +44,7 @@ public function testFromArrayDefinitionValueException(): void $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Operator 'IN' requires two operands."); - SimpleCondition::fromArrayDefinition('IN', ['column']); + Simple::fromArrayDefinition('IN', ['column']); } public function testFromArrayDefinitionExceptionColumn(): void @@ -56,16 +54,16 @@ public function testFromArrayDefinitionExceptionColumn(): void "Operator '=' requires column to be string or ExpressionInterface." ); - SimpleCondition::fromArrayDefinition('=', [1, 1]); + Simple::fromArrayDefinition('=', [1, 1]); } public function testNullSecondOperand(): void { - $condition = SimpleCondition::fromArrayDefinition('=', ['id', null]); + $condition = Simple::fromArrayDefinition('=', ['id', null]); $this->assertNull($condition->value); - $condition2 = new SimpleCondition('name', 'IS NOT', null); + $condition2 = new Simple('name', 'IS NOT', null); $this->assertSame('IS NOT', $condition2->operator); $this->assertNull($condition2->value); diff --git a/tests/Provider/QueryBuilderProvider.php b/tests/Provider/QueryBuilderProvider.php index 877f0fc44..503dec90c 100644 --- a/tests/Provider/QueryBuilderProvider.php +++ b/tests/Provider/QueryBuilderProvider.php @@ -16,9 +16,9 @@ use Yiisoft\Db\Expression\Expression; use Yiisoft\Db\Expression\JsonExpression; use Yiisoft\Db\Query\Query; -use Yiisoft\Db\QueryBuilder\Condition\BetweenColumnsCondition; -use Yiisoft\Db\QueryBuilder\Condition\InCondition; -use Yiisoft\Db\QueryBuilder\Condition\LikeCondition; +use Yiisoft\Db\QueryBuilder\Condition\BetweenColumns; +use Yiisoft\Db\QueryBuilder\Condition\In; +use Yiisoft\Db\QueryBuilder\Condition\Like; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; use Yiisoft\Db\Schema\Column\ColumnBuilder; use Yiisoft\Db\Tests\Support\Assert; @@ -347,27 +347,27 @@ public static function buildCondition(): array [':qp0' => 123], ], [ - new BetweenColumnsCondition('2018-02-11', 'BETWEEN', 'create_time', 'update_time'), + new BetweenColumns('2018-02-11', 'BETWEEN', 'create_time', 'update_time'), ':qp0 BETWEEN [[create_time]] AND [[update_time]]', [':qp0' => '2018-02-11'], ], [ - new BetweenColumnsCondition('2018-02-11', 'NOT BETWEEN', 'NOW()', 'update_time'), + new BetweenColumns('2018-02-11', 'NOT BETWEEN', 'NOW()', 'update_time'), ':qp0 NOT BETWEEN NOW() AND [[update_time]]', [':qp0' => '2018-02-11'], ], [ - new BetweenColumnsCondition(new Expression('NOW()'), 'BETWEEN', 'create_time', 'update_time'), + new BetweenColumns(new Expression('NOW()'), 'BETWEEN', 'create_time', 'update_time'), 'NOW() BETWEEN [[create_time]] AND [[update_time]]', [], ], [ - new BetweenColumnsCondition(new Expression('NOW()'), 'NOT BETWEEN', 'create_time', 'update_time'), + new BetweenColumns(new Expression('NOW()'), 'NOT BETWEEN', 'create_time', 'update_time'), 'NOW() NOT BETWEEN [[create_time]] AND [[update_time]]', [], ], [ - new BetweenColumnsCondition( + new BetweenColumns( new Expression('NOW()'), 'NOT BETWEEN', (new Query(static::getDb()))->select('min_date')->from('some_table'), @@ -377,7 +377,7 @@ public static function buildCondition(): array [], ], [ - new BetweenColumnsCondition( + new BetweenColumns( new Expression('NOW()'), 'NOT BETWEEN', new Expression('min_date'), @@ -489,17 +489,17 @@ public static function buildCondition(): array ], /* in object conditions */ - [new InCondition('id', 'in', 1), '[[id]]=:qp0', [':qp0' => 1]], - [new InCondition('id', 'in', [1]), '[[id]]=:qp0', [':qp0' => 1]], - [new InCondition('id', 'not in', 1), '[[id]]<>:qp0', [':qp0' => 1]], - [new InCondition('id', 'not in', [1]), '[[id]]<>:qp0', [':qp0' => 1]], - [new InCondition('id', 'in', [1, 2]), '[[id]] IN (:qp0, :qp1)', [':qp0' => 1, ':qp1' => 2]], - [new InCondition('id', 'not in', [1, 2]), '[[id]] NOT IN (:qp0, :qp1)', [':qp0' => 1, ':qp1' => 2]], - [new InCondition([], 'in', 1), '0=1', []], - [new InCondition([], 'in', [1]), '0=1', []], - 'inCondition-custom-1' => [new InCondition(['id', 'name'], 'in', []), '0=1', []], + [new In('id', 'in', 1), '[[id]]=:qp0', [':qp0' => 1]], + [new In('id', 'in', [1]), '[[id]]=:qp0', [':qp0' => 1]], + [new In('id', 'not in', 1), '[[id]]<>:qp0', [':qp0' => 1]], + [new In('id', 'not in', [1]), '[[id]]<>:qp0', [':qp0' => 1]], + [new In('id', 'in', [1, 2]), '[[id]] IN (:qp0, :qp1)', [':qp0' => 1, ':qp1' => 2]], + [new In('id', 'not in', [1, 2]), '[[id]] NOT IN (:qp0, :qp1)', [':qp0' => 1, ':qp1' => 2]], + [new In([], 'in', 1), '0=1', []], + [new In([], 'in', [1]), '0=1', []], + 'inCondition-custom-1' => [new In(['id', 'name'], 'in', []), '0=1', []], 'inCondition-custom-2' => [ - new InCondition( + new In( ['id'], 'in', (new Query(static::getDb()))->select('id')->from('users')->where(['active' => 1]), @@ -508,22 +508,22 @@ public static function buildCondition(): array [], ], 'inCondition-custom-3' => [ - new InCondition(['id', 'name'], 'in', [['id' => 1]]), + new In(['id', 'name'], 'in', [['id' => 1]]), '([[id]], [[name]]) IN ((:qp0, NULL))', [':qp0' => 1], ], 'inCondition-custom-4' => [ - new InCondition(['id', 'name'], 'in', [['name' => 'John Doe']]), + new In(['id', 'name'], 'in', [['name' => 'John Doe']]), '([[id]], [[name]]) IN ((NULL, :qp0))', [':qp0' => 'John Doe'], ], 'inCondition-custom-5' => [ - new InCondition(['id', 'name'], 'in', [['id' => 1, 'name' => 'John Doe']]), + new In(['id', 'name'], 'in', [['id' => 1, 'name' => 'John Doe']]), '([[id]], [[name]]) IN ((:qp0, :qp1))', [':qp0' => 1, ':qp1' => 'John Doe'], ], 'inCondition-custom-6' => [ - new InCondition( + new In( [new Expression('id')], 'in', (new Query(static::getDb()))->select('id')->from('users')->where(['active' => 1]), @@ -590,7 +590,7 @@ public static function buildCondition(): array [':qp0' => 0], ], - /* hash condition */ + /* columns */ [['a' => 1, 'b' => 2], '([[a]]=1) AND ([[b]]=2)', []], [ ['a' => new Expression('CONCAT(col1, col2)'), 'b' => 2], @@ -832,41 +832,41 @@ public static function buildLikeCondition(): array /* like object conditions */ [ - new LikeCondition('name', 'like', new Expression('CONCAT("test", name, "%")')), + new Like('name', 'like', new Expression('CONCAT("test", name, "%")')), '[[name]] LIKE CONCAT("test", name, "%")', [], ], [ - new LikeCondition('name', 'not like', new Expression('CONCAT("test", name, "%")')), + new Like('name', 'not like', new Expression('CONCAT("test", name, "%")')), '[[name]] NOT LIKE CONCAT("test", name, "%")', [], ], [ - new LikeCondition('name', 'or like', new Expression('CONCAT("test", name, "%")')), + new Like('name', 'or like', new Expression('CONCAT("test", name, "%")')), '[[name]] LIKE CONCAT("test", name, "%")', [], ], [ - new LikeCondition('name', 'or not like', new Expression('CONCAT("test", name, "%")')), + new Like('name', 'or not like', new Expression('CONCAT("test", name, "%")')), '[[name]] NOT LIKE CONCAT("test", name, "%")', [], ], [ - new LikeCondition('name', 'like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), + new Like('name', 'like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), '[[name]] LIKE CONCAT("test", name, "%") AND [[name]] LIKE :qp0', [':qp0' => new Param('%\\\ab\_c%', DataType::STRING)], ], [ - new LikeCondition('name', 'not like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), + new Like('name', 'not like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), '[[name]] NOT LIKE CONCAT("test", name, "%") AND [[name]] NOT LIKE :qp0', [':qp0' => new Param('%\\\ab\_c%', DataType::STRING)], ], [ - new LikeCondition('name', 'or like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), + new Like('name', 'or like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), '[[name]] LIKE CONCAT("test", name, "%") OR [[name]] LIKE :qp0', [':qp0' => new Param('%\\\ab\_c%', DataType::STRING)], ], [ - new LikeCondition('name', 'or not like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), + new Like('name', 'or not like', [new Expression('CONCAT("test", name, "%")'), '\ab_c']), '[[name]] NOT LIKE CONCAT("test", name, "%") OR [[name]] NOT LIKE :qp0', [':qp0' => new Param('%\\\ab\_c%', DataType::STRING)], ],