LCOV - code coverage report
Current view: top level - src/odbc/unittests - stats.c (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 53 59 89.8 %
Date: 2025-01-18 12:13:41 Functions: 4 4 100.0 %

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

Generated by: LCOV version 1.13