LCOV - code coverage report
Current view: top level - src/dblib/unittests - t0023.c (source / functions) Hit Total Coverage
Test: FreeTDS coverage Lines: 80 118 67.8 %
Date: 2025-01-18 11:50:39 Functions: 1 2 50.0 %

          Line data    Source code
       1             : /* 
       2             :  * Purpose: Test retrieving compute rows
       3             :  * Functions: dbaltbind dbaltcolid dbaltop dbalttype dbnumalts
       4             :  */
       5             : 
       6             : #include "common.h"
       7             : #include <assert.h>
       8             : 
       9             : static int got_error = 0;
      10             : static int compute_supported = 1;
      11             : 
      12             : static int
      13           0 : compute_msg_handler(DBPROCESS * dbproc TDS_UNUSED, DBINT msgno TDS_UNUSED, int state TDS_UNUSED, int severity TDS_UNUSED,
      14             :                     char *text TDS_UNUSED, char *server TDS_UNUSED, char *proc TDS_UNUSED, int line TDS_UNUSED)
      15             : {
      16           0 :         if (strstr(text, "compute"))
      17           0 :                 compute_supported = 0;
      18             :         else
      19           0 :                 got_error = 1;
      20           0 :         return 0;
      21             : }
      22             : 
      23             : int
      24           8 : main(int argc, char *argv[])
      25             : {
      26             :         LOGINREC *login;
      27             :         DBPROCESS *dbproc;
      28             :         int i;
      29             :         DBINT rowint;
      30             :         DBCHAR rowchar[2];
      31             :         DBCHAR rowdate[32];
      32             : 
      33             :         DBINT rowtype;
      34             :         DBINT computeint;
      35             :         DBCHAR computedate[32];
      36             : 
      37           8 :         set_malloc_options();
      38           8 :         read_login_info(argc, argv);
      39             : 
      40           8 :         printf("Starting %s\n", argv[0]);
      41             : 
      42             :         /* Fortify_EnterScope(); */
      43           8 :         dbinit();
      44             : 
      45           8 :         dberrhandle(syb_err_handler);
      46           8 :         dbmsghandle(syb_msg_handler);
      47             : 
      48           8 :         printf("About to logon\n");
      49             : 
      50           8 :         login = dblogin();
      51           8 :         DBSETLPWD(login, PASSWORD);
      52           8 :         DBSETLUSER(login, USER);
      53           8 :         DBSETLAPP(login, "t0023");
      54             : 
      55           8 :         printf("About to open\n");
      56             : 
      57           8 :         dbproc = dbopen(login, SERVER);
      58           8 :         if (strlen(DATABASE))
      59           8 :                 dbuse(dbproc, DATABASE);
      60           8 :         dbloginfree(login);
      61             : 
      62           8 :         sql_cmd(dbproc);
      63           8 :         dbmsghandle(compute_msg_handler);
      64           8 :         i = dbsqlexec(dbproc);
      65           8 :         dbmsghandle(syb_msg_handler);
      66           8 :         if (!compute_supported) {
      67           0 :                 printf("compute clause not supported, skip test!\n");
      68           0 :                 dbexit();
      69           0 :                 return 0;
      70             :         }
      71           8 :         if (got_error) {
      72           0 :                 fprintf(stderr, "Unexpected error from query.\n");
      73           0 :                 exit(1);
      74             :         }
      75          16 :         while ((i=dbresults(dbproc)) != NO_MORE_RESULTS) {
      76          16 :                 while (dbnextrow(dbproc) != NO_MORE_ROWS)
      77           8 :                         continue;
      78             :         }
      79             : 
      80           8 :         printf("creating table\n");
      81           8 :         sql_cmd(dbproc);
      82           8 :         dbsqlexec(dbproc);
      83           8 :         while (dbresults(dbproc) == SUCCEED) {
      84             :                 /* nop */
      85             :         }
      86             : 
      87           8 :         printf("insert\n");
      88             : 
      89           8 :         sql_cmd(dbproc);
      90           8 :         dbsqlexec(dbproc);
      91           8 :         while (dbresults(dbproc) == SUCCEED) {
      92             :                 /* nop */
      93             :         }
      94           8 :         sql_cmd(dbproc);
      95           8 :         dbsqlexec(dbproc);
      96           8 :         while (dbresults(dbproc) == SUCCEED) {
      97             :                 /* nop */
      98             :         }
      99           8 :         sql_cmd(dbproc);
     100           8 :         dbsqlexec(dbproc);
     101           8 :         while (dbresults(dbproc) == SUCCEED) {
     102             :                 /* nop */
     103             :         }
     104           8 :         sql_cmd(dbproc);
     105           8 :         dbsqlexec(dbproc);
     106           8 :         while (dbresults(dbproc) == SUCCEED) {
     107             :                 /* nop */
     108             :         }
     109           8 :         sql_cmd(dbproc);
     110           8 :         dbsqlexec(dbproc);
     111           8 :         while (dbresults(dbproc) == SUCCEED) {
     112             :                 /* nop */
     113             :         }
     114             : 
     115           8 :         printf("select\n");
     116           8 :         sql_cmd(dbproc);
     117           8 :         dbsqlexec(dbproc);
     118             : 
     119           8 :         if (dbresults(dbproc) != SUCCEED) {
     120           0 :                 fprintf(stderr, "Was expecting a result set.\n");
     121           0 :                 exit(1);
     122             :         }
     123             : 
     124          24 :         for (i = 1; i <= dbnumcols(dbproc); i++)
     125          24 :                 printf("col %d is %s\n", i, dbcolname(dbproc, i));
     126             : 
     127           8 :         printf("binding row columns\n");
     128           8 :         if (SUCCEED != dbbind(dbproc, 1, INTBIND, 0, (BYTE *) & rowint)) {
     129           0 :                 fprintf(stderr, "Had problem with bind col1\n");
     130           0 :                 abort();
     131             :         }
     132           8 :         if (SUCCEED != dbbind(dbproc, 2, STRINGBIND, 0, (BYTE *) rowchar)) {
     133           0 :                 fprintf(stderr, "Had problem with bind col2\n");
     134           0 :                 abort();
     135             :         }
     136           8 :         if (SUCCEED != dbbind(dbproc, 3, STRINGBIND, 0, (BYTE *) rowdate)) {
     137           0 :                 fprintf(stderr, "Had problem with bind col3\n");
     138           0 :                 abort();
     139             :         }
     140             : 
     141           8 :         printf("testing compute clause 1\n");
     142             : 
     143           8 :         if (dbnumalts(dbproc, 1) != 1) {
     144           0 :                 fprintf(stderr, "Had problem with dbnumalts 1\n");
     145           0 :                 abort();
     146             :         }
     147             : 
     148           8 :         if (dbalttype(dbproc, 1, 1) != SYBINT4) {
     149           0 :                 fprintf(stderr, "Had problem with dbalttype 1, 1\n");
     150           0 :                 abort();
     151             :         }
     152             : 
     153           8 :         if (dbaltcolid(dbproc, 1, 1) != 1) {
     154           0 :                 fprintf(stderr, "Had problem with dbaltcolid 1, 1\n");
     155           0 :                 abort();
     156             :         }
     157             : 
     158           8 :         if (dbaltop(dbproc, 1, 1) != SYBAOPSUM) {
     159           0 :                 fprintf(stderr, "Had problem with dbaltop 1, 1\n");
     160           0 :                 abort();
     161             :         }
     162             : 
     163           8 :         if (SUCCEED != dbaltbind(dbproc, 1, 1, INTBIND, 0, (BYTE *) & computeint)) {
     164           0 :                 fprintf(stderr, "Had problem with dbaltbind 1, 1\n");
     165           0 :                 abort();
     166             :         }
     167             : 
     168             : 
     169           8 :         printf("testing compute clause 2\n");
     170             : 
     171           8 :         if (dbnumalts(dbproc, 2) != 1) {
     172           0 :                 fprintf(stderr, "Had problem with dbnumalts 2\n");
     173           0 :                 abort();
     174             :         }
     175             : 
     176           8 :         if (dbalttype(dbproc, 2, 1) != SYBDATETIME) {
     177           0 :                 fprintf(stderr, "Had problem with dbalttype 2, 1\n");
     178           0 :                 abort();
     179             :         }
     180             : 
     181           8 :         if (dbaltcolid(dbproc, 2, 1) != 3) {
     182           0 :                 fprintf(stderr, "Had problem with dbaltcolid 2, 1\n");
     183           0 :                 abort();
     184             :         }
     185             : 
     186           8 :         if (dbaltop(dbproc, 2, 1) != SYBAOPMAX) {
     187           0 :                 fprintf(stderr, "Had problem with dbaltop 2, 1\n");
     188           0 :                 abort();
     189             :         }
     190             : 
     191           8 :         if (SUCCEED != dbaltbind(dbproc, 2, 1, STRINGBIND, -1, (BYTE *) computedate)) {
     192           0 :                 fprintf(stderr, "Had problem with dbaltbind 2, 1\n");
     193           0 :                 abort();
     194             :         }
     195             : 
     196          72 :         while ((rowtype = dbnextrow(dbproc)) != NO_MORE_ROWS) {
     197             : 
     198          64 :                 if (rowtype == REG_ROW) {
     199          40 :                         printf("gotten a regular row\n");
     200             :                 }
     201             : 
     202          64 :                 if (rowtype == 1) {
     203          16 :                         printf("gotten a compute row for clause 1\n");
     204          16 :                         printf("value of sum(col1) = %d\n", computeint);
     205             :                 }
     206             : 
     207          64 :                 if (rowtype == 2) {
     208           8 :                         printf("gotten a compute row for clause 2\n");
     209           8 :                         printf("value of max(col3) = %s\n", computedate);
     210             : 
     211             :                 }
     212             :         }
     213             : 
     214           8 :         dbexit();
     215             : 
     216           8 :         printf("%s %s\n", __FILE__, "OK");
     217           8 :         return 0;
     218             : }

Generated by: LCOV version 1.13