From: Kevin M. Rosenberg Date: Sun, 23 May 2004 03:29:16 +0000 (+0000) Subject: r9434: 22 May 2004 Kevin Rosenberg X-Git-Tag: v3.8.6~409 X-Git-Url: http://git.kpe.io/?p=clsql.git;a=commitdiff_plain;h=760cf506d0395b2140f9c83c2f3d00a147262bf9 r9434: 22 May 2004 Kevin Rosenberg * Version 2.10.19 released: Oracle backend now fails 6 out of 200 tests * TODO: Added 2 variances from CommonSQL. Add tests for owner phrases and string identifiers with non-default case * sql/table.lisp: Don't convert string table name to a symbol. * sql/classes.lisp: Honor case of string identifiers * sql/sql.lisp: Ensure recyclebin is purged for Oracle in TRUNCATE-DATABASE --- diff --git a/ChangeLog b/ChangeLog index ab979b1..73327fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,16 +1,16 @@ 22 May 2004 Kevin Rosenberg - * TODO: Added 2 variances from CommonSQL + * Version 2.10.19 released: Oracle backend now fails 6 out of 200 tests + * TODO: Added 2 variances from CommonSQL. Add tests for owner phrases + and string identifiers with non-default case * sql/table.lisp: Don't convert string table name to a symbol. * sql/classes.lisp: Honor case of string identifiers - * Oracle backend now fails 6 out of 200 tests - * sql/sql.lisp: Ensure recyclebin is purged for oracle in + * sql/sql.lisp: Ensure recyclebin is purged for Oracle in TRUNCATE-DATABASE * db-oracle/oracle-sql.lisp: Add sequence functions, fix use of of owner phrases. Obtain server and client versions. * db-oracle/oracle-objects.lisp: Fix type specifiers * tests/test-fddl.lisp: Allow :varchar2 and :number as data types * tests/test-init.lisp: Properly get username from Oracle connection-spec - * TODO: Add that tests are needed for owner phrases 22 May 2004 Marcus Pearce (m.t.pearce@city.ac.uk) * sql/generics.lisp: reworked docstrings. Remove generics for diff --git a/db-oracle/oracle-sql.lisp b/db-oracle/oracle-sql.lisp index a86a561..79ba68e 100644 --- a/db-oracle/oracle-sql.lisp +++ b/db-oracle/oracle-sql.lisp @@ -15,8 +15,7 @@ (in-package #:clsql-oracle) -(defmethod database-initialize-database-type - ((database-type (eql :oracle))) +(defmethod database-initialize-database-type ((database-type (eql :oracle))) t) ;;;; arbitrary parameters, tunable for performance or other reasons @@ -792,16 +791,26 @@ the length of that format.") ) ;; Actually, oci-server-version returns the client version, not the server versions ;; will use "SELECT VERSION FROM V$INSTANCE" to get actual server version. - (let (db client-version) + (let (db server-version client-version) + (declare (ignorable server-version)) (uffi:with-foreign-object (buf '(:array :unsigned-char #.+errbuf-len+)) (oci-server-version (deref-vp svchp) (deref-vp errhp) (uffi:char-array-to-pointer buf) +errbuf-len+ +oci-htype-svcctx+) - (setf client-version (uffi:convert-from-foreign-string buf))) + (setf client-version (uffi:convert-from-foreign-string buf)) + ;; This returns the client version, not the server version, so diable it + #+ignore + (oci-server-version (deref-vp srvhp) + (deref-vp errhp) + (uffi:char-array-to-pointer buf) + +errbuf-len+ +oci-htype-server+) + #+ignore + (setf server-version (uffi:convert-from-foreign-string buf))) (setq db (make-instance 'oracle-database :name (database-name-from-spec connection-spec database-type) + :connection-spec connection-spec :envhp envhp :errhp errhp :database-type :oracle @@ -809,8 +818,11 @@ the length of that format.") :dsn data-source-name :user user :client-version client-version + :server-version server-version :major-client-version (major-client-version-from-string - client-version))) + client-version) + :major-server-version (major-client-version-from-string + server-version))) (oci-logon (deref-vp envhp) (deref-vp errhp) svchp @@ -822,9 +834,9 @@ the length of that format.") (setf (slot-value db 'clsql-sys::state) :open) (database-execute-command (format nil "ALTER SESSION SET NLS_DATE_FORMAT='~A'" (date-format db)) db) - (let ((server-version (caar (database-query "SELECT VERSION FROM V$INSTANCE" db nil nil)))) + (let ((server-version (caar (database-query "SELECT BANNER FROM V$VERSION WHERE BANNER LIKE '%Oracle%'" db nil nil)))) (setf (slot-value db 'server-version) server-version - (slot-value db 'major-server-version) (major-server-version-from-string + (slot-value db 'major-server-version) (major-client-version-from-string server-version))) db)))) diff --git a/debian/changelog b/debian/changelog index 55de641..f7a7e7f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,7 +2,7 @@ cl-sql (2.10.19-1) unstable; urgency=low * New upstream - -- Kevin M. Rosenberg Thu, 20 May 2004 04:54:53 -0600 + -- Kevin M. Rosenberg Sat, 22 May 2004 21:29:10 -0600 cl-sql (2.10.18-1) unstable; urgency=low diff --git a/sql/classes.lisp b/sql/classes.lisp index bf74b6e..d1d8ff7 100644 --- a/sql/classes.lisp +++ b/sql/classes.lisp @@ -141,11 +141,16 @@ :type ',type))) (defmethod output-sql ((expr sql-ident-attribute) database) - (with-slots (qualifier name type) - expr + (with-slots (qualifier name type) expr (if (and (not qualifier) (not type)) - (write-string (sql-escape (convert-to-db-default-case - (symbol-name name) database)) *sql-stream*) + (etypecase name + ;; Honor care of name + (string + (write-string name *sql-stream*)) + (symbol + (write-string (sql-escape (convert-to-db-default-case + (symbol-name name) database)) *sql-stream*))) + ;;; KMR: The TYPE field is used by CommonSQL for type conversion -- it ;;; should not be output in SQL statements #+ignore diff --git a/sql/table.lisp b/sql/table.lisp index a49ed2a..bc68a81 100644 --- a/sql/table.lisp +++ b/sql/table.lisp @@ -22,12 +22,11 @@ (defun database-identifier (name database) (sql-escape (etypecase name - (string - (convert-to-db-default-case name database)) - (sql-ident - (sql-output name database)) - (symbol - (sql-output name database))))) + ;; honor case of strings + (string name + #+nil (convert-to-db-default-case name database)) + (sql-ident (sql-output name database)) + (symbol (sql-output name database))))) ;; Tables @@ -45,7 +44,7 @@ databases, if TRANSACTIONS is t an InnoDB table is created which supports transactions." (let* ((table-name (etypecase name (symbol (sql-expression :attribute name)) - (string (sql-expression :attribute (make-symbol name))) + (string (sql-expression :attribute name)) (sql-ident name))) (stmt (make-instance 'sql-create-table :name table-name