X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fdb-interface.lisp;h=298214ae0cdcfd9c734f9428942212bf1c5a7c6b;hp=d6b1abe9c61c50a26e274485d3a59e7cebffefb1;hb=6b34e2293a52b03e8611c85e4e53a0ab5c8a3c1a;hpb=fdd069770e32d0cfa4b66d6e5cfd4540197660ba diff --git a/sql/db-interface.lisp b/sql/db-interface.lisp index d6b1abe..298214a 100644 --- a/sql/db-interface.lisp +++ b/sql/db-interface.lisp @@ -56,6 +56,10 @@ was called with the connection-spec.")) (:method (query-expression (database t) result-types field-names) (declare (ignore query-expression result-types field-names)) (signal-no-database-error database)) + (:method (query-expression (database database) result-types field-names) + (declare (ignore query-expression result-types field-names)) + (warn "database-query not implemented for database type ~A." + (database-type database))) (:documentation "Internal generic implementation of query.")) @@ -63,6 +67,10 @@ was called with the connection-spec.")) (:method (sql-expression (database t)) (declare (ignore sql-expression)) (signal-no-database-error database)) + (:method (sql-expression (database database)) + (declare (ignore sql-expression)) + (warn "database-execute-command not implemented for database type ~A." + (database-type database))) (:documentation "Internal generic implementation of execute-command.")) ;;; Mapping and iteration @@ -72,6 +80,11 @@ was called with the connection-spec.")) (declare (ignore query-expression full-set result-types)) (signal-no-database-error database) (values nil nil nil)) + (:method (query-expression (database database) &key full-set result-types) + (declare (ignore query-expression full-set result-types)) + (warn "database-query-result-set not implemented for database type ~A." + (database-type database)) + (values nil nil nil)) (:documentation "Internal generic implementation of query mapping. Starts the query specified by query-expression on the given database and returns @@ -91,12 +104,20 @@ function should signal a sql-database-data-error.")) (:method (result-set (database t)) (declare (ignore result-set)) (signal-no-database-error database)) + (:method (result-set (database database)) + (declare (ignore result-set)) + (warn "database-dump-result-set not implemented for database type ~A." + (database-type database))) (:documentation "Dumps the received result-set.")) (defgeneric database-store-next-row (result-set database list) (:method (result-set (database t) list) (declare (ignore result-set list)) (signal-no-database-error database)) + (:method (result-set (database database) list) + (declare (ignore result-set list)) + (warn "database-store-next-row not implemented for database type ~A." + (database-type database))) (:documentation "Returns t and stores the next row in the result set in list or returns nil when result-set is finished.")) @@ -172,6 +193,10 @@ the given lisp type and parameters.")) (defgeneric database-list-tables (database &key owner) (:documentation "List all tables in the given database") + (:method ((database database) &key owner) + (declare (ignore owner)) + (warn "database-list-tables not implemented for database type ~A." + (database-type database))) (:method ((database t) &key owner) (declare (ignore owner)) (signal-no-database-error database))) @@ -186,24 +211,40 @@ the given lisp type and parameters.")) (defgeneric database-list-views (database &key owner) (:documentation "List all views in the DATABASE.") + (:method ((database database) &key owner) + (declare (ignore owner)) + (warn "database-list-views not implemented for database type ~A." + (database-type database))) (:method ((database t) &key owner) (declare (ignore owner)) (signal-no-database-error database))) (defgeneric database-list-indexes (database &key owner) (:documentation "List all indexes in the DATABASE.") - (:method ((database t) &key owner) + (:method ((database database) &key owner) (declare (ignore owner)) - (signal-no-database-error database))) + (warn "database-list-indexes not implemented for database type ~A." + (database-type database))) + (:method ((database t) &key owner) + (declare (ignore owner)) + (signal-no-database-error database))) (defgeneric database-list-table-indexes (table database &key owner) (:documentation "List all indexes for a table in the DATABASE.") + (:method (table (database database) &key owner) + (declare (ignore table owner)) + (warn "database-list-table-indexes not implemented for database type ~A." + (database-type database))) (:method (table (database t) &key owner) (declare (ignore table owner)) (signal-no-database-error database))) (defgeneric database-list-attributes (table database &key owner) (:documentation "List all attributes in TABLE.") + (:method (table (database database) &key owner) + (declare (ignore table owner)) + (warn "database-list-attributes not implemented for database type ~A." + (database-type database))) (:method (table (database t) &key owner) (declare (ignore table owner)) (signal-no-database-error database))) @@ -211,18 +252,30 @@ the given lisp type and parameters.")) (defgeneric database-attribute-type (attribute table database &key owner) (:documentation "Return the type of ATTRIBUTE in TABLE. Returns multiple values of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") + (:method (attribute table (database database) &key owner) + (declare (ignore attribute table owner)) + (warn "database-list-attribute-type not implemented for database type ~A." + (database-type database))) (:method (attribute table (database t) &key owner) (declare (ignore attribute table owner)) (signal-no-database-error database))) (defgeneric database-add-attribute (table attribute database) (:documentation "Add the attribute to the table.") + (:method (table attribute (database database)) + (declare (ignore table attribute)) + (warn "database-add-attribute not implemented for database type ~A." + (database-type database))) (:method (table attribute (database t)) (declare (ignore table attribute)) (signal-no-database-error database))) (defgeneric database-rename-attribute (table oldatt newname database) (:documentation "Rename the attribute in the table to NEWNAME.") + (:method (table oldatt newname (database database)) + (declare (ignore table oldatt newname)) + (warn "database-rename-attribute not implemented for database type ~A." + (database-type database))) (:method (table oldatt newname (database t)) (declare (ignore table oldatt newname)) (signal-no-database-error database))) @@ -243,6 +296,12 @@ of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") nil) (:documentation "NIL [default] if database-type does not use column name on DROP INDEX.")) +(defgeneric db-type-use-fully-qualified-column-on-drop-index? (db-type) + (:method (db-type) + (declare (ignore db-type)) + nil) + (:documentation "NIL [default] if database-type does not require fully qualified column name on DROP INDEX.")) + (defgeneric db-type-has-views? (db-type) (:method (db-type) (declare (ignore db-type)) @@ -306,6 +365,17 @@ of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") nil) (:documentation "T if database backend supports prepared statements.")) +(defgeneric db-type-has-intersect? (db-type) + (:method (db-type) + (declare (ignore db-type)) + t) + (:documentation "T [default] if database-type supports INTERSECT.")) + +(defgeneric db-type-has-except? (db-type) + (:method (db-type) + (declare (ignore db-type)) + t) + (:documentation "T [default] if database-type supports EXCEPT.")) ;;; Large objects support (Marc Battyani) @@ -399,4 +469,11 @@ of TYPE_NAME (keyword) PRECISION SCALE NULLABLE.") (unless (is-database-open database) (signal-closed-database-error database))) +(defvar *foreign-library-search-paths* nil + "A list of pathnames denoting directories where CLSQL will look +for foreign libraries \(in addition to the default places).") +(defun push-library-path (path) + "Adds the pathspec PATH \(which should denote a directory) to +the list *FOREIGN-LIBRARY-SEARCH-PATHS*." + (push path *foreign-library-search-paths*)) \ No newline at end of file