Line data Source code
1 : /*
2 : * Author : sf@4js.com
3 : * FreeTDS version : 0.91RC2 (20110429)
4 : * Platform : Linux 32b (Debian Lenny)
5 : * Fetching when there is a NULL value in table gives invalid cursor state error.
6 : * Is this because of Warning SQLSTATE 01003?
7 : */
8 :
9 : #include "common.h"
10 :
11 10 : TEST_MAIN()
12 : {
13 : #define ARRAY_SIZE 10
14 : SQLCHAR v_dec[ARRAY_SIZE][21];
15 : SQLLEN v_ind[ARRAY_SIZE];
16 : SQLULEN nrows;
17 :
18 10 : odbc_use_version3 = 1;
19 10 : odbc_connect();
20 10 : odbc_check_cursor();
21 :
22 8 : odbc_command("IF OBJECT_ID('mytab1') IS NOT NULL DROP TABLE mytab1");
23 8 : odbc_command("CREATE TABLE mytab1 ( k INT, d DECIMAL(10,2))");
24 8 : odbc_command("INSERT INTO mytab1 VALUES ( 201, 111.11 )");
25 : /*SQLExecDirect(m_hstmt, (SQLCHAR *) "insert into mytab1 values ( 202, 222.22 )", SQL_NTS); */
26 8 : odbc_command("INSERT INTO mytab1 VALUES ( 202, null )");
27 :
28 8 : odbc_reset_statement();
29 :
30 8 : CHKSetStmtAttr(SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_NONSCROLLABLE, SQL_IS_UINTEGER, "S");
31 8 : CHKSetStmtAttr(SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER) SQL_SENSITIVE, SQL_IS_UINTEGER, "S");
32 :
33 8 : CHKSetStmtAttr(SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER) SQL_BIND_BY_COLUMN, SQL_IS_UINTEGER, "S");
34 8 : CHKSetStmtAttr(SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) ARRAY_SIZE, SQL_IS_UINTEGER, "S");
35 8 : CHKSetStmtAttr(SQL_ATTR_ROWS_FETCHED_PTR, (SQLPOINTER) & (nrows), SQL_IS_UINTEGER, "S");
36 :
37 8 : CHKPrepare(T("SELECT SUM(d) FROM mytab1"), SQL_NTS, "S");
38 :
39 8 : CHKExecute("I");
40 :
41 : #if 0
42 : CHKMoreResults("S"); /* skip warning*/
43 : #endif
44 :
45 8 : CHKBindCol(1, SQL_C_CHAR, v_dec, 21, v_ind, "S");
46 :
47 8 : CHKFetch("S");
48 :
49 8 : printf("fetch 1: rows fetched = %d\n", (int) nrows);
50 8 : printf("fetch 1: value = [%s]\n", v_dec[0]);
51 :
52 8 : CHKFetch("No");
53 :
54 8 : CHKMoreResults("No");
55 :
56 8 : odbc_command("drop table mytab1");
57 :
58 8 : odbc_disconnect();
59 :
60 8 : return 0;
61 : }
62 :
|