Completed
Push — master ( 68be21...073c54 )
by Kévin
02:41
created

PommVisitor::visitModel()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 3
1
<?php
2
3
namespace RulerZ\Target\Pomm;
4
5
use Hoa\Ruler\Model as AST;
6
7
use RulerZ\Model;
8
use RulerZ\Target\GenericSqlVisitor;
9
10
class PommVisitor extends GenericSqlVisitor
11
{
12
    /**
13
     * {@inheritDoc}
14
     */
15
    public function visitModel(AST\Model $element, &$handle = null, $eldnah = null)
16
    {
17
        return $element->getExpression()->accept($this, $handle, $eldnah);
18
    }
19
20
    /**
21
     * {@inheritDoc}
22
     */
23
    public function visitParameter(Model\Parameter $element, &$handle = null, $eldnah = null)
24
    {
25
        $handle[] = sprintf('$parameters["%s"]', $element->getName());
26
27
        // make it a placeholder
28
        return '$*';
29
    }
30
31
    /**
32
     * {@inheritDoc}
33
     */
34
    public function visitOperator(AST\Operator $element, &$handle = null, $eldnah = null)
35
    {
36
        $parameters = [];
37
        $operator   = $element->getName();
38
        $sql        = parent::visitOperator($element, $parameters, $eldnah);
39
40
        if (in_array($operator, ['and', 'or', 'not'], true)) {
41
            return $sql;
42
        }
43
44
        if ($this->operators->hasOperator($operator)) {
45
            return sprintf('(new \PommProject\Foundation\Where(%s, [%s]))', $sql, implode(', ', $parameters));
46
        }
47
48
        return sprintf('(new \PommProject\Foundation\Where("%s", [%s]))', $sql, implode(', ', $parameters));
49
    }
50
}
51