Merge pull request #20278 from predictor2718/fix/19225-wrong-row-count-alias

Fix #19225 - Fix wrong row count when column alias shadows existing column name
This commit is contained in:
Maurício Meneghini Fauth 2026-04-22 20:00:14 -03:00 committed by GitHub
commit 837e7466dd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 3 deletions

View File

@ -781,8 +781,17 @@ class Sql
// Removes LIMIT clause that might have been added
$statement->limit = null;
if ($changeExpression) {
$statement->expr[0] = new Expression();
// Replace SELECT expressions with 1 to avoid
// "Duplicate column name" errors when aliases shadow
// existing column names (e.g. SELECT id, name AS id).
// Only safe when there's no GROUP BY, DISTINCT, or UNION
// since those depend on the actual expressions.
if (
$analyzedSqlResults['is_group'] === false
&& $analyzedSqlResults['distinct'] === false
&& $analyzedSqlResults['union'] === false
) {
$statement->expr = [new Expression()];
$statement->expr[0]->expr = '1';
}

View File

@ -513,7 +513,8 @@ class SqlTest extends AbstractTestCase
],
20,
42,
false,
'SELECT COUNT(*) FROM (SELECT 1 FROM company_users WHERE subquery_case = 0 ) as cnt',
],
[
'SELECT ( as c2 FROM company_users WHERE working_count = 0',// Invalid query
@ -546,6 +547,14 @@ class SqlTest extends AbstractTestCase
false,
'SELECT COUNT(*) FROM (SELECT 1 FROM t1 WHERE id <> 0 ) as cnt',
],
'duplicate column alias should not break count' => [
'SELECT id, name AS id FROM company_users WHERE working_count = 0',
['max_rows' => 10, 'pos' => 0],
25,
384,
false,
'SELECT COUNT(*) FROM (SELECT 1 FROM company_users WHERE working_count = 0 ) as cnt',
],
];
}