From: Kevin M. Rosenberg Date: Fri, 21 May 2004 14:33:46 +0000 (+0000) Subject: r9424: * db-oracle/oracle-sql: Use clsql-specific error conditions. Use owner... X-Git-Tag: v3.8.6~417 X-Git-Url: http://git.kpe.io/?p=clsql.git;a=commitdiff_plain;h=214df89281860c871c99371a2b5582ff0b602205 r9424: * db-oracle/oracle-sql: Use clsql-specific error conditions. Use owner keyword. --- diff --git a/ChangeLog b/ChangeLog index 132a108..9f6d793 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ 20 May 2004 Kevin Rosenberg (kevin@rosenberg.net) + * db-oracle/oracle-sql: Use clsql-specific error conditions. Use owner keyword. * db-oracle/make9.sh: add makefile for building with Oracle 9 client libraries * sql/table.lisp: Add logic for dealing with Oracle 10g vs. previous diff --git a/db-oracle/oracle-api.lisp b/db-oracle/oracle-api.lisp index 1ac8ea8..e63351f 100644 --- a/db-oracle/oracle-api.lisp +++ b/db-oracle/oracle-api.lisp @@ -57,23 +57,25 @@ (#.+oci-error+ (handle-oci-error :database database :nulls-ok nulls-ok)) (#.+oci-no-data+ - (error "OCI No Data Found")) + (error 'sql-database-error :message "OCI No Data Found")) (#.+oci-success-with-info+ - (error "internal error: unexpected +oci-SUCCESS-WITH-INFO")) + (error 'sql-database-error :message "internal error: unexpected +oci-success-with-info")) (#.+oci-no-data+ - (error "OCI No Data")) + (error 'sql-database-error :message "OCI No Data")) (#.+oci-invalid-handle+ - (error "OCI Invalid Handle")) + (error 'sql-database-error :message "OCI Invalid Handle")) (#.+oci-need-data+ - (error "OCI Need Data")) + (error 'sql-database-error :message "OCI Need Data")) (#.+oci-still-executing+ - (error "OCI Still Executing")) + (error 'sql-temporary-error :message "OCI Still Executing")) (#.+oci-continue+ - (error "OCI Continue")) + (error 'sql-database-error :message "OCI Continue")) (1804 - (error "Check ORACLE_HOME and NLS settings.")) + (error 'sql-database-error :message "Check ORACLE_HOME and NLS settings.")) (t - (error "OCI unknown error, code=~A" result)))))))) + (error 'sql-database-error + :message + (format nil "OCI unknown error, code=~A" result))))))))) (defmacro def-raw-oci-routine @@ -321,7 +323,7 @@ (defun oci-check-return (value) (when (= value +oci-invalid-handle+) - (error "Invalid Handle"))) + (error 'sql-database-error :message "Invalid Handle"))) (defun oci-get-handle (&key type) (if (null *oci-initialized*) @@ -354,7 +356,9 @@ (:security "OCISecurity") (t - (error "'~s' is not a valid OCI handle type" type)))) + (error 'sql-database-error + :message + (format nil "'~s' is not a valid OCI handle type" type))))) (defun oci-environment () (let ((envhp (oci-get-handle :type :env))) diff --git a/db-oracle/oracle-sql.lisp b/db-oracle/oracle-sql.lisp index 08551a8..a041f87 100644 --- a/db-oracle/oracle-sql.lisp +++ b/db-oracle/oracle-sql.lisp @@ -159,9 +159,8 @@ the length of that format.") (defun osucc (code) (declare (type fixnum code)) (unless (= code +oci-success+) - (error 'dbi-error - :format-control "unexpected OCI failure, code=~S" - :format-arguments (list code)))) + (error 'sql-database-error + :message (format nil "unexpected OCI failure, code=~S" code)))) ;;; Enabling this can be handy for low-level debugging. @@ -236,10 +235,17 @@ the length of that format.") (second (1- (ub 6)))) (encode-universal-time second minute hour day month year)))) +(defun owner-phrase (owner) + (if owner + (format nil " WHERE OWNER='~A'" owner) + "")) + (defmethod database-list-tables ((database oracle-database) &key owner) (mapcar #'car - (database-query "select table_name from user_tables" - database nil nil)) + (database-query + (concatenate 'string "select table_name from user_tables" + (owner-phrase owner)) + database nil nil)) #+nil (values (database-query "select TABLE_NAME from all_catalog where owner not in ('PUBLIC','SYSTEM','SYS','WMSYS','EXFSYS','CTXSYS','WKSYS','WK_TEST','MDSYS','DMSYS','OLAPSYS','ORDSYS','XDB')" @@ -248,15 +254,20 @@ the length of that format.") (defmethod database-list-views ((database oracle-database) &key owner) - ;; (database-query "select table_name from all_catalog" database nil nil) (mapcar #'car - (database-query "select view_name from user_views" database nil nil))) + (database-query + (concatenate 'string "select view_name from user_views" + (owner-phrase owner)) + database nil nil))) (defmethod database-list-indexes ((database oracle-database) &key (owner nil)) (mapcar #'car - (database-query "select index_name from user_indexes" database nil nil))) + (database-query + (concatenate 'string "select index_name from user_indexes" + (owner-phrase owner)) + database nil nil))) (defmethod list-all-table-columns (table (db oracle-database)) (declare (string table)) @@ -288,8 +299,11 @@ the length of that format.") (mapcar #'car (database-query (format nil - "select column_name from user_tab_columns where table_name='~A'" - table) + "select column_name from user_tab_columns where table_name='~A'~A" + table + (if owner + (format nil " AND OWNER='~A'" owner) + "")) database nil nil))) (defmethod database-attribute-type (attribute (table string) @@ -298,8 +312,11 @@ the length of that format.") (let ((rows (database-query (format nil - "select data_type,data_length,data_precision,data_scale,nullable from user_tab_columns where table_name='~A' and column_name='~A'" - table attribute) + "select data_type,data_length,data_precision,data_scale,nullable from user_tab_columns where table_name='~A' and column_name='~A'~A" + table attribute + (if owner + (format nil " AND OWNER='~A'" owner) + "")) database :auto nil))) (destructuring-bind (type length precision scale nullable) (car rows) (values (ensure-keyword type) length precision scale @@ -331,7 +348,7 @@ the length of that format.") (defstruct (oracle-result-set (:print-function print-query-cursor) (:conc-name qc-) (:constructor %make-query-cursor)) - (db (error "missing DB") ; db conn. this table is associated with + (db (error "missing DB") ; db conn. this table is associated with :type oracle-database :read-only t) (stmthp (error "missing STMTHP") ; the statement handle used to create @@ -363,7 +380,7 @@ the length of that format.") ;;(declare (optimize (speed 3))) (cond ((zerop (qc-n-from-oci qc)) (if eof-errorp - (error 'clsql-error :message + (error 'sql-database-error :message (format nil "no more rows available in ~S" qc)) eof-value)) ((>= (qc-n-to-dbi qc) @@ -862,8 +879,10 @@ the length of that format.") ) :database database))) (defmethod database-list-sequences ((database oracle-database) &key owner) - (mapcar #'car (database-query "select sequence_name from user_sequences" - database nil nil))) + (mapcar #'car (database-query + (concatenate 'string "select sequence_name from user_sequences" + (owner-phrase owner)) + database nil nil))) (defmethod database-execute-command (sql-expression (database oracle-database)) (database-query sql-expression database nil nil) diff --git a/debian/control b/debian/control index b6d3a78..ec32826 100644 --- a/debian/control +++ b/debian/control @@ -82,7 +82,7 @@ Description: CLSQL database backend, SQLite Package: cl-sql-tests Architecture: all -Depends: cl-sql, cl-sql-postgresql, cl-sql-postgresql-socket, cl-sql-mysql, cl-sql-sqlite, cl-sql-odbc, rt +Depends: cl-sql, cl-sql-postgresql, cl-sql-postgresql-socket, cl-sql-mysql, cl-sql-sqlite, cl-sql-odbc, cl-rt Suggests: acl-installer, libmyodbc, unixodbc,cl-sql-aodbc Description: Testing suite for CLSQL This package contains a test suite for CLSQL. It requires manual