[Make `reload-object' actually reload the object from the database clinton@unknownlamer.org**20110212022530 Ignore-this: 30c59c9d8ea37df27afda391f4a3c2bb * Nukes any uncommitted changes ] { hunk ./src/db-access-object-sql.lisp 102 + "Reload object from database, discarding any uncommited changes" hunk ./src/db-access-object-sql.lisp 104 - (dolist (s (class-slots (class-of object))) - (if (slot-definition-foreign-relation s) - (slot-makunbound-using-class (class-of object) object s))) - (make-object-from-plist - (class-name (class-of object)) - (select-only 1 '* :from (class-table-name (class-of object)) - :where `(:= ,(class-id-column-name (class-of object)) - ,(object-id object))))) + (setf (slot-value object '%persistent/modifications) '()) + (let ((updated-object (make-object-from-plist + (class-name (class-of object)) + (select-only 1 '* + :from (class-table-name (class-of object)) + :where `(:= ,(class-id-column-name + (class-of object)) + ,(object-id object)))))) + (dolist (s (class-db-slots (class-of object))) + (cond ((slot-definition-foreign-relation s) + (slot-makunbound-using-class (class-of object) object s)) + (t (setf (slot-value object (slot-definition-name s)) + (slot-value updated-object (slot-definition-name s)))))))) }