Final Class Yiisoft\Db\Sqlite\Builder\InBuilder
| Inheritance | Yiisoft\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
| 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
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) . ')';
}
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);
}
Signup or Login in order to comment.