From c59124b0314a52b9d457f02a5ae31864a534630b Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Tue, 9 Jan 2024 21:33:36 +0100 Subject: [PATCH] Don't optimize count for UNION queries Signed-off-by: Kamil Tekiela --- libraries/classes/Sql.php | 1 + psalm-baseline.xml | 12 ++++++------ test/classes/SqlTest.php | 8 ++++++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libraries/classes/Sql.php b/libraries/classes/Sql.php index eac7c5cbb9..f7e03b08f2 100644 --- a/libraries/classes/Sql.php +++ b/libraries/classes/Sql.php @@ -752,6 +752,7 @@ class Sql if ( $analyzedSqlResults['is_group'] === false && $analyzedSqlResults['distinct'] === false + && $analyzedSqlResults['union'] === false && count($statement->expr) === 1 ) { $statement->expr[0] = new Expression(); diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 6fdeed3ccb..fde56a20c9 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -3056,14 +3056,9 @@ - - $rows + $start - - $_REQUEST['pos'] - $_REQUEST['session_max_rows'] - $db $db @@ -3079,6 +3074,11 @@ $url_params['db'] + + $_REQUEST['pos'] + $_REQUEST['session_max_rows'] + $rows + $_REQUEST['pos'] $_REQUEST['pos'] diff --git a/test/classes/SqlTest.php b/test/classes/SqlTest.php index bed82794ef..7436f62dbb 100644 --- a/test/classes/SqlTest.php +++ b/test/classes/SqlTest.php @@ -571,6 +571,14 @@ class SqlTest extends AbstractTestCase false, 'SELECT COUNT(*) FROM (SELECT DISTINCT country_id FROM city ) as cnt', ], + [ + 'SELECT * FROM t1 UNION SELECT * FROM t2;', + ['max_rows' => -1, 'pos' => 0], + 25, + 109, + false, + 'SELECT COUNT(*) FROM (SELECT * FROM t1 UNION SELECT * FROM t2 ) as cnt', + ], ]; }