Skip to content

Commit ba50273

Browse files
authored
Merge pull request #70 from tarasom/fix/sql-sum-empty-set
fix: Correct SUM() evaluation for empty result sets
2 parents 0625ea7 + bfa5473 commit ba50273

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/Processor/Expression/FunctionEvaluator.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,8 @@ private static function sqlSum(
372372
$sum = 0;
373373

374374
if (!$result->rows) {
375-
if ($expr instanceof FunctionExpression) {
375+
$isQueryWithoutFromClause = empty($result->columns);
376+
if ($expr instanceof FunctionExpression && $isQueryWithoutFromClause) {
376377
return self::evaluate($conn, $scope, $expr, [], $result);
377378
}
378379

tests/EndToEndTest.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
namespace Vimeo\MysqlEngine\Tests;
33

44
use PDOException;
5-
use Vimeo\MysqlEngine\Parser\Token;
6-
use Vimeo\MysqlEngine\Query\Expression\ColumnExpression;
7-
use Vimeo\MysqlEngine\TokenType;
85

96
class EndToEndTest extends \PHPUnit\Framework\TestCase
107
{
@@ -13,6 +10,29 @@ public function tearDown() : void
1310
\Vimeo\MysqlEngine\Server::reset();
1411
}
1512

13+
public function testSumWithEmptyResultSetReturnsNull()
14+
{
15+
$sql = "
16+
SELECT
17+
SUM(
18+
IF(
19+
id > 1,
20+
0,
21+
1
22+
)
23+
)
24+
FROM
25+
video_game_characters
26+
WHERE
27+
id > 100;
28+
";
29+
30+
$pdo = self::getConnectionToFullDB();
31+
$query= $pdo->query($sql);
32+
33+
$this->assertNull($query->fetchColumn());
34+
}
35+
1636
public function testSelectEmptyResults()
1737
{
1838
$pdo = self::getConnectionToFullDB();

0 commit comments

Comments
 (0)