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