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_connect();
30 10 : odbc_check_cursor();
31 :
32 8 : CHKSetConnectAttr(SQL_ATTR_AUTOCOMMIT, (SQLPOINTER) SQL_AUTOCOMMIT_ON, SQL_IS_UINTEGER, "S");
33 :
34 8 : odbc_command("create table #mytab1 (k int, c char(30))");
35 8 : odbc_command("insert into #mytab1 values (1,'aaa')");
36 8 : odbc_command("insert into #mytab1 values (2,'bbb')");
37 8 : odbc_command("insert into #mytab1 values (3,'ccc')");
38 :
39 8 : odbc_reset_statement();
40 : /* CHKSetStmtAttr(SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0, "S"); */
41 8 : CHKSetStmtAttr(SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_SCROLLABLE, SQL_IS_UINTEGER, "S");
42 :
43 8 : CHKPrepare(T("select k, c from #mytab1 order by k"), SQL_NTS, "SI");
44 :
45 8 : CHKBindCol(1, SQL_C_LONG, &v_int_3, 0, &v_ind_3_1, "S");
46 8 : CHKBindCol(2, SQL_C_CHAR, v_char_3, sizeof(v_char_3), &v_ind_3_2, "S");
47 :
48 8 : CHKExecute("SI");
49 :
50 8 : doFetch(SQL_FETCH_LAST, 0, 3);
51 8 : doFetch(SQL_FETCH_PRIOR, 0, 2);
52 8 : doFetch(SQL_FETCH_PRIOR, 0, 1);
53 8 : doFetch(SQL_FETCH_PRIOR, 0, -1);
54 8 : doFetch(SQL_FETCH_NEXT, 0, 1);
55 8 : doFetch(SQL_FETCH_NEXT, 0, 2);
56 8 : doFetch(SQL_FETCH_NEXT, 0, 3);
57 8 : doFetch(SQL_FETCH_NEXT, 0, -1);
58 8 : doFetch(SQL_FETCH_FIRST, 0, 1);
59 8 : doFetch(SQL_FETCH_NEXT, 0, 2);
60 8 : doFetch(SQL_FETCH_NEXT, 0, 3);
61 8 : doFetch(SQL_FETCH_ABSOLUTE, 3, 3);
62 8 : doFetch(SQL_FETCH_RELATIVE, -2, 1);
63 8 : doFetch(SQL_FETCH_RELATIVE, -2, -1);
64 8 : doFetch(SQL_FETCH_RELATIVE, 5, -1);
65 :
66 8 : CHKCloseCursor("SI");
67 :
68 8 : odbc_disconnect();
69 8 : return result;
70 : }
|