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