List:Commits« Previous MessageNext Message »
From:jbalint Date:September 8 2007 6:13pm
Subject:Connector/ODBC 3.51 commit: r767 - branches/guffert/driver
View as plain text  
Modified:
   branches/guffert/driver/desc.c
   branches/guffert/driver/driver.h
   branches/guffert/driver/options.c
Log:
more fixes for 64-bit descriptor fields


Modified: branches/guffert/driver/desc.c
===================================================================
--- branches/guffert/driver/desc.c	2007-09-08 17:59:03 UTC (rev 766)
+++ branches/guffert/driver/desc.c	2007-09-08 18:13:05 UTC (rev 767)
@@ -237,47 +237,37 @@
   switch (buflen)
   {
   case SQL_IS_SMALLINT:
+  case SQL_IS_INTEGER:
+  case SQL_IS_LEN:
     if (dest_type == SQL_IS_SMALLINT)
-      *(SQLSMALLINT *)dest= (SQLINTEGER)src;
+      *(SQLSMALLINT *)dest= (SQLLEN)src;
     else if (dest_type == SQL_IS_USMALLINT)
-      *(SQLUSMALLINT *)dest= (SQLINTEGER)src;
+      *(SQLUSMALLINT *)dest= (SQLLEN)src;
     else if (dest_type == SQL_IS_INTEGER)
-      *(SQLINTEGER *)dest= (SQLINTEGER)src;
+      *(SQLINTEGER *)dest= (SQLLEN)src;
     else if (dest_type == SQL_IS_UINTEGER)
-      *(SQLUINTEGER *)dest= (SQLINTEGER)src;
+      *(SQLUINTEGER *)dest= (SQLLEN)src;
+    else if (dest_type == SQL_IS_LEN)
+      *(SQLLEN *)dest= (SQLLEN)src;
+    else if (dest_type == SQL_IS_ULEN)
+      *(SQLULEN *)dest= (SQLLEN)src;
     break;
 
   case SQL_IS_USMALLINT:
-    if (dest_type == SQL_IS_SMALLINT)
-      *(SQLSMALLINT *)dest= (SQLUINTEGER)src;
-    else if (dest_type == SQL_IS_USMALLINT)
-      *(SQLUSMALLINT *)dest= (SQLUINTEGER)src;
-    else if (dest_type == SQL_IS_INTEGER)
-      *(SQLINTEGER *)dest= (SQLUINTEGER)src;
-    else if (dest_type == SQL_IS_UINTEGER)
-      *(SQLUINTEGER *)dest= (SQLUINTEGER)src;
-    break;
-
-  case SQL_IS_INTEGER:
-    if (dest_type == SQL_IS_SMALLINT)
-      *(SQLSMALLINT *)dest= (SQLINTEGER)src;
-    else if (dest_type == SQL_IS_USMALLINT)
-      *(SQLUSMALLINT *)dest= (SQLINTEGER)src;
-    else if (dest_type == SQL_IS_INTEGER)
-      *(SQLINTEGER *)dest= (SQLINTEGER)src;
-    else if (dest_type == SQL_IS_UINTEGER)
-      *(SQLUINTEGER *)dest= (SQLINTEGER)src;
-    break;
-
   case SQL_IS_UINTEGER:
+  case SQL_IS_ULEN:
     if (dest_type == SQL_IS_SMALLINT)
-      *(SQLSMALLINT *)dest= (SQLUINTEGER)src;
+      *(SQLSMALLINT *)dest= (SQLULEN)src;
     else if (dest_type == SQL_IS_USMALLINT)
-      *(SQLUSMALLINT *)dest= (SQLUINTEGER)src;
+      *(SQLUSMALLINT *)dest= (SQLULEN)src;
     else if (dest_type == SQL_IS_INTEGER)
-      *(SQLINTEGER *)dest= (SQLUINTEGER)src;
+      *(SQLINTEGER *)dest= (SQLULEN)src;
     else if (dest_type == SQL_IS_UINTEGER)
-      *(SQLUINTEGER *)dest= (SQLUINTEGER)src;
+      *(SQLUINTEGER *)dest= (SQLULEN)src;
+    else if (dest_type == SQL_IS_LEN)
+      *(SQLLEN *)dest= (SQLULEN)src;
+    else if (dest_type == SQL_IS_ULEN)
+      *(SQLULEN *)dest= (SQLULEN)src;
     break;
 
   case SQL_IS_POINTER:
@@ -307,11 +297,11 @@
   /* See: SQLSetDescField() documentation
    * http://msdn2.microsoft.com/en-us/library/ms713560.aspx */
   HDR_FLD(alloc_type        , P_RI|P_RA          , SQL_IS_SMALLINT);
-  HDR_FLD(array_size        , P_RA|P_WA          , SQL_IS_UINTEGER);
+  HDR_FLD(array_size        , P_RA|P_WA          , SQL_IS_ULEN    );
   HDR_FLD(array_status_ptr  , P_RI|P_WI|P_RA|P_WA, SQL_IS_POINTER );
   HDR_FLD(bind_offset_ptr   , P_RA|P_WA          , SQL_IS_POINTER );
   HDR_FLD(bind_type         , P_RA|P_WA          , SQL_IS_INTEGER );
-  HDR_FLD(count             , P_RI|P_WI|P_RA|P_WA, SQL_IS_SMALLINT);
+  HDR_FLD(count             , P_RI|P_WI|P_RA|P_WA, SQL_IS_LEN     );
   HDR_FLD(rows_processed_ptr, P_RI|P_WI          , SQL_IS_POINTER );
 
   REC_FLD(auto_unique_value, PR_RIR                     , SQL_IS_INTEGER);
@@ -321,18 +311,18 @@
   REC_FLD(catalog_name     , PR_RIR                     , SQL_IS_POINTER);
   REC_FLD(concise_type     , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_SMALLINT);
   REC_FLD(data_ptr         , PR_WAR|PR_WAP              , SQL_IS_POINTER);
-  REC_FLD(display_size     , PR_RIR                     , SQL_IS_INTEGER);
+  REC_FLD(display_size     , PR_RIR                     , SQL_IS_LEN);
   REC_FLD(fixed_prec_scale , PR_RIR|PR_RIP              , SQL_IS_SMALLINT);
   REC_FLD(indicator_ptr    , PR_WAR|PR_WAP              , SQL_IS_POINTER);
   REC_FLD(label            , PR_RIR                     , SQL_IS_POINTER);
-  REC_FLD(length           , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_UINTEGER);
+  REC_FLD(length           , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_ULEN);
   REC_FLD(literal_prefix   , PR_RIR                     , SQL_IS_POINTER);
   REC_FLD(literal_suffix   , PR_RIR                     , SQL_IS_POINTER);
   REC_FLD(local_type_name  , PR_RIR|PR_RIP              , SQL_IS_POINTER);
   REC_FLD(name             , PR_RIR|PR_WIP              , SQL_IS_POINTER);
   REC_FLD(nullable         , PR_RIR|PR_RIP              , SQL_IS_SMALLINT);
   REC_FLD(num_prec_radix   , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_INTEGER);
-  REC_FLD(octet_length     , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_INTEGER);
+  REC_FLD(octet_length     , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_LEN);
   REC_FLD(octet_length_ptr , PR_WAR|PR_WAP              , SQL_IS_POINTER);
   REC_FLD(parameter_type   , PR_WIP                     , SQL_IS_SMALLINT);
   REC_FLD(precision        , PR_WAR|PR_WAP|PR_RIR|PR_WIP, SQL_IS_SMALLINT);
@@ -525,6 +515,10 @@
       *(SQLSMALLINT *)valptr= *(SQLINTEGER *)src;
     else if (fld->data_type == SQL_IS_UINTEGER)
       *(SQLSMALLINT *)valptr= *(SQLUINTEGER *)src;
+    else if (fld->data_type == SQL_IS_LEN)
+      *(SQLSMALLINT *)valptr= *(SQLLEN *)src;
+    else if (fld->data_type == SQL_IS_ULEN)
+      *(SQLSMALLINT *)valptr= *(SQLULEN *)src;
     break;
 
   case SQL_IS_USMALLINT:
@@ -536,6 +530,10 @@
       *(SQLUSMALLINT *)valptr= *(SQLINTEGER *)src;
     else if (fld->data_type == SQL_IS_UINTEGER)
       *(SQLUSMALLINT *)valptr= *(SQLUINTEGER *)src;
+    else if (fld->data_type == SQL_IS_LEN)
+      *(SQLUSMALLINT *)valptr= *(SQLLEN *)src;
+    else if (fld->data_type == SQL_IS_ULEN)
+      *(SQLUSMALLINT *)valptr= *(SQLULEN *)src;
     break;
 
   case SQL_IS_INTEGER:
@@ -547,6 +545,10 @@
       *(SQLINTEGER *)valptr= *(SQLINTEGER *)src;
     else if (fld->data_type == SQL_IS_UINTEGER)
       *(SQLINTEGER *)valptr= *(SQLUINTEGER *)src;
+    else if (fld->data_type == SQL_IS_LEN)
+      *(SQLINTEGER *)valptr= *(SQLLEN *)src;
+    else if (fld->data_type == SQL_IS_ULEN)
+      *(SQLINTEGER *)valptr= *(SQLULEN *)src;
     break;
 
   case SQL_IS_UINTEGER:
@@ -558,8 +560,42 @@
       *(SQLUINTEGER *)valptr= *(SQLINTEGER *)src;
     else if (fld->data_type == SQL_IS_UINTEGER)
       *(SQLUINTEGER *)valptr= *(SQLUINTEGER *)src;
+    else if (fld->data_type == SQL_IS_LEN)
+      *(SQLUINTEGER *)valptr= *(SQLLEN *)src;
+    else if (fld->data_type == SQL_IS_ULEN)
+      *(SQLUINTEGER *)valptr= *(SQLULEN *)src;
     break;
 
+  case SQL_IS_LEN:
+    if (fld->data_type == SQL_IS_SMALLINT)
+      *(SQLLEN *)valptr= *(SQLSMALLINT *)src;
+    else if (fld->data_type == SQL_IS_USMALLINT)
+      *(SQLLEN *)valptr= *(SQLUSMALLINT *)src;
+    else if (fld->data_type == SQL_IS_INTEGER)
+      *(SQLLEN *)valptr= *(SQLINTEGER *)src;
+    else if (fld->data_type == SQL_IS_UINTEGER)
+      *(SQLLEN *)valptr= *(SQLUINTEGER *)src;
+    else if (fld->data_type == SQL_IS_LEN)
+      *(SQLLEN *)valptr= *(SQLLEN *)src;
+    else if (fld->data_type == SQL_IS_ULEN)
+      *(SQLLEN *)valptr= *(SQLULEN *)src;
+    break;
+
+  case SQL_IS_ULEN:
+    if (fld->data_type == SQL_IS_SMALLINT)
+      *(SQLULEN *)valptr= *(SQLSMALLINT *)src;
+    else if (fld->data_type == SQL_IS_USMALLINT)
+      *(SQLULEN *)valptr= *(SQLUSMALLINT *)src;
+    else if (fld->data_type == SQL_IS_INTEGER)
+      *(SQLULEN *)valptr= *(SQLINTEGER *)src;
+    else if (fld->data_type == SQL_IS_UINTEGER)
+      *(SQLULEN *)valptr= *(SQLUINTEGER *)src;
+    else if (fld->data_type == SQL_IS_LEN)
+      *(SQLULEN *)valptr= *(SQLLEN *)src;
+    else if (fld->data_type == SQL_IS_ULEN)
+      *(SQLULEN *)valptr= *(SQLULEN *)src;
+    break;
+
   case SQL_IS_POINTER:
     *(SQLPOINTER *)valptr= *(SQLPOINTER *)src;
     break;

Modified: branches/guffert/driver/driver.h
===================================================================
--- branches/guffert/driver/driver.h	2007-09-08 17:59:03 UTC (rev 766)
+++ branches/guffert/driver/driver.h	2007-09-08 18:13:05 UTC (rev 767)
@@ -188,6 +188,10 @@
 #define IS_ARD(d) ((d)->desc_type == DESC_ROW && (d)->ref_type == DESC_APP)
 #define IS_IRD(d) ((d)->desc_type == DESC_ROW && (d)->ref_type == DESC_IMP)
 
+/* additional field types needed, but not defined in ODBC */
+#define SQL_IS_ULEN (-9)
+#define SQL_IS_LEN (-10)
+
 typedef struct {
   int perms;
   SQLSMALLINT data_type; /* SQL_IS_SMALLINT, etc */

Modified: branches/guffert/driver/options.c
===================================================================
--- branches/guffert/driver/options.c	2007-09-08 17:59:03 UTC (rev 766)
+++ branches/guffert/driver/options.c	2007-09-08 18:13:05 UTC (rev 767)
@@ -551,13 +551,13 @@
         case SQL_ATTR_PARAMSET_SIZE:
             return stmt_SQLSetDescField(stmt, stmt->apd, 0,
                                         SQL_DESC_ARRAY_SIZE,
-                                        ValuePtr, SQL_IS_UINTEGER);
+                                        ValuePtr, SQL_IS_ULEN);
 
         case SQL_ATTR_ROW_ARRAY_SIZE:
         case SQL_ROWSET_SIZE:
             return stmt_SQLSetDescField(stmt, stmt->ard, 0,
                                         SQL_DESC_ARRAY_SIZE,
-                                        ValuePtr, SQL_IS_UINTEGER);
+                                        ValuePtr, SQL_IS_ULEN);
 
         case SQL_ATTR_ROW_BIND_OFFSET_PTR:
             return stmt_SQLSetDescField(stmt, stmt->ard, 0,

Thread
Connector/ODBC 3.51 commit: r767 - branches/guffert/driverjbalint8 Sep