Merge #16902 - Fix #16734 - SQL group by count results are not accurate

Pull-request: #16902
Fixes: #16734
Signed-off-by: William Desportes <williamdes@wdes.fr>
This commit is contained in:
William Desportes 2021-05-29 21:24:49 +02:00
commit b4d6282376
No known key found for this signature in database
GPG Key ID: 90A0EF1B8251A889
2 changed files with 8 additions and 11 deletions

View File

@ -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;

View File

@ -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],
],