LCOV - code coverage report
Current view: top level - src/odbc/unittests - long_error.c (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 25 25 100.0 %
Date: 2025-07-05 11:39:58 Functions: 2 2 100.0 %

          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             : 

Generated by: LCOV version 1.13