X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fgeneric-postgresql.lisp;fp=sql%2Fgeneric-postgresql.lisp;h=67175de0373272ad118d03599c9fde50200d3fc4;hp=25f67082b6e123974477922f16cd3c3784c81120;hb=3c3aa36478f0609e60d83e6c936bf2096fcae726;hpb=d723e681ead5613b5ad8ad463c0bbd0c8f6aba1f diff --git a/sql/generic-postgresql.lisp b/sql/generic-postgresql.lisp index 25f6708..67175de 100644 --- a/sql/generic-postgresql.lisp +++ b/sql/generic-postgresql.lisp @@ -218,7 +218,7 @@ (defmethod database-set-sequence-position (name (position integer) (database generic-postgresql-database)) (values - (parse-integer + (parse-integer (caar (database-query (format nil "SELECT SETVAL ('~A', ~A)" name position) @@ -241,6 +241,20 @@ (concatenate 'string "SELECT LAST_VALUE FROM " sequence-name) database nil nil))))) +(defmethod database-last-auto-increment-id ((database generic-postgresql-database) table column) + (typecase table + (sql-ident (setf table (slot-value table 'name))) + (standard-db-class (setf table (view-table table)))) + (typecase column + (sql-ident (setf column (slot-value column 'name))) + (view-class-slot-definition-mixin + (setf column (view-class-slot-column column)))) + (let ((seq-name (format nil "~a_~a_seq" table column))) + (first (clsql:query (format nil "SELECT currval ('~a')" seq-name) + :flatp t + :database database + :result-types '(integer))))) + (defun postgresql-database-list (connection-spec type) (destructuring-bind (host name &rest other-args) connection-spec (declare (ignore name)) @@ -380,3 +394,5 @@ (defmethod db-type-has-prepared-stmt? ((db-type (eql :postgresql-socket))) t) +(defmethod db-type-has-auto-increment? ((db-type (eql :postgresql))) + t) \ No newline at end of file