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_connect();
19 10 : odbc_check_cursor();
20 :
21 8 : odbc_command("IF OBJECT_ID('mytab1') IS NOT NULL DROP TABLE mytab1");
22 8 : odbc_command("CREATE TABLE mytab1 ( k INT, d DECIMAL(10,2))");
23 8 : odbc_command("INSERT INTO mytab1 VALUES ( 201, 111.11 )");
24 : /*SQLExecDirect(m_hstmt, (SQLCHAR *) "insert into mytab1 values ( 202, 222.22 )", SQL_NTS); */
25 8 : odbc_command("INSERT INTO mytab1 VALUES ( 202, null )");
26 :
27 8 : odbc_reset_statement();
28 :
29 8 : CHKSetStmtAttr(SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_NONSCROLLABLE, SQL_IS_UINTEGER, "S");
30 8 : CHKSetStmtAttr(SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER) SQL_SENSITIVE, SQL_IS_UINTEGER, "S");
31 :
32 8 : CHKSetStmtAttr(SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER) SQL_BIND_BY_COLUMN, SQL_IS_UINTEGER, "S");
33 8 : CHKSetStmtAttr(SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) ARRAY_SIZE, SQL_IS_UINTEGER, "S");
34 8 : CHKSetStmtAttr(SQL_ATTR_ROWS_FETCHED_PTR, (SQLPOINTER) & (nrows), SQL_IS_UINTEGER, "S");
35 :
36 8 : CHKPrepare(T("SELECT SUM(d) FROM mytab1"), SQL_NTS, "S");
37 :
38 8 : CHKExecute("I");
39 :
40 : #if 0
41 : CHKMoreResults("S"); /* skip warning*/
42 : #endif
43 :
44 8 : CHKBindCol(1, SQL_C_CHAR, v_dec, 21, v_ind, "S");
45 :
46 8 : CHKFetch("S");
47 :
48 8 : printf("fetch 1: rows fetched = %d\n", (int) nrows);
49 8 : printf("fetch 1: value = [%s]\n", v_dec[0]);
50 :
51 8 : CHKFetch("No");
52 :
53 8 : CHKMoreResults("No");
54 :
55 8 : odbc_command("drop table mytab1");
56 :
57 8 : odbc_disconnect();
58 :
59 8 : return 0;
60 : }
61 :
|