X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fdb-interface.lisp;h=d6b1abe9c61c50a26e274485d3a59e7cebffefb1;hp=939af1fa68ff89356e7f35bc4d8a56ca258348cf;hb=b5890c31a60303397efedb2110f46c6388426170;hpb=5148be446aee32ec705beac3fbba35f499df4fd4 diff --git a/sql/db-interface.lisp b/sql/db-interface.lisp index 939af1f..d6b1abe 100644 --- a/sql/db-interface.lisp +++ b/sql/db-interface.lisp @@ -128,12 +128,6 @@ if not found. May signal an error if unable to communicate with database server. (signal-no-database-error database)) (:documentation "Remove all data from database.")) -(defgeneric database-describe-table (database table) - (:method ((database t) table) - (declare (ignore table)) - (signal-no-database-error database)) - (:documentation "Return a list of name/type for columns in table")) - (defgeneric database-destory (connection-spec type) (:documentation "Destroys a database, returns T if successfull or signals an error @@ -307,6 +301,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 +321,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 @@ -367,6 +399,4 @@ of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") (unless (is-database-open database) (signal-closed-database-error database))) -(defgeneric describe-table (table &key database) - (:documentation "Describes a table, returns a list of name/type for columns in table"))