[A host of fixes! drewc@tech.coop**20090806175823] { hunk ./rofl.asd 44 - :contextl :arnesi :alexandria :parse-number + :contextl :arnesi :alexandria :parse-number :local-time hunk ./src/db-access-class.lisp 100 - (or (call-next-method) + (or (first (call-next-method)) hunk ./src/db-access-class.lisp 103 +(defmethod class-db-slots (class) + (remove '%persistent/modifications (class-slots class) :key #'slot-definition-name)) + hunk ./src/db-access-object-sql.lisp 3 +(defvar *instance-is-persistent* nil) hunk ./src/db-access-object-sql.lisp 6 - (mapcar (curry 'make-object-from-plist type) - (apply select-fn (intern (format nil "*")) - (if (string-equal (first query) :from) - query - (append `(:from ,type) query))))) + (let* ((class (find-class type)) + (fields (remove-duplicates + (mapcar #'slot-definition-column-name + (class-db-slots class))))) + + (mapcar (curry 'make-object-from-plist type) + (apply select-fn + (nconc fields + (if (string-equal (first query) :from) + query + (append `(:from ,(class-table-name class)) query))))))) merger 0.0 ( hunk ./src/db-access-object-sql.lisp 50 +(defun select-only-n-objects (n type &rest query) + (apply #'select-only-n-objects* n nil type query)) + hunk ./src/db-access-object-sql.lisp 50 -(defun make-object-from-plist (type plist) +(defun make-object-from-plist (type plist &optional object) ) hunk ./src/db-access-object-sql.lisp 52 - (object (make-instance class)) + (object (or object (make-instance class))) hunk ./src/db-access-object-sql.lisp 72 - :finally (return object)))) + :finally (return (funcall (if *instance-is-persistent* + #'mark-instance-as-persistent + #'identity) + object))))) hunk ./src/db-access-object-sql.lisp 80 +(defun foreign-relations-makunbound (object) + (when (persistentp object) + (dolist (s (class-slots (class-of object)) object) + (if (slot-definition-foreign-relation s) + (slot-makunbound-using-class (class-of object) object s))))) +(defun reload-object (object) + (when (persistentp object) + (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))))) + object) + hunk ./src/db-access-object-sql.lisp 117 - (when value (ins slotd (slot-value value (class-id-column-name (class-of value)))))) + (when value (ins slotd (slot-value value (class-id-column-name (class-of value)))))) hunk ./src/db-access-object-sql.lisp 138 -(defun insert-object (object) +3(defun insert-object (object) hunk ./src/db-access-object-sql.lisp 146 - (loop :for slotd in (class-slots class) + (loop :for slotd in (class-db-slots class) hunk ./src/db-access-object-sql.lisp 154 - (slot-value value (class-id-column-name (class-of value)))))) + (when value (slot-value value (class-id-column-name (class-of value))))))) hunk ./src/db-access-object-sql.lisp 190 - :do (cond ((eql (slot-definition-name slotd) '%persistent/modifications) + :do (cond ((eql (slot-definition-name slotd) '%persistent/modifications)) hunk ./src/db-access-object-sql.lisp 192 - ) + hunk ./src/db-access-object-sql.lisp 251 + hunk ./src/db-access-object-sql.lisp 340 -in (loop + (loop hunk ./src/db-access-object.lisp 29 - (setf (slot-value db-object '%persistent/modifications) '() ))) + (setf (slot-value db-object '%persistent/modifications) '())) + db-object) hunk ./src/packages.lisp 28 + #:reload-object hunk ./src/packages.lisp 36 - #:object-id)) + #:object-id + + #:define-versioned-database + +)) hunk ./src/rofl.lisp 75 - (loop - :for i :from 0 :to (1- length) - :for byte :across data - :do (setf (elt sequence i) byte) - :finally (incf (trivial-gray-streams:stream-file-position stream) length) + (if (not (eq :null data)) + (loop + :for i :from 0 :to (1- length) + :for byte :across data + :do (setf (elt sequence i) byte) + :finally (incf (trivial-gray-streams:stream-file-position stream) length) hunk ./src/rofl.lisp 82 - (return i) -))) + (return i) + ) + 0))) }