<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 4.0.5
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================*/
if (!class_exists('vB_Database', false))
{
exit;
}
/**
* Class to handle interacting with a slave (and master) DB. Slave DBs are
* used for some reads. Master DBs are used for all writes and time-sensitive
* reads.
*
* @package vBulletin
*/
class vB_Database_Slave extends vB_Database
{
/**
* Connects to the specified database server(s)
*
* @param string Name of the database that we will be using for select_db()
* @param string Name of the master (write) server - should be either 'localhost' or an IP address
* @param integer Port for the master server
* @param string Username to connect to the master server
* @param string Password associated with the username for the master server
* @param boolean Whether or not to use persistent connections to the master server
* @param string (Optional) Name of the slave (read) server - should be either left blank or set to 'localhost' or an IP address, but NOT the same as the servername for the master server
* @param integer (Optional) Port of the slave server
* @param string (Optional) Username to connect to the slave server
* @param string (Optional) Password associated with the username for the slave server
* @param boolean (Optional) Whether or not to use persistent connections to the slave server
* @param string (Optional) Parse given MySQL config file to set options
* @param string (Optional) Connection Charset MySQLi / PHP 5.1.0+ or 5.0.5+ / MySQL 4.1.13+ or MySQL 5.1.10+ Only
*
* @return none
*/
function connect($database, $w_servername, $w_port, $w_username, $w_password, $w_usepconnect = false, $r_servername = '', $r_port = 3306, $r_username = '', $r_password = '', $r_usepconnect = false, $configfile = '', $charset = '')
{
$this->database = $database;
$w_port = $w_port ? $w_port : 3306;
$r_port = $r_port ? $r_port : 3306;
$this->connection_master = $this->db_connect($w_servername, $w_port, $w_username, $w_password, $w_usepconnect, $configfile, $charset);
$this->multiserver = true;
// disable errors and try to connect to slave
$this->reporterror = false;
$this->connection_slave = $this->db_connect($r_servername, $r_port, $r_username, $r_password, $r_usepconnect, $configfile, $charset);
$this->reporterror = true;
if ($this->connection_slave === false)
{
$this->connection_slave =& $this->connection_master;
}
if ($this->connection_master)
{ // slave will be selected automagically when we select the master
$this->select_db($this->database);
}
}
/**
* Selects a database to use
*
* @param string The name of the database located on the database server(s)
*
* @return boolean
*/
function select_db($database = '')
{
$check_write = parent::select_db($database);
$check_read = @$this->select_db_wrapper($this->database, $this->connection_slave);
$this->connection_recent =& $this->connection_slave;
return ($check_write AND $check_read);
}
/**
* Executes a data-reading SQL query through the 'slave' database connection
*
* @param string The text of the SQL query to be executed
* @param boolean Whether or not to run this query buffered (true) or unbuffered (false). Default is buffered.
*
* @return string
*/
function query_read_slave($sql, $buffered = true)
{
$this->sql =& $sql;
return $this->execute_query($buffered, $this->connection_slave);
}
/**
* Executes a data-reading SQL query against the slave server, then returns an array of the data from the first row from the result set
*
* @param string The text of the SQL query to be executed
* @param string One of (NUM, ASSOC, BOTH)
*
* @return array
*/
function &query_first_slave($sql, $type = DBARRAY_ASSOC)
{
$this->sql =& $sql;
$queryresult = $this->execute_query(true, $this->connection_slave);
$returnarray = $this->fetch_array($queryresult, $type);
$this->free_result($queryresult);
return $returnarray;
}
/**
* Closes the connection to both the read database server
*
* @return integer
*/
function close()
{
$parent = parent::close();
return ($parent AND @$this->functions['close']($this->connection_slave));
}
}
/**
* Class to handle interacting with a slave (and master) DB. Slave DBs are
* used for some reads. Master DBs are used for all writes and time-sensitive
* reads. (MySQLi)
*
* @package vBulletin
*/
class vB_Database_Slave_MySQLi extends vB_Database_MySQLi
{
/**
* Connects to the specified database server(s)
*
* @param string Name of the database that we will be using for select_db()
* @param string Name of the master (write) server - should be either 'localhost' or an IP address
* @param integer Port for the master server
* @param string Username to connect to the master server
* @param string Password associated with the username for the master server
* @param boolean Whether or not to use persistent connections to the master server
* @param string (Optional) Name of the slave (read) server - should be either left blank or set to 'localhost' or an IP address, but NOT the same as the servername for the master server
* @param integer (Optional) Port of the slave server
* @param string (Optional) Username to connect to the slave server
* @param string (Optional) Password associated with the username for the slave server
* @param boolean (Optional) Whether or not to use persistent connections to the slave server
* @param string (Optional) Parse given MySQL config file to set options
* @param string (Optional) Connection Charset MySQLi / PHP 5.1.0+ or 5.0.5+ / MySQL 4.1.13+ or MySQL 5.1.10+ Only
*
* @return none
*/
function connect($database, $w_servername, $w_port, $w_username, $w_password, $w_usepconnect = false, $r_servername = '', $r_port = 3306, $r_username = '', $r_password = '', $r_usepconnect = false, $configfile = '', $charset = '')
{
$this->database = $database;
$w_port = $w_port ? $w_port : 3306;
$r_port = $r_port ? $r_port : 3306;
$this->connection_master = $this->db_connect($w_servername, $w_port, $w_username, $w_password, $w_usepconnect, $configfile, $charset);
$this->multiserver = true;
// disable errors and try to connect to slave
$this->reporterror = false;
$this->connection_slave = $this->db_connect($r_servername, $r_port, $r_username, $r_password, $r_usepconnect, $configfile, $charset);
$this->reporterror = true;
if ($this->connection_slave === false)
{
$this->connection_slave =& $this->connection_master;
}
if ($this->connection_master)
{ // slave will be selected automagically when we select the master
$this->select_db($this->database);
}
}
/**
* Selects a database to use
*
* @param string The name of the database located on the database server(s)
*
* @return boolean
*/
function select_db($database = '')
{
$check_write = parent::select_db($database);
$check_read = @$this->select_db_wrapper($this->database, $this->connection_slave);
$this->connection_recent =& $this->connection_slave;
return ($check_write AND $check_read);
}
/**
* Executes a data-reading SQL query through the 'slave' database connection
*
* @param string The text of the SQL query to be executed
* @param boolean Whether or not to run this query buffered (true) or unbuffered (false). Default is buffered.
*
* @return string
*/
function query_read_slave($sql, $buffered = true)
{
$this->sql =& $sql;
return $this->execute_query($buffered, $this->connection_slave);
}
/**
* Executes a data-reading SQL query against the slave server, then returns an array of the data from the first row from the result set
*
* @param string The text of the SQL query to be executed
* @param string One of (NUM, ASSOC, BOTH)
*
* @return array
*/
function &query_first_slave($sql, $type = DBARRAY_ASSOC)
{
$this->sql =& $sql;
$queryresult = $this->execute_query(true, $this->connection_slave);
$returnarray = $this->fetch_array($queryresult, $type);
$this->free_result($queryresult);
return $returnarray;
}
/**
* Closes the connection to both the read database server
*
* @return integer
*/
function close()
{
$parent = parent::close();
return ($parent AND @$this->functions['close']($this->connection_slave));
}
}
/*======================================================================*\
|| ####################################################################
|| # CVS: $RCSfile$ - $Revision: 32878 $
|| ####################################################################
\*======================================================================*/
?>