0 follower

Final Class Yiisoft\Db\Pgsql\Builder\ArrayOverlapsBuilder

InheritanceYiisoft\Db\Pgsql\Builder\ArrayOverlapsBuilder
ImplementsYiisoft\Db\Expression\ExpressionBuilderInterface

Builds expressions for {@see ArrayOverlaps} for PostgreSQL Server.

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( \Yiisoft\Db\QueryBuilder\QueryBuilderInterface $queryBuilder )
$queryBuilder \Yiisoft\Db\QueryBuilder\QueryBuilderInterface

                public function __construct(
    private readonly QueryBuilderInterface $queryBuilder,
) {}

            
build() public method

Build SQL for {@see ArrayOverlaps}.

public string build ( \Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps $expression, array &$params = [] )
$expression \Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps

The {@see \Yiisoft\Db\QueryBuilder\Condition\ArrayOverlaps} to be built.

$params array

                public function build(ExpressionInterface $expression, array &$params = []): string
{
    $column = $expression->column instanceof ExpressionInterface
        ? $this->queryBuilder->buildExpression($expression->column)
        : $this->queryBuilder->getQuoter()->quoteColumnName($expression->column);
    $values = $expression->values;
    if (!$values instanceof ExpressionInterface) {
        $values = new ArrayValue($values);
    } elseif ($values instanceof JsonValue) {
        /** @psalm-suppress MixedArgument */
        $values = new ArrayValue($values->value);
    }
    $values = $this->queryBuilder->buildExpression($values, $params);
    if (preg_match('/::\w+\[]$/', $values, $matches) === 1) {
        $typeHint = $matches[0];
        return "$column$typeHint && $values";
    }
    return "$column::text[] && $values::text[]";
}