Fix DO-QUERY to actually return the last value of body
authorKevin Rosenberg <kevin@rosenberg.net>
Sun, 21 Mar 2010 07:03:59 +0000 (01:03 -0600)
committerKevin Rosenberg <kevin@rosenberg.net>
Sun, 21 Mar 2010 07:03:59 +0000 (01:03 -0600)
ChangeLog
db-mysql/mysql-loader.lisp
sql/fdml.lisp

index 63b51ba0caa11445743f34dbf9a3f489c8b7c23d..dee22b4500ff3ae4303caa3c27234ed429106848 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2010-03-21  Kevin Rosenberg <kevin@rosenberg.net>
+       * sql/fdml.lisp: Fix DO-QUERY to actually return the last value of the body
+
 2010-03-02  Nathan Bird  <nathan@acceleration.net>
        * doc/: Added a README on how to build doc; now builds on Ubuntu.
        * sql/oodml.lisp: READ-SQL-VALUE now has explicit method for
index cdf28cd4f907725d54a18a2fc5b3e918a61cfbbf..afea3e5415359a5dd155b1ff1a86c95c0335d050 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Author:   Kevin M. Rosenberg
 ;;;; Created:  Feb 2002
 ;;;;
-;;;; This file, part of CLSQL, is Copyright (c) 2002-2004 by Kevin M. Rosenberg
+;;;; This file, part of CLSQL, is Copyright (c) 2002-2010 by Kevin M. Rosenberg
 ;;;;
 ;;;; CLSQL users are granted the rights to distribute and use this software
 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
@@ -36,17 +36,16 @@ set to the right path before compiling or loading the system.")
   *mysql-library-loaded*)
 
 (defmethod clsql-sys:database-type-load-foreign ((database-type (eql :mysql)))
-  (clsql:push-library-path clsql-mysql-system::*library-file-dir*)
+  (unless *mysql-library-loaded*
+    (clsql:push-library-path clsql-mysql-system::*library-file-dir*)
 
-  (clsql-uffi:find-and-load-foreign-library *mysql-library-candidate-names*
-                                            :module "mysql"
-                                            :supporting-libraries *mysql-supporting-libraries*)
-
-  (clsql-uffi:find-and-load-foreign-library *clsql-mysql-library-candidate-names*
-                                            :module "clsql-mysql"
-                                            :supporting-libraries *mysql-supporting-libraries*)
-  (setq *mysql-library-loaded* t))
+    (clsql-uffi:find-and-load-foreign-library *mysql-library-candidate-names*
+                                              :module "mysql"
+                                              :supporting-libraries *mysql-supporting-libraries*)
 
+    (clsql-uffi:find-and-load-foreign-library *clsql-mysql-library-candidate-names*
+                                              :module "clsql-mysql"
+                                              :supporting-libraries *mysql-supporting-libraries*)
+    (setq *mysql-library-loaded* t)))
 
 (clsql-sys:database-type-load-foreign :mysql)
-
index fcd6a3dd637e3ada63170a81486825820f794f23..b9a1153268e87ab2bb6f7691212eb450f9abf406 100644 (file)
@@ -209,7 +209,8 @@ types are automatically computed for each field."
         (qe (gensym "QUERY-EXPRESSION-"))
         (columns (gensym "COLUMNS-"))
         (row (gensym "ROW-"))
-        (db (gensym "DB-")))
+        (db (gensym "DB-"))
+        (last-form-eval (gensym "LFE-")))
     `(let ((,qe ,query-expression)
            (,db ,database))
       (typecase ,qe
@@ -226,11 +227,14 @@ types are automatically computed for each field."
                                           :result-types ,result-types)
            (when ,result-set
              (unwind-protect
-                  (do ((,row (make-list ,columns)))
+                  (do ((,row (make-list ,columns))
+                       (,last-form-eval nil))
                       ((not (database-store-next-row ,result-set ,db ,row))
-                       nil)
+                       ,last-form-eval)
                     (destructuring-bind ,args ,row
-                      ,@body))
+                      (setq ,last-form-eval
+                            (progn
+                              ,@body))))
                (database-dump-result-set ,result-set ,db)))))))))
 
 (defun map-query (output-type-spec function query-expression