PostgresParser::comparison()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 1
eloc 6
nc 1
nop 3
1
<?php
2
3
namespace Borobudur\Cqrs\ReadModel\Storage\Pdo\Parser;
4
5
/**
6
 * @author      Iqbal Maulana <[email protected]>
7
 * @created     4/18/16
8
 */
9
class PostgresParser extends DefaultParser
10
{
11
    /**
12
     * {@inheritdoc}
13
     */
14
    public function comparison($field, $comparison, $value)
15
    {
16
        return sprintf(
17
            '%s %s %s',
18
            $this->transformField($comparison, $this->quote . $field . $this->quote),
19
            $this->transformComparison($comparison, $value),
20
            $this->normalizeValue($value)
21
        );
22
    }
23
24
    /**
25
     * @param string $comparison
26
     * @param mixed  $value
27
     *
28
     * @return string
29
     */
30
    protected function transformComparison($comparison, $value)
31
    {
32
        $comparison = parent::transformComparison($comparison, $value);
33
        switch (strtoupper($comparison)) {
34
            case 'LIKE':
35
                return 'ILIKE';
36
            case 'NOT LIKE':
37
                return 'NOT ILIKE';
38
        }
39
40
        return $comparison;
41
    }
42
43
    /**
44
     * @param string $comparison
45
     * @param string $field
46
     *
47
     * @return string
48
     */
49
    protected function transformField($comparison, $field)
50
    {
51
        switch (strtoupper($comparison)) {
52
            case 'LIKE':
53
            case 'NOT LIKE':
54
            case 'ILIKE':
55
            case 'NOT ILIKE':
56
                return sprintf('cast(%s as varchar)', $field);
57
        }
58
59
        return $field;
60
    }
61
}
62