X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fdb-interface.lisp;h=f48d00d7dad945d90f8d502f0b3336929262589b;hp=939af1fa68ff89356e7f35bc4d8a56ca258348cf;hb=44cd3f817f6f59ffe495db4cf2b9ea4637a57f75;hpb=2f1b6b521b5c68e249428209a7da57f75e55da47 diff --git a/sql/db-interface.lisp b/sql/db-interface.lisp index 939af1f..f48d00d 100644 --- a/sql/db-interface.lisp +++ b/sql/db-interface.lisp @@ -307,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) @@ -321,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)) + (declare (ignore stmt types)) + (signal-no-database-error database)) + (:method (stmt types (database database)) + (declare (ignore stmt types)) + (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