X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fdb-interface.lisp;h=698b235333848e0dc6d3813fdbc4d7bd8310c808;hb=a050eddab954ab3045d8427cf0c5563142266833;hp=3c2f7468326d3adc9ce2c9cd67699ca1864f544d;hpb=7308bdf188da6424e615ca14096ef53cfb845a90;p=clsql.git diff --git a/sql/db-interface.lisp b/sql/db-interface.lisp index 3c2f746..698b235 100644 --- a/sql/db-interface.lisp +++ b/sql/db-interface.lisp @@ -174,16 +174,21 @@ if unable to destory.")) (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 db-underlying-type) - (declare (ignore type args db-type)) - (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.") @@ -302,6 +307,12 @@ of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") 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) @@ -316,6 +327,38 @@ of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") (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