Line data Source code
1 : #include "common.h"
2 :
3 : static void
4 24 : test_err(int n)
5 : {
6 24 : CHKSetStmtAttr(SQL_ROWSET_SIZE, (SQLPOINTER) TDS_INT2PTR(n), 0, "E");
7 24 : odbc_read_error();
8 24 : if (strcmp(odbc_sqlstate, "HY024") != 0) {
9 0 : fprintf(stderr, "Unexpected sql state returned\n");
10 0 : odbc_disconnect();
11 0 : exit(1);
12 : }
13 24 : }
14 :
15 : int
16 8 : main(void)
17 : {
18 : int i;
19 : SQLLEN len;
20 : #ifdef HAVE_SQLROWSETSIZE
21 : SQLROWSETSIZE row_count;
22 : #else
23 : SQLULEN row_count;
24 : #endif
25 : SQLUSMALLINT statuses[10];
26 : char buf[32];
27 :
28 8 : odbc_use_version3 = 1;
29 8 : odbc_connect();
30 :
31 : /* initial value should be 1 */
32 8 : CHKGetStmtAttr(SQL_ROWSET_SIZE, &len, sizeof(len), NULL, "S");
33 8 : if (len != 1) {
34 0 : fprintf(stderr, "len should be 1\n");
35 0 : odbc_disconnect();
36 0 : return 1;
37 : }
38 :
39 : /* check invalid parameter values */
40 8 : test_err(-123);
41 8 : test_err(-1);
42 8 : test_err(0);
43 :
44 8 : odbc_check_cursor();
45 :
46 : /* set some correct values */
47 6 : CHKSetStmtAttr(SQL_ROWSET_SIZE, (SQLPOINTER) TDS_INT2PTR(2), 0, "S");
48 6 : CHKSetStmtAttr(SQL_ROWSET_SIZE, (SQLPOINTER) TDS_INT2PTR(1), 0, "S");
49 :
50 : /* now check that SQLExtendedFetch works as expected */
51 6 : odbc_command("CREATE TABLE #rowset(n INTEGER, c VARCHAR(20))");
52 66 : for (i = 0; i < 10; ++i) {
53 : char s[10];
54 : char sql[128];
55 :
56 60 : memset(s, 'a' + i, 9);
57 60 : s[9] = 0;
58 60 : sprintf(sql, "INSERT INTO #rowset(n,c) VALUES(%d,'%s')", i+1, s);
59 60 : odbc_command(sql);
60 : }
61 :
62 6 : odbc_reset_statement();
63 6 : CHKSetStmtOption_nowarning(SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_DYNAMIC, "S");
64 6 : CHKExecDirect(T("SELECT * FROM #rowset ORDER BY n"), SQL_NTS, "SI");
65 :
66 6 : CHKBindCol(2, SQL_C_CHAR, buf, sizeof(buf), &len, "S");
67 :
68 6 : row_count = 0xdeadbeef;
69 6 : memset(statuses, 0x55, sizeof(statuses));
70 6 : CHKExtendedFetch(SQL_FETCH_NEXT, 1, &row_count, statuses, "S");
71 :
72 6 : if (row_count != 1 || statuses[0] != SQL_ROW_SUCCESS || strcmp(buf, "aaaaaaaaa") != 0) {
73 0 : fprintf(stderr, "Invalid result\n");
74 0 : odbc_disconnect();
75 0 : return 1;
76 : }
77 :
78 6 : odbc_disconnect();
79 :
80 6 : printf("Done.\n");
81 6 : return 0;
82 : }
|