List:Commits« Previous MessageNext Message »
From:jbalint Date:November 29 2007 6:45pm
Subject:Connector/ODBC 3.51 commit: r897 - in branches/guffert: cmake driver test
View as plain text  
Modified:
   branches/guffert/cmake/FindMySQL.cmake
   branches/guffert/driver/desc.c
   branches/guffert/test/my_desc.c
Log:
fix for bug#31720 and test
fix param binding using only descriptor
add additional search directory in build script for custom 5.1 build

Modified: branches/guffert/cmake/FindMySQL.cmake
===================================================================
--- branches/guffert/cmake/FindMySQL.cmake	2007-11-29 17:25:44 UTC (rev 896)
+++ branches/guffert/cmake/FindMySQL.cmake	2007-11-29 18:45:10 UTC (rev 897)
@@ -54,6 +54,7 @@
 				 PATHS
 				 $ENV{MYSQL_DIR}/lib/${libsuffixDist}
 				 $ENV{MYSQL_DIR}/client/${libsuffixBuild}
+				 $ENV{MYSQL_DIR}/libmysql/${libsuffixBuild}
 				 $ENV{ProgramFiles}/MySQL/*/lib/${libsuffixDist}
 				 $ENV{SystemDrive}/MySQL/*/lib/${libsuffixDist})
 ELSE (WIN32)

Modified: branches/guffert/driver/desc.c
===================================================================
--- branches/guffert/driver/desc.c	2007-11-29 17:25:44 UTC (rev 896)
+++ branches/guffert/driver/desc.c	2007-11-29 18:45:10 UTC (rev 897)
@@ -672,6 +672,10 @@
 
   dest= ((char *)dest_struct) + fld->offset;
 
+  /* some applications and even MSDN examples don't give a correct constant */
+  if (buflen == 0)
+    buflen= fld->data_type;
+
   /* TODO checks when strings? */
   if ((fld->data_type == SQL_IS_POINTER && buflen != SQL_IS_POINTER) ||
       (fld->data_type != SQL_IS_POINTER && buflen == SQL_IS_POINTER))
@@ -756,6 +760,23 @@
     }
   }
 
+  /*
+    Set "real_param_done" for parameters if all fields needed to bind
+    a parameter are set.
+  */
+  if (IS_APD(desc) && val != NULL)
+  {
+    DESCREC *rec= (DESCREC *) dest_struct;
+    switch (fldid)
+    {
+    case SQL_DESC_DATA_PTR:
+    case SQL_DESC_OCTET_LENGTH_PTR:
+    case SQL_DESC_INDICATOR_PTR:
+      rec->par.real_param_done= TRUE;
+      break;
+    }
+  }
+
   return SQL_SUCCESS;
 }
 

Modified: branches/guffert/test/my_desc.c
===================================================================
--- branches/guffert/test/my_desc.c	2007-11-29 17:25:44 UTC (rev 896)
+++ branches/guffert/test/my_desc.c	2007-11-29 18:45:10 UTC (rev 897)
@@ -221,10 +221,43 @@
 }
 
 
+/*
+  Test that if no type is given to SQLSetDescField(), that the
+  correct default is used. See Bug#31720.
+*/
+DECLARE_TEST(t_desc_default_type)
+{
+  SQLHANDLE ard, apd;
+  SQLINTEGER inval= 20, outval= 0;
+
+  ok_stmt(hstmt, SQLPrepare(hstmt, "select ?", SQL_NTS));
+  ok_stmt(hstmt, SQLGetStmtAttr(hstmt, SQL_ATTR_APP_PARAM_DESC,
+                                &apd, 0, NULL));
+  ok_stmt(hstmt, SQLGetStmtAttr(hstmt, SQL_ATTR_APP_ROW_DESC,
+                                &ard, 0, NULL));
+
+  ok_desc(apd, SQLSetDescField(apd, 1, SQL_DESC_CONCISE_TYPE,
+                               (SQLPOINTER) SQL_C_LONG, 0));
+  ok_desc(apd, SQLSetDescField(apd, 1, SQL_DESC_DATA_PTR, &inval, 0));
+
+  ok_desc(ard, SQLSetDescField(ard, 1, SQL_DESC_CONCISE_TYPE,
+                               (SQLPOINTER) SQL_C_LONG, 0));
+  ok_desc(ard, SQLSetDescField(ard, 1, SQL_DESC_DATA_PTR, &outval, 0));
+
+  ok_stmt(hstmt, SQLExecute(hstmt));
+  ok_stmt(hstmt, SQLFetch(hstmt));
+
+  is_num(outval, inval);
+
+  return OK;
+}
+
+
 BEGIN_TESTS
   ADD_TEST(t_desc_paramset)
   ADD_TEST(t_desc_set_error)
   ADD_TEST(t_sqlbindcol_count_reset)
+  ADD_TEST(t_desc_default_type)
 END_TESTS
 
 

Thread
Connector/ODBC 3.51 commit: r897 - in branches/guffert: cmake driver testjbalint29 Nov