Index: database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database.inc,v
retrieving revision 1.84
diff -u -p -r1.84 database.inc
--- database.inc	12 Oct 2007 14:19:44 -0000	1.84
+++ database.inc	24 Oct 2007 19:28:26 -0000
@@ -174,16 +174,22 @@ function _db_query_callback($match, $ini
   }
 
   switch ($match[1]) {
-    case '%d': // We must use type casting to int to convert FALSE/NULL/(TRUE?)
-      return (int) array_shift($args); // We don't need db_escape_string as numbers are db-safe
+    case '%d': // We must use type casting to int to convert FALSE/(TRUE?)
+      $arg = array_shift($args);
+      return $arg === null ? 'NULL' : (int) $arg;
+      // We don't need db_escape_string as numbers are db-safe
     case '%s':
-      return db_escape_string(array_shift($args));
+    case "'%s'":
+      $arg = array_shift($args);
+      return $arg === null ? 'NULL' : "'" . db_escape_string($arg) . "'";
     case '%%':
       return '%';
     case '%f':
-      return (float) array_shift($args);
+      $arg = array_shift($args);
+      return $arg === null ? 'NULL' : (float) $arg;
     case '%b': // binary data
-      return db_encode_blob(array_shift($args));
+      $arg = array_shift($args);
+      return $arg === null ? 'NULL' : db_encode_blob($arg);
   }
 }
 
@@ -206,7 +212,7 @@ function db_placeholders($arguments, $ty
 /**
  * Indicates the place holders that should be replaced in _db_query_callback().
  */
-define('DB_QUERY_REGEXP', '/(%d|%s|%%|%f|%b)/');
+define('DB_QUERY_REGEXP', "/(%d|'%s'|%s|%%|%f|%b)/");
 
 /**
  * Helper function for db_rewrite_sql.
