X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=db-sqlite%2Fsqlite-sql.lisp;h=bc93bb8f53d770c56386e10ef8ff367602518de6;hb=79dacf4fb7e6707e815c3e8072e5c809acaa9386;hp=6fd3f0746a2ab663bc1c1f3eda881ffe91360279;hpb=02c30e92614a52c892cc678933586f71c76fcf30;p=clsql.git diff --git a/db-sqlite/sqlite-sql.lisp b/db-sqlite/sqlite-sql.lisp index 6fd3f07..bc93bb8 100644 --- a/db-sqlite/sqlite-sql.lisp +++ b/db-sqlite/sqlite-sql.lisp @@ -41,6 +41,8 @@ (handler-case (make-instance 'sqlite-database :name (database-name-from-spec connection-spec :sqlite) + :database-type :sqlite + :connection-spec connection-spec :sqlite-db (sqlite:sqlite-open (first connection-spec))) (sqlite:sqlite-error (err) (error 'clsql-connect-error @@ -73,12 +75,12 @@ :error (sqlite:sqlite-error-message err)))) t) -(defmethod database-query (query-expression (database sqlite-database) types) - (declare (ignore types)) ; SQLite is typeless! +(defmethod database-query (query-expression (database sqlite-database) result-types) + (declare (ignore result-types)) ; SQLite is typeless! (handler-case (multiple-value-bind (data row-n col-n) (sqlite:sqlite-get-table (sqlite-db database) query-expression) - #-clisp (declare (type sqlite:sqlite-row-pointer data)) + #-clisp (declare (type sqlite:sqlite-row-pointer-type data)) (if (= row-n 0) nil (prog1 @@ -103,7 +105,7 @@ (vm (sqlite:make-null-vm) :type sqlite:sqlite-vm-pointer) (first-row (sqlite:make-null-row) - :type sqlite:sqlite-row-pointer) + :type sqlite:sqlite-row-pointer-type) (n-col 0 :type fixnum)) #+clisp (defstruct sqlite-result-set @@ -112,8 +114,8 @@ (n-col 0 :type fixnum)) (defmethod database-query-result-set - ((query-expression string) (database sqlite-database) &key full-set types) - (declare (ignore full-set types)) + ((query-expression string) (database sqlite-database) &key full-set result-types) + (declare (ignore full-set result-types)) (handler-case (let* ((vm (sqlite:sqlite-compile (sqlite-db database) query-expression)) @@ -124,7 +126,7 @@ (multiple-value-bind (n-col cols col-names) (sqlite:sqlite-step vm) (declare (ignore col-names) - #-clisp (type sqlite:sqlite-row-pointer cols) + #-clisp (type sqlite:sqlite-row-pointer-type cols) ) (setf (sqlite-result-set-first-row result-set) cols (sqlite-result-set-n-col result-set) n-col) @@ -137,7 +139,6 @@ :error (sqlite:sqlite-error-message err))))) (defmethod database-dump-result-set (result-set (database sqlite-database)) - (declare (ignore database)) (handler-case (sqlite:sqlite-finalize (sqlite-result-set-vm result-set)) (sqlite:sqlite-error (err) @@ -157,7 +158,7 @@ (multiple-value-bind (n new-row col-names) (sqlite:sqlite-step (sqlite-result-set-vm result-set)) (declare (ignore n col-names) - #-clisp (type sqlite:sqlite-row-pointer new-row) + #-clisp (type sqlite:sqlite-row-pointer-type new-row) ) (if (sqlite:null-row-p new-row) (return-from database-store-next-row nil) @@ -186,8 +187,8 @@ (declare (ignore owner)) ;; Query is copied from .table command of sqlite comamnd line utility. (remove-if #'(lambda (s) - (and (>= (length s) 10) - (string= (subseq s 0 10) "_clsql_seq_"))) + (and (>= (length s) 11) + (string= (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 '())))) @@ -229,9 +230,9 @@ (concatenate 'string "_clsql_seq_" (sql-escape sequence-name))) (defun %table-name-to-sequence-name (table-name) - (and (>= (length table-name) 10) - (string= (subseq table-name 0 10) "_clsql_seq_") - (subseq table-name 10))) + (and (>= (length table-name) 11) + (string= (subseq table-name 0 11) "_clsql_seq_") + (subseq table-name 11))) (defmethod database-create-sequence (sequence-name (database sqlite-database)) @@ -282,4 +283,22 @@ (sqlite:sqlite-last-insert-rowid (sqlite-db database)))) (defmethod database-sequence-last (sequence-name (database sqlite-database)) - (declare (ignore sequence-name database))) + (declare (ignore sequence-name))) + +(defmethod database-create (connection-spec (type (eql :sqlite))) + (declare (ignore connection-spec)) + ;; databases are created automatically by SQLite + t) + +(defmethod database-destroy (connection-spec (type (eql :sqlite))) + (destructuring-bind (name) connection-spec + (if (probe-file name) + (delete-file name) + nil))) + +(defmethod database-probe (connection-spec (type (eql :sqlite))) + (destructuring-bind (name) connection-spec + ;; TODO: Add a test that this file is a real sqlite database + (and (probe-file name) t))) + +