X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=db-mysql%2Fmysql-usql.lisp;fp=db-mysql%2Fmysql-usql.lisp;h=8b198e0c6f13cea8b583d011c583caee1028f188;hb=43ec897ec7d84892fa59cc9b7858ce23d64a8a1a;hp=06f574c6c9393398379ef03cdf6d9ed9e1e3074d;hpb=5e89022823870e5f1b0a255016a8e48d6a9c53b2;p=clsql.git diff --git a/db-mysql/mysql-usql.lisp b/db-mysql/mysql-usql.lisp index 06f574c..8b198e0 100644 --- a/db-mysql/mysql-usql.lisp +++ b/db-mysql/mysql-usql.lisp @@ -21,26 +21,46 @@ ;; Table and attribute introspection -(defmethod database-list-tables ((database mysql-database) - &key (system-tables nil)) - (declare (ignore system-tables)) - (mapcar #'car (database-query "show tables" database :auto))) +(defmethod database-list-tables ((database mysql-database) &key (owner nil)) + (declare (ignore owner)) + (remove-if #'(lambda (s) + (and (>= (length s) 10) + (string= (subseq s 0 10) "_usql_seq_"))) + (mapcar #'car (database-query "SHOW TABLES" database nil)))) +;; MySQL 4.1 does not support views +(defmethod database-list-views ((database mysql-database) + &key (owner nil)) + (declare (ignore owner database)) + nil) -(defmethod database-list-attributes ((table string) (database mysql-database)) +(defmethod database-list-indexes ((database mysql-database) + &key (owner nil)) + (let ((result '())) + (dolist (table (database-list-tables database :owner owner) result) + (mapc #'(lambda (index) (push (nth 2 index) result)) + (database-query + (format nil "SHOW INDEX FROM ~A" (string-upcase table)) + database nil))))) + +(defmethod database-list-attributes ((table string) (database mysql-database) + &key (owner nil)) + (declare (ignore owner)) (mapcar #'car (database-query (format nil "SHOW COLUMNS FROM ~A" table) database nil))) (defmethod database-attribute-type (attribute (table string) - (database mysql-database)) + (database mysql-database) + &key (owner nil)) + (declare (ignore owner)) (let ((result - (mapcar #'cadr - (database-query - (format nil - "SHOW COLUMNS FROM ~A LIKE '~A'" table attribute) - database nil)))) + (mapcar #'cadr + (database-query + (format nil + "SHOW COLUMNS FROM ~A LIKE '~A'" table attribute) + database nil)))) (let* ((str (car result)) (end-str (position #\( str)) (substr (subseq str 0 end-str))) @@ -52,6 +72,11 @@ (defun %sequence-name-to-table (sequence-name) (concatenate 'string "_usql_seq_" (sql-escape sequence-name))) +(defun %table-name-to-sequence-name (table-name) + (and (>= (length table-name) 10) + (string= (subseq table-name 0 10) "_usql_seq_") + (subseq table-name 10))) + (defmethod database-create-sequence (sequence-name (database mysql-database)) (let ((table-name (%sequence-name-to-table sequence-name))) @@ -70,6 +95,22 @@ (concatenate 'string "DROP TABLE " (%sequence-name-to-table sequence-name)) database)) +(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 '%usql_seq%'" + database nil))) + +(defmethod database-set-sequence-position (sequence-name + (position integer) + (database mysql-database)) + (database-execute-command + (format nil "UPDATE ~A SET id=~A" (%sequence-name-to-table sequence-name) + position) + database) + (mysql:mysql-insert-id (clsql-mysql::database-mysql-ptr database))) + (defmethod database-sequence-next (sequence-name (database mysql-database)) (database-execute-command (concatenate 'string "UPDATE " (%sequence-name-to-table sequence-name) @@ -77,6 +118,9 @@ database) (mysql:mysql-insert-id (clsql-mysql::database-mysql-ptr database))) +(defmethod database-sequence-last (sequence-name (database mysql-database)) + (declare (ignore sequence-name database))) + ;; Misc USQL functions #|