Passed
Pull Request — master (#343)
by Sergei
02:09
created

SimpleConditionBuilder::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Db\QueryBuilder\Conditions\Builder;
6
7
use Yiisoft\Db\Exception\Exception;
8
use Yiisoft\Db\Exception\InvalidArgumentException;
9
use Yiisoft\Db\Exception\InvalidConfigException;
10
use Yiisoft\Db\Exception\NotSupportedException;
11
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
12
use Yiisoft\Db\Expression\ExpressionInterface;
13
use Yiisoft\Db\QueryBuilder\Conditions\Interface\SimpleConditionInterface;
14
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;
15
16
use function str_contains;
17
18
/**
19
 * Class NotConditionBuilder builds objects of {@see SimpleCondition}.
20
 */
21
class SimpleConditionBuilder implements ExpressionBuilderInterface
22
{
23
    public function __construct(private QueryBuilderInterface $queryBuilder)
24
    {
25
    }
26
27
    /**
28
     * @throws Exception|InvalidArgumentException|InvalidConfigException|NotSupportedException
29
     */
30
    public function build(SimpleConditionInterface $expression, array &$params = []): string
31
    {
32
        $operator = $expression->getOperator();
33
        $column = $expression->getColumn();
34
        $value = $expression->getValue();
35
36
        if ($column instanceof ExpressionInterface) {
37
            $column = $this->queryBuilder->buildExpression($column, $params);
38
        } elseif (!str_contains($column, '(')) {
39
            $column = $this->queryBuilder->quoter()->quoteColumnName($column);
40
        }
41
42
        if ($value === null) {
43
            return "$column $operator NULL";
44
        }
45
46
        if ($value instanceof ExpressionInterface) {
47
            return "$column $operator {$this->queryBuilder->buildExpression($value, $params)}";
48
        }
49
50
        $phName = $this->queryBuilder->bindParam($value, $params);
51
52
        return "$column $operator $phName";
53
    }
54
}
55