First draft at making auto-increment more general.
[clsql.git] / sql / generic-postgresql.lisp
index 25f67082b6e123974477922f16cd3c3784c81120..67175de0373272ad118d03599c9fde50200d3fc4 100644 (file)
 (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)
       (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))
 (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