r9185: first effort at support field names in QUERY calls, still needs testing
[clsql.git] / db-sqlite / sqlite-sql.lisp
index 86749961bf614c01e5e87fd8c5da70f36c7f075f..ca6124ae2bf4e1dfe0c8f46f031e752201f88d06 100644 (file)
@@ -75,7 +75,7 @@
             :error (sqlite:sqlite-error-message err))))
   t)
 
-(defmethod database-query (query-expression (database sqlite-database) result-types)
+(defmethod database-query (query-expression (database sqlite-database) result-types field-names)
   (declare (ignore result-types))              ; SQLite is typeless!
   (handler-case
       (multiple-value-bind (data row-n col-n)
            nil
            (prog1
                ;; The first col-n elements are column names.
-               (loop for i from col-n below (* (1+ row-n) col-n) by col-n
-                     collect (loop for j from 0 below col-n
-                                   collect
-                                   (#+clisp aref
-                                    #-clisp sqlite:sqlite-aref
-                                            data (+ i j))))
-               #-clisp (sqlite:sqlite-free-table data))
-             ))
+                (values
+                 (loop for i from col-n below (* (1+ row-n) col-n) by col-n
+                       collect (loop for j from 0 below col-n
+                                     collect
+                                     (#+clisp aref
+                                              #-clisp sqlite:sqlite-aref
+                                              data (+ i j))))
+                 (when field-names
+                   (loop for i from 0 below col-n
+                         collect (#+clisp aref
+                                  #-clisp sqlite:sqlite-aref
+                                  data i))))
+              #-clisp (sqlite:sqlite-free-table data))
+            ))
     (sqlite:sqlite-error (err)
-      (error 'clsql-sql-error
-            :database database
-            :expression query-expression
-            :errno (sqlite:sqlite-error-code err)
-            :error (sqlite:sqlite-error-message err)))))
+                         (error 'clsql-sql-error
+                                :database database
+                                :expression query-expression
+                                :errno (sqlite:sqlite-error-code err)
+                                :error (sqlite:sqlite-error-message err)))))
 
 #-clisp
 (defstruct sqlite-result-set