-(defmethod database-store-next-row (result-set
- (database aodbc-database)
- list)
- #+aodbc-v2
- (let ((row (dbi:fetch-row (aodbc-result-set-query result-set) nil 'eof)))
- (if (eq row 'eof)
- nil
- (progn
- (loop for elem in row
- for rest on list
- do
- (setf (car rest) elem))
- list))))
-
-;;; Sequence functions
-
-(defun %sequence-name-to-table (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_")
- (subseq table-name 11)))
-
-(defmethod database-create-sequence (sequence-name
- (database aodbc-database))
- (let ((table-name (%sequence-name-to-table sequence-name)))
- (database-execute-command
- (concatenate 'string "CREATE TABLE " table-name
- " (last_value int NOT NULL PRIMARY KEY, increment_by int, min_value int, is_called char(1))")
- database)
- (database-execute-command
- (concatenate 'string "INSERT INTO " table-name
- " VALUES (1,1,1,'f')")
- database)))
-
-(defmethod database-drop-sequence (sequence-name
- (database aodbc-database))
- (database-execute-command
- (concatenate 'string "DROP TABLE " (%sequence-name-to-table sequence-name))
- database))
-
-(defmethod database-list-sequences ((database aodbc-database)
- &key (owner nil))
- (declare (ignore owner))
- (warn "database-list-sequences not implemented for AODBC.")
- nil)
-
-(defmethod database-list-tables ((database aodbc-database)
- &key (owner nil))
- (declare (ignore owner))
- #+aodbc-v2
- (multiple-value-bind (rows col-names)
- (dbi:list-all-database-tables :db (database-aodbc-conn database))
- (declare (ignore col-names))
- ;; TABLE_SCHEM is hard-coded in second column by ODBC Driver Manager
- ;; TABLE_NAME in third column, TABLE_TYPE in fourth column
- (loop for row in rows
- when (and (not (string-equal "information_schema" (nth 1 row)))
- (string-equal "TABLE" (nth 3 row)))
- collect (nth 2 row))))
-
-(defmethod database-list-views ((database aodbc-database)
- &key (owner nil))
- (declare (ignore owner))
- #+aodbc-v2
- (multiple-value-bind (rows col-names)
- (dbi:list-all-database-tables :db (database-aodbc-conn database))
- (declare (ignore col-names))
- ;; TABLE_SCHEM is hard-coded in second column by ODBC Driver Manager
- ;; TABLE_NAME in third column, TABLE_TYPE in fourth column
- (loop for row in rows
- when (and (not (string-equal "information_schema" (nth 1 row)))
- (string-equal "VIEW" (nth 3 row)))
- collect (nth 2 row))))
-
-(defmethod database-list-attributes ((table string) (database aodbc-database)
- &key (owner nil))
- (declare (ignore owner))
- #+aodbc-v2
- (multiple-value-bind (rows col-names)
- (dbi:list-all-table-columns table :db (database-aodbc-conn database))
- (let ((pos (position "COLUMN_NAME" col-names :test #'string-equal)))
- (when pos
- (loop for row in rows
- collect (nth pos row))))))