0 follower

Final Class Yiisoft\Db\Mssql\Builder\GreatestBuilder

InheritanceYiisoft\Db\Mssql\Builder\GreatestBuilder » Yiisoft\Db\Expression\Function\Builder\MultiOperandFunctionBuilder

Builds SQL GREATEST() function expressions for {@see Greatest} objects.

Protected Methods

Hide inherited methods

Method Description Defined By
buildFromExpression() Builds a SQL GREATEST() function expression from the given {@see Greatest} object. Yiisoft\Db\Mssql\Builder\GreatestBuilder

Method Details

Hide inherited methods

buildFromExpression() protected method

Builds a SQL GREATEST() function expression from the given {@see Greatest} object.

protected string buildFromExpression ( \Yiisoft\Db\Expression\Function\Greatest $expression, array &$params )
$expression \Yiisoft\Db\Expression\Function\Greatest

The expression to build.

$params array

The parameters to bind.

return string

The SQL GREATEST() function expression.

                protected function buildFromExpression(MultiOperandFunction $expression, array &$params): string
{
    $serverVersion = $this->queryBuilder->getServerInfo()->getVersion();
    if (version_compare($serverVersion, '16', '<')) {
        $builtSelects = [];
        foreach ($expression->getOperands() as $operand) {
            $builtSelects[] = 'SELECT ' . $this->buildOperand($operand, $params) . ' AS value';
        }
        $unions = implode(' UNION ', $builtSelects);
        return "(SELECT MAX(value) FROM ($unions) AS t)";
    }
    $builtOperands = [];
    foreach ($expression->getOperands() as $operand) {
        $builtOperands[] = $this->buildOperand($operand, $params);
    }
    return 'GREATEST(' . implode(', ', $builtOperands) . ')';
}