made odbc read (from c) decimals and numerics as doubles instead of
authorRuss Tyndall <russ@acceleration.net>
Thu, 9 Jun 2011 18:27:53 +0000 (14:27 -0400)
committerNathan Bird <nathan@acceleration.net>
Thu, 30 Jun 2011 20:56:29 +0000 (16:56 -0400)
strings

TODO: Read these numbers in as rationals instead of floats

db-odbc/odbc-api.lisp
db-odbc/odbc-dbi.lisp

index 79b38f2668dc4994f035576bb259f486705de212..076a59f45628434cdcb107171a9262948951930a 100644 (file)
@@ -673,9 +673,12 @@ as possible second argument) to the desired representation of date/time/timestam
                    (#.$SQL_SMALLINT (get-cast-short data-ptr)) ;; ??
                    (#.$SQL_INTEGER (get-cast-int data-ptr))
                    (#.$SQL_BIGINT (get-cast-big data-ptr))
-                   (#.$SQL_DECIMAL
-                    (let ((*read-base* 10))
-                      (read-from-string (get-cast-foreign-string data-ptr))))
+                   ;; TODO: Change this to read in rationals instead of doubles
+                   ((#.$SQL_DECIMAL #.$SQL_NUMERIC)
+                     (let* ((*read-base* 10)
+                            (*read-default-float-format* 'double-float)
+                            (str (get-cast-foreign-string data-ptr)))
+                       (read-from-string str)))
                    (#.$SQL_BIT (get-cast-byte data-ptr))
                    (t
                     (case c-type
index 5c57c2e7afed17ee53df894ac4865195fda893ff..3abce4aa8015e0a564574cb8381b22d4d19e00b7 100644 (file)
@@ -465,6 +465,11 @@ This makes the functions db-execute-command and db-query thread safe."
                  (#.odbc::$SQL_C_STINYINT :short)
                  (#.odbc::$SQL_C_SBIGINT #.odbc::$ODBC-BIG-TYPE)
                  (#.odbc::$SQL_C_TYPE_TIMESTAMP :time)
+                 (#.odbc::$SQL_C_CHAR ;; TODO: Read this as rational instead of double
+                   (or (case (aref column-sql-types i)
+                         (#.odbc::$SQL_NUMERIC :double))
+                       T))
+
                  (t t)))
               (t t)))))
   query)