diff --git a/src/Processor/Expression/FunctionEvaluator.php b/src/Processor/Expression/FunctionEvaluator.php index cc9acf85..60c81b6d 100644 --- a/src/Processor/Expression/FunctionEvaluator.php +++ b/src/Processor/Expression/FunctionEvaluator.php @@ -1673,7 +1673,7 @@ private static function sqlTimestampdiff( * @param array $row * @param QueryResult $result * - * @return int + * @return mixed|null * @throws ProcessorException */ private static function sqlLeast( @@ -1696,6 +1696,7 @@ private static function sqlLeast( $evaluated_args = []; foreach ($args as $arg) { + /** @var string|int|float|null $evaluated_arg */ $evaluated_arg = Evaluator::evaluate($conn, $scope, $arg, $row, $result); if (is_null($evaluated_arg)) { return null; @@ -1703,7 +1704,7 @@ private static function sqlLeast( if (is_float($evaluated_arg)) { $is_any_float = true; - $precision = max($precision, strlen(substr(strrchr(strval($evaluated_arg), "."), 1))); + $precision = max($precision, strlen(substr(strrchr((string) $evaluated_arg, "."), 1))); } $is_any_string = $is_any_string || is_string($evaluated_arg); @@ -1711,14 +1712,16 @@ private static function sqlLeast( } if ($is_any_string) { - $evaluated_str_args = array_map(fn($evaluated_arg) => strval($evaluated_arg), $evaluated_args); - return min(...$evaluated_str_args); + $evaluated_str_args = array_map(function($arg) { + return (string) $arg; + }, $evaluated_args); + return min($evaluated_str_args); } if ($is_any_float) { - return number_format(min(...$evaluated_args), $precision); + return number_format((float) min($evaluated_args), $precision); } - return min(...$evaluated_args); + return min($evaluated_args); } } diff --git a/tests/EndToEndTest.php b/tests/EndToEndTest.php index 6a5171cc..bd6118d1 100644 --- a/tests/EndToEndTest.php +++ b/tests/EndToEndTest.php @@ -1447,8 +1447,11 @@ public function testLeast($args, $expected_value): void $pdo = self::getPdo('mysql:host=localhost;dbname=testdb'); $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false); - $args_str = implode(', ', array_map(fn ($arg) => is_null($arg) ? 'null' : strval($arg), $args)); - $query = $pdo->prepare(sprintf('SELECT LEAST(%s) as result', $args_str),); + $args_str = implode(', ', array_map(function ($arg) { + return is_null($arg) ? 'null' : (string) $arg; + }, $args)); + + $query = $pdo->prepare(sprintf('SELECT LEAST(%s) as result', $args_str)); $query->execute(); $result = $query->fetch(\PDO::FETCH_ASSOC);