Passed
Push — master ( c65027...a39d50 )
by Wilmer
18:53 queued 16:02
created

SimpleConditionBuilder::build()   A

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
 * 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
        /** @var mixed $value */
35
        $value = $expression->getValue();
36
37
        if ($column instanceof ExpressionInterface) {
38
            $column = $this->queryBuilder->buildExpression($column, $params);
39
        } elseif (!str_contains($column, '(')) {
40
            $column = $this->queryBuilder->quoter()->quoteColumnName($column);
41
        }
42
43
        if ($value === null) {
44
            return "$column $operator NULL";
45
        }
46
47
        if ($value instanceof ExpressionInterface) {
48
            return "$column $operator {$this->queryBuilder->buildExpression($value, $params)}";
49
        }
50
51
        $phName = $this->queryBuilder->bindParam($value, $params);
52
53
        return "$column $operator $phName";
54
    }
55
}
56