r10969: 04 Jul 2006 Kevin Rosenberg <kevin@rosenberg.net>
authorKevin M. Rosenberg <kevin@rosenberg.net>
Wed, 5 Jul 2006 02:16:49 +0000 (02:16 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Wed, 5 Jul 2006 02:16:49 +0000 (02:16 +0000)
        * Version 3.6.2
        * db-postgresql/postgresql-sql.lisp: Apply patch from Vladimir Sekissov
        to close connection when failing to connect to database.
        * sql/generic-postgresql.lisp: Apply patch from Joel Reymont
        to avoid dropping system views.
        * sql/oodml.lisp: Apply patch from Joel Reymont to avoid listify
        a nil value [patch sponsored by Flektor]
        * clsql-uffi.asd, uffi/make.sh: Patch from Richard Kreuter
        for netbsd compilation

ChangeLog
clsql-uffi.asd
db-postgresql/postgresql-sql.lisp
debian/changelog
sql/generic-postgresql.lisp
sql/oodml.lisp
uffi/make.sh

index a9f58b37b70e45577fd6356ba9bfd8153a4913a9..11c2918da0cbdf825399261d937215c053d3d801 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+04 Jul 2006  Kevin Rosenberg <kevin@rosenberg.net>
+       * Version 3.6.2
+       * db-postgresql/postgresql-sql.lisp: Apply patch from Vladimir Sekissov
+       to close connection when failing to connect to database.
+       * sql/generic-postgresql.lisp: Apply patch from Joel Reymont
+       to avoid dropping system views.
+       * sql/oodml.lisp: Apply patch from Joel Reymont to avoid listify
+       a nil value [patch sponsored by Flektor]
+       * clsql-uffi.asd, uffi/make.sh: Patch from Richard Kreuter
+       for netbsd compilation
+       
 15 May 2006  Kevin Rosenberg <kevin@rosenberg.net>
        * doc/ref-ooddl.xml: Add documentation for :db-reader and :db-writer
        slots for def-view-class macro [as reported missing by Thomas Fischbacher].
 15 May 2006  Kevin Rosenberg <kevin@rosenberg.net>
        * doc/ref-ooddl.xml: Add documentation for :db-reader and :db-writer
        slots for def-view-class macro [as reported missing by Thomas Fischbacher].
index 19b9fb4ce44afbd342b35a4026c86998b9a6902f..e5a75f6a3c830ae72e2ad887faaa296d7283df54 100644 (file)
@@ -58,8 +58,8 @@
   (unless (operation-done-p o c)
     #-(or win32 mswindows)
     (unless (zerop (run-shell-command
   (unless (operation-done-p o c)
     #-(or win32 mswindows)
     (unless (zerop (run-shell-command
-                   #-freebsd "cd ~A; make"
-                   #+freebsd "cd ~A; gmake"
+                   #-(or freebsd netbsd) "cd ~A; make"
+                   #+(or freebsd netbsd) "cd ~A; gmake"
                    (namestring *clsql-uffi-library-dir*)))
       (error 'operation-error :component c :operation o))))
 
                    (namestring *clsql-uffi-library-dir*)))
       (error 'operation-error :component c :operation o))))
 
@@ -70,7 +70,7 @@
                                                        (find-package '#:uffi))))))
        (and (probe-file lib) (probe-file (component-pathname c))
             (> (file-write-date lib) (file-write-date (component-pathname c)))))))
                                                        (find-package '#:uffi))))))
        (and (probe-file lib) (probe-file (component-pathname c))
             (> (file-write-date lib) (file-write-date (component-pathname c)))))))
-  
+
 (defsystem clsql-uffi
   :name "cl-sql-base"
   :author "Kevin M. Rosenberg <kmr@debian.org>"
 (defsystem clsql-uffi
   :name "cl-sql-base"
   :author "Kevin M. Rosenberg <kmr@debian.org>"
@@ -80,7 +80,7 @@
   :long-description "cl-sql-uffi package provides common helper functions using the UFFI for the CLSQL package."
 
   :depends-on (uffi clsql)
   :long-description "cl-sql-uffi package provides common helper functions using the UFFI for the CLSQL package."
 
   :depends-on (uffi clsql)
-  
+
   :components
   ((:module :uffi
            :components
   :components
   ((:module :uffi
            :components
index 9b4e2503f0b5ac415a64147cad594385c20b6283..d5a13f29befdbbc5eb86c7a5737e2a98e41f9954 100644 (file)
        (declare (type pgsql-conn-def connection))
        (when (not (eq (PQstatus connection) 
                       pgsql-conn-status-type#connection-ok))
        (declare (type pgsql-conn-def connection))
        (when (not (eq (PQstatus connection) 
                       pgsql-conn-status-type#connection-ok))
-         (error 'sql-connection-error
-                :database-type database-type
-                :connection-spec connection-spec
-                :error-id (PQstatus connection)
-                :message (tidy-error-message 
-                          (PQerrorMessage connection))))
+          (let ((pqstatus (PQstatus connection))
+                (pqmessage (tidy-error-message (PQerrorMessage connection))))
+            (PQfinish connection)
+            (error 'sql-connection-error
+                   :database-type database-type
+                   :connection-spec connection-spec
+                   :error-id pqstatus
+                   :message  pqmessage)))
        (make-instance 'postgresql-database
                       :name (database-name-from-spec connection-spec
                                                      database-type)
        (make-instance 'postgresql-database
                       :name (database-name-from-spec connection-spec
                                                      database-type)
index 6c259e414de244fdf0fb7870f824f4d48a7e8f17..08f508e58cd1b226129d8346652b3c3187cd0167 100644 (file)
@@ -1,3 +1,9 @@
+cl-sql (3.6.2-1) unstable; urgency=low
+
+  * New upstream
+
+ -- Kevin M. Rosenberg <kmr@debian.org>  Tue,  4 Jul 2006 19:28:44 -0600
+
 cl-sql (3.6.1-1) unstable; urgency=low
 
   * New upstream, add documentation for db-reader and
 cl-sql (3.6.1-1) unstable; urgency=low
 
   * New upstream, add documentation for db-reader and
index aac16ddc85acad1727bca12b56ce0028ce44c056..5e3e177fb9add4f5f2323b14030bf791d30bab11 100644 (file)
   (mapcar #'car
          (database-query
           (format nil
   (mapcar #'car
          (database-query
           (format nil
-                  "SELECT relname FROM pg_class WHERE (relkind = '~A')~A"
+                   (if (not (eq owner :all))
+                    "
+ SELECT c.relname
+ FROM pg_catalog.pg_class c
+      LEFT JOIN pg_catalog.pg_roles r ON r.oid = c.relowner
+      LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
+ WHERE c.relkind IN ('~A','')
+       AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
+       AND pg_catalog.pg_table_is_visible(c.oid)
+       ~A"
+                    "SELECT relname FROM pg_class WHERE (relkind =
+'~A')~A")
                   type
                   (owner-clause owner))
           database nil nil)))
                   type
                   (owner-clause owner))
           database nil nil)))
index 58622ae9304baff6f596074eb98e8e83187144ba..1f7dce435168765c381ec3f270fe1a3ab0737458 100644 (file)
           (t
            (error "Slot reader is of an unusual type.")))))
 
           (t
            (error "Slot reader is of an unusual type.")))))
 
-(defmethod key-value-from-db (slotdef value database) 
+(defmethod key-value-from-db (slotdef value database)
   (declare (optimize (speed 3) #+cmu (extensions:inhibit-warnings 3)))
   (let ((slot-reader (view-class-slot-db-reader slotdef))
         (slot-type (specified-type slotdef)))
   (declare (optimize (speed 3) #+cmu (extensions:inhibit-warnings 3)))
   (let ((slot-reader (view-class-slot-db-reader slotdef))
         (slot-type (specified-type slotdef)))
                       (db-value-from-slot slot value database)))))
       (let* ((view-class (class-of obj))
             (view-class-table (view-table view-class))
                       (db-value-from-slot slot value database)))))
       (let* ((view-class (class-of obj))
             (view-class-table (view-table view-class))
-            (slots (remove-if-not #'slot-storedp 
+            (slots (remove-if-not #'slot-storedp
                                   (ordered-class-slots view-class)))
             (record-values (mapcar #'slot-value-list slots)))
        (unless record-values
                                   (ordered-class-slots view-class)))
             (record-values (mapcar #'slot-value-list slots)))
        (unless record-values
          (att-ref (generate-attribute-reference view-class slot-def))
          (res (select att-ref :from  view-table :where view-qual
                      :result-types nil)))
          (att-ref (generate-attribute-reference view-class slot-def))
          (res (select att-ref :from  view-table :where view-qual
                      :result-types nil)))
-    (when res 
+    (when res
       (get-slot-values-from-view instance (list slot-def) (car res)))))
 
 
       (get-slot-values-from-view instance (list slot-def) (car res)))))
 
 
       (format nil "INT(~A)" (car args))
     "INT"))
 
       (format nil "INT(~A)" (car args))
     "INT"))
 
-(deftype tinyint () 
+(deftype tinyint ()
   "An 8-bit integer, this width may vary by SQL implementation."
   'integer)
 
   "An 8-bit integer, this width may vary by SQL implementation."
   'integer)
 
   (declare (ignore args database db-type))
   "INT")
 
   (declare (ignore args database db-type))
   "INT")
 
-(deftype smallint () 
+(deftype smallint ()
   "An integer smaller than a 32-bit integer. this width may vary by SQL implementation."
   'integer)
 
   "An integer smaller than a 32-bit integer. this width may vary by SQL implementation."
   'integer)
 
   (declare (ignore args database db-type))
   "INT")
 
   (declare (ignore args database db-type))
   "INT")
 
-(deftype mediumint () 
+(deftype mediumint ()
   "An integer smaller than a 32-bit integer, but may be larger than a smallint. This width may vary by SQL implementation."
   'integer)
 
   "An integer smaller than a 32-bit integer, but may be larger than a smallint. This width may vary by SQL implementation."
   'integer)
 
   (declare (ignore args database db-type))
   "INT")
 
   (declare (ignore args database db-type))
   "INT")
 
-(deftype bigint () 
+(deftype bigint ()
   "An integer larger than a 32-bit integer, this width may vary by SQL implementation."
   'integer)
 
   "An integer larger than a 32-bit integer, this width may vary by SQL implementation."
   'integer)
 
   (declare (ignore args database db-type))
   "BIGINT")
 
   (declare (ignore args database db-type))
   "BIGINT")
 
-(deftype varchar (&optional size) 
+(deftype varchar (&optional size)
   "A variable length string for the SQL varchar type."
   (declare (ignore size))
   'string)
   "A variable length string for the SQL varchar type."
   (declare (ignore size))
   'string)
       (format nil "CHAR(~A)" (car args))
       (format nil "VARCHAR(~D)" *default-string-length*)))
 
       (format nil "CHAR(~A)" (car args))
       (format nil "VARCHAR(~D)" *default-string-length*)))
 
-(deftype universal-time () 
+(deftype universal-time ()
   "A positive integer as returned by GET-UNIVERSAL-TIME."
   '(integer 1 *))
 
   "A positive integer as returned by GET-UNIVERSAL-TIME."
   '(integer 1 *))
 
       (format nil "FLOAT(~A)" (car args))
       "FLOAT"))
 
       (format nil "FLOAT(~A)" (car args))
       "FLOAT"))
 
-(deftype generalized-boolean () 
+(deftype generalized-boolean ()
   "A type which outputs a SQL boolean value, though any lisp type can be stored in the slot."
   t)
 
   "A type which outputs a SQL boolean value, though any lisp type can be stored in the slot."
   t)
 
 (defmethod read-sql-value (val (type (eql 'char)) database db-type)
   (declare (ignore database db-type))
   (schar val 0))
 (defmethod read-sql-value (val (type (eql 'char)) database db-type)
   (declare (ignore database db-type))
   (schar val 0))
-              
+
 (defmethod read-sql-value (val (type (eql 'keyword)) database db-type)
   (declare (ignore database db-type))
   (when (< 0 (length val))
 (defmethod read-sql-value (val (type (eql 'keyword)) database db-type)
   (declare (ignore database db-type))
   (when (< 0 (length val))
-    (intern (symbol-name-default-case val) 
+    (intern (symbol-name-default-case val)
            (find-package '#:keyword))))
 
 (defmethod read-sql-value (val (type (eql 'symbol)) database db-type)
            (find-package '#:keyword))))
 
 (defmethod read-sql-value (val (type (eql 'symbol)) database db-type)
         (target-class (find-class target-name)))
     (when res
       (mapcar (lambda (obj)
         (target-class (find-class target-name)))
     (when res
       (mapcar (lambda (obj)
-               (list 
+               (list
                 (car
                 (car
-                 (fault-join-slot-raw 
+                 (fault-join-slot-raw
                   target-class
                   obj
                   (find target-name (class-slots (class-of obj))
                   target-class
                   obj
                   (find target-name (class-slots (class-of obj))
 
 (defun fault-join-target-slot (class object slot-def)
   (let* ((dbi (view-class-slot-db-info slot-def))
 
 (defun fault-join-target-slot (class object slot-def)
   (let* ((dbi (view-class-slot-db-info slot-def))
-        (ts (gethash :target-slot dbi)) 
+        (ts (gethash :target-slot dbi))
         (jc  (gethash :join-class dbi))
         (jc-view-table (view-table (find-class jc)))
         (tdbi (view-class-slot-db-info
         (jc  (gethash :join-class dbi))
         (jc-view-table (view-table (find-class jc)))
         (tdbi (view-class-slot-db-info
-               (find ts (class-slots (find-class jc)) 
-                     :key #'slot-definition-name))) 
+               (find ts (class-slots (find-class jc))
+                     :key #'slot-definition-name)))
         (retrieval (gethash :retrieval tdbi))
         (tsc (gethash :join-class tdbi))
         (ts-view-table (view-table (find-class tsc)))
         (jq (join-qualifier class object slot-def))
         (key (slot-value object (gethash :home-key dbi))))
         (retrieval (gethash :retrieval tdbi))
         (tsc (gethash :join-class tdbi))
         (ts-view-table (view-table (find-class tsc)))
         (jq (join-qualifier class object slot-def))
         (key (slot-value object (gethash :home-key dbi))))
-  
+
     (when jq
       (ecase retrieval
        (:immediate
         (let ((res
     (when jq
       (ecase retrieval
        (:immediate
         (let ((res
-               (find-all (list tsc) 
+               (find-all (list tsc)
                          :inner-join (sql-expression :table jc-view-table)
                          :inner-join (sql-expression :table jc-view-table)
-                         :on (sql-operation 
+                         :on (sql-operation
                               '==
                               '==
-                              (sql-expression 
-                               :attribute (gethash :foreign-key tdbi) 
+                              (sql-expression
+                               :attribute (gethash :foreign-key tdbi)
                                :table ts-view-table)
                                :table ts-view-table)
-                              (sql-expression 
-                               :attribute (gethash :home-key tdbi) 
+                              (sql-expression
+                               :attribute (gethash :home-key tdbi)
                                :table jc-view-table))
                          :where jq
                          :result-types :auto
                                :table jc-view-table))
                          :where jq
                          :result-types :auto
           (mapcar #'(lambda (i)
                       (let* ((instance (car i))
                              (jcc (make-instance jc :view-database (view-database instance))))
           (mapcar #'(lambda (i)
                       (let* ((instance (car i))
                              (jcc (make-instance jc :view-database (view-database instance))))
-                        (setf (slot-value jcc (gethash :foreign-key dbi)) 
+                        (setf (slot-value jcc (gethash :foreign-key dbi))
                               key)
                               key)
-                        (setf (slot-value jcc (gethash :home-key tdbi)) 
+                        (setf (slot-value jcc (gethash :home-key tdbi))
                               (slot-value instance (gethash :foreign-key tdbi)))
                      (list instance jcc)))
                   res)))
                               (slot-value instance (gethash :foreign-key tdbi)))
                      (list instance jcc)))
                   res)))
                       (jcc (make-instance jc :view-database (view-database object)))
                       (fk (car k)))
                   (setf (slot-value instance (gethash :home-key tdbi)) fk)
                       (jcc (make-instance jc :view-database (view-database object)))
                       (fk (car k)))
                   (setf (slot-value instance (gethash :home-key tdbi)) fk)
-                  (setf (slot-value jcc (gethash :foreign-key dbi)) 
+                  (setf (slot-value jcc (gethash :foreign-key dbi))
                         key)
                         key)
-                  (setf (slot-value jcc (gethash :home-key tdbi)) 
+                  (setf (slot-value jcc (gethash :home-key tdbi))
                         fk)
                   (list instance jcc)))
             (select (sql-expression :attribute (gethash :foreign-key tdbi) :table jc-view-table)
                         fk)
                   (list instance jcc)))
             (select (sql-expression :attribute (gethash :foreign-key tdbi) :table jc-view-table)
@@ -711,7 +711,7 @@ maximum of MAX-LEN instances updated in each query."
       (setq class-name (class-name (class-of (first objects)))))
     (let* ((class (find-class class-name))
           (class-slots (ordered-class-slots class))
       (setq class-name (class-name (class-of (first objects)))))
     (let* ((class (find-class class-name))
           (class-slots (ordered-class-slots class))
-          (slotdefs 
+          (slotdefs
            (if (eq t slots)
                (generate-retrieval-joins-list class :deferred)
              (remove-if #'null
            (if (eq t slots)
                (generate-retrieval-joins-list class :deferred)
              (remove-if #'null
@@ -738,7 +738,7 @@ maximum of MAX-LEN instances updated in each query."
                               objects)))))
               (n-object-keys (length object-keys))
               (query-len (or max-len n-object-keys)))
                               objects)))))
               (n-object-keys (length object-keys))
               (query-len (or max-len n-object-keys)))
-         
+
          (do ((i 0 (+ i query-len)))
              ((>= i n-object-keys))
            (let* ((keys (if max-len
          (do ((i 0 (+ i query-len)))
              ((>= i n-object-keys))
            (let* ((keys (if max-len
@@ -764,7 +764,7 @@ maximum of MAX-LEN instances updated in each query."
                                                :key #'(lambda (res)
                                                         (slot-value res
                                                                     foreign-key)))
                                                :key #'(lambda (res)
                                                         (slot-value res
                                                                     foreign-key)))
-                                
+
                                 (progn
                                   (when (gethash :target-slot dbi)
                                     (fault-join-target-slot class object slotdef))))))
                                 (progn
                                   (when (gethash :target-slot dbi)
                                     (fault-join-target-slot class object slotdef))))))
@@ -777,7 +777,7 @@ maximum of MAX-LEN instances updated in each query."
   (let* ((dbi (view-class-slot-db-info slot-def))
         (jc (gethash :join-class dbi)))
     (let ((jq (join-qualifier class object slot-def)))
   (let* ((dbi (view-class-slot-db-info slot-def))
         (jc (gethash :join-class dbi)))
     (let ((jq (join-qualifier class object slot-def)))
-      (when jq 
+      (when jq
         (select jc :where jq :flatp t :result-types nil
                :database (view-database object))))))
 
         (select jc :where jq :flatp t :result-types nil
                :database (view-database object))))))
 
@@ -848,11 +848,11 @@ maximum of MAX-LEN instances updated in each query."
                    (join-vals (subseq vals (list-length selects)))
                    (joins (mapcar #'(lambda (c) (when c (make-instance c :view-database database)))
                                   jclasses)))
                    (join-vals (subseq vals (list-length selects)))
                    (joins (mapcar #'(lambda (c) (when c (make-instance c :view-database database)))
                                   jclasses)))
-              
-              ;;(format t "joins: ~S~%db-vals: ~S~%join-values: ~S~%selects: ~S~%immediate-selects: ~S~%" 
+
+              ;;(format t "joins: ~S~%db-vals: ~S~%join-values: ~S~%selects: ~S~%immediate-selects: ~S~%"
               ;;joins db-vals join-vals selects immediate-selects)
               ;;joins db-vals join-vals selects immediate-selects)
-              
-              ;; use refresh keyword here 
+
+              ;; use refresh keyword here
               (setf obj (get-slot-values-from-view obj (mapcar #'car selects) db-vals))
               (mapc #'(lambda (jo)
                         ;; find all immediate-select slots and join-vals for this object
               (setf obj (get-slot-values-from-view obj (mapcar #'car selects) db-vals))
               (mapc #'(lambda (jo)
                         ;; find all immediate-select slots and join-vals for this object
@@ -865,7 +865,7 @@ maximum of MAX-LEN instances updated in each query."
                                                                    :test #'eq))
                                                      slots))))
                           (get-slot-values-from-view jo
                                                                    :test #'eq))
                                                      slots))))
                           (get-slot-values-from-view jo
-                                                     (mapcar #'car 
+                                                     (mapcar #'car
                                                              (mapcar #'(lambda (pos)
                                                                          (nth pos immediate-selects))
                                                                      pos-list))
                                                              (mapcar #'(lambda (pos)
                                                                          (nth pos immediate-selects))
                                                                      pos-list))
@@ -873,9 +873,9 @@ maximum of MAX-LEN instances updated in each query."
                                                              pos-list))))
                     joins)
               (mapc
                                                              pos-list))))
                     joins)
               (mapc
-               #'(lambda (jc) 
-                   (let ((slot (find (class-name (class-of jc)) (class-slots vclass) 
-                                     :key #'(lambda (slot) 
+               #'(lambda (jc)
+                   (let ((slot (find (class-name (class-of jc)) (class-slots vclass)
+                                     :key #'(lambda (slot)
                                               (when (and (eq :join (view-class-slot-db-kind slot))
                                                          (eq (slot-definition-name slot)
                                                              (gethash :join-class (view-class-slot-db-info slot))))
                                               (when (and (eq :join (view-class-slot-db-kind slot))
                                                          (eq (slot-definition-name slot)
                                                              (gethash :join-class (view-class-slot-db-info slot))))
@@ -886,7 +886,7 @@ maximum of MAX-LEN instances updated in each query."
               (when refresh (instance-refreshed obj))
               obj)))
     (let* ((objects
               (when refresh (instance-refreshed obj))
               obj)))
     (let* ((objects
-           (mapcar #'(lambda (sclass jclass sel immediate-join instance) 
+           (mapcar #'(lambda (sclass jclass sel immediate-join instance)
                        (prog1
                            (build-object vals sclass jclass sel immediate-join instance)
                          (setf vals (nthcdr (+ (list-length sel) (list-length immediate-join))
                        (prog1
                            (build-object vals sclass jclass sel immediate-join instance)
                          (setf vals (nthcdr (+ (list-length sel) (list-length immediate-join))
@@ -896,11 +896,11 @@ maximum of MAX-LEN instances updated in each query."
          (car objects)
        objects))))
 
          (car objects)
        objects))))
 
-(defun find-all (view-classes 
+(defun find-all (view-classes
                 &rest args
                 &rest args
-                &key all set-operation distinct from where group-by having 
-                     order-by offset limit refresh flatp result-types 
-                      inner-join on 
+                &key all set-operation distinct from where group-by having
+                     order-by offset limit refresh flatp result-types
+                      inner-join on
                      (database *default-database*)
                      instances)
   "Called by SELECT to generate object query results when the
                      (database *default-database*)
                      instances)
   "Called by SELECT to generate object query results when the
@@ -924,7 +924,7 @@ maximum of MAX-LEN instances updated in each query."
     (remf args :instances)
     (let* ((*db-deserializing* t)
           (sclasses (mapcar #'find-class view-classes))
     (remf args :instances)
     (let* ((*db-deserializing* t)
           (sclasses (mapcar #'find-class view-classes))
-          (immediate-join-slots 
+          (immediate-join-slots
            (mapcar #'(lambda (c) (generate-retrieval-joins-list c :immediate)) sclasses))
           (immediate-join-classes
            (mapcar #'(lambda (jcs)
            (mapcar #'(lambda (c) (generate-retrieval-joins-list c :immediate)) sclasses))
           (immediate-join-classes
            (mapcar #'(lambda (jcs)
@@ -949,21 +949,21 @@ maximum of MAX-LEN instances updated in each query."
           (order-by-slots (mapcar #'(lambda (ob) (if (atom ob) ob (car ob)))
                                   (listify order-by)))
           (join-where nil))
           (order-by-slots (mapcar #'(lambda (ob) (if (atom ob) ob (car ob)))
                                   (listify order-by)))
           (join-where nil))
-          
+
 
       ;;(format t "sclasses: ~W~%ijc: ~W~%tables: ~W~%" sclasses immediate-join-classes tables)
 
       ;;(format t "sclasses: ~W~%ijc: ~W~%tables: ~W~%" sclasses immediate-join-classes tables)
-      
+
       (dolist (ob order-by-slots)
        (when (and ob (not (member ob (mapcar #'cdr fullsels)
                                   :test #'ref-equal)))
       (dolist (ob order-by-slots)
        (when (and ob (not (member ob (mapcar #'cdr fullsels)
                                   :test #'ref-equal)))
-         (setq fullsels 
+         (setq fullsels
            (append fullsels (mapcar #'(lambda (att) (cons nil att))
                                     order-by-slots)))))
       (dolist (ob (listify distinct))
            (append fullsels (mapcar #'(lambda (att) (cons nil att))
                                     order-by-slots)))))
       (dolist (ob (listify distinct))
-       (when (and (typep ob 'sql-ident) 
-                  (not (member ob (mapcar #'cdr fullsels) 
+       (when (and (typep ob 'sql-ident)
+                  (not (member ob (mapcar #'cdr fullsels)
                                :test #'ref-equal)))
                                :test #'ref-equal)))
-         (setq fullsels 
+         (setq fullsels
              (append fullsels (mapcar #'(lambda (att) (cons nil att))
                                       (listify ob))))))
       (mapcar #'(lambda (vclass jclasses jslots)
              (append fullsels (mapcar #'(lambda (att) (cons nil att))
                                       (listify ob))))))
       (mapcar #'(lambda (vclass jclasses jslots)
@@ -983,19 +983,19 @@ maximum of MAX-LEN instances updated in each query."
                              (when join-where (listify join-where))))))
                     jclasses jslots)))
              sclasses immediate-join-classes immediate-join-slots)
                              (when join-where (listify join-where))))))
                     jclasses jslots)))
              sclasses immediate-join-classes immediate-join-slots)
-      (when where 
-       (setq where (listify where)))
+      ;; Reported buggy on clsql-devel
+      ;; (when where (setq where (listify where)))
       (cond
        ((and where join-where)
        (setq where (list (apply #'sql-and where join-where))))
        ((and (null where) (> (length join-where) 1))
        (setq where (list (apply #'sql-and join-where)))))
       (cond
        ((and where join-where)
        (setq where (list (apply #'sql-and where join-where))))
        ((and (null where) (> (length join-where) 1))
        (setq where (list (apply #'sql-and join-where)))))
-      
-      (let* ((rows (apply #'select 
+
+      (let* ((rows (apply #'select
                          (append (mapcar #'cdr fullsels)
                          (append (mapcar #'cdr fullsels)
-                                 (cons :from 
-                                       (list (append (when from (listify from)) 
-                                                     (listify tables)))) 
+                                 (cons :from
+                                       (list (append (when from (listify from))
+                                                     (listify tables))))
                                  (list :result-types result-types)
                                  (when where
                                    (list :where where))
                                  (list :result-types result-types)
                                  (when where
                                    (list :where where))
@@ -1008,10 +1008,10 @@ maximum of MAX-LEN instances updated in each query."
                                        ((= i instances-to-add) res)
                                      (push (make-list (length sclasses) :initial-element nil) res)))
                instances))
                                        ((= i instances-to-add) res)
                                      (push (make-list (length sclasses) :initial-element nil) res)))
                instances))
-            (objects (mapcar 
+            (objects (mapcar
                       #'(lambda (row instance)
                           (build-objects row sclasses immediate-join-classes sels
                       #'(lambda (row instance)
                           (build-objects row sclasses immediate-join-classes sels
-                                         immediate-join-sels database refresh flatp 
+                                         immediate-join-sels database refresh flatp
                                          (if (and flatp (atom instance))
                                              (list instance)
                                            instance)))
                                          (if (and flatp (atom instance))
                                              (list instance)
                                            instance)))
@@ -1024,12 +1024,12 @@ maximum of MAX-LEN instances updated in each query."
   "Controls whether SELECT caches objects by default. The CommonSQL
 specification states caching is on by default.")
 
   "Controls whether SELECT caches objects by default. The CommonSQL
 specification states caching is on by default.")
 
-(defun select (&rest select-all-args) 
+(defun select (&rest select-all-args)
    "Executes a query on DATABASE, which has a default value of
 *DEFAULT-DATABASE*, specified by the SQL expressions supplied
 using the remaining arguments in SELECT-ALL-ARGS. The SELECT
 argument can be used to generate queries in both functional and
    "Executes a query on DATABASE, which has a default value of
 *DEFAULT-DATABASE*, specified by the SQL expressions supplied
 using the remaining arguments in SELECT-ALL-ARGS. The SELECT
 argument can be used to generate queries in both functional and
-object oriented contexts. 
+object oriented contexts.
 
 In the functional case, the required arguments specify the
 columns selected by the query and may be symbolic SQL expressions
 
 In the functional case, the required arguments specify the
 columns selected by the query and may be symbolic SQL expressions
@@ -1047,7 +1047,7 @@ types are automatically computed for each field. FIELD-NAMES is t
 by default which means that the second value returned is a list
 of strings representing the columns selected by the query. If
 FIELD-NAMES is nil, the list of column names is not returned as a
 by default which means that the second value returned is a list
 of strings representing the columns selected by the query. If
 FIELD-NAMES is nil, the list of column names is not returned as a
-second value. 
+second value.
 
 In the object oriented case, the required arguments to SELECT are
 symbols denoting View Classes which specify the database tables
 
 In the object oriented case, the required arguments to SELECT are
 symbols denoting View Classes which specify the database tables
@@ -1079,7 +1079,7 @@ as elements of a list."
          (query-get-selections select-all-args)
        (unless (or *default-database* (getf qualifier-args :database))
          (signal-no-database-error nil))
          (query-get-selections select-all-args)
        (unless (or *default-database* (getf qualifier-args :database))
          (signal-no-database-error nil))
-       
+
        (cond
          ((select-objects target-args)
           (let ((caching (getf qualifier-args :caching *default-caching*))
        (cond
          ((select-objects target-args)
           (let ((caching (getf qualifier-args :caching *default-caching*))
@@ -1090,14 +1090,14 @@ as elements of a list."
             (remf qualifier-args :caching)
             (remf qualifier-args :refresh)
             (remf qualifier-args :result-types)
             (remf qualifier-args :caching)
             (remf qualifier-args :refresh)
             (remf qualifier-args :result-types)
-            
+
             ;; Add explicity table name to order-by if not specified and only
             ;; one selected table. This is required so FIND-ALL won't duplicate
             ;; the field
             (when (and order-by (= 1 (length target-args)))
               (let ((table-name  (view-table (find-class (car target-args))))
                     (order-by-list (copy-seq (listify order-by))))
             ;; Add explicity table name to order-by if not specified and only
             ;; one selected table. This is required so FIND-ALL won't duplicate
             ;; the field
             (when (and order-by (= 1 (length target-args)))
               (let ((table-name  (view-table (find-class (car target-args))))
                     (order-by-list (copy-seq (listify order-by))))
-                
+
                 (loop for i from 0 below (length order-by-list)
                       do (etypecase (nth i order-by-list)
                            (sql-ident-attribute
                 (loop for i from 0 below (length order-by-list)
                       do (etypecase (nth i order-by-list)
                            (sql-ident-attribute
@@ -1107,11 +1107,11 @@ as elements of a list."
                             (unless (slot-value (car (nth i order-by-list)) 'qualifier)
                               (setf (slot-value (car (nth i order-by-list)) 'qualifier) table-name)))))
                 (setf (getf qualifier-args :order-by) order-by-list)))
                             (unless (slot-value (car (nth i order-by-list)) 'qualifier)
                               (setf (slot-value (car (nth i order-by-list)) 'qualifier) table-name)))))
                 (setf (getf qualifier-args :order-by) order-by-list)))
-            
+
             (cond
               ((null caching)
                (apply #'find-all target-args
             (cond
               ((null caching)
                (apply #'find-all target-args
-                      (append qualifier-args 
+                      (append qualifier-args
                               (list :result-types result-types :refresh refresh))))
               (t
                (let ((cached (records-cache-results target-args qualifier-args database)))
                               (list :result-types result-types :refresh refresh))))
               (t
                (let ((cached (records-cache-results target-args qualifier-args database)))
@@ -1140,14 +1140,14 @@ as elements of a list."
                           (slot-value expr 'selections))))
             (destructuring-bind (&key (flatp nil)
                                       (result-types :auto)
                           (slot-value expr 'selections))))
             (destructuring-bind (&key (flatp nil)
                                       (result-types :auto)
-                                      (field-names t) 
+                                      (field-names t)
                                       (database *default-database*)
                                       &allow-other-keys)
                 qualifier-args
                                       (database *default-database*)
                                       &allow-other-keys)
                 qualifier-args
-              (query expr :flatp flatp 
-                     :result-types 
+              (query expr :flatp flatp
+                     :result-types
                      ;; specifying a type for an attribute overrides result-types
                      ;; specifying a type for an attribute overrides result-types
-                     (if (some #'(lambda (x) (not (eq t x))) specified-types) 
+                     (if (some #'(lambda (x) (not (eq t x))) specified-types)
                          specified-types
                          result-types)
                      :field-names field-names
                          specified-types
                          result-types)
                      :field-names field-names
@@ -1170,7 +1170,7 @@ as elements of a list."
 
 (defun records-cache-results (targets qualifiers database)
   (when (record-caches database)
 
 (defun records-cache-results (targets qualifiers database)
   (when (record-caches database)
-    (gethash (compute-records-cache-key targets qualifiers) (record-caches database)))) 
+    (gethash (compute-records-cache-key targets qualifiers) (record-caches database))))
 
 (defun (setf records-cache-results) (results targets qualifiers database)
   (unless (record-caches database)
 
 (defun (setf records-cache-results) (results targets qualifiers database)
   (unless (record-caches database)
index 843aa4793ee8cf7d51e2c2939b94391786f953af..746a86268e7d62cbaf32343cc590243a90a6042e 100644 (file)
@@ -4,6 +4,7 @@ case "`uname`" in
     Linux) os_linux=1 ;;
     GNU) os_linux=1 ;;
     FreeBSD) os_freebsd=1 ;;
     Linux) os_linux=1 ;;
     GNU) os_linux=1 ;;
     FreeBSD) os_freebsd=1 ;;
+    NetBSD) os_netbsd=1 ;;
     GNU/kFreeBSD) os_gnukfreebsd=1;;
     Darwin) os_darwin=1 ;;
     SunOS) os_sunos=1 ;;
     GNU/kFreeBSD) os_gnukfreebsd=1;;
     Darwin) os_darwin=1 ;;
     SunOS) os_sunos=1 ;;
@@ -12,7 +13,7 @@ case "`uname`" in
        exit 1 ;;       
 esac
     
        exit 1 ;;       
 esac
     
-if [ "$os_linux" -o "$os_freebsd" -o "$os_gnukfreebsd" ]; then
+if [ "$os_linux" -o "$os_freebsd" -o "$os_gnukfreebsd" -o "$os_netbsd" ]; then
     gcc -fPIC -DPIC -c $SOURCE -o $OBJECT
     ld -shared -soname=$BASE $LDFLAGS $OBJECT -o $SHARED_LIB
 elif [ "$os_darwin" ]; then
     gcc -fPIC -DPIC -c $SOURCE -o $OBJECT
     ld -shared -soname=$BASE $LDFLAGS $OBJECT -o $SHARED_LIB
 elif [ "$os_darwin" ]; then