LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - sqlda.pgc (source / functions) Coverage Total Hit
Test: Code coverage Lines: 0.0 % 157 0
Test Date: 2026-01-26 10:56:24 Functions: 0.0 % 2 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #include <stdlib.h>
       2              : #include <string.h>
       3              : #include <limits.h>
       4              : #include "ecpg_config.h"
       5              : 
       6              : exec sql include ../regression;
       7              : exec sql include sqlda.h;
       8              : exec sql include pgtypes_numeric.h;
       9              : 
      10              : exec sql whenever sqlerror stop;
      11              : 
      12              : /* These shouldn't be under DECLARE SECTION */
      13              : sqlda_t *inp_sqlda, *outp_sqlda, *outp_sqlda1;
      14              : 
      15              : static void
      16            0 : dump_sqlda(sqlda_t *sqlda)
      17              : {
      18            0 :         int     i;
      19              : 
      20            0 :         if (sqlda == NULL)
      21              :         {
      22            0 :                 printf("dump_sqlda called with NULL sqlda\n");
      23            0 :                 return;
      24              :         }
      25              : 
      26            0 :         for (i = 0; i < sqlda->sqld; i++)
      27              :         {
      28            0 :                 if (sqlda->sqlvar[i].sqlind && *(sqlda->sqlvar[i].sqlind) == -1)
      29            0 :                         printf("name sqlda descriptor: '%s' value NULL'\n", sqlda->sqlvar[i].sqlname.data);
      30              :                 else
      31            0 :                 switch (sqlda->sqlvar[i].sqltype)
      32              :                 {
      33              :                 case ECPGt_char:
      34            0 :                         printf("name sqlda descriptor: '%s' value '%s'\n", sqlda->sqlvar[i].sqlname.data, sqlda->sqlvar[i].sqldata);
      35            0 :                         break;
      36              :                 case ECPGt_int:
      37            0 :                         printf("name sqlda descriptor: '%s' value %d\n", sqlda->sqlvar[i].sqlname.data, *(int *)sqlda->sqlvar[i].sqldata);
      38            0 :                         break;
      39              :                 case ECPGt_long:
      40            0 :                         printf("name sqlda descriptor: '%s' value %ld\n", sqlda->sqlvar[i].sqlname.data, *(long int *)sqlda->sqlvar[i].sqldata);
      41            0 :                         break;
      42              :                 case ECPGt_long_long:
      43            0 :                         printf("name sqlda descriptor: '%s' value %lld\n",
      44            0 :                                    sqlda->sqlvar[i].sqlname.data, *(long long int *)sqlda->sqlvar[i].sqldata);
      45            0 :                         break;
      46              :                 case ECPGt_double:
      47            0 :                         printf("name sqlda descriptor: '%s' value %f\n", sqlda->sqlvar[i].sqlname.data, *(double *)sqlda->sqlvar[i].sqldata);
      48            0 :                         break;
      49              :                 case ECPGt_numeric:
      50              :                         {
      51            0 :                                 char    *val;
      52              : 
      53            0 :                                 val = PGTYPESnumeric_to_asc((numeric*)sqlda->sqlvar[i].sqldata, -1);
      54            0 :                                 printf("name sqlda descriptor: '%s' value NUMERIC '%s'\n", sqlda->sqlvar[i].sqlname.data, val);
      55            0 :                                 PGTYPESchar_free(val);
      56              :                                 break;
      57            0 :                         }
      58              :                 }
      59            0 :         }
      60            0 : }
      61              : 
      62              : int
      63            0 : main (void)
      64              : {
      65              : exec sql begin declare section;
      66            0 :         char    *stmt1 = "SELECT * FROM t1";
      67            0 :         char    *stmt2 = "SELECT * FROM t1 WHERE id = ?";
      68            0 :         int     rec;
      69            0 :         int     id;
      70              : exec sql end declare section;
      71              : 
      72            0 :         char msg[128];
      73              : 
      74            0 :         ECPGdebug(1, stderr);
      75              : 
      76            0 :         strcpy(msg, "connect");
      77            0 :         exec sql connect to REGRESSDB1 as regress1;
      78            0 : 
      79            0 :         strcpy(msg, "set");
      80            0 :         exec sql set datestyle to iso;
      81            0 : 
      82            0 :         strcpy(msg, "create");
      83            0 :         exec sql create table t1(
      84              :                 id integer,
      85              :                 t text,
      86              :                 d1 numeric,
      87              :                 d2 float8,
      88              :                 c char(10),
      89              :                 big bigint
      90              :                 );
      91            0 : 
      92            0 :         strcpy(msg, "insert");
      93            0 :         exec sql insert into t1 values
      94              :                 (1, 'a', 1.0, 1, 'a',1111111111111111111),
      95              :                 (2, null, null, null, null,null),
      96              :                 (3, 'c', 0.0, 3, 'c',3333333333333333333),
      97              :                 (4, 'd', 'NaN', 4, 'd',4444444444444444444),
      98              :                 (5, 'e', 0.001234, 5, 'e',5555555555555555555);
      99            0 : 
     100            0 :         strcpy(msg, "commit");
     101            0 :         exec sql commit;
     102            0 : 
     103              :         /* SQLDA test for getting all records from a table */
     104              : 
     105            0 :         outp_sqlda = NULL;
     106              : 
     107            0 :         strcpy(msg, "prepare");
     108            0 :         exec sql prepare st_id1 from :stmt1;
     109            0 : 
     110            0 :         strcpy(msg, "declare");
     111              :         exec sql declare mycur1 cursor for st_id1;
     112              : 
     113            0 :         strcpy(msg, "open");
     114            0 :         exec sql open mycur1;
     115            0 : 
     116              :         exec sql whenever not found do break;
     117              : 
     118            0 :         rec = 0;
     119            0 :         while (1)
     120              :         {
     121            0 :                 strcpy(msg, "fetch");
     122            0 :                 exec sql fetch 1 from mycur1 into descriptor outp_sqlda;
     123            0 : 
     124            0 :                 printf("FETCH RECORD %d\n", ++rec);
     125            0 :                 dump_sqlda(outp_sqlda);
     126              :         }
     127              : 
     128              :         exec sql whenever not found continue;
     129              : 
     130            0 :         strcpy(msg, "close");
     131            0 :         exec sql close mycur1;
     132            0 : 
     133            0 :         strcpy(msg, "deallocate");
     134            0 :         exec sql deallocate prepare st_id1;
     135            0 : 
     136            0 :         free(outp_sqlda);
     137              : 
     138              :         /* SQLDA test for getting ALL records into the sqlda list */
     139              : 
     140            0 :         outp_sqlda = NULL;
     141              : 
     142            0 :         strcpy(msg, "prepare");
     143            0 :         exec sql prepare st_id2 from :stmt1;
     144            0 : 
     145            0 :         strcpy(msg, "declare");
     146              :         exec sql declare mycur2 cursor for st_id2;
     147              : 
     148            0 :         strcpy(msg, "open");
     149            0 :         exec sql open mycur2;
     150            0 : 
     151            0 :         strcpy(msg, "fetch");
     152            0 :         exec sql fetch all from mycur2 into descriptor outp_sqlda;
     153            0 : 
     154            0 :         outp_sqlda1 = outp_sqlda;
     155            0 :         rec = 0;
     156            0 :         while (outp_sqlda1)
     157              :         {
     158            0 :                 sqlda_t *ptr;
     159            0 :                 printf("FETCH RECORD %d\n", ++rec);
     160            0 :                 dump_sqlda(outp_sqlda1);
     161              : 
     162            0 :                 ptr = outp_sqlda1;
     163            0 :                 outp_sqlda1 = outp_sqlda1->desc_next;
     164            0 :                 free(ptr);
     165            0 :         }
     166              : 
     167            0 :         strcpy(msg, "close");
     168            0 :         exec sql close mycur2;
     169            0 : 
     170            0 :         strcpy(msg, "deallocate");
     171            0 :         exec sql deallocate prepare st_id2;
     172            0 : 
     173              :         /* SQLDA test for getting one record using an input descriptor */
     174              : 
     175              :         /*
     176              :          * Input sqlda has to be built manually
     177              :          * sqlda_t contains 1 sqlvar_t structure already.
     178              :          */
     179            0 :         inp_sqlda = (sqlda_t *)malloc(sizeof(sqlda_t));
     180            0 :         memset(inp_sqlda, 0, sizeof(sqlda_t));
     181            0 :         inp_sqlda->sqln = 1;
     182              : 
     183            0 :         inp_sqlda->sqlvar[0].sqltype = ECPGt_int;
     184            0 :         inp_sqlda->sqlvar[0].sqldata = (char *)&id;
     185              : 
     186            0 :         printf("EXECUTE RECORD 4\n");
     187              : 
     188            0 :         id = 4;
     189              : 
     190            0 :         outp_sqlda = NULL;
     191              : 
     192            0 :         strcpy(msg, "prepare");
     193            0 :         exec sql prepare st_id3 FROM :stmt2;
     194            0 : 
     195            0 :         strcpy(msg, "execute");
     196            0 :         exec sql execute st_id3 using descriptor inp_sqlda into descriptor outp_sqlda;
     197            0 : 
     198            0 :         dump_sqlda(outp_sqlda);
     199              : 
     200            0 :         strcpy(msg, "deallocate");
     201            0 :         exec sql deallocate prepare st_id3;
     202            0 : 
     203            0 :         free(inp_sqlda);
     204            0 :         free(outp_sqlda);
     205              : 
     206              :         /* SQLDA test for getting one record using an input descriptor
     207              :          * on a named connection
     208              :          */
     209              : 
     210            0 :         exec sql connect to REGRESSDB1 as con2;
     211            0 : 
     212              :         /*
     213              :          * Input sqlda has to be built manually
     214              :          * sqlda_t contains 1 sqlvar_t structure already.
     215              :          */
     216            0 :         inp_sqlda = (sqlda_t *)malloc(sizeof(sqlda_t));
     217            0 :         memset(inp_sqlda, 0, sizeof(sqlda_t));
     218            0 :         inp_sqlda->sqln = 1;
     219              : 
     220            0 :         inp_sqlda->sqlvar[0].sqltype = ECPGt_int;
     221            0 :         inp_sqlda->sqlvar[0].sqldata = (char *)&id;
     222              : 
     223            0 :         printf("EXECUTE RECORD 4\n");
     224              : 
     225            0 :         id = 4;
     226              : 
     227            0 :         outp_sqlda = NULL;
     228              : 
     229            0 :         strcpy(msg, "prepare");
     230            0 :         exec sql at con2 prepare st_id4 FROM :stmt2;
     231            0 : 
     232            0 :         strcpy(msg, "execute");
     233            0 :         exec sql at con2 execute st_id4 using descriptor inp_sqlda into descriptor outp_sqlda;
     234            0 : 
     235            0 :         dump_sqlda(outp_sqlda);
     236              : 
     237            0 :         strcpy(msg, "commit");
     238            0 :         exec sql at con2 commit;
     239            0 : 
     240            0 :         strcpy(msg, "deallocate");
     241            0 :         exec sql deallocate prepare st_id4;
     242            0 : 
     243            0 :         free(inp_sqlda);
     244            0 :         free(outp_sqlda);
     245              : 
     246            0 :         strcpy(msg, "disconnect");
     247            0 :         exec sql disconnect con2;
     248            0 : 
     249              :         /* End test */
     250              : 
     251            0 :         strcpy(msg, "drop");
     252            0 :         exec sql drop table t1;
     253            0 : 
     254            0 :         strcpy(msg, "commit");
     255            0 :         exec sql commit;
     256            0 : 
     257            0 :         strcpy(msg, "disconnect");
     258            0 :         exec sql disconnect;
     259            0 : 
     260            0 :         return 0;
     261            0 : }
        

Generated by: LCOV version 2.3.2-1