LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - dyntest.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 68.8 % 125 86
Test Date: 2026-03-11 10:16:42 Functions: 50.0 % 2 1
Legend: Lines:     hit not hit

            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 ()
      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