[Only generate UPDATE query when object was actually modified
clinton@unknownlamer.org**20100716212454
 Ignore-this: 323edd58b53b2ecb23b363add54dd606
] hunk ./src/db-access-object-sql.lisp 184
-  (let* ((class (class-of object))
-	 (update-query 
-	  (loop 
-	     :for (slot &rest old-value) 
-	     :in (remove-duplicates (slot-value object '%persistent/modifications) 
-				    :key #'car)
-	     :nconc (list (slot-definition-column-name (find slot (class-slots class) :key #'slot-definition-name))
-			  (if (slot-boundp object slot)
-			      (let ((val (slot-value object slot)))
-				(if (db-access-object-p val)
-				    (object-id val)
-				    val)) 
-			      :NULL)))))
-    ;; Update related tables *before* updating primary object in case
-    ;; any CASCADEd columns are changed
-    (update-foreign-objects object)
-    (apply #'update (class-table-name class) 
-	   :set (nconc  update-query
-			(list  :where `(:= ,(class-id-column-name class)
-					   ,(slot-value object (class-id-column-name class)))))))
+  #+nil(break "update: ~A" object)
+  ;; Update related tables *before* updating primary object in case
+  ;; any CASCADEd columns are changed
+  (update-foreign-objects object)
+  (when (slot-value object '%persistent/modifications)
+    (let* ((class (class-of object))
+	   (update-query 
+	    (loop 
+	       :for (slot &rest old-value) 
+	       :in (remove-duplicates (slot-value object '%persistent/modifications) 
+				      :key #'car)
+	       :nconc (list (slot-definition-column-name (find slot (class-slots class) :key #'slot-definition-name))
+			    (if (slot-boundp object slot)
+				(let ((val (slot-value object slot)))
+				  (if (db-access-object-p val)
+				      (object-id val)
+				      val)) 
+				:NULL)))))
+      (apply #'update (class-table-name class) 
+	     :set (nconc  update-query
+			  (list  :where `(:= ,(class-id-column-name class)
+					     ,(slot-value object (class-id-column-name class))))))))