Anomie has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/394140 )
Change subject: Database: Fix degenerate parenthesized joins
......................................................................
Database: Fix degenerate parenthesized joins
The SQL standard supports parenthesized joins like
a JOIN (b JOIN c ON (...)) ON (...)
But it doesn't support parenthesizing a single table name, i.e. a
one-table "join", like
a JOIN (b) ON (...)
Detect the degenerate single-table case and omit the parentheses.
Bug: T181674
Change-Id: I82cacd80465092aa67ff19bdcfd6682001bf12ab
---
M includes/libs/rdbms/database/Database.php
M tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
2 files changed, 20 insertions(+), 3 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/40/394140/1
diff --git a/includes/libs/rdbms/database/Database.php
b/includes/libs/rdbms/database/Database.php
index e04566e..b936779 100644
--- a/includes/libs/rdbms/database/Database.php
+++ b/includes/libs/rdbms/database/Database.php
@@ -2019,9 +2019,19 @@
if ( is_array( $table ) ) {
// A parenthesized group
- $joinedTable = '('
- .
$this->tableNamesWithIndexClauseOrJOIN( $table, $use_index, $ignore_index,
$join_conds )
- . ')';
+ if ( count( $table ) > 1 ) {
+ $joinedTable = '('
+ .
$this->tableNamesWithIndexClauseOrJOIN( $table, $use_index, $ignore_index,
$join_conds )
+ . ')';
+ } else {
+ // Degenerate case
+ $innerTable = reset( $table );
+ $innerAlias = key( $table );
+ $joinedTable =
$this->tableNameWithAlias(
+ $innerTable,
+ is_string( $innerAlias ) ?
$innerAlias : $innerTable
+ );
+ }
} else {
$joinedTable = $this->tableNameWithAlias(
$table, $alias );
}
diff --git a/tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
b/tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
index ee7ad2f..7933f19 100644
--- a/tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
+++ b/tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
@@ -120,6 +120,13 @@
],
'table1 LEFT JOIN (table2 JOIN table3 ON
((t2_id = t3_id))) ON ((t1_id = t2_id))'
],
+ 'join with degenerate parenthesized group' => [
+ [ 'table1', 'n' => [ 't2' => 'table2' ] ],
+ [
+ 'n' => [ 'LEFT JOIN', 't1_id = t2_id' ],
+ ],
+ 'table1 LEFT JOIN table2 t2 ON ((t1_id =
t2_id))'
+ ],
];
}
--
To view, visit https://gerrit.wikimedia.org/r/394140
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I82cacd80465092aa67ff19bdcfd6682001bf12ab
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Anomie <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits