First draft at making auto-increment more general.
[clsql.git] / sql / oodml.lisp
index e2f98a342b788044b54594acb5178cf65f9a70f8..e50905e93436755f53f37bbc49ce9f3bcc06412e 100644 (file)
             (list (sql-expression :attribute (view-class-slot-column slot))
                   (db-value-from-slot slot value database))))
 
-        (get-pk (pk-slot)
-          (if (member :auto-increment (listify (view-class-slot-db-constraints pk-slot)))
-              (setf (slot-value obj (slot-definition-name pk-slot))
-                    ;;this should probably be moved into it's own function.
-                    (car (query "SELECT LAST_INSERT_ID();"
-                                :flatp t :field-names nil
-                                :database database)))
-              (slot-value obj (slot-definition-name pk-slot))))
-
         (save-slots-for-class (view-class stored-slot-defs)
           (let ((pk-slot (car (keyslots-for-class view-class)))
                 (table (sql-expression :table (view-table view-class)))
                                          :this-class view-class)
                                  :database database)
                  (when (and pk-slot (not pk))
-                   (setf pk (slot-value obj (slot-definition-name pk-slot)))))
+                   (setf pk (slot-value obj (slot-definition-name pk-slot))))
+                 pk)
                 (t
                  (insert-records :into table
                                  :av-pairs av-pairs
                                  :database database)
-                 (when pk-slot
-                   (setf pk (or pk (get-pk 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-autoincrement-id database
+                                                                      table
+                                                                      pk-slot))))
+
+                   )
+                 pk))))))
 
 
       (save-slots-for-class