X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=db-oracle%2Foracle-sql.lisp;h=a041f87fa89329955538d67a23a5a2546011d353;hb=214df89281860c871c99371a2b5582ff0b602205;hp=08551a8004aebe4f3bd6789346529c096ef62d8f;hpb=62547c6f6925d82c6fbc46801700b9256cf2c253;p=clsql.git 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)