X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Foodml.lisp;h=dc010fb886cb4507b01a5689bcf415bc9f86906d;hp=7bf7d5bf77db5adcb9bed1ca976ca7082a2afebb;hb=818295fa37036acb348ff24ea926b9d7c9f33cba;hpb=1011d4f44384e10f45ea0268e5c7fc759f417d3e diff --git a/sql/oodml.lisp b/sql/oodml.lisp index 7bf7d5b..dc010fb 100644 --- a/sql/oodml.lisp +++ b/sql/oodml.lisp @@ -287,23 +287,24 @@ :av-pairs record-values :database database) - (when pk-slot - (if (or (and (listp (view-class-slot-db-constraints pk-slot)) - (member :auto-increment (view-class-slot-db-constraints pk-slot))) - (eql (view-class-slot-db-constraints pk-slot) :auto-increment)) - (unless pk - (let ((db-pk (car (query "SELECT LAST_INSERT_ID();" - :flatp t :field-names nil - :database database)))) - (setf pk db-pk - (slot-value - obj (slot-definition-name pk-slot)) db-pk))) - - (setf pk (or pk - (slot-value - obj (slot-definition-name pk-slot)))))) + (when (and pk-slot (not pk)) + (setf pk (if (member :auto-increment (listify (view-class-slot-db-constraints pk-slot))) + (setf (slot-value obj (slot-definition-name pk-slot)) + (database-last-auto-increment-id database + table + pk-slot))))) + (setf pk (or pk + (slot-value + obj (slot-definition-name pk-slot))))) (when (eql this-class nil) - (setf (slot-value obj 'view-database) database))))))) + (setf (slot-value obj 'view-database) database)))))) + ;; handle slots with defaults + (dolist (slot slots) + (when (and (slot-exists-p slot 'db-constraints) + (listp (view-class-slot-db-constraints slot)) + (member :default (view-class-slot-db-constraints slot))) + (update-slot-from-record obj (slot-definition-name slot)))) + pk)) (defmethod delete-instance-records ((instance standard-db-object))