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 test | jbalint | 29 Nov |