X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fsql.lisp;h=273b8498d55eff1982ef69dd46aa397125b42640;hb=5990bfce392a05c10237d4f97b008c4f828028e5;hp=a904c89ba7af437459d289932cc3f3c4bb6fda18;hpb=6c70be35cc348b559d8aa869ecd0e14e27d5edbc;p=clsql.git diff --git a/sql/sql.lisp b/sql/sql.lisp index a904c89..273b849 100644 --- a/sql/sql.lisp +++ b/sql/sql.lisp @@ -12,11 +12,10 @@ ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ************************************************************************* -(in-package #:clsql-sys) +(in-package #:clsql) ;;; Basic operations on databases - (defmethod database-query-result-set ((expr %sql-expression) database &key full-set result-types) (database-query-result-set (sql-output expr database) database @@ -27,28 +26,26 @@ (execute-command (sql-output expr database) :database database) (values)) -(defmethod explain ((expr %sql-expression) &key (database *default-database*)) - (let ((expression (sql-output expr database))) - (format *standard-output* "explain: ~S~%" expression) - (execute-command (concatenate 'string "explain " expression)))) - (defmethod query ((expr %sql-expression) &key (database *default-database*) - (result-types nil) (flatp nil)) + (result-types :auto) (flatp nil) (field-names t)) (query (sql-output expr database) :database database :flatp flatp - :result-types result-types)) + :result-types result-types :field-names field-names)) -(defun truncate-database (database) +(defun truncate-database (&key (database *default-database*)) (unless (typep database 'database) - (clsql-base-sys::signal-no-database-error database)) + (clsql-base::signal-no-database-error database)) (unless (is-database-open database) (database-reconnect database)) - (dolist (table (list-tables database)) - (drop-table table database)) - (dolist (index (list-indexes database)) - (drop-index index database)) - (dolist (seq (list-sequences database)) - (drop-sequence seq database))) + (when (db-type-has-views? (database-underlying-type database)) + (dolist (view (list-views :database database)) + (drop-view view :database database))) + (dolist (table (list-tables :database database)) + (drop-table table :database database)) + (dolist (index (list-indexes :database database)) + (drop-index index :database database)) + (dolist (seq (list-sequences :database database)) + (drop-sequence seq :database database))) (defun print-query (query-exp &key titles (formats t) (sizes t) (stream t) (database *default-database*)) @@ -71,7 +68,7 @@ value of T. This specifies that *STANDARD-OUTPUT* is used." (mapcan #'(lambda (s f) (list s f)) sizes record))))) (let* ((query-exp (etypecase query-exp (string query-exp) - (sql-query (sql-output query-exp)))) + (sql-query (sql-output query-exp database)))) (data (query query-exp :database database)) (sizes (if (or (null sizes) (listp sizes)) sizes (compute-sizes (if titles (cons titles data) data)))) @@ -193,10 +190,11 @@ condition is true." (let ((keyword-package (symbol-package :foo))) (defmethod database-output-sql ((sym symbol) database) - (declare (ignore database)) - (if (equal (symbol-package sym) keyword-package) - (concatenate 'string "'" (string sym) "'") - (symbol-name sym)))) + (convert-to-db-default-case + (if (equal (symbol-package sym) keyword-package) + (concatenate 'string "'" (string sym) "'") + (symbol-name sym)) + database))) (defmethod database-output-sql ((tee (eql t)) database) (declare (ignore database)) @@ -222,6 +220,10 @@ condition is true." (declare (ignore database)) (db-timestring self)) +(defmethod database-output-sql ((self duration) database) + (declare (ignore database)) + (format nil "'~a'" (duration-timestring self))) + (defmethod database-output-sql (thing database) (if (or (null thing) (eq 'null thing)) @@ -232,17 +234,17 @@ condition is true." :format-arguments (list (type-of thing) (type-of database))))) -(defmethod output-sql-hash-key ((arg vector) &optional database) +(defmethod output-sql-hash-key ((arg vector) database) (list 'vector (map 'list (lambda (arg) (or (output-sql-hash-key arg database) (return-from output-sql-hash-key nil))) arg))) -(defmethod output-sql (expr &optional (database *default-database*)) +(defmethod output-sql (expr database) (write-string (database-output-sql expr database) *sql-stream*) (values)) -(defmethod output-sql ((expr list) &optional (database *default-database*)) +(defmethod output-sql ((expr list) database) (if (null expr) (write-string +null-string+ *sql-stream*) (progn @@ -259,7 +261,8 @@ condition is true." &key (database *default-database*)) (database-describe-table database - (string-downcase (symbol-name (slot-value table 'name))))) + (convert-to-db-default-case + (symbol-name (slot-value table 'name)) database))) #+nil (defmethod add-storage-class ((self database) (class symbol) &key (sequence t))