return $i;
}
+ /**
+ * Get a connection to a foreign DB. Will use the following types of
+ * connection in order of precedence:
+ * * The alternate master, if there is one and DB_MASTER is given
+ * * The query group
+ * * The alternate master, if there is one
+ * * The default writer, if DB_MASTER was specified
+ * * The default reader.
+ *
+ * Connection error will *not* lead to progression down this list. Selection
+ * of a group depends only on configuration.
+ *
+ * @param string $dbName The database name
+ * @param mixed $group The query group, or DB_MASTER for the foreign master
+ * @return Database object with the database selected
+ */
+ function getForeignConnection( $dbName, $group = false ) {
+ global $wgAlternateMaster;
+
+ // Try cache
+ if ( isset( $this->mForeignConnections[$dbName][$group] ) ) {
+ return $this->mForeignConnections[$dbName][$group];
+ }
+
+ // Try the precedence list described in the function description
+ if ( $group === DB_MASTER && isset( $wgAlternateMaster[$dbName] ) ) {
+ $index = $this->mServers[$wgAlternateMaster[$dbName]];
+ } if ( $group && $group !== DB_MASTER ) {
+ $index = $this->getGroupIndex( $group );
+ } elseif ( isset( $wgAlternateMaster[$dbName] ) ) {
+ $index = $this->mServers[$wgAlternateMaster[$dbName]];
+ } elseif ( $group === DB_MASTER ) {
+ $index = $this->getWriterIndex();
+ } else {
+ $index = $this->getReaderIndex();
+ }
+
+ if ( $index === false || !isset( $this->mServers[$index] ) ) {
+ throw new MWException( "No configured server available for foreign connection to $dbName" );
+ }
+
+ $dbInfo = $this->mServers[$index];
+ $dbc = $this->reallyOpenConnection( $dbInfo, $dbName );
+ $this->mForeignConnections[$dbName][$group] = $dbc;
+ return $dbc;
+ }
+
/**
* Set the master wait position
* If a DB_SLAVE connection has been opened already, waits
* Really opens a connection
* @access private
*/
- function reallyOpenConnection( &$server ) {
+ function reallyOpenConnection( &$server, $overrideDBname = false ) {
if( !is_array( $server ) ) {
throw new MWException( 'You must update your load-balancing configuration. See DefaultSettings.php entry for $wgDBservers.' );
}
extract( $server );
+ if ( $overrideDBname ) {
+ $dbname = $overrideDBname;
+ }
# Get class for this database type
$class = 'Database' . ucfirst( $type );