LTP GCOV extension - code coverage report
Current view: directory - dblib/unittests - t0022.c
Test: FreeTDS coverage
Date: 2008-09-05 Instrumented lines: 98
Code covered: 85.7 % Executed lines: 84

       1                 : /* 
       2                 :  * Purpose: Test retrieving output parameters and return status 
       3                 :  * Functions: DBTDS dbnumrets dbresults dbretdata dbretlen dbretname dbrettype dbsqlexec
       4                 :  */
       5                 : 
       6                 : #if HAVE_CONFIG_H
       7                 : #include <config.h>
       8                 : #endif /* HAVE_CONFIG_H */
       9                 : 
      10                 : #include <stdio.h>
      11                 : 
      12                 : #if HAVE_STDLIB_H
      13                 : #include <stdlib.h>
      14                 : #endif /* HAVE_STDLIB_H */
      15                 : 
      16                 : #if HAVE_STRING_H
      17                 : #include <string.h>
      18                 : #endif /* HAVE_STRING_H */
      19                 : 
      20                 : #include <sqlfront.h>
      21                 : #include <sqldb.h>
      22                 : 
      23                 : #include "common.h"
      24                 : 
      25                 : 
      26                 : static char software_version[] = "$Id: t0022.c,v 1.19 2005/05/11 07:56:44 freddy77 Exp $";
      27                 : static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };
      28                 : 
      29                 : 
      30                 : 
      31                 : int
      32                 : main(int argc, char **argv)
      33               2 : {
      34                 :         char cmd[1024];
      35                 :         LOGINREC *login;
      36                 :         DBPROCESS *dbproc;
      37                 :         int i;
      38                 :         char teststr[1024];
      39               2 :         int failed = 0;
      40               2 :         char *retname = NULL;
      41               2 :         int rettype = 0, retlen = 0;
      42                 : 
      43               2 :         set_malloc_options();
      44                 : 
      45               2 :         read_login_info(argc, argv);
      46                 : 
      47               2 :         fprintf(stdout, "Start\n");
      48               2 :         add_bread_crumb();
      49                 : 
      50               2 :         dbinit();
      51                 : 
      52               2 :         add_bread_crumb();
      53               2 :         dberrhandle(syb_err_handler);
      54               2 :         dbmsghandle(syb_msg_handler);
      55                 : 
      56               2 :         fprintf(stdout, "About to logon\n");
      57                 : 
      58               2 :         add_bread_crumb();
      59               2 :         login = dblogin();
      60               2 :         DBSETLPWD(login, PASSWORD);
      61               2 :         DBSETLUSER(login, USER);
      62               2 :         DBSETLAPP(login, "t0022");
      63                 : 
      64               2 :         fprintf(stdout, "About to open\n");
      65                 : 
      66               2 :         add_bread_crumb();
      67               2 :         dbproc = dbopen(login, SERVER);
      68               2 :         if (strlen(DATABASE))
      69               2 :                 dbuse(dbproc, DATABASE);
      70               2 :         add_bread_crumb();
      71               2 :         dbloginfree(login);
      72               2 :         add_bread_crumb();
      73                 : 
      74               2 :         fprintf(stdout, "Dropping proc\n");
      75               2 :         add_bread_crumb();
      76               2 :         dbcmd(dbproc, "drop proc t0022");
      77               2 :         add_bread_crumb();
      78               2 :         dbsqlexec(dbproc);
      79               2 :         add_bread_crumb();
      80               2 :         while (dbresults(dbproc) != NO_MORE_RESULTS) {
      81                 :                 /* nop */
      82                 :         }
      83               2 :         add_bread_crumb();
      84                 : 
      85               2 :         fprintf(stdout, "creating proc\n");
      86               2 :         dbcmd(dbproc, "create proc t0022 (@b int out) as\nbegin\n select @b = 42\nend\n");
      87               2 :         if (dbsqlexec(dbproc) == FAIL) {
      88               0 :                 add_bread_crumb();
      89               0 :                 fprintf(stdout, "Failed to create proc t0022.\n");
      90               0 :                 exit(1);
      91                 :         }
      92               4 :         while (dbresults(dbproc) != NO_MORE_RESULTS) {
      93                 :                 /* nop */
      94                 :         }
      95                 : 
      96               2 :         sprintf(cmd, "declare @b int\nexec t0022 @b = @b output\n");
      97               2 :         fprintf(stdout, "%s\n", cmd);
      98               2 :         dbcmd(dbproc, cmd);
      99               2 :         dbsqlexec(dbproc);
     100               2 :         add_bread_crumb();
     101                 : 
     102                 : 
     103               2 :         if (dbresults(dbproc) == FAIL) {
     104               0 :                 add_bread_crumb();
     105               0 :                 fprintf(stdout, "Was expecting a result set.\n");
     106               0 :                 exit(1);
     107                 :         }
     108               2 :         add_bread_crumb();
     109                 : 
     110               2 :         if ((dbnumrets(dbproc) == 0)
     111                 :             && ((DBTDS(dbproc) == DBTDS_7_0)
     112                 :                 || (DBTDS(dbproc) == DBTDS_8_0))) {
     113               1 :                 fprintf(stdout, "WARNING:  Received no return parameters from server!\n");
     114               1 :                 fprintf(stdout, "WARNING:  This is likely due to a bug in Microsoft\n");
     115               1 :                 fprintf(stdout, "WARNING:  SQL Server 7.0 SP3 and later.\n");
     116               1 :                 fprintf(stdout, "WARNING:  Please try again using TDS protocol 4.2.\n");
     117               1 :                 dbcmd(dbproc, "drop proc t0022");
     118               1 :                 dbsqlexec(dbproc);
     119               2 :                 while (dbresults(dbproc) != NO_MORE_RESULTS) {
     120                 :                         /* nop */
     121                 :                 }
     122               1 :                 dbexit();
     123               1 :                 free_bread_crumb();
     124               1 :                 exit(0);
     125                 :         }
     126               2 :         for (i = 1; i <= dbnumrets(dbproc); i++) {
     127               1 :                 add_bread_crumb();
     128               1 :                 retname = dbretname(dbproc, i);
     129               1 :                 printf("ret name %d is %s\n", i, retname);
     130               1 :                 rettype = dbrettype(dbproc, i);
     131               1 :                 printf("ret type %d is %d\n", i, rettype);
     132               1 :                 retlen = dbretlen(dbproc, i);
     133               1 :                 printf("ret len %d is %d\n", i, retlen);
     134               1 :                 dbconvert(dbproc, rettype, dbretdata(dbproc, i), retlen, SYBVARCHAR, (BYTE*) teststr, -1);
     135               1 :                 printf("ret data %d is %s\n", i, teststr);
     136               1 :                 add_bread_crumb();
     137                 :         }
     138               1 :         if ((retname == NULL) || strcmp(retname, "@b")) {
     139               0 :                 fprintf(stdout, "Was expecting a retname to be @b.\n");
     140               0 :                 exit(1);
     141                 :         }
     142               1 :         if (strcmp(teststr, "42")) {
     143               0 :                 fprintf(stdout, "Was expecting a retdata to be 42.\n");
     144               0 :                 exit(1);
     145                 :         }
     146               1 :         if (rettype != SYBINT4) {
     147               0 :                 fprintf(stdout, "Was expecting a rettype to be SYBINT4 was %d.\n", rettype);
     148               0 :                 exit(1);
     149                 :         }
     150               1 :         if (retlen != 4) {
     151               0 :                 fprintf(stdout, "Was expecting a retlen to be 4.\n");
     152               0 :                 exit(1);
     153                 :         }
     154                 : 
     155               1 :         fprintf(stdout, "Dropping proc\n");
     156               1 :         add_bread_crumb();
     157               1 :         dbcmd(dbproc, "drop proc t0022");
     158               1 :         add_bread_crumb();
     159               1 :         dbsqlexec(dbproc);
     160               1 :         add_bread_crumb();
     161               2 :         while (dbresults(dbproc) != NO_MORE_RESULTS) {
     162                 :                 /* nop */
     163                 :         }
     164               1 :         add_bread_crumb();
     165               1 :         dbexit();
     166               1 :         add_bread_crumb();
     167                 : 
     168               1 :         fprintf(stdout, "dblib %s on %s\n", (failed ? "failed!" : "okay"), __FILE__);
     169               1 :         free_bread_crumb();
     170               1 :         return failed ? 1 : 0;
     171                 : }

Generated by: LTP GCOV extension version 1.6