LCOV - code coverage report
Current view: top level - src/odbc/unittests - rowset.c (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 33 42 78.6 %
Date: 2025-01-18 12:13:41 Functions: 2 2 100.0 %

          Line data    Source code
       1             : #include "common.h"
       2             : 
       3             : static char software_version[] = "$Id: rowset.c,v 1.8 2011-07-12 10:16:59 freddy77 Exp $";
       4             : static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };
       5             : 
       6             : static void
       7          24 : test_err(int n)
       8             : {
       9          24 :         CHKSetStmtAttr(SQL_ROWSET_SIZE, (SQLPOINTER) TDS_INT2PTR(n), 0, "E");
      10          24 :         odbc_read_error();
      11          24 :         if (strcmp(odbc_sqlstate, "HY024") != 0) {
      12           0 :                 fprintf(stderr, "Unexpected sql state returned\n");
      13           0 :                 odbc_disconnect();
      14           0 :                 exit(1);
      15             :         }
      16          24 : }
      17             : 
      18             : int
      19           8 : main(int argc, char *argv[])
      20             : {
      21             :         int i;
      22             :         SQLLEN len;
      23             : #ifdef HAVE_SQLROWSETSIZE
      24             :         SQLROWSETSIZE row_count;
      25             : #else
      26             :         SQLULEN row_count;
      27             : #endif
      28             :         SQLUSMALLINT statuses[10];
      29             :         char buf[32];
      30             : 
      31           8 :         odbc_use_version3 = 1;
      32           8 :         odbc_connect();
      33             : 
      34             :         /* initial value should be 1 */
      35           8 :         CHKGetStmtAttr(SQL_ROWSET_SIZE, &len, sizeof(len), NULL, "S");
      36           8 :         if (len != 1) {
      37           0 :                 fprintf(stderr, "len should be 1\n");
      38           0 :                 odbc_disconnect();
      39           0 :                 return 1;
      40             :         }
      41             : 
      42             :         /* check invalid parameter values */
      43           8 :         test_err(-123);
      44           8 :         test_err(-1);
      45           8 :         test_err(0);
      46             : 
      47           8 :         odbc_check_cursor();
      48             : 
      49             :         /* set some correct values */
      50           6 :         CHKSetStmtAttr(SQL_ROWSET_SIZE, (SQLPOINTER) TDS_INT2PTR(2), 0, "S");
      51           6 :         CHKSetStmtAttr(SQL_ROWSET_SIZE, (SQLPOINTER) TDS_INT2PTR(1), 0, "S");
      52             : 
      53             :         /* now check that SQLExtendedFetch works as expected */
      54           6 :         odbc_command("CREATE TABLE #rowset(n INTEGER, c VARCHAR(20))");
      55          66 :         for (i = 0; i < 10; ++i) {
      56             :                 char s[10];
      57             :                 char sql[128];
      58             : 
      59          60 :                 memset(s, 'a' + i, 9);
      60          60 :                 s[9] = 0;
      61          60 :                 sprintf(sql, "INSERT INTO #rowset(n,c) VALUES(%d,'%s')", i+1, s);
      62          60 :                 odbc_command(sql);
      63             :         }
      64             : 
      65           6 :         odbc_reset_statement();
      66           6 :         CHKSetStmtOption(SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_DYNAMIC, "S");
      67           6 :         CHKExecDirect(T("SELECT * FROM #rowset ORDER BY n"), SQL_NTS, "SI");
      68             : 
      69           6 :         CHKBindCol(2, SQL_C_CHAR, buf, sizeof(buf), &len, "S");
      70             : 
      71           6 :         row_count = 0xdeadbeef;
      72           6 :         memset(statuses, 0x55, sizeof(statuses));
      73           6 :         CHKExtendedFetch(SQL_FETCH_NEXT, 1, &row_count, statuses, "S");
      74             : 
      75           6 :         if (row_count != 1 || statuses[0] != SQL_ROW_SUCCESS || strcmp(buf, "aaaaaaaaa") != 0) {
      76           0 :                 fprintf(stderr, "Invalid result\n");
      77           0 :                 odbc_disconnect();
      78           0 :                 return 1;
      79             :         }
      80             : 
      81           6 :         odbc_disconnect();
      82             : 
      83           6 :         printf("Done.\n");
      84           6 :         return 0;
      85             : }

Generated by: LCOV version 1.13