LCOV - code coverage report
Current view: top level - src/odbc/unittests - stats.c (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 57 63 90.5 %
Date: 2025-01-18 11:50:39 Functions: 5 5 100.0 %

          Line data    Source code
       1             : #include "common.h"
       2             : 
       3             : static SQLLEN cnamesize;
       4             : static char output[256];
       5             : 
       6             : static void
       7          48 : ReadCol(int i)
       8             : {
       9          48 :         memset(output, 'x', sizeof(output));
      10          48 :         strcpy(output, "NULL");
      11          48 :         CHKGetData(i, SQL_C_CHAR, output, sizeof(output), &cnamesize, "S");
      12          48 : }
      13             : 
      14             : static const char *proc = "stat_proc";
      15             : static const char *table = "stat_proc";
      16             : static const char *column = "@t";
      17             : 
      18             : #define LEN(x) (x) ? strlen(x) : 0
      19             : 
      20             : static void
      21          16 : TestProc(const char *catalog, const char *type, const char *expected)
      22             : {
      23             :         char sql[256];
      24          16 :         char *schema = NULL;
      25             : 
      26          16 :         odbc_command("IF OBJECT_ID('stat_proc') IS NOT NULL DROP PROC stat_proc");
      27             : 
      28          16 :         sprintf(sql, "CREATE PROC stat_proc(@t %s) AS RETURN 0", type);
      29          16 :         odbc_command(sql);
      30             : 
      31          16 :         column = "@t";
      32          16 :         CHKProcedureColumns(T(catalog), LEN(catalog), T(schema), LEN(schema), T(proc), LEN(proc), T(column), LEN(column), "SI");
      33             : 
      34          16 :         CHKFetch("SI");
      35             : 
      36          16 :         ReadCol(6);
      37          16 :         if (strcmp(output, expected) != 0) {
      38           0 :                 fprintf(stderr, "Got \"%s\" expected \"%s\"\n", output, expected);
      39           0 :                 odbc_disconnect();
      40           0 :                 exit(1);
      41             :         }
      42             : 
      43          16 :         CHKCloseCursor("SI");
      44          16 :         ODBC_FREE();
      45          16 : }
      46             : 
      47             : static void
      48          32 : TestTable(const char *catalog, const char *type, const char *expected)
      49             : {
      50             :         char sql[256];
      51          32 :         char *schema = NULL;
      52             : 
      53          32 :         if (catalog) {
      54          16 :                 schema = "dbo";
      55          16 :                 sprintf(sql, "IF OBJECT_ID('%s.%s.stat_t') IS NOT NULL DROP TABLE %s.%s.stat_t", catalog, schema, catalog, schema);
      56          16 :                 odbc_command(sql);
      57          16 :                 sprintf(sql, "CREATE TABLE %s.%s.stat_t(t %s)", catalog, schema, type);
      58             :         } else {
      59          16 :                 odbc_command("IF OBJECT_ID('stat_t') IS NOT NULL DROP TABLE stat_t");
      60          16 :                 sprintf(sql, "CREATE TABLE stat_t(t %s)", type);
      61             :         }
      62             : 
      63          32 :         odbc_command(sql);
      64             : 
      65          32 :         column = "t";
      66          32 :         table = "stat_t";
      67          32 :         CHKColumns(T(catalog), LEN(catalog), T(schema), LEN(schema), T(table), LEN(table), T(column), LEN(column), "SI");
      68             : 
      69          32 :         CHKFetch("SI");
      70             : 
      71          32 :         ReadCol(5);
      72          32 :         if (strcmp(output, expected) != 0) {
      73           0 :                 fprintf(stderr, "Got \"%s\" expected \"%s\"\n", output, expected);
      74           0 :                 odbc_disconnect();
      75           0 :                 exit(1);
      76             :         }
      77             : 
      78          32 :         CHKCloseCursor("SI");
      79          32 :         ODBC_FREE();
      80          32 : }
      81             : 
      82             : 
      83             : #define STR(n) str(int_buf, n)
      84             : 
      85             : static const char *
      86             : str(char *buf, int n)
      87             : {
      88          48 :         sprintf(buf, "%d", n);
      89             :         return buf;
      90             : }
      91             : 
      92             : static void
      93          16 : set_dbname(const char *dbname)
      94             : {
      95          16 :         CHKSetConnectAttr(SQL_ATTR_CURRENT_CATALOG, (SQLPOINTER) T(dbname), strlen(dbname)*sizeof(SQLTCHAR), "SI");
      96          16 : }
      97             : 
      98             : int
      99           8 : main(void)
     100             : {
     101             :         char int_buf[32];
     102             : 
     103           8 :         odbc_use_version3 = 0;
     104           8 :         odbc_connect();
     105             : 
     106           8 :         TestProc(NULL, "DATETIME", STR(SQL_TIMESTAMP));
     107           8 :         TestTable(NULL, "DATETIME", STR(SQL_TIMESTAMP));
     108           8 :         set_dbname("master");
     109           8 :         TestTable(odbc_database, "DATETIME", STR(SQL_TIMESTAMP));
     110             : 
     111           8 :         odbc_disconnect();
     112             : 
     113             : 
     114           8 :         odbc_use_version3 = 1;
     115           8 :         odbc_connect();
     116             : 
     117           8 :         TestProc(NULL, "DATETIME", STR(SQL_TYPE_TIMESTAMP));
     118           8 :         TestTable(NULL, "DATETIME", STR(SQL_TYPE_TIMESTAMP));
     119           8 :         set_dbname("master");
     120           8 :         TestTable(odbc_database, "DATETIME", STR(SQL_TYPE_TIMESTAMP));
     121             : 
     122           8 :         odbc_disconnect();
     123             : 
     124           8 :         printf("Done.\n");
     125             :         return 0;
     126             : }

Generated by: LCOV version 1.13