List:Commits« Previous MessageNext Message »
From:lnovitsky Date:December 6 2007 1:21pm
Subject:Connector/ODBC 3.51 commit: r929 - in branches/guffert: driver test
View as plain text  
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 testlnovitsky6 Dec