LCOV - code coverage report
Current view: top level - src/odbc/unittests - rowset.c (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 32 41 78.0 %
Date: 2026-07-19 14:02:14 Functions: 2 2 100.0 %

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

Generated by: LCOV version 1.13