r9456: relax type for server-version
[clsql.git] / sql / table.lisp
index 72895cfa97f699ff463b253ae2dcf33cdaa4f01e..bc68a814dbbf0058803f6c6ebb96b310bdddcb51 100644 (file)
 
 (defun database-identifier (name database)
   (sql-escape (etypecase name
-                (string
-                 (convert-to-db-default-case name database))
-                (sql-ident
-                 (sql-output name database))
-                (symbol
-                 (sql-output name database)))))
+               ;; honor case of strings
+                (string name
+                       #+nil (convert-to-db-default-case name database))
+                (sql-ident (sql-output name database))
+                (symbol (sql-output name database)))))
 
 
 ;; Tables 
@@ -45,7 +44,7 @@ databases, if TRANSACTIONS is t an InnoDB table is created which
 supports transactions."
   (let* ((table-name (etypecase name 
                        (symbol (sql-expression :attribute name))
-                       (string (sql-expression :attribute (make-symbol name)))
+                       (string (sql-expression :attribute name))
                        (sql-ident name)))
          (stmt (make-instance 'sql-create-table
                               :name table-name
@@ -55,7 +54,7 @@ supports transactions."
     (execute-command stmt :database database)))
 
 (defun drop-table (name &key (if-does-not-exist :error)
-                        (database *default-database*))
+                            (database *default-database*))
   "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
@@ -67,10 +66,16 @@ an error is signalled if IF-DOES-NOT-EXIST is :error."
          (return-from drop-table nil)))
       (:error
        t))
-    (let ((expr (concatenate 'string "DROP TABLE " table-name
-                            (if (eq :oracle (database-type database))
-                                " PURGE"
-                              ""))))
+    
+    ;; Fixme: move to clsql-oracle
+    (let ((expr (concatenate 'string "DROP TABLE " table-name)))
+      (when (and (find-package 'clsql-oracle)
+                (eq :oracle (database-type database))
+                (eql 10 (slot-value database 
+                                    (intern (symbol-name '#:major-server-version)
+                                            (symbol-name '#:clsql-oracle)))))
+       (setq expr (concatenate 'string expr " PURGE")))
+
       (execute-command expr :database database))))
 
 (defun list-tables (&key (owner nil) (database *default-database*))