0 follower

Final Class Yiisoft\Db\Sqlite\Builder\InBuilder

InheritanceYiisoft\Db\Sqlite\Builder\InBuilder » Yiisoft\Db\QueryBuilder\Condition\Builder\InBuilder

Build an object of {@see \Yiisoft\Db\QueryBuilder\Condition\In} into SQL expressions for SQLite Server.

Protected Methods

Hide inherited methods

Method Description Defined By
buildCompositeInCondition() Builds SQL for IN condition. Yiisoft\Db\Sqlite\Builder\InBuilder
buildSubqueryInCondition() Builds SQL for IN condition. Yiisoft\Db\Sqlite\Builder\InBuilder

Method Details

Hide inherited methods

buildCompositeInCondition() protected method

Builds SQL for IN condition.

protected string buildCompositeInCondition ( string|null $operator, iterable $columns, iterable|Iterator $values, array &$params = [] )
$operator string|null
$columns iterable
$values iterable|Iterator
$params array
throws \Yiisoft\Db\Exception\Exception
throws InvalidArgumentException
throws \Yiisoft\Db\Exception\InvalidConfigException
throws \Yiisoft\Db\Exception\NotSupportedException

                protected function buildCompositeInCondition(
    ?string $operator,
    iterable $columns,
    iterable|Iterator $values,
    array &$params = [],
): string {
    $quotedColumns = [];
    /** @psalm-var string[] $columns */
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            $quotedColumns[$i] = $this->queryBuilder->buildExpression($column);
            continue;
        }
        $quotedColumns[$i] = !str_contains($column, '(')
            ? $this->queryBuilder->getQuoter()->quoteColumnName($column) : $column;
    }
    $vss = [];
    /** @psalm-var string[][] $values */
    foreach ($values as $value) {
        $vs = [];
        foreach ($columns as $i => $column) {
            if ($column instanceof ExpressionInterface) {
                $column = $this->queryBuilder->buildExpression($column);
            }
            if (isset($value[$column])) {
                $phName = $this->queryBuilder->bindParam($value[$column], $params);
                $vs[] = $quotedColumns[$i] . ($operator === 'IN' ? ' = ' : ' != ') . $phName;
            } else {
                $vs[] = $quotedColumns[$i] . ($operator === 'IN' ? ' IS' : ' IS NOT') . ' NULL';
            }
        }
        $vss[] = '(' . implode($operator === 'IN' ? ' AND ' : ' OR ', $vs) . ')';
    }
    return '(' . implode($operator === 'IN' ? ' OR ' : ' AND ', $vss) . ')';
}

            
buildSubqueryInCondition() protected method

Builds SQL for IN condition.

protected string buildSubqueryInCondition ( string $operator, iterable|string|Iterator $columns, \Yiisoft\Db\Expression\ExpressionInterface $values, array &$params = [] )
$operator string
$columns iterable|string|Iterator
$values \Yiisoft\Db\Expression\ExpressionInterface
$params array
throws \Yiisoft\Db\Exception\Exception
throws InvalidArgumentException
throws \Yiisoft\Db\Exception\InvalidConfigException
throws \Yiisoft\Db\Exception\NotSupportedException

                protected function buildSubqueryInCondition(
    string $operator,
    iterable|string|Iterator $columns,
    ExpressionInterface $values,
    array &$params = [],
): string {
    if (is_array($columns)) {
        throw new NotSupportedException(__METHOD__ . ' is not supported by SQLite.');
    }
    return parent::buildSubqueryInCondition($operator, $columns, $values, $params);
}