Line data Source code
1 : #include "common.h"
2 :
3 : static SQLINTEGER v_int_3;
4 : static SQLLEN v_ind_3_1;
5 :
6 : static char v_char_3[21];
7 : static SQLLEN v_ind_3_2;
8 :
9 : static int result = 0;
10 :
11 : static void
12 120 : doFetch(int dir, int pos, int expected)
13 : {
14 : SQLRETURN RetCode;
15 :
16 120 : RetCode = CHKFetchScroll(dir, pos, "SINo");
17 :
18 120 : if (RetCode != SQL_NO_DATA)
19 88 : printf(">> fetch %2d %10d : %d [%s]\n", dir, pos, v_ind_3_1 ? (int) v_int_3 : -1, v_ind_3_2 ? v_char_3 : "null");
20 : else
21 32 : printf(">> fetch %2d %10d : no data found\n", dir, pos);
22 :
23 120 : if (expected != (RetCode == SQL_NO_DATA ? -1 : v_int_3))
24 0 : result = 1;
25 120 : }
26 :
27 10 : TEST_MAIN()
28 : {
29 10 : odbc_use_version3 = 1;
30 10 : odbc_connect();
31 10 : odbc_check_cursor();
32 :
33 8 : CHKSetConnectAttr(SQL_ATTR_AUTOCOMMIT, (SQLPOINTER) SQL_AUTOCOMMIT_ON, SQL_IS_UINTEGER, "S");
34 :
35 8 : odbc_command("create table #mytab1 (k int, c char(30))");
36 8 : odbc_command("insert into #mytab1 values (1,'aaa')");
37 8 : odbc_command("insert into #mytab1 values (2,'bbb')");
38 8 : odbc_command("insert into #mytab1 values (3,'ccc')");
39 :
40 8 : odbc_reset_statement();
41 : /* CHKSetStmtAttr(SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0, "S"); */
42 8 : CHKSetStmtAttr(SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_SCROLLABLE, SQL_IS_UINTEGER, "S");
43 :
44 8 : CHKPrepare(T("select k, c from #mytab1 order by k"), SQL_NTS, "SI");
45 :
46 8 : CHKBindCol(1, SQL_C_LONG, &v_int_3, 0, &v_ind_3_1, "S");
47 8 : CHKBindCol(2, SQL_C_CHAR, v_char_3, sizeof(v_char_3), &v_ind_3_2, "S");
48 :
49 8 : CHKExecute("SI");
50 :
51 8 : doFetch(SQL_FETCH_LAST, 0, 3);
52 8 : doFetch(SQL_FETCH_PRIOR, 0, 2);
53 8 : doFetch(SQL_FETCH_PRIOR, 0, 1);
54 8 : doFetch(SQL_FETCH_PRIOR, 0, -1);
55 8 : doFetch(SQL_FETCH_NEXT, 0, 1);
56 8 : doFetch(SQL_FETCH_NEXT, 0, 2);
57 8 : doFetch(SQL_FETCH_NEXT, 0, 3);
58 8 : doFetch(SQL_FETCH_NEXT, 0, -1);
59 8 : doFetch(SQL_FETCH_FIRST, 0, 1);
60 8 : doFetch(SQL_FETCH_NEXT, 0, 2);
61 8 : doFetch(SQL_FETCH_NEXT, 0, 3);
62 8 : doFetch(SQL_FETCH_ABSOLUTE, 3, 3);
63 8 : doFetch(SQL_FETCH_RELATIVE, -2, 1);
64 8 : doFetch(SQL_FETCH_RELATIVE, -2, -1);
65 8 : doFetch(SQL_FETCH_RELATIVE, 5, -1);
66 :
67 8 : CHKCloseCursor("SI");
68 :
69 8 : odbc_disconnect();
70 8 : return result;
71 : }
|