From f5dbb60c6ef604555def877bee1d605fcde23800 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 9 Nov 2016 21:35:57 -0800 Subject: [PATCH] Depedency inject remappedTableName() map via MWLBFactory Change-Id: I71d3481fc624f665bac81725026647bbb84ae608 --- includes/db/MWLBFactory.php | 8 +++++++- .../libs/rdbms/database/DatabasePostgres.php | 20 +++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/includes/db/MWLBFactory.php b/includes/db/MWLBFactory.php index bfdce393b5..42ef6851f8 100644 --- a/includes/db/MWLBFactory.php +++ b/includes/db/MWLBFactory.php @@ -64,7 +64,11 @@ abstract class MWLBFactory { if ( $server['type'] === 'sqlite' ) { $server += [ 'dbDirectory' => $mainConfig->get( 'SQLiteDataDir' ) ]; } elseif ( $server['type'] === 'postgres' ) { - $server += [ 'port' => $mainConfig->get( 'DBport' ) ]; + $server += [ + 'port' => $mainConfig->get( 'DBport' ), + // Work around the reserved word usage in MediaWiki schema + 'keywordTableMap' => [ 'user' => 'mwuser', 'text' => 'pagecontent' ] + ]; } $lbConf['servers'][$i] = $server + [ 'schema' => $mainConfig->get( 'DBmwschema' ), @@ -96,6 +100,8 @@ abstract class MWLBFactory { $server[ 'dbDirectory'] = $mainConfig->get( 'SQLiteDataDir' ); } elseif ( $server['type'] === 'postgres' ) { $server['port'] = $mainConfig->get( 'DBport' ); + // Work around the reserved word usage in MediaWiki schema + $server['keywordTableMap'] = [ 'user' => 'mwuser', 'text' => 'pagecontent' ]; } $lbConf['servers'] = [ $server ]; } diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php index 41aa5e07f2..cd0217766e 100644 --- a/includes/libs/rdbms/database/DatabasePostgres.php +++ b/includes/libs/rdbms/database/DatabasePostgres.php @@ -42,9 +42,20 @@ class DatabasePostgres extends Database { private $connectString; /** @var string */ private $mCoreSchema; + /** @var string[] Map of (reserved table name => alternate table name) */ + private $keywordTableMap = []; + /** + * @see Database::__construct() + * @param array $params Additional parameters include: + * - keywordTableMap : Map of reserved table names to alternative table names to use + */ public function __construct( array $params ) { $this->port = isset( $params['port'] ) ? $params['port'] : false; + $this->keywordTableMap = isset( $params['keywordTableMap'] ) + ? $params['keywordTableMap'] + : []; + parent::__construct( $params ); } @@ -736,16 +747,9 @@ __INDEXATTR__; /** * @param string $name * @return string Value of $name or remapped name if $name is a reserved keyword - * @TODO: dependency inject these... */ public function remappedTableName( $name ) { - if ( $name === 'user' ) { - return 'mwuser'; - } elseif ( $name === 'text' ) { - return 'pagecontent'; - } - - return $name; + return isset( $this->keywordTableMap[$name] ) ? $this->keywordTableMap[$name] : $name; } /** -- 2.20.1