Passed
Branch psalm-3 (d5d890)
by Wilmer
02:56
created

BetweenColumnsCondition   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 53
rs 10
c 0
b 0
f 0
wmc 7
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Db\Query\Conditions;
6
7
use Iterator;
8
use Yiisoft\Db\Exception\InvalidArgumentException;
9
use Yiisoft\Db\Expression\ExpressionInterface;
10
use Yiisoft\Db\Query\Conditions\Interface\BetweenColumnsConditionInterface;
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_INTERFACE, expecting T_STRING or '{' on line 10 at column 32
Loading history...
11
12
/**
13
 * Class BetweenColumnCondition represents a `BETWEEN` condition where values are between two columns.
14
 *
15
 * For example:.
16
 *
17
 * ```php
18
 * new BetweenColumnsCondition(42, 'BETWEEN', 'min_value', 'max_value')
19
 * // Will be build to:
20
 * // 42 BETWEEN min_value AND max_value
21
 * ```
22
 *
23
 * And a more complex example:
24
 *
25
 * ```php
26
 * new BetweenColumnsCondition(
27
 *    new Expression('NOW()'),
28
 *    'NOT BETWEEN',
29
 *    (new Query)->select('time')->from('log')->orderBy('id ASC')->limit(1),
30
 *    'update_time'
31
 * );
32
 *
33
 * // Will be built to:
34
 * // NOW() NOT BETWEEN (SELECT time FROM log ORDER BY id ASC LIMIT 1) AND update_time
35
 * ```
36
 */
37
class BetweenColumnsCondition implements BetweenColumnsConditionInterface
38
{
39
    public function __construct(
40
        private array|int|string|Iterator|ExpressionInterface $value,
41
        private string $operator,
42
        private mixed $intervalStartColumn,
43
        private mixed $intervalEndColumn
44
    ) {
45
    }
46
47
    public function getIntervalEndColumn(): string|ExpressionInterface
48
    {
49
        return $this->intervalEndColumn;
50
    }
51
52
    public function getIntervalStartColumn(): string|ExpressionInterface
53
    {
54
        return $this->intervalStartColumn;
55
    }
56
57
    public function getOperator(): string
58
    {
59
        return $this->operator;
60
    }
61
62
    public function getValue(): array|int|string|Iterator|ExpressionInterface
63
    {
64
        return $this->value;
65
    }
66
67
    public static function fromArrayDefinition(string $operator, array $operands): self
68
    {
69
        if (!isset($operands[0], $operands[1], $operands[2])) {
70
            throw new InvalidArgumentException("Operator '$operator' requires three operands.");
71
        }
72
73
        return new static($operands[0], $operator, $operands[1], $operands[2]);
74
    }
75
}
76