(:method ((database t))
(signal-no-database-error database)))
-(defgeneric database-get-type-specifier (type args database)
+(defgeneric database-get-type-specifier (type args database db-underlying-type)
(:documentation "Return the type SQL type specifier as a string, for
-the given lisp type and parameters.")
- (:method (type args (database t))
- (declare (ignore type args))
- (signal-no-database-error database)))
+the given lisp type and parameters."))
(defgeneric database-list-tables (database &key owner)
(:documentation "List all tables in the given database")
(:method ((database t) &key owner)
(declare (ignore owner))
(signal-no-database-error database)))
+
+(defgeneric database-list-tables-and-sequences (database &key owner)
+ (:documentation "List all tables in the given database, may include seqeneces")
+ (:method ((database t) &key owner)
+ (declare (ignore owner))
+ (signal-no-database-error database))
+ (:method ((database database) &key owner)
+ (database-list-tables database :owner owner)))
(defgeneric database-list-views (database &key owner)
(:documentation "List all views in the DATABASE.")
t)
(:documentation "T [default] if database can supports transactions."))
+(defgeneric db-type-has-prepared-stmt? (db-type)
+ (:method ((db-type t))
+ nil)
+ (:documentation "T if database backend supports prepared statements."))
+
+
;;; Large objects support (Marc Battyani)
(defgeneric database-create-large-object (database)
(defgeneric database-delete-large-object (object-id database)
(:documentation "Deletes the large object in the database"))
+;; Prepared statements
+
+(defgeneric database-prepare (stmt types database result-types field-names)
+ (:method (stmt types (database t) result-types field-names)
+ (declare (ignore stmt types result-types field-names))
+ (signal-no-database-error database))
+ (:method (stmt types (database database) result-types field-names)
+ (declare (ignore stmt types result-types field-names))
+ (error 'sql-database-error
+ :message
+ (format nil "DATABASE-PREPARE not implemented for ~S" database)))
+ (:documentation "Prepare a statement for later execution."))
+
+(defgeneric database-bind-parameter (prepared-stmt position value)
+ (:method ((pstmt t) position value)
+ (declare (ignore position value))
+ (error 'sql-database-error
+ :message
+ (format nil "database-bind-paremeter not implemented for ~S" pstmt)))
+ (:documentation "Bind a parameter for a prepared statement."))
+
+(defgeneric database-run-prepared (prepared-stmt)
+ (:method ((pstmt t))
+ (error 'sql-database-error
+ :message (format nil "database-run-prepared not specialized for ~S" pstmt)))
+ (:documentation "Execute a prepared statement."))
+
+(defgeneric database-free-prepared (prepared-stmt)
+ (:method ((pstmt t))
+ ;; nothing to do by default
+ nil)
+ (:documentation "Free the resources of a prepared statement."))
;; Checks for closed database