X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=db-sqlite%2Fsqlite-sql.lisp;h=ca6124ae2bf4e1dfe0c8f46f031e752201f88d06;hb=8b5250e14e3280bdc4641c3b35a8dc68ca4dbde7;hp=5a902c97b024c0bb52eba959890a8076548701b2;hpb=db9892632e6eb7869aea7a94c16b523a82de1501;p=clsql.git diff --git a/db-sqlite/sqlite-sql.lisp b/db-sqlite/sqlite-sql.lisp index 5a902c9..ca6124a 100644 --- a/db-sqlite/sqlite-sql.lisp +++ b/db-sqlite/sqlite-sql.lisp @@ -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) @@ -85,20 +85,26 @@ 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 @@ -188,7 +194,7 @@ ;; Query is copied from .table command of sqlite comamnd line utility. (remove-if #'(lambda (s) (and (>= (length s) 11) - (string= (subseq s 0 11) "_clsql_seq_"))) + (string-equal (subseq s 0 11) "_CLSQL_SEQ_"))) (mapcar #'car (database-query "SELECT name FROM sqlite_master WHERE type='table' UNION ALL SELECT name FROM sqlite_temp_master WHERE type='table' ORDER BY name" database '())))) @@ -210,13 +216,14 @@ (defmethod database-list-table-indexes (table (database sqlite-database) &key (owner nil)) (declare (ignore owner)) - (mapcar #'car - (database-query - (format - nil - "SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='~A' UNION ALL SELECT name FROM sqlite_temp_master WHERE type='index' AND tbl_name='~A' ORDER BY name" - table table) - database nil))) + (let ((*print-circle* nil)) + (mapcar #'car + (database-query + (format + nil + "SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='~A' UNION ALL SELECT name FROM sqlite_temp_master WHERE type='index' AND tbl_name='~A' ORDER BY name" + table table) + database nil)))) (declaim (inline sqlite-table-info)) (defun sqlite-table-info (table database) @@ -238,11 +245,11 @@ return (third field-info))) (defun %sequence-name-to-table-name (sequence-name) - (concatenate 'string "_clsql_seq_" (sql-escape sequence-name))) + (concatenate 'string "_CLSQL_SEQ_" (sql-escape sequence-name))) (defun %table-name-to-sequence-name (table-name) (and (>= (length table-name) 11) - (string= (subseq table-name 0 11) "_clsql_seq_") + (string= (subseq table-name 0 11) "_CLSQL_SEQ_") (subseq table-name 11))) @@ -332,5 +339,10 @@ (or (string-equal ":memory:" name) (and (probe-file name) t)))) +;;; Database capabilities + +(defmethod db-type-has-boolean-where? ((db-type (eql :sqlite))) + nil) +