WhereTokenCollection::getOppositeOperation()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 2
eloc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Hgraca\MicroDbal\Crud\QueryBuilder\Sql;
4
5
final class WhereTokenCollection
6
{
7
    const OPERATION_AND = 'AND';
8
    const OPERATION_OR = 'OR';
9
10
    /** @var WhereToken[] */
11
    private $collection;
12
13
    /** @var int */
14
    private $bindingCounter = 0;
15
16
    /**
17
     * @var string
18
     */
19
    private $operation;
20
21 17
    public function __construct(
22
        array $filter,
23
        string $operation = self::OPERATION_AND,
24
        string $defaultColumn = null,
25
        int &$bindingCounter = 0
26
    ) {
27 17
        $this->operation = $operation;
28 17
        $this->bindingCounter = &$bindingCounter;
29
30 17
        foreach($filter as $column => $value) {
31 17
            $this->collection[] = is_array($value)
32 8
                ? new WhereToken(
33
                    $column,
34 8
                    new WhereTokenCollection(
35
                        $value,
36 8
                        $this->getOppositeOperation($operation),
37 8
                        is_string($column) ? $column : $defaultColumn,
38 8
                        $this->bindingCounter
39
                    )
40
                )
41 17
                : new WhereToken(is_string($column) ? $column : $defaultColumn, $value, $this->bindingCounter++);
42
        };
43 17
    }
44
45 15
    public function toString(): string
46
    {
47 15
        $whereStringTokens = [];
48
49 15
        foreach ($this->collection as $whereToken) {
50 15
            $whereStringTokens[] = $whereToken->toString();
51
        }
52
53 15
        return implode(' ' . $this->operation . ' ', $whereStringTokens);
54
    }
55
56 12
    public function getBindingsList(): array
57
    {
58 12
        $bindingsList = [];
59
60 12
        foreach ($this->collection as $whereToken) {
61 12
            $bindingsList[] = $whereToken->getBinding();
62
        }
63
64 12
        return array_merge(...$bindingsList);
65
    }
66
67 8
    private function getOppositeOperation(string $operation): string
68
    {
69 8
        return $operation === self::OPERATION_AND ? self::OPERATION_OR : self::OPERATION_AND;
70
    }
71
}
72