• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lampager / lampager-doctrine2 / 14417254879

12 Apr 2025 06:58AM UTC coverage: 96.552% (-1.7%) from 98.214%
14417254879

push

github

web-flow
chore: 🤖 Bump version (#6)

56 of 58 relevant lines covered (96.55%)

75.41 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.55
/src/Compiler.php
1
<?php
2

3
namespace Lampager\Doctrine2;
4

5
use Doctrine\ORM\Query\Expr\Comparison;
6
use Doctrine\ORM\QueryBuilder;
7
use Lampager\Query\Select;
8
use Lampager\Query\SelectOrUnionAll;
9
use Lampager\Query\UnionAll;
10

11
class Compiler
12
{
13
    /**
14
     * @var bool
15
     */
16
    protected $aggregated;
17

18
    /**
19
     * Compiler constructor.
20
     *
21
     * @param bool $aggregated
22
     */
23
    public function __construct($aggregated = false)
24
    {
25
        $this->aggregated = $aggregated;
108✔
26
    }
27

28
    /**
29
     * Convert: Lampager Query -> Doctrine Query Builder
30
     *
31
     * @return QueryBuilder
32
     */
33
    public function compile(QueryBuilder $builder, SelectOrUnionAll $selectOrUnionAll)
34
    {
35
        if ($selectOrUnionAll instanceof Select) {
108✔
36
            return $this->compileSelect($builder, $selectOrUnionAll);
108✔
37
        }
38

39
        // @codeCoverageIgnoreStart
40
        if ($selectOrUnionAll instanceof UnionAll) {
41
            throw new \LogicException('Currently seekable pagination is not supported');
42
        }
43
        throw new \LogicException('Unreachable here');
44
        // @codeCoverageIgnoreEnd
45
    }
46

47
    /**
48
     * @return QueryBuilder
49
     */
50
    protected function compileSelect(QueryBuilder $builder, Select $select)
51
    {
52
        $this
108✔
53
            ->compileWhere($builder, $select)
108✔
54
            ->compileOrderBy($builder, $select)
108✔
55
            ->compileLimit($builder, $select);
108✔
56

57
        return $builder;
108✔
58
    }
59

60
    /**
61
     * @return $this
62
     */
63
    protected function compileWhere(QueryBuilder $builder, Select $select)
64
    {
65
        $orX = [];
108✔
66
        $bindingCount = 0;
108✔
67

68
        foreach ($select->where() as $group) {
108✔
69
            $andX = [];
54✔
70

71
            foreach ($group as $condition) {
54✔
72
                $key = 'lampager_parameter_' . ++$bindingCount;
54✔
73
                $andX[] = new Comparison($condition->left(), $condition->comparator(), ":$key");
54✔
74
                $builder->setParameter($key, $condition->right());
54✔
75
            }
76

77
            if ($andX) {
54✔
78
                $orX[] = $builder->expr()->andX(...$andX);
54✔
79
            }
80
        }
81

82
        if ($orX) {
108✔
83
            $this->aggregated
54✔
84
                ? $builder->andHaving($builder->expr()->orX(...$orX))
×
85
                : $builder->andWhere($builder->expr()->orX(...$orX));
54✔
86
        }
87

88
        return $this;
108✔
89
    }
90

91
    /**
92
     * @return $this
93
     */
94
    protected function compileOrderBy(QueryBuilder $builder, Select $select)
95
    {
96
        $builder->resetDQLPart('orderBy');
108✔
97

98
        foreach ($select->orders() as $order) {
108✔
99
            $builder->addOrderBy(...$order->toArray());
108✔
100
        }
101

102
        return $this;
108✔
103
    }
104

105
    /**
106
     * @return $this
107
     */
108
    protected function compileLimit(QueryBuilder $builder, Select $select)
109
    {
110
        $builder->setMaxResults($select->limit()->toInteger());
108✔
111

112
        return $this;
108✔
113
    }
114
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc