r9434: 22 May 2004 Kevin Rosenberg
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 23 May 2004 03:29:16 +0000 (03:29 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 23 May 2004 03:29:16 +0000 (03:29 +0000)
        * 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

ChangeLog
db-oracle/oracle-sql.lisp
debian/changelog
sql/classes.lisp
sql/table.lisp

index ab979b1e3942204df0643416c97540e96109149c..73327fc66421fff35371b9bbd3be0b7b3f5bcef4 100644 (file)
--- 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 
index a86a5615796ace3b3fbbf07949dcba949c41639a..79ba68e4bb30e20d71621266aca2c10103711550 100644 (file)
@@ -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))))
 
index 55de6411b9b9df8474e0d6be3dcdac1ea0c5f1ae..f7a7e7f7edc9f66915b2d4f32b05298949004d50 100644 (file)
@@ -2,7 +2,7 @@ cl-sql (2.10.19-1) unstable; urgency=low
 
   * New upstream
 
- -- Kevin M. Rosenberg <kmr@debian.org>  Thu, 20 May 2004 04:54:53 -0600
+ -- Kevin M. Rosenberg <kmr@debian.org>  Sat, 22 May 2004 21:29:10 -0600
 
 cl-sql (2.10.18-1) unstable; urgency=low
 
index bf74b6ecc3e4c8e6f01fee30820eaa91517421bf..d1d8ff79a2885a0f4bf7df7a5c915aead099d7b1 100644 (file)
       :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
index a49ed2adb6d405d0b1e4c0c868f0bd0b57f6a3cf..bc68a814dbbf0058803f6c6ebb96b310bdddcb51 100644 (file)
 
 (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