summaryrefslogtreecommitdiff
path: root/vendor/doctrine/collections/src/ExpressionBuilder.php
blob: fc25e3a9dd11113ee44f8e4b995443414112e912 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php

declare(strict_types=1);

namespace Doctrine\Common\Collections;

use Doctrine\Common\Collections\Expr\Comparison;
use Doctrine\Common\Collections\Expr\CompositeExpression;
use Doctrine\Common\Collections\Expr\Expression;
use Doctrine\Common\Collections\Expr\Value;

/**
 * Builder for Expressions in the {@link Selectable} interface.
 *
 * Important Notice for interoperable code: You have to use scalar
 * values only for comparisons, otherwise the behavior of the comparison
 * may be different between implementations (Array vs ORM vs ODM).
 */
class ExpressionBuilder
{
    /** @return CompositeExpression */
    public function andX(Expression ...$expressions)
    {
        return new CompositeExpression(CompositeExpression::TYPE_AND, $expressions);
    }

    /** @return CompositeExpression */
    public function orX(Expression ...$expressions)
    {
        return new CompositeExpression(CompositeExpression::TYPE_OR, $expressions);
    }

    public function not(Expression $expression): CompositeExpression
    {
        return new CompositeExpression(CompositeExpression::TYPE_NOT, [$expression]);
    }

    /** @return Comparison */
    public function eq(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::EQ, new Value($value));
    }

    /** @return Comparison */
    public function gt(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::GT, new Value($value));
    }

    /** @return Comparison */
    public function lt(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::LT, new Value($value));
    }

    /** @return Comparison */
    public function gte(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::GTE, new Value($value));
    }

    /** @return Comparison */
    public function lte(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::LTE, new Value($value));
    }

    /** @return Comparison */
    public function neq(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::NEQ, new Value($value));
    }

    /** @return Comparison */
    public function isNull(string $field)
    {
        return new Comparison($field, Comparison::EQ, new Value(null));
    }

    /**
     * @param mixed[] $values
     *
     * @return Comparison
     */
    public function in(string $field, array $values)
    {
        return new Comparison($field, Comparison::IN, new Value($values));
    }

    /**
     * @param mixed[] $values
     *
     * @return Comparison
     */
    public function notIn(string $field, array $values)
    {
        return new Comparison($field, Comparison::NIN, new Value($values));
    }

    /** @return Comparison */
    public function contains(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::CONTAINS, new Value($value));
    }

    /** @return Comparison */
    public function memberOf(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::MEMBER_OF, new Value($value));
    }

    /** @return Comparison */
    public function startsWith(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::STARTS_WITH, new Value($value));
    }

    /** @return Comparison */
    public function endsWith(string $field, mixed $value)
    {
        return new Comparison($field, Comparison::ENDS_WITH, new Value($value));
    }
}