diff -u cvs/includes/database.inc local/includes/database.inc
--- cvs/includes/database.inc	2006-09-09 03:00:04.000000000 +0200
+++ local/includes/database.inc	2006-09-11 06:25:48.000000000 +0200
@@ -136,6 +136,52 @@
 }
 
 /**
+ * Helper function for db_connect().
+ *
+ * gets connection elements from the URL
+ */
+function _db_connect_url(&$url) {
+  $url = parse_url($url);
+  // Decode url-encoded information in the db connection string
+  $url['user'] = urldecode($url['user']);
+  $url['pass'] = urldecode($url['pass']);
+  $url['host'] = urldecode($url['host']);
+  $url['path'] = urldecode($url['path']);
+  // Allow for non-standard port.
+  if (isset($url['port'])) {
+     $url['host'] = $url['host'] .':'. $url['port'];
+  }
+//  return $url; // no return value needed 'cause it's a call by reference
+}
+
+/**
+ * Helper function for db_query().
+ *
+ * Gets current time for debugg timer.
+ */
+function _db_query_timer {
+  if (variable_get('dev_query', 0)) {
+    list($usec, $sec) = explode(' ', microtime());
+    return ((float)$usec + (float)$sec);
+  }
+}
+
+/**
+ * Helper function for db_query().
+ *
+ * Stops the timer. Logs the query and it's execution time.
+ */
+function _db_query_log(&$query, &$timer) {
+  global $queries;
+  if (variable_get('dev_query', 0)) {
+    $bt = debug_backtrace();
+    $query = $bt[2]['function'] . "\n" . $query;
+    $diff = _db_query_timer() - $timer;
+    $queries[] = array($query, $diff);
+  }
+}
+
+/**
  * Helper function for db_query().
  */
 function _db_query_callback($match, $init = FALSE) {
@@ -159,7 +205,18 @@
   }
 }
 
-define('DB_QUERY_REGEXP', '/(%d|%s|%%|%f|%b)/');
+/**
+ * Helper function for db_query() and db_query_range() and db_query_temporary.
+ */
+function _db_query_prepare(&$query, &$args) {
+  array_shift($args);
+  $query = db_prefix_tables($query);
+  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
+    $args = $args[0];
+  }
+  _db_query_callback($args, TRUE);
+  $query = preg_replace_callback('/(%d|%s|%%|%f|%b)/', '_db_query_callback', $query);
+}
 
 /**
  * Runs a basic query in the active database.
@@ -187,13 +244,8 @@
  */
 function db_query($query) {
   $args = func_get_args();
-  array_shift($args);
   $query = db_prefix_tables($query);
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   return _db_query($query);
 }
 
diff -u cvs/includes/database.mysql.inc local/includes/database.mysql.inc
--- cvs/includes/database.mysql.inc	2006-09-07 11:00:09.000000000 +0200
+++ local/includes/database.mysql.inc	2006-09-11 06:14:42.000000000 +0200
@@ -52,18 +52,7 @@
     exit;
   }
 
-  $url = parse_url($url);
-
-  // Decode url-encoded information in the db connection string
-  $url['user'] = urldecode($url['user']);
-  $url['pass'] = urldecode($url['pass']);
-  $url['host'] = urldecode($url['host']);
-  $url['path'] = urldecode($url['path']);
-
-  // Allow for non-standard MySQL port.
-  if (isset($url['port'])) {
-     $url['host'] = $url['host'] .':'. $url['port'];
-  }
+  _db_connect_url($url); 
 
   // - TRUE makes mysql_connect() always open a new link, even if
   //   mysql_connect() was called before with the same parameters.
@@ -123,21 +112,11 @@
 function _db_query($query, $debug = 0) {
   global $active_db, $queries;
 
-  if (variable_get('dev_query', 0)) {
-    list($usec, $sec) = explode(' ', microtime());
-    $timer = (float)$usec + (float)$sec;
-  }
+  $timer = _db_query_timer();
 
   $result = mysql_query($query, $active_db);
-
-  if (variable_get('dev_query', 0)) {
-    $bt = debug_backtrace();
-    $query = $bt[2]['function'] . "\n" . $query;
-    list($usec, $sec) = explode(' ', microtime());
-    $stop = (float)$usec + (float)$sec;
-    $diff = $stop - $timer;
-    $queries[] = array($query, $diff);
-  }
+  
+  _db_query_log($query, $timer);
 
   if ($debug) {
     print '<p>query: '. $query .'<br />error:'. mysql_error($active_db) .'</p>';
@@ -237,7 +216,7 @@
   db_query('LOCK TABLES {sequences} WRITE');
   $id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
   db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
-  db_query('UNLOCK TABLES');
+  _db_query('UNLOCK TABLES');
 
   return $id;
 }
@@ -287,14 +266,7 @@
   $args = func_get_args();
   $count = array_pop($args);
   $from = array_pop($args);
-  array_shift($args);
-
-  $query = db_prefix_tables($query);
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   $query .= ' LIMIT '. (int)$from .', '. (int)$count;
   return _db_query($query);
 }
@@ -335,14 +307,8 @@
 function db_query_temporary($query) {
   $args = func_get_args();
   $tablename = array_pop($args);
-  array_shift($args);
-
   $query = preg_replace('/^SELECT/i', 'CREATE TEMPORARY TABLE '. $tablename .' SELECT', db_prefix_tables($query));
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   return _db_query($query);
 }
 
diff -u cvs/includes/database.mysqli.inc local/includes/database.mysqli.inc
--- cvs/includes/database.mysqli.inc	2006-09-05 11:00:19.000000000 +0200
+++ local/includes/database.mysqli.inc	2006-09-11 06:17:44.000000000 +0200
@@ -53,13 +53,7 @@
     exit;
   }
 
-  $url = parse_url($url);
-
-  // Decode url-encoded information in the db connection string
-  $url['user'] = urldecode($url['user']);
-  $url['pass'] = urldecode($url['pass']);
-  $url['host'] = urldecode($url['host']);
-  $url['path'] = urldecode($url['path']);
+  _db_connect_url($url); 
 
   $connection = mysqli_init();
   @mysqli_real_connect($connection, $url['host'], $url['user'], $url['pass'], substr($url['path'], 1), $url['port'], NULL, MYSQLI_CLIENT_FOUND_ROWS);
@@ -116,23 +110,13 @@
  * Helper function for db_query().
  */
 function _db_query($query, $debug = 0) {
-  global $active_db, $queries;
+  global $active_db;
 
-  if (variable_get('dev_query', 0)) {
-    list($usec, $sec) = explode(' ', microtime());
-    $timer = (float)$usec + (float)$sec;
-  }
+  $timer = _db_query_timer();
 
   $result = mysqli_query($active_db, $query);
 
-  if (variable_get('dev_query', 0)) {
-    $bt = debug_backtrace();
-    $query = $bt[2]['function'] . "\n" . $query;
-    list($usec, $sec) = explode(' ', microtime());
-    $stop = (float)$usec + (float)$sec;
-    $diff = $stop - $timer;
-    $queries[] = array($query, $diff);
-  }
+  _db_query_log($query, $timer);
 
   if ($debug) {
     print '<p>query: '. $query .'<br />error:'. mysqli_error($active_db) .'</p>';
@@ -233,7 +217,7 @@
   db_query('LOCK TABLES {sequences} WRITE');
   $id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
   db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
-  db_query('UNLOCK TABLES');
+  _db_query('UNLOCK TABLES');
 
   return $id;
 }
@@ -283,14 +267,8 @@
   $args = func_get_args();
   $count = array_pop($args);
   $from = array_pop($args);
-  array_shift($args);
-
   $query = db_prefix_tables($query);
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   $query .= ' LIMIT '. (int)$from .', '. (int)$count;
   return _db_query($query);
 }
@@ -331,14 +309,8 @@
 function db_query_temporary($query) {
   $args = func_get_args();
   $tablename = array_pop($args);
-  array_shift($args);
-
   $query = preg_replace('/^SELECT/i', 'CREATE TEMPORARY TABLE '. $tablename .' SELECT', db_prefix_tables($query));
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   return _db_query($query);
 }
 
diff -u cvs/includes/database.pgsql.inc local/includes/database.pgsql.inc
--- cvs/includes/database.pgsql.inc	2006-09-04 19:00:04.000000000 +0200
+++ local/includes/database.pgsql.inc	2006-09-11 06:20:26.000000000 +0200
@@ -109,23 +109,13 @@
  * Helper function for db_query().
  */
 function _db_query($query, $debug = 0) {
-  global $active_db, $last_result, $queries;
+  global $active_db, $last_result;
 
-  if (variable_get('dev_query', 0)) {
-    list($usec, $sec) = explode(' ', microtime());
-    $timer = (float)$usec + (float)$sec;
-  }
+  $timer = _db_query_timer();
 
   $last_result = pg_query($active_db, $query);
 
-  if (variable_get('dev_query', 0)) {
-    $bt = debug_backtrace();
-    $query = $bt[2]['function'] . "\n" . $query;
-    list($usec, $sec) = explode(' ', microtime());
-    $stop = (float)$usec + (float)$sec;
-    $diff = $stop - $timer;
-    $queries[] = array($query, $diff);
-  }
+  _db_query_log($query, $timer);
 
   if ($debug) {
     print '<p>query: '. $query .'<br />error:'. pg_last_error($active_db) .'</p>';
@@ -268,14 +258,8 @@
   $args = func_get_args();
   $count = array_pop($args);
   $from = array_pop($args);
-  array_shift($args);
-
   $query = db_prefix_tables($query);
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   $query .= ' LIMIT '. (int)$count .' OFFSET '. (int)$from;
   return _db_query($query);
 }
@@ -316,14 +300,8 @@
 function db_query_temporary($query) {
   $args = func_get_args();
   $tablename = array_pop($args);
-  array_shift($args);
-
   $query = preg_replace('/^SELECT/i', 'CREATE TEMPORARY TABLE '. $tablename .' AS SELECT', db_prefix_tables($query));
-  if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
-    $args = $args[0];
-  }
-  _db_query_callback($args, TRUE);
-  $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
+  _db_query_prepare($query, $args);
   return _db_query($query);
 }
 
