### Eclipse Workspace Patch 1.0
#P drupal_test_6
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.947.2.11
diff -u -r1.947.2.11 node.module
--- modules/node/node.module	25 Jun 2008 08:59:57 -0000	1.947.2.11
+++ modules/node/node.module	27 Jun 2008 22:25:49 -0000
@@ -907,6 +907,7 @@
 
   // Generate the node table query and the node_revisions table query.
   if ($node->is_new) {
+    unset($node->nid);
     _node_save_revision($node, $user->uid);
     drupal_write_record('node', $node);
     db_query('UPDATE {node_revisions} SET nid = %d WHERE vid = %d', $node->nid, $node->vid);
Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.756.2.17
diff -u -r1.756.2.17 common.inc
--- includes/common.inc	25 Jun 2008 10:56:11 -0000	1.756.2.17
+++ includes/common.inc	27 Jun 2008 22:25:48 -0000
@@ -3251,8 +3251,12 @@
       continue;
     }
 
-    // For inserts, populate defaults from Schema if not already provided
-    if (!isset($object->$field) && !count($update) && isset($info['default'])) {
+    // array_key_exists() is used to catch fields explicitly set to NULL.
+    // We try a faster isset() first to preserve performance.
+
+    // For inserts, populate defaults from Schema if not already provided.
+    // TODO : what if NULL is present and a default value can be set ??
+    if (!count($update) && isset($info['default']) && !isset($object->$field) && !array_key_exists($field, $object)) {
       $object->$field = $info['default'];
     }
 
@@ -3260,19 +3264,19 @@
     if ($info['type'] == 'serial') {
       $serials[] = $field;
       // Ignore values for serials when inserting data. Unsupported.
-      unset($object->$field);
+      continue;
     }
 
     // Build arrays for the fields, placeholders, and values in our query.
-    if (isset($object->$field)) {
+    if (isset($object->$field) || array_key_exists($field, $object)) {
       $fields[] = $field;
-      $placeholders[] = db_type_placeholder($info['type']);
-
-      if (empty($info['serialize'])) {
-        $values[] = $object->$field;
+      if (isset($object->$field)) {
+        $placeholders[] = db_type_placeholder($info['type']);
+        $values[] = empty($info['serialize']) ? $object->$field : serialize($object->$field);
       }
       else {
-        $values[] = serialize($object->$field);
+        $placeholders[] = '%s';
+        $values[] = 'NULL';
       }
     }
   }
