X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Foodml.lisp;h=7bf7d5bf77db5adcb9bed1ca976ca7082a2afebb;hb=95704a836b85f40018186f97b332fd3873168a53;hp=710e5e8e090c45548e4a41d6948ccd35c7c7536c;hpb=96cc4dd98e77b8a1f83fa850e3348219c957b7ef;p=clsql.git diff --git a/sql/oodml.lisp b/sql/oodml.lisp index 710e5e8..7bf7d5b 100644 --- a/sql/oodml.lisp +++ b/sql/oodml.lisp @@ -265,6 +265,7 @@ (ordered-class-direct-slots view-class) (ordered-class-slots view-class)))) (record-values (mapcar #'slot-value-list slots))) + (cond ((and (not (normalizedp view-class)) (not record-values)) (error "No settable slots.")) @@ -285,16 +286,22 @@ (insert-records :into (sql-expression :table view-class-table) :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 - (car (query "SELECT LAST_INSERT_ID();" - :flatp t :field-names nil - :database database)))) - (setf pk (or pk - (slot-value obj (slot-definition-name pk-slot)))))) + (slot-value + obj (slot-definition-name pk-slot)))))) (when (eql this-class nil) (setf (slot-value obj 'view-database) database))))))) pk))