+
+(defun update-object (object)
+ (let ((class (class-of object))
+ update-query
+ delayed)
+ (flet ((ins (slotd &optional (val (slot-value-using-class class object slotd)))
+ (push (lambda () (push (slot-definition-column-name slotd) update-query)
+ (push val update-query))
+ delayed)))
+ (loop :for slotd in (class-slots class)
+ :do (cond ((slot-boundp-using-class class object slotd)
+ (cond ((or (slot-definition-foreign-relation slotd)
+ )
+ )
+ ((slot-definition-foreign-type slotd)
+ (set-fkey-from-slotd
+ (slot-value-using-class class object slotd)
+ object slotd
+)
+ )
+ (t
+ (ins slotd)) ))
+ ((slot-definition-primary-key-p slotd)
+ (setf (slot-value-using-class class object slotd) (get-default-value (class-table-name class)
+ (slot-definition-column-name slotd)))
+ (ins slotd ))))
+ (map nil #'funcall delayed)
+ (apply #'update (class-table-name class) :set (nconc (nreverse update-query)
+ (list :where `(:= ,(dao-id-column-name class)
+ ,(slot-value object (dao-id-column-name class))
+ ))))))
+ object)
+