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