diff --git a/libraries/classes/Sql.php b/libraries/classes/Sql.php index 8cde36c757..6fcaee9fc4 100644 --- a/libraries/classes/Sql.php +++ b/libraries/classes/Sql.php @@ -803,11 +803,6 @@ class Sql $statement = $analyzed_sql_results['statement']; $token_list = $analyzed_sql_results['parser']->list; $replaces = [ - // Replace select by COUNT - [ - 'SELECT', - 'SELECT COUNT(*)', - ], // Remove ORDER BY to decrease unnecessary sorting time [ 'ORDER BY', @@ -819,11 +814,11 @@ class Sql '', ], ]; - $count_query = Query::replaceClauses( + $count_query = 'SELECT COUNT(*) FROM (' . Query::replaceClauses( $statement, $token_list, $replaces - ); + ) . ') as cnt'; $unlim_num_rows = $this->dbi->fetchValue($count_query); if ($unlim_num_rows === false) { $unlim_num_rows = 0; diff --git a/test/classes/Stubs/DbiDummy.php b/test/classes/Stubs/DbiDummy.php index 1b71a05a7a..bcd72fea83 100644 --- a/test/classes/Stubs/DbiDummy.php +++ b/test/classes/Stubs/DbiDummy.php @@ -2415,17 +2415,17 @@ class DbiDummy implements DbiExtension ], ], [ - 'query' => 'SELECT COUNT(*) FROM company_users WHERE not_working_count != 0', + 'query' => 'SELECT COUNT(*) FROM (SELECT * FROM company_users WHERE not_working_count != 0 ) as cnt', 'result' => false, ], [ - 'query' => 'SELECT COUNT(*) FROM company_users', + 'query' => 'SELECT COUNT(*) FROM (SELECT * FROM company_users ) as cnt', 'result' => [ [4], ], ], [ - 'query' => 'SELECT COUNT(*) FROM company_users WHERE working_count = 0', + 'query' => 'SELECT COUNT(*) FROM (SELECT * FROM company_users WHERE working_count = 0 ) as cnt', 'result' => [ [15], ], @@ -2437,7 +2437,9 @@ class DbiDummy implements DbiExtension ], ], [ - 'query' => 'SELECT COUNT(*) FROM company_users WHERE subquery_case = 0', + 'query' => 'SELECT COUNT(*) FROM (' + . 'SELECT *, 1, (SELECT COUNT(*) FROM tbl1) as c1, ' + . '(SELECT 1 FROM tbl2) as c2 FROM company_users WHERE subquery_case = 0 ) as cnt', 'result' => [ [42], ],