X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Ffddl.lisp;h=51f8f05d5d5954b9a174d0bcc7bbd362c39fee67;hp=75bfa97d1eb5fa6ddc428e4aecb547ca2f0b3b55;hb=26533896461bb09509b5df14c767afe85dce324d;hpb=fdd069770e32d0cfa4b66d6e5cfd4540197660ba diff --git a/sql/fddl.lisp b/sql/fddl.lisp index 75bfa97..51f8f05 100644 --- a/sql/fddl.lisp +++ b/sql/fddl.lisp @@ -29,6 +29,31 @@ (symbol (sql-output name database))))) +;; Truncate database + +(defun truncate-database (&key (database *default-database*)) + "Drops all tables, views, indexes and sequences in DATABASE which +defaults to *DEFAULT-DATABASE*." + (unless (typep database 'database) + (signal-no-database-error database)) + (unless (is-database-open database) + (database-reconnect database)) + (when (eq :oracle (database-type database)) + (ignore-errors (execute-command "PURGE RECYCLEBIN" :database 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)) + (when (eq :oracle (database-type database)) + (ignore-errors (execute-command "PURGE RECYCLEBIN" :database database))) + (values)) + + ;; Tables (defun create-table (name description &key (database *default-database*) @@ -54,7 +79,8 @@ supports transactions." (execute-command stmt :database database))) (defun drop-table (name &key (if-does-not-exist :error) - (database *default-database*)) + (database *default-database*) + (owner nil)) "Drops the table called NAME from DATABASE which defaults to *DEFAULT-DATABASE*. If the table does not exist and IF-DOES-NOT-EXIST is :ignore then DROP-TABLE returns nil whereas @@ -62,7 +88,8 @@ an error is signalled if IF-DOES-NOT-EXIST is :error." (let ((table-name (database-identifier name database))) (ecase if-does-not-exist (:ignore - (unless (table-exists-p table-name :database database) + (unless (table-exists-p table-name :database database + :owner owner) (return-from drop-table nil))) (:error t))