- (error 'clsql-sql-error
- :database database
- :expression query-expression
- :errno nil
- :error "Query failed"))))
-
-(defmethod database-execute-command (sql-expression
- (database aodbc-database))
- #+aodbc-v2
- (handler-case
- (dbi:sql sql-expression :db (database-aodbc-conn database))
- (error ()
- (error 'clsql-sql-error
- :database database
- :expression sql-expression
- :errno nil
- :error "Execute command failed"))))
-
-(defstruct aodbc-result-set
- (query nil)
- (types nil :type cons)
- (full-set nil :type boolean))
-
-(defmethod database-query-result-set ((query-expression string)
- (database aodbc-database)
- &key full-set result-types)
- #+aodbc-v2
- (handler-case
- (multiple-value-bind (query column-names)
- (dbi:sql query-expression
- :db (database-aodbc-conn database)
- :row-count nil
- :column-names t
- :query t
- :types result-types
- )
- (values
- (make-aodbc-result-set :query query :full-set full-set
- :types result-types)
- (length column-names)
- nil ;; not able to return number of rows with aodbc
- ))
- (error ()
- (error 'clsql-sql-error
- :database database
- :expression query-expression
- :errno nil
- :error "Query result set failed"))))
-
-(defmethod database-dump-result-set (result-set (database aodbc-database))
- #+aodbc-v2
- (dbi:close-query (aodbc-result-set-query result-set))
- t)
-
-(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
- " (id int NOT NULL PRIMARY KEY AUTO_INCREMENT)")
- database)
- (database-execute-command
- (concatenate 'string "INSERT INTO " table-name
- " VALUES (0)")
- 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))
- (mapcar #'(lambda (s) (%table-name-to-sequence-name (car s)))
- (database-query "SHOW TABLES LIKE '%clsql_seq%'"
- database nil)))
-
-(defmethod database-set-sequence-position (sequence-name
- (position integer)
- (database aodbc-database))
- (database-execute-command
- (format nil "UPDATE ~A SET id=~A" (%sequence-name-to-table sequence-name)
- position)
- database)
- position)
-
-(defmethod database-sequence-next (sequence-name (database aodbc-database))
- (warn "Not implemented."))
-
-(defmethod database-sequence-last (sequence-name (database aodbc-database))
- (declare (ignore sequence-name)))