Skip to content

Commit 0297dd1

Browse files
authored
Merge pull request #67 from 1okey/least-psalm
Address psalm issues raised by the introduction of LEAST function
2 parents e5b28a6 + 474bf46 commit 0297dd1

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

src/Processor/Expression/FunctionEvaluator.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1673,7 +1673,7 @@ private static function sqlTimestampdiff(
16731673
* @param array<string, mixed> $row
16741674
* @param QueryResult $result
16751675
*
1676-
* @return int
1676+
* @return mixed|null
16771677
* @throws ProcessorException
16781678
*/
16791679
private static function sqlLeast(
@@ -1696,29 +1696,32 @@ private static function sqlLeast(
16961696
$evaluated_args = [];
16971697

16981698
foreach ($args as $arg) {
1699+
/** @var string|int|float|null $evaluated_arg */
16991700
$evaluated_arg = Evaluator::evaluate($conn, $scope, $arg, $row, $result);
17001701
if (is_null($evaluated_arg)) {
17011702
return null;
17021703
}
17031704

17041705
if (is_float($evaluated_arg)) {
17051706
$is_any_float = true;
1706-
$precision = max($precision, strlen(substr(strrchr(strval($evaluated_arg), "."), 1)));
1707+
$precision = max($precision, strlen(substr(strrchr((string) $evaluated_arg, "."), 1)));
17071708
}
17081709

17091710
$is_any_string = $is_any_string || is_string($evaluated_arg);
17101711
$evaluated_args[] = $evaluated_arg;
17111712
}
17121713

17131714
if ($is_any_string) {
1714-
$evaluated_str_args = array_map(fn($evaluated_arg) => strval($evaluated_arg), $evaluated_args);
1715-
return min(...$evaluated_str_args);
1715+
$evaluated_str_args = array_map(function($arg) {
1716+
return (string) $arg;
1717+
}, $evaluated_args);
1718+
return min($evaluated_str_args);
17161719
}
17171720

17181721
if ($is_any_float) {
1719-
return number_format(min(...$evaluated_args), $precision);
1722+
return number_format((float) min($evaluated_args), $precision);
17201723
}
17211724

1722-
return min(...$evaluated_args);
1725+
return min($evaluated_args);
17231726
}
17241727
}

tests/EndToEndTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,8 +1447,11 @@ public function testLeast($args, $expected_value): void
14471447
$pdo = self::getPdo('mysql:host=localhost;dbname=testdb');
14481448
$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
14491449

1450-
$args_str = implode(', ', array_map(fn ($arg) => is_null($arg) ? 'null' : strval($arg), $args));
1451-
$query = $pdo->prepare(sprintf('SELECT LEAST(%s) as result', $args_str),);
1450+
$args_str = implode(', ', array_map(function ($arg) {
1451+
return is_null($arg) ? 'null' : (string) $arg;
1452+
}, $args));
1453+
1454+
$query = $pdo->prepare(sprintf('SELECT LEAST(%s) as result', $args_str));
14521455
$query->execute();
14531456

14541457
$result = $query->fetch(\PDO::FETCH_ASSOC);

0 commit comments

Comments
 (0)