LookupCollection   A
last analyzed

Complexity

Total Complexity 18

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 39
dl 0
loc 72
rs 10
c 0
b 0
f 0
wmc 18

2 Methods

Rating   Name   Duplication   Size   Complexity  
C process() 0 50 16
A has() 0 11 2
1
<?php
2
3
namespace Tsukasa\QueryBuilder\Database\Pgsql;
4
5
use Tsukasa\QueryBuilder\BaseLookupCollection;
6
use Tsukasa\QueryBuilder\Interfaces\IAdapter;
7
8
class LookupCollection extends BaseLookupCollection
9
{
10
    public function has($lookup)
11
    {
12
        $lookups = [
13
            'regex', 'iregex', 'second', 'year', 'minute',
14
            'hour', 'day', 'month', 'week_day'
15
        ];
16
        if (in_array(strtolower($lookup), $lookups, true)) {
17
            return true;
18
        }
19
20
        return parent::has($lookup);
21
    }
22
    
23
    /**
24
     * @param IAdapter $adapter
25
     * @param $lookup
26
     * @param $column
27
     * @param $value
28
     * @return string
29
     */
30
    public function process(IAdapter $adapter, $lookup, $column, $value)
31
    {
32
        switch (strtolower($lookup)) {
33
            case 'second':
34
                return 'EXTRACT(SECOND FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
35
36
            case 'year':
37
                return 'EXTRACT(YEAR FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
38
39
            case 'minute':
40
                return 'EXTRACT(MINUTE FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
41
42
            case 'hour':
43
                return 'EXTRACT(HOUR FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
44
45
            case 'day':
46
                return 'EXTRACT(DAY FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
47
48
            case 'month':
49
                return 'EXTRACT(MONTH FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
50
51
            case 'week_day':
52
                return 'EXTRACT(DOW FROM ' . $adapter->quoteColumn($column) . '::timestamp)=' . $adapter->quoteValue((string)$value);
53
54
            case 'regex':
55
                return $adapter->quoteColumn($column) . "~" . $adapter->quoteValue($value);
56
57
            case 'iregex':
58
                return $adapter->quoteColumn($column) . "~*" . $adapter->quoteValue($value);
59
60
            case 'contains':
61
                return $adapter->quoteColumn($column) . '::text LIKE ' . $adapter->quoteValue('%' . $value . '%');
62
63
            case 'icontains':
64
                return 'LOWER(' . $adapter->quoteColumn($column) . '::text) LIKE ' . $adapter->quoteValue('%' . mb_strtolower($value, 'UTF-8') . '%');
65
66
            case 'startswith':
67
                return $adapter->quoteColumn($column) . '::text LIKE ' . $adapter->quoteValue($value . '%');
68
69
            case 'istartswith':
70
                return 'LOWER(' . $adapter->quoteColumn($column) . '::text) LIKE ' . $adapter->quoteValue(mb_strtolower($value, 'UTF-8') . '%');
71
72
            case 'endswith':
73
                return $adapter->quoteColumn($column) . '::text LIKE ' . $adapter->quoteValue('%' . $value);
74
75
            case 'iendswith':
76
                return 'LOWER(' . $adapter->quoteColumn($column) . '::text) LIKE ' . $adapter->quoteValue('%' . mb_strtolower($value, 'UTF-8'));
77
        }
78
79
        return parent::process($adapter, $lookup, $column, $value);
80
    }
81
}