Modified:
branches/guffert/driver/info.c
branches/guffert/test/my_basics.c
Log:
Fix and test case for bug 32014 - ADO Unable to open record set using dynamic cursor. Bug
was in reporting wrong info for scrolling options.
Modified: branches/guffert/driver/info.c
===================================================================
--- branches/guffert/driver/info.c 2007-12-06 10:35:12 UTC (rev 928)
+++ branches/guffert/driver/info.c 2007-12-06 13:21:16 UTC (rev 929)
@@ -584,9 +584,8 @@
case SQL_SCROLL_OPTIONS:
MYINFO_SET_ULONG(SQL_SO_FORWARD_ONLY |
- ((dbc->flag & FLAG_FORWARD_CURSOR) ?
- ((dbc->flag & FLAG_DYNAMIC_CURSOR) ? SQL_SO_DYNAMIC : 0) :
- SQL_SO_STATIC));
+ ((dbc->flag & FLAG_FORWARD_CURSOR) ? 0 : SQL_SO_STATIC |
+ ((dbc->flag & FLAG_DYNAMIC_CURSOR) ? SQL_SO_DYNAMIC : 0)));
case SQL_SEARCH_PATTERN_ESCAPE:
MYINFO_SET_STR("\\");
Modified: branches/guffert/test/my_basics.c
===================================================================
--- branches/guffert/test/my_basics.c 2007-12-06 10:35:12 UTC (rev 928)
+++ branches/guffert/test/my_basics.c 2007-12-06 13:21:16 UTC (rev 929)
@@ -697,6 +697,84 @@
#endif
+/**
+Bug #32014: MyODBC / ADO Unable to open record set using dynamic cursor
+*/
+DECLARE_TEST(t_bug32014)
+{
+ SQLHENV henv1;
+ SQLHDBC hdbc1;
+ SQLHSTMT hstmt1;
+ SQLUINTEGER info;
+ long i=0;
+ SQLSMALLINT value_len;
+
+ long flags[]= { 0,
+ (131072L << 4) /*FLAG_FORWARD_CURSOR*/,
+ 32 /*FLAG_DYNAMIC_CURSOR*/,
+ (131072L << 4) | 32,
+ 0 };
+
+ long expectedInfo[]= { SQL_SO_FORWARD_ONLY|SQL_SO_STATIC,
+ SQL_SO_FORWARD_ONLY,
+ SQL_SO_FORWARD_ONLY|SQL_SO_STATIC|SQL_SO_DYNAMIC,
+ SQL_SO_FORWARD_ONLY };
+
+ long expectedCurType[][4]= {
+ {SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_STATIC,
SQL_CURSOR_STATIC},
+ {SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_FORWARD_ONLY,
SQL_CURSOR_FORWARD_ONLY},
+ {SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_DYNAMIC,
SQL_CURSOR_STATIC},
+ {SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_FORWARD_ONLY,
SQL_CURSOR_FORWARD_ONLY}};
+
+ do
+ {
+ SET_DSN_OPTION(flags[i]);
+ alloc_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ printMessage("checking %d (%d)", i, flags[i]);
+
+ /*Checking that correct info is returned*/
+
+ ok_stmt(hstmt1, SQLGetInfo(hdbc1, SQL_SCROLL_OPTIONS,
+ (SQLPOINTER) &info, sizeof(long), &value_len));
+ is_num(info, expectedInfo[i]);
+
+ /*Checking that correct cursor type is set*/
+
+ ok_stmt(hstmt1, SQLSetStmtOption(hstmt1, SQL_CURSOR_TYPE
+ , SQL_CURSOR_FORWARD_ONLY ));
+ ok_stmt(hstmt1, SQLGetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ (SQLPOINTER) &info));
+ is_num(info, expectedCurType[i][SQL_CURSOR_FORWARD_ONLY]);
+
+ ok_stmt(hstmt1, SQLSetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ SQL_CURSOR_KEYSET_DRIVEN ));
+ ok_stmt(hstmt1, SQLGetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ (SQLPOINTER) &info));
+ is_num(info, expectedCurType[i][SQL_CURSOR_KEYSET_DRIVEN]);
+
+ ok_stmt(hstmt1, SQLSetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ SQL_CURSOR_DYNAMIC ));
+ ok_stmt(hstmt1, SQLGetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ (SQLPOINTER) &info));
+ is_num(info, expectedCurType[i][SQL_CURSOR_DYNAMIC]);
+
+ ok_stmt(hstmt1, SQLSetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ SQL_CURSOR_STATIC ));
+ ok_stmt(hstmt1, SQLGetStmtOption(hstmt1, SQL_CURSOR_TYPE,
+ (SQLPOINTER) &info));
+ is_num(info, expectedCurType[i][SQL_CURSOR_STATIC]);
+
+ free_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ } while (flags[++i]);
+
+ SET_DSN_OPTION(0);
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(my_basics)
ADD_TEST(t_max_select)
@@ -717,6 +795,7 @@
ADD_TEST(setnames)
ADD_TEST(setnames_conn)
ADD_TEST(sqlcancel)
+ ADD_TEST(t_bug32014)
END_TESTS
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r929 - in branches/guffert: driver test | lnovitsky | 6 Dec |