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' ),
$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 ];
}
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 );
}
/**
* @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;
}
/**