made odbc read (from c) decimals and numerics as doubles instead of strings, in prepa...
authorRuss Tyndall <russ@acceleration.net>
Mon, 18 Jan 2010 22:11:32 +0000 (17:11 -0500)
committerRuss Tyndall <russ@acceleration.net>
Mon, 18 Jan 2010 22:11:41 +0000 (17:11 -0500)
handle rational numbers

re ADWolf:#614 (4)

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

index 49a6e1f6fc7a03da30960a203875639f815ae46f..8b9788ddd33a49461657eec9a90aae76d52a6636 100644 (file)
@@ -678,9 +678,11 @@ 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))))
+                   ((#.$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 86929d7806ccf502df78415fb84417fcdb99728e..0b88ee20695267bc10612a2928595d29d7fdb57b 100644 (file)
@@ -465,6 +465,10 @@ This makes the functions db-execute-command and db-query thread safe."
                 (#.odbc::$SQL_C_SSHORT :short)
                 (#.odbc::$SQL_C_STINYINT :short)
                 (#.odbc::$SQL_C_SBIGINT #.odbc::$ODBC-BIG-TYPE)
+                (#.odbc::$SQL_C_CHAR
+                   (or (case (aref column-sql-types i)
+                         (#.odbc::$SQL_NUMERIC :double))
+                       T))
                 (t t)))
              (t t)))))
   query)