From: Holger Schauer Date: Wed, 9 Mar 2011 18:26:38 +0000 (+0100) Subject: Fix up patches for postgresql autoincrement support to master version. X-Git-Tag: v5.3.0~2 X-Git-Url: http://git.kpe.io/?p=clsql.git;a=commitdiff_plain;h=5a1fe75645438f98da8bb8819f7858240df06e8e Fix up patches for postgresql autoincrement support to master version. --- diff --git a/sql/generic-postgresql.lisp b/sql/generic-postgresql.lisp index 7716eb2..83c552f 100644 --- a/sql/generic-postgresql.lisp +++ b/sql/generic-postgresql.lisp @@ -428,3 +428,5 @@ (defmethod db-type-has-prepared-stmt? ((db-type (eql :postgresql-socket))) t) +(defmethod db-type-has-auto-increment? ((db-type (eql :postgresql))) + t) diff --git a/sql/oodml.lisp b/sql/oodml.lisp index b570ced..bb6f447 100644 --- a/sql/oodml.lisp +++ b/sql/oodml.lisp @@ -283,7 +283,7 @@ (setf pk (or pk (slot-value obj (slot-definition-name pk-slot)))))) (t - (insert-records :into (sql-expression :table view-class-table) + (insert-records :into (sql-expression :table view-class-table) :av-pairs record-values :database database) @@ -292,19 +292,26 @@ (not (null (view-class-slot-autoincrement-sequence pk-slot)))) (setf (slot-value obj (slot-definition-name pk-slot)) (database-last-auto-increment-id database - table + view-class-table pk-slot))))) - (setf pk (or pk - (slot-value - obj (slot-definition-name pk-slot))))) - (when (eql this-class nil) - (setf (slot-value obj 'view-database) database)))))) + (when pk-slot + (setf pk (or pk + (slot-value + obj (slot-definition-name pk-slot))))) + (when (eql this-class nil) + (setf (slot-value obj 'view-database) database))))))) ;; handle slots with defaults - (dolist (slot slots) - (when (and (slot-exists-p slot 'db-constraints) - (listp (view-class-slot-db-constraints slot)) - (member :default (view-class-slot-db-constraints slot))) - (update-slot-from-record obj (slot-definition-name slot)))) + (let* ((view-class (or this-class (class-of obj))) + (slots (if (normalizedp view-class) + (ordered-class-direct-slots view-class) + (ordered-class-slots view-class)))) + (dolist (slot slots) + (when (and (slot-exists-p slot 'db-constraints) + (listp (view-class-slot-db-constraints slot)) + (member :default (view-class-slot-db-constraints slot))) + (unless (and (slot-boundp obj (slot-definition-name slot)) + (slot-value obj (slot-definition-name slot))) + (update-slot-from-record obj (slot-definition-name slot)))))) pk))