fixed sqlite bug where sqlite-aref was called with incorrect args (thanks Zach)
authorRuss Tyndall <russ@acceleration.net>
Wed, 3 Dec 2014 15:30:09 +0000 (10:30 -0500)
committerRuss Tyndall <russ@acceleration.net>
Wed, 3 Dec 2014 15:30:09 +0000 (10:30 -0500)
ChangeLog
db-sqlite/sqlite-sql.lisp

index 4b16c13363afc310e6ce2159df04ead8cced3fa8..7cb22c77b970ef957141a1e60d6a37e34d3ebb71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-03 Russ Tyndall <russ@acceleration.net>
+       * sqlite-sql.lisp
+       Added database arg to `canonicalize-result-types` so that it could
+       correctly call `sqlite-aref` with the required number of arguments
+       Thanks Zach Beane for the bug report.
+
 2014-07-29 Russ Tyndall <russ@acceleration.net>
        * mysql-api.lisp, mysql-sql.lisp, test-connection.lisp
        Added code to the mysql backend to pull all result sets as
index a2bc7cdfcac4cf09ef51285671cc790a0817da4f..ef622dda0257d142cf8b69250aaf80bf4b833d4a 100644 (file)
@@ -99,7 +99,7 @@
                    (setf col-names (loop for i from 0 below n-col
                                          collect (sqlite:sqlite-aref sqlite-col-names i (encoding database)))))
                  (let ((canonicalized-result-types
-                        (canonicalize-result-types result-types n-col sqlite-col-names)))
+                        (canonicalize-result-types result-types n-col sqlite-col-names database)))
                    (flet ((extract-row-data (row)
                             (declare (type sqlite:sqlite-row-pointer-type row))
                             (loop for i from 0 below n-col
                                (canonicalize-result-types
                                 result-types
                                 n-col
-                                col-names))))
+                                col-names
+                                database))))
               (if full-set
                   (values result-set n-col nil)
                   (values result-set n-col)))))
                  :error-id (sqlite:sqlite-error-code err)
                  :message (sqlite:sqlite-error-message err))11)))))
 
-(defun canonicalize-result-types (result-types n-col col-names)
+(defun canonicalize-result-types (result-types n-col col-names database)
   (when result-types
     (let ((raw-types (if (eq :auto result-types)
                          (loop for j from n-col below (* 2 n-col)
-                               collect (ensure-keyword (sqlite:sqlite-aref col-names j)))
+                               collect (ensure-keyword
+                                        (sqlite:sqlite-aref col-names j (encoding database))))
                        result-types)))
       (loop for type in raw-types
             collect