LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - dyntest.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 20devel Lines: 68.8 % 125 86
Test Date: 2026-07-25 11:15:46 Functions: 50.0 % 2 1
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 55.7 % 79 44

             Branch data     Line data    Source code
       1                 :             : /* dynamic SQL test program
       2                 :             :  */
       3                 :             : 
       4                 :             : #include <stdio.h>
       5                 :             : #include <stdlib.h>
       6                 :             : 
       7                 :             : exec sql include sql3types;
       8                 :             : exec sql include sqlca;
       9                 :             : exec sql include ../regression;
      10                 :             : 
      11                 :             : static void
      12                 :           0 : error (void)
      13                 :             : {
      14                 :           0 :   printf ("\n#%ld:%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
      15                 :           0 :   exit (1);
      16                 :             : }
      17                 :             : 
      18                 :             : int
      19                 :           2 : main(void)
      20                 :             : {
      21                 :             :   exec sql begin declare section;
      22                 :             :   int COUNT;
      23                 :             :   int INTVAR;
      24                 :             :   int INDEX;
      25                 :             :   int INDICATOR;
      26                 :             :   int TYPE, LENGTH, OCTET_LENGTH, PRECISION, SCALE, RETURNED_OCTET_LENGTH;
      27                 :             :   int DATETIME_INTERVAL_CODE;
      28                 :             :   char NAME[120], BOOLVAR;
      29                 :             :   char STRINGVAR[1024];
      30                 :             :   double DOUBLEVAR;
      31                 :             :   char *QUERY;
      32                 :             :   exec sql end declare section;
      33                 :           2 :   int done = 0;
      34                 :             : 
      35                 :             :   exec sql var BOOLVAR is bool;
      36                 :             : 
      37                 :           2 :   ECPGdebug (1, stderr);
      38                 :             : 
      39                 :           2 :   QUERY = "select * from dyntest";
      40                 :             : 
      41                 :             :   exec sql whenever sqlerror
      42                 :             :   do
      43                 :             :       error ();
      44                 :             : 
      45                 :           2 :   exec sql allocate descriptor MYDESC;
      46         [ -  + ]:           2 : 
      47                 :           2 :   exec sql connect to REGRESSDB1;
      48         [ -  + ]:           2 : 
      49                 :           2 :   exec sql set datestyle to german;
      50         [ -  + ]:           2 : 
      51                 :           2 :   exec sql create table dyntest (name char (14), d float8, i int,
      52                 :             :                  bignumber int8, b boolean, comment text,
      53                 :             :                  day date);
      54         [ -  + ]:           2 :   exec sql insert into dyntest values ('first entry', 14.7, 14, 123045607890, true, 'The world''s most advanced open source database.', '1987-07-14');
      55         [ -  + ]:           2 :   exec sql insert into dyntest values ('second entry', 1407.87, 1407, 987065403210, false, 'The elephant never forgets.', '1999-11-5');
      56         [ -  + ]:           2 : 
      57                 :           2 :   exec sql prepare MYQUERY from :QUERY;
      58         [ -  + ]:           2 :   exec sql declare MYCURS cursor for MYQUERY;
      59                 :             : 
      60                 :           2 :   exec sql open MYCURS;
      61         [ -  + ]:           2 : 
      62                 :             :   while (1)
      63                 :             :     {
      64                 :           6 :       exec sql fetch in MYCURS into sql descriptor MYDESC;
      65         [ -  + ]:           6 : 
      66         [ +  + ]:           6 :       if (sqlca.sqlcode)
      67                 :           2 :     break;
      68                 :             : 
      69                 :           4 :       exec sql get descriptor MYDESC:COUNT = count;
      70   [ -  +  +  + ]:           4 :       if (!done)
      71                 :             :     {
      72                 :           2 :       printf ("Found %d columns\n", COUNT);
      73                 :           2 :       done = 1;
      74                 :             :     }
      75                 :             : 
      76         [ +  + ]:          32 :       for (INDEX = 1; INDEX <= COUNT; ++INDEX)
      77                 :             :     {
      78                 :          28 :     exec sql get descriptor MYDESC value :INDEX
      79                 :             :         :TYPE = type,
      80                 :             :         :LENGTH = length,
      81                 :             :         :OCTET_LENGTH = octet_length,
      82                 :             :         :RETURNED_OCTET_LENGTH = returned_octet_length,
      83                 :             :         :PRECISION = precision,
      84                 :             :         :SCALE = scale,
      85                 :             :         :NAME = name,
      86                 :             :         :INDICATOR = indicator;
      87         [ -  + ]:          28 :       printf ("%2d\t%s (type: %d length: %d precision: %d scale: %d = " , INDEX, NAME, TYPE, LENGTH, PRECISION, SCALE);
      88   [ +  -  -  +  :          28 :       switch (TYPE)
          -  -  -  +  +  
             -  +  -  + ]
      89                 :             :         {
      90                 :           4 :         case SQL3_BOOLEAN:
      91                 :           4 :           printf ("bool");
      92                 :           4 :           break;
      93                 :           0 :         case SQL3_NUMERIC:
      94                 :           0 :           printf ("numeric(%d,%d)", PRECISION, SCALE);
      95                 :           0 :           break;
      96                 :           0 :         case SQL3_DECIMAL:
      97                 :           0 :           printf ("decimal(%d,%d)", PRECISION, SCALE);
      98                 :           0 :           break;
      99                 :           4 :         case SQL3_INTEGER:
     100                 :           4 :           printf ("integer");
     101                 :           4 :           break;
     102                 :           0 :         case SQL3_SMALLINT:
     103                 :           0 :           printf ("smallint");
     104                 :           0 :           break;
     105                 :           0 :         case SQL3_FLOAT:
     106                 :           0 :           printf ("float(%d,%d)", PRECISION, SCALE);
     107                 :           0 :           break;
     108                 :           0 :         case SQL3_REAL:
     109                 :           0 :           printf ("real");
     110                 :           0 :           break;
     111                 :           4 :         case SQL3_DOUBLE_PRECISION:
     112                 :           4 :           printf ("double precision");
     113                 :           4 :           break;
     114                 :           4 :         case SQL3_DATE_TIME_TIMESTAMP:
     115                 :           4 :         exec sql get descriptor MYDESC value :INDEX
     116                 :             :             :DATETIME_INTERVAL_CODE = datetime_interval_code;
     117   [ -  +  +  -  :           4 :           switch (DATETIME_INTERVAL_CODE)
             -  -  -  - ]
     118                 :             :         {
     119                 :           4 :         case SQL3_DDT_DATE:
     120                 :           4 :           printf ("date");
     121                 :           4 :           break;
     122                 :           0 :         case SQL3_DDT_TIME:
     123                 :           0 :           printf ("time");
     124                 :           0 :           break;
     125                 :           0 :         case SQL3_DDT_TIMESTAMP:
     126                 :           0 :           printf ("timestamp");
     127                 :           0 :           break;
     128                 :           0 :         case SQL3_DDT_TIME_WITH_TIME_ZONE:
     129                 :           0 :           printf ("time with time zone");
     130                 :           0 :           break;
     131                 :           0 :         case SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE:
     132                 :           0 :           printf ("timestamp with time zone");
     133                 :           0 :           break;
     134                 :             :         }
     135                 :           4 :           break;
     136                 :           0 :         case SQL3_INTERVAL:
     137                 :           0 :           printf ("interval");
     138                 :           0 :           break;
     139                 :           8 :         case SQL3_CHARACTER:
     140         [ +  + ]:           8 :           if (LENGTH > 0)
     141                 :           4 :         printf ("char(%d)", LENGTH);
     142                 :             :           else
     143                 :           4 :         printf ("text");
     144                 :           8 :           break;
     145                 :           0 :         case SQL3_CHARACTER_VARYING:
     146         [ #  # ]:           0 :           if (LENGTH > 0)
     147                 :           0 :         printf ("varchar(%d)", LENGTH);
     148                 :             :           else
     149                 :           0 :         printf ("varchar()");
     150                 :           0 :           break;
     151                 :           4 :         default:
     152                 :           4 :           printf ("<SQL3 %d>", TYPE);
     153                 :           4 :           break;
     154                 :             :         }
     155                 :          28 :       printf (")\n\toctet_length: %d returned_octet_length: %d)\n\t= ",
     156                 :             :           OCTET_LENGTH, RETURNED_OCTET_LENGTH);
     157         [ -  + ]:          28 :       if (INDICATOR == -1)
     158                 :           0 :         printf ("NULL\n");
     159                 :             :       else
     160   [ +  +  +  +  :          28 :         switch (TYPE)
                   +  + ]
     161                 :             :           {
     162                 :           4 :           case SQL3_BOOLEAN:
     163                 :           4 :           exec sql get descriptor MYDESC value :INDEX :BOOLVAR = data;
     164   [ -  +  +  + ]:           4 :         printf ("%s\n", BOOLVAR ? "true" : "false");
     165                 :           4 :         break;
     166                 :           4 :           case SQL3_INTEGER:
     167                 :             :           case SQL3_SMALLINT:
     168                 :           4 :           exec sql get descriptor MYDESC value :INDEX :INTVAR = data;
     169         [ -  + ]:           4 :         printf ("%d\n", INTVAR);
     170                 :           4 :         break;
     171                 :           4 :           case SQL3_DOUBLE_PRECISION:
     172                 :           4 :           exec sql get descriptor MYDESC value :INDEX :DOUBLEVAR = data;
     173         [ -  + ]:           4 :         printf ("%.*f\n", PRECISION, DOUBLEVAR);
     174                 :           4 :         break;
     175                 :           4 :           case SQL3_DATE_TIME_TIMESTAMP:
     176                 :           4 :           exec sql get descriptor MYDESC value :INDEX
     177                 :             :             :DATETIME_INTERVAL_CODE = datetime_interval_code,
     178                 :             :         :STRINGVAR = data;
     179         [ -  + ]:           4 :         printf ("%d \"%s\"\n", DATETIME_INTERVAL_CODE, STRINGVAR);
     180                 :           4 :         break;
     181                 :           8 :           case SQL3_CHARACTER:
     182                 :             :           case SQL3_CHARACTER_VARYING:
     183                 :           8 :           exec sql get descriptor MYDESC value :INDEX :STRINGVAR = data;
     184         [ -  + ]:           8 :         printf ("\"%s\"\n", STRINGVAR);
     185                 :           8 :         break;
     186                 :           4 :           default:
     187                 :           4 :           exec sql get descriptor MYDESC value :INDEX :STRINGVAR = data;
     188         [ -  + ]:           4 :         printf ("<\"%s\">\n", STRINGVAR);
     189                 :           4 :         break;
     190                 :             :           }
     191                 :             :     }
     192                 :             :     }
     193                 :             : 
     194                 :           2 :   exec sql close MYCURS;
     195         [ -  + ]:           2 : 
     196                 :           2 :   exec sql deallocate descriptor MYDESC;
     197         [ -  + ]:           2 : 
     198                 :           2 :   return 0;
     199                 :             :   }
        

Generated by: LCOV version 2.0-1