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