SimpleConditionBuilder::build()   A
last analyzed

Complexity

Conditions 5
Paths 9

Size

Total Lines 24
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

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