Port changes of generalization of old mysql-specific autoincrement support.
authorHolger Schauer <Holger.Schauer@gmx.de>
Wed, 9 Mar 2011 18:20:37 +0000 (19:20 +0100)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Wed, 30 Mar 2011 00:20:06 +0000 (18:20 -0600)
db-mysql/mysql-sql.lisp
sql/db-interface.lisp
sql/package.lisp

index eef9f42283db629062d267572eed5970a7950c18..503da2a71ddd5f3a16150e76248f67e94ea9e6cb 100644 (file)
                         (%sequence-name-to-table sequence-name))
            database :auto nil))))
 
+(defmethod database-last-auto-increment-id ((database mysql-database) table column)
+  (declare (ignore table column))
+  (car (query "SELECT LAST_INSERT_ID();"
+             :flatp t :field-names nil
+             :database database)))
+
 (defmethod database-create (connection-spec (type (eql :mysql)))
   (destructuring-bind (host name user password) connection-spec
     (let ((database (database-connect (list host "" user password)
index 9c17b544dd0268993a6022e13b3677fadb107959..5cdb719f3ea00cdc4915701fff2abec177aaff49 100644 (file)
@@ -167,6 +167,12 @@ if unable to destory."))
 (defgeneric database-sequence-last (name database)
   (:documentation "Select the last value in sequence NAME in DATABASE."))
 
+(defgeneric database-last-autoincrement-id (database table column)
+  (:documentation "Many databases have the notion of an auto-increment
+  id; i.e. a sequence implicitly on a table. This function should
+  return that ID." ))
+
+
 (defgeneric database-start-transaction (database)
   (:documentation "Start a transaction in DATABASE.")
   (:method ((database t))
index 9e9dcb6b76f3bc110b516429424ed2d8d2318af9..3a9fe7c20f0c25f60183c9881df40f1c899763f1 100644 (file)
      #:database-list-sequences
      #:database-sequence-last
      #:database-sequence-exists-p
+     #:database-last-auto-increment-id
      #:database-list-attributes
      #:database-attribute-type
      #:database-type-library-loaded