1 #include "common.h"
2 
3 #include <common/test_assert.h>
4 
5 /* test error on prepared statement, from Nathaniel Talbott test */
6 
7 static char software_version[] = "$Id: preperror.c 487476 2015-12-17 19:48:39Z ucko $";
8 static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };
9 
10 int
main(int argc,char * argv[])11 main(int argc, char *argv[])
12 {
13 	SQLLEN cbInString = SQL_NTS;
14 	char buf[256];
15 	SQLTCHAR msg[256];
16 	SQLTCHAR sqlstate[6];
17 
18 	odbc_connect();
19 
20 	odbc_command("CREATE TABLE #urls ( recdate DATETIME ) ");
21 
22 	/* test implicit conversion error */
23 	CHKExecDirect(T("INSERT INTO #urls ( recdate ) VALUES ( '2003-10-1 10:11:1 0' )"), SQL_NTS, "E");
24 
25 	/* test prepared implicit conversion error */
26 	CHKPrepare(T("INSERT INTO #urls ( recdate ) VALUES ( ? )"), SQL_NTS, "SI");
27 
28 	strcpy(buf, "2003-10-1 10:11:1 0");
29 	CHKBindParameter(1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 128, 0, buf, sizeof(buf), &cbInString, "SI");
30 
31 	CHKExecute("E");
32 
33 	CHKGetDiagRec(SQL_HANDLE_STMT, odbc_stmt, 1, sqlstate, NULL, msg, ODBC_VECTOR_SIZE(buf), NULL, "SI");
34 	printf("err=%s\n", C(msg));
35 
36 	/* assure initial state */
37 	odbc_reset_statement();
38 
39 	/* try to prepare and execute a statement with error (from DBD::ODBC test) */
40 	if (CHKPrepare(T("SELECT XXNOTCOLUMN FROM sysobjects"), SQL_NTS, "SE") == SQL_SUCCESS)
41 		CHKExecute("E");
42 
43 	CHKGetDiagRec(SQL_HANDLE_STMT, odbc_stmt, 1, sqlstate, NULL, msg, ODBC_VECTOR_SIZE(buf), NULL, "SI");
44 	printf("err=%s\n", C(msg));
45 
46 
47 	odbc_disconnect();
48 
49 	printf("Done.\n");
50 	ODBC_FREE();
51 	return 0;
52 }
53