t)
(defmethod database-query (query-expression (database odbc-database)
- result-types)
+ result-types field-names)
(handler-case
(odbc-dbi:sql query-expression :db (database-odbc-conn database)
- :result-types result-types)
+ :result-types result-types
+ :column-names field-names)
(clsql-error (e)
(error e))
#+ignore
;;; 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
&key (owner nil))
(declare (ignore owner))
;; FIXME: Underlying database backend stuff should come from that backend
- ;; Would need to use ASDF to ensure underlying backend was loaded
(case (database-odbc-db-type database)
(:mysql
- (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)))
((:postgresql :postgresql-socket)
(mapcar #'(lambda (s) (%table-name-to-sequence-name (car s)))
- (database-query "SELECT RELNAME FROM pg_class WHERE RELNAME LIKE '%clsql_seq%'"
- database nil)))))
+ (database-query "SELECT RELNAME FROM pg_class WHERE RELNAME LIKE '%clsql_seq%'"
+ database nil)))))
(defmethod database-list-tables ((database odbc-database)
&key (owner nil))
(defmethod database-list-table-indexes (table (database odbc-database)
&key (owner nil))
(declare (ignore owner))
+ (odbc-list-table-indexes table database))
+
+(defun odbc-list-table-indexes (table database)
(multiple-value-bind (rows col-names)
(odbc-dbi:list-table-indexes
- (string-downcase table)
+ table
:db (database-odbc-conn database))
(declare (ignore col-names))
;; INDEX_NAME is hard-coded in sixth position by ODBC driver