Depedency inject remappedTableName() map via MWLBFactory
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 10 Nov 2016 05:35:57 +0000 (21:35 -0800)
committerAaron Schulz <aschulz@wikimedia.org>
Thu, 10 Nov 2016 05:35:57 +0000 (21:35 -0800)
Change-Id: I71d3481fc624f665bac81725026647bbb84ae608

includes/db/MWLBFactory.php
includes/libs/rdbms/database/DatabasePostgres.php

index bfdce39..42ef685 100644 (file)
@@ -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 ];
                        }
index 41aa5e0..cd02177 100644 (file)
@@ -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;
        }
 
        /**