Line data Source code
1 : #include "common.h"
2 :
3 :
4 : /*
5 : Demonstration of triggered assert when invoking this stored procedure
6 : using FreeTDS odbc driver:
7 :
8 : create procedure proc_longerror as
9 : begin
10 : raiserror('reallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylongreallylong error', 16, 1)
11 : end
12 :
13 : */
14 :
15 : static void extract_error(SQLHANDLE handle, SQLSMALLINT type);
16 :
17 10 : TEST_MAIN()
18 : {
19 : int i;
20 : char cmd[128 + 110*10];
21 :
22 10 : printf("SQLWCHAR size is: %d\n", (int) sizeof(SQLWCHAR));
23 :
24 10 : odbc_use_version3 = 1;
25 10 : odbc_connect();
26 :
27 : /* this test do not work with Sybase */
28 10 : if (!odbc_db_is_microsoft()) {
29 2 : odbc_disconnect();
30 2 : return 0;
31 : }
32 :
33 8 : strcpy(cmd, "create procedure #proc_longerror as\nbegin\nraiserror('");
34 888 : for (i = 0; i < 110; ++i)
35 880 : strcat(cmd, "reallylong");
36 8 : strcat(cmd, " error', 16, 1)\nend\n");
37 8 : odbc_command(cmd);
38 :
39 8 : CHKExecDirect(T("{CALL #proc_longerror}"), SQL_NTS, "E");
40 :
41 8 : extract_error(odbc_stmt, SQL_HANDLE_STMT);
42 :
43 8 : odbc_disconnect();
44 8 : return 0;
45 : }
46 :
47 : static void
48 8 : extract_error(SQLHANDLE handle, SQLSMALLINT type)
49 : {
50 8 : SQLSMALLINT i = 0;
51 : SQLINTEGER native;
52 : SQLTCHAR state[7];
53 : SQLTCHAR text[256];
54 : SQLSMALLINT len;
55 : SQLRETURN ret;
56 :
57 8 : fprintf(stderr, "\n" "The driver reported the following diagnostics\n");
58 :
59 : do {
60 10 : ret = CHKGetDiagRec(type, handle, ++i, state, &native, text, 256, &len, "SINo");
61 10 : state[5] = 0;
62 10 : if (SQL_SUCCEEDED(ret))
63 8 : printf("%s:%ld:%ld:%s\n", C(state), (long) i,
64 : (long) native, C(text));
65 : }
66 10 : while (ret == SQL_SUCCESS);
67 8 : }
68 :
|