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