Index: includes/database/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/database.inc,v
retrieving revision 1.50
diff -u -p -r1.50 database.inc
--- includes/database/database.inc	25 Jan 2009 12:19:31 -0000	1.50
+++ includes/database/database.inc	16 Mar 2009 20:06:29 -0000
@@ -2464,6 +2464,9 @@ function _db_query_process_args($query, 
     $options['target'] = 'default';
   }
 
+  // We always store boolean values as 0/1 so cast them all.
+  array_walk($args, 'db_convert_bool');
+
   // Temporary backward-compatibility hacks. Remove later.
   $old_query = $query;
   $query = str_replace(array('%n', '%d', '%f', '%b', "'%s'", '%s'), '?', $old_query);
Index: includes/database/query.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/query.inc,v
retrieving revision 1.17
diff -u -p -r1.17 query.inc
--- includes/database/query.inc	14 Mar 2009 17:45:55 -0000	1.17
+++ includes/database/query.inc	16 Mar 2009 20:06:29 -0000
@@ -317,6 +317,7 @@ class InsertQuery extends Query {
       }
       $this->insertFields = $fields;
       if (!empty($values)) {
+        array_walk($values, 'db_convert_bool');
         $this->insertValues[] = $values;
       }
     }
@@ -339,6 +340,7 @@ class InsertQuery extends Query {
    */
   public function values(array $values) {
     if (is_numeric(key($values))) {
+      array_walk($values, 'db_convert_bool');
       $this->insertValues[] = $values;
     }
     else {
@@ -347,6 +349,7 @@ class InsertQuery extends Query {
         $insert_values[$key] = $values[$key];
       }
       // For consistency, the values array is always numerically indexed.
+      array_walk($insert_values, 'db_convert_bool');
       $this->insertValues[] = array_values($insert_values);
     }
     return $this;
@@ -543,6 +546,7 @@ class MergeQuery extends Query {
     if (count($values) > 0) {
       $fields = array_combine($fields, $values);
     }
+    array_walk($fields, 'db_convert_bool');
     $this->insertFields = $fields;
 
     return $this;
@@ -577,6 +581,7 @@ class MergeQuery extends Query {
     if ($values) {
       $fields = array_combine($fields, $values);
     }
+    array_walk($fields, 'db_convert_bool');
     $this->keyFields = $fields;
 
     return $this;
@@ -601,6 +606,7 @@ class MergeQuery extends Query {
    if ($values) {
       $fields = array_combine($fields, $values);
     }
+    array_walk($fields, 'db_convert_bool');
     $this->updateFields = $fields;
 
     return $this;
@@ -919,6 +925,7 @@ class UpdateQuery extends Query implemen
    *   The called object.
    */
   public function fields(array $fields) {
+    array_walk($fields, 'db_convert_bool');
     $this->fields = $fields;
     return $this;
   }
@@ -1217,5 +1224,16 @@ function db_condition($conjunction) {
 }
 
 /**
+ * Helper function for array_walk() to convert booleans.
+ *
+ * We always store boolean values as 0/1 so cast them all.
+ */
+function db_convert_bool(&$value, $key) {
+  if (is_bool($value)) {
+    $value = (int) $value;
+  }
+}
+
+/**
  * @} End of "ingroup database".
  */
