r9168: fix transaction detection
[clsql.git] / db-mysql / mysql-sql.lisp
index c047b97a95880e8d2054bc432aed080503bea847..074f24eb4a3043b1319c5ad84f3434dd6ec6a313 100644 (file)
   (declare (ignore owner))
   (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 "SHOW TABLES" database nil))))
     
 ;; MySQL 4.1 does not support views 
 ;;; Sequence functions
 
 (defun %sequence-name-to-table (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-equal (subseq table-name 0 11) "_CLSQL_SEQ_")
        (subseq table-name 11)))
 
 (defmethod database-create-sequence (sequence-name
 (defmethod database-list-sequences ((database mysql-database)
                                     &key (owner nil))
   (declare (ignore owner))
-  (mapcar #'(lambda (s) (%table-name-to-sequence-name (car s)))
-          (database-query "SHOW TABLES LIKE '%clsql_seq%'" 
-                          database nil)))
+  (mapcan #'(lambda (s)
+              (let ((sn (%table-name-to-sequence-name (car s))))
+                (and sn (list sn))))
+         (database-query "SHOW TABLES" database nil)))
 
 (defmethod database-set-sequence-position (sequence-name
                                            (position integer)
          (database-disconnect database)
          (setf (slot-value database 'clsql-base-sys::state) :closed))))))
 
+;;; Database capabilities
+
+(defmethod db-type-use-column-on-drop-index? ((db-type (eql :mysql)))
+  t)
+
+(defmethod db-type-has-views? ((db-type (eql :mysql)))
+  ;; MySQL 4.1 will apparently have views, need to check *mysql-client-info*
+  nil)
+
+(defmethod db-type-has-subqueries? ((db-type (eql :mysql)))
+  ;; MySQL 4.1 will apparently have subqueries, need to check *mysql-client-info*
+  nil)
+
+(defmethod db-type-has-boolean-where? ((db-type (eql :mysql)))
+  nil)
+
+(defmethod db-type-transaction-capable? ((db-type (eql :mysql)) database)
+  (let ((tuple (car (database-query "SHOW VARIABLES LIKE 'HAVE_INNODB'" database :auto))))
+    (and tuple (string-equal "YES" (second tuple)))))
 
 (when (clsql-base-sys:database-type-library-loaded :mysql)
   (clsql-base-sys:initialize-database-type :database-type :mysql))
+