Index: includes/database.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database.inc,v retrieving revision 1.27 diff -u -r1.27 database.inc --- includes/database.inc 1 Oct 2003 05:18:02 -0000 1.27 +++ includes/database.inc 29 Apr 2004 21:09:26 -0000 @@ -18,16 +18,43 @@ return strtr($sql, array("{" => $prefix, "}" => "")); } -$db_type = substr($db_url, 0, strpos($db_url, "://")); +function db_set_active($name = 'default') { + global $db_url; + global $active_db; + static $db_conns; + + if (!isset($db_conns[$name])) { + //Initiate a new connection, using the named db url specified + if (is_array($db_url)) { + $connect_url = ($db_url[$name]) ? $db_url[$name] : $db_url['default']; + } + else { + $connect_url = $db_url; + } + + + $db_type = substr($connect_url, 0, strpos($connect_url, "://")); + + //TODO : Allow more than one database api to be present. ie: pgsl and mysql + if ($db_type == "mysql") { + include_once "includes/database.mysql.inc"; + } + else { + include_once "includes/database.pear.inc"; + } + + $db_conns[$name] = db_connect($connect_url); + + } + //set the active connection + $active_db = $db_conns[$name]; + -if ($db_type == "mysql") { - include_once "includes/database.mysql.inc"; -} -else { - include_once "includes/database.pear.inc"; } -db_connect($db_url); + +// initialize the default db_url +db_set_active(); ?> Index: includes/database.mysql.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database.mysql.inc,v retrieving revision 1.21 diff -u -r1.21 database.mysql.inc --- includes/database.mysql.inc 8 Dec 2003 06:32:18 -0000 1.21 +++ includes/database.mysql.inc 29 Apr 2004 21:09:27 -0000 @@ -9,9 +9,11 @@ $url["host"] = $url["host"] . ":" . $url["port"]; } - mysql_connect($url["host"], $url["user"], $url["pass"]) or die(mysql_error()); + $connection = mysql_connect($url["host"], $url["user"], $url["pass"]) or die(mysql_error()); mysql_select_db(substr($url["path"], 1)) or die("unable to select database"); + return $connection; + /* ** Note that you can change the 'mysql_connect' statement to 'mysql_pconnect' ** if you want to use persistent connections. This is not recommended on @@ -70,6 +72,7 @@ // private function _db_query($query, $debug = 0) { + global $active_db; global $queries; if (variable_get("dev_query", 0)) { @@ -77,7 +80,7 @@ $timer = (float)$usec + (float)$sec; } - $result = mysql_query($query); + $result = mysql_query($query, $active_db); if (variable_get("dev_query", 0)) { list($usec, $sec) = explode(" ", microtime()); Index: includes/database.pear.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/database.pear.inc,v retrieving revision 1.22 diff -u -r1.22 database.pear.inc --- includes/database.pear.inc 8 Dec 2003 06:32:18 -0000 1.22 +++ includes/database.pear.inc 29 Apr 2004 21:09:27 -0000 @@ -4,8 +4,6 @@ require_once 'DB.php'; function db_connect($url) { - global $db_handle; - $db_handle = DB::connect($url); if (DB::isError($db_handle)) { @@ -13,6 +11,8 @@ } $db_handle->setFetchMode(DB_FETCHMODE_ASSOC); + + return $db_handle; } /** @@ -65,14 +65,14 @@ // private function _db_query($query, $debug = 0) { - global $db_handle, $queries; + global $active_db, $queries; if (variable_get("dev_query", 0)) { list($usec, $sec) = explode(" ", microtime()); $timer = (float)$usec + (float)$sec; } - $result = $db_handle->query($query); + $result = $active_db->query($query); if (variable_get("dev_query", 0)) { list($usec, $sec) = explode(" ", microtime()); @@ -119,16 +119,16 @@ } function db_error() { - global $db_handle; + global $active_db; - return DB::isError($db_handle); + return DB::isError($active_db); } function db_next_id($name) { - global $db_handle; + global $active_db; $name = db_prefix_tables($name); - $result = $db_handle->nextID($name); + $result = $active_db->nextID($name); if (DB::isError($result)) { watchdog("error", "database: ". $result->getMessage() ."\nsequence table: $name"); } @@ -138,9 +138,9 @@ } function db_affected_rows() { - global $db_handle; + global $active_db; - return $db_handle->affectedRows(); + return $active_db->affectedRows(); } /** @@ -153,7 +153,7 @@ * @return a DB_Result object or a DB_Error */ function db_query_range($query) { - global $db_handle, $queries; + global $active_db, $queries; if (variable_get("dev_query", 0)) { list($usec, $sec) = explode(" ", microtime()); @@ -167,12 +167,12 @@ $args = array_map("check_query", $args); $query = db_prefix_tables($query); $args[0] = $query; - $result = $db_handle->limitQuery(call_user_func_array("sprintf", $args), $from, $count); + $result = $active_db->limitQuery(call_user_func_array("sprintf", $args), $from, $count); } else { $query = func_get_arg(0); $query = db_prefix_tables($query); - $result = $db_handle->limitQuery( $query, $from, $count); + $result = $active_db->limitQuery( $query, $from, $count); } if (variable_get("dev_query", 0)) {