LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/sql - describe.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 20devel Lines: 87.5 % 128 112
Test Date: 2026-07-25 10:15:40 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 52.1 % 94 49

             Branch data     Line data    Source code
       1                 :             : #include <stdlib.h>
       2                 :             : #include <string.h>
       3                 :             : 
       4                 :             : exec sql include ../regression;
       5                 :             : exec sql include sqlda.h;
       6                 :             : 
       7                 :             : exec sql whenever sqlerror stop;
       8                 :             : 
       9                 :             : sqlda_t *sqlda1, *sqlda2, *sqlda3;
      10                 :             : 
      11                 :             : int
      12                 :           2 : main (void)
      13                 :             : {
      14                 :             : exec sql begin declare section;
      15                 :           2 :     char    *stmt1 = "SELECT id, t FROM descr_t2";
      16                 :           2 :     char    *stmt2 = "SELECT id, t FROM descr_t2 WHERE id = -1";
      17                 :             :     int i, count1, count2;
      18                 :           2 :     char    field_name1[30] = "not set";
      19                 :           2 :     char    field_name2[30] = "not set";
      20                 :             : exec sql end declare section;
      21                 :             : 
      22                 :             :     char msg[128];
      23                 :             : 
      24                 :           2 :     ECPGdebug(1, stderr);
      25                 :             : 
      26                 :           2 :     strcpy(msg, "connect");
      27                 :           2 :     exec sql connect to REGRESSDB1;
      28         [ -  + ]:           2 : 
      29                 :           2 :     strcpy(msg, "set");
      30                 :           2 :     exec sql set datestyle to iso;
      31         [ -  + ]:           2 : 
      32                 :           2 :     strcpy(msg, "create");
      33                 :           2 :     exec sql create table descr_t2(id serial primary key, t text);
      34         [ -  + ]:           2 : 
      35                 :           2 :     strcpy(msg, "insert");
      36                 :           2 :     exec sql insert into descr_t2(id, t) values (default, 'a');
      37         [ -  + ]:           2 :     exec sql insert into descr_t2(id, t) values (default, 'b');
      38         [ -  + ]:           2 :     exec sql insert into descr_t2(id, t) values (default, 'c');
      39         [ -  + ]:           2 :     exec sql insert into descr_t2(id, t) values (default, 'd');
      40         [ -  + ]:           2 : 
      41                 :           2 :     strcpy(msg, "commit");
      42                 :           2 :     exec sql commit;
      43         [ -  + ]:           2 : 
      44                 :             :     /*
      45                 :             :      * Test DESCRIBE with a query producing tuples.
      46                 :             :      * DESCRIPTOR and SQL DESCRIPTOR are NOT the same in
      47                 :             :      * Informix-compat mode.
      48                 :             :      */
      49                 :             : 
      50                 :           2 :     strcpy(msg, "allocate");
      51                 :           2 :     exec sql allocate descriptor desc1;
      52         [ -  + ]:           2 :     exec sql allocate descriptor desc2;
      53         [ -  + ]:           2 : 
      54                 :           2 :     strcpy(msg, "prepare");
      55                 :           2 :     exec sql prepare st_id1 FROM :stmt1;
      56         [ -  + ]:           2 : 
      57                 :           2 :     sqlda1 = sqlda2 = sqlda3 = NULL;
      58                 :             : 
      59                 :           2 :     strcpy(msg, "describe");
      60                 :           2 :     exec sql describe st_id1 into sql descriptor desc1;
      61                 :           2 :     exec sql describe st_id1 using sql descriptor desc2;
      62                 :             : 
      63                 :           2 :     exec sql describe st_id1 into descriptor sqlda1;
      64                 :           2 :     exec sql describe st_id1 using descriptor sqlda2;
      65                 :           2 :     exec sql describe st_id1 into sqlda3;
      66                 :             : 
      67         [ -  + ]:           2 :     if (sqlda1 == NULL)
      68                 :             :     {
      69                 :           0 :         printf("sqlda1 NULL\n");
      70                 :           0 :         exit(1);
      71                 :             :     }
      72                 :             : 
      73         [ -  + ]:           2 :     if (sqlda2 == NULL)
      74                 :             :     {
      75                 :           0 :         printf("sqlda2 NULL\n");
      76                 :           0 :         exit(1);
      77                 :             :     }
      78                 :             : 
      79         [ -  + ]:           2 :     if (sqlda3 == NULL)
      80                 :             :     {
      81                 :           0 :         printf("sqlda3 NULL\n");
      82                 :           0 :         exit(1);
      83                 :             :     }
      84                 :             : 
      85                 :           2 :     strcpy(msg, "get descriptor");
      86                 :           2 :     exec sql get descriptor desc1 :count1 = count;
      87         [ -  + ]:           2 :     exec sql get descriptor desc1 :count2 = count;
      88         [ -  + ]:           2 : 
      89         [ -  + ]:           2 :     if (count1 != count2)
      90                 :             :     {
      91                 :           0 :         printf("count1 (%d) != count2 (%d)\n", count1, count2);
      92                 :           0 :         exit(1);
      93                 :             :     }
      94                 :             : 
      95         [ -  + ]:           2 :     if (count1 != sqlda1->sqld)
      96                 :             :     {
      97                 :           0 :         printf("count1 (%d) != sqlda1->sqld (%d)\n", count1, sqlda1->sqld);
      98                 :           0 :         exit(1);
      99                 :             :     }
     100                 :             : 
     101         [ -  + ]:           2 :     if (count1 != sqlda2->sqld)
     102                 :             :     {
     103                 :           0 :         printf("count1 (%d) != sqlda2->sqld (%d)\n", count1, sqlda2->sqld);
     104                 :           0 :         exit(1);
     105                 :             :     }
     106                 :             : 
     107         [ -  + ]:           2 :     if (count1 != sqlda3->sqld)
     108                 :             :     {
     109                 :           0 :         printf("count1 (%d) != sqlda3->sqld (%d)\n", count1, sqlda3->sqld);
     110                 :           0 :         exit(1);
     111                 :             :     }
     112                 :             : 
     113         [ +  + ]:           6 :     for (i = 1; i <= count1; i++)
     114                 :             :     {
     115                 :           4 :         exec sql get descriptor desc1 value :i :field_name1 = name;
     116         [ -  + ]:           4 :         exec sql get descriptor desc2 value :i :field_name2 = name;
     117         [ -  + ]:           4 :         printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
     118                 :             :             "sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
     119                 :             :             i, field_name1, field_name2,
     120                 :           4 :             sqlda1->sqlvar[i-1].sqlname.data,
     121                 :           4 :             sqlda2->sqlvar[i-1].sqlname.data,
     122                 :           4 :             sqlda3->sqlvar[i-1].sqlname.data);
     123                 :             :     }
     124                 :             : 
     125                 :           2 :     strcpy(msg, "deallocate");
     126                 :           2 :     exec sql deallocate descriptor desc1;
     127         [ -  + ]:           2 :     exec sql deallocate descriptor desc2;
     128         [ -  + ]:           2 :     free(sqlda1);
     129                 :           2 :     free(sqlda2);
     130                 :           2 :     free(sqlda3);
     131                 :             : 
     132                 :           2 :     exec sql deallocate prepare st_id1;
     133         [ -  + ]:           2 : 
     134                 :             :     /* Test DESCRIBE with a query not producing tuples */
     135                 :             : 
     136                 :           2 :     strcpy(msg, "allocate");
     137                 :           2 :     exec sql allocate descriptor desc1;
     138         [ -  + ]:           2 :     exec sql allocate descriptor desc2;
     139         [ -  + ]:           2 : 
     140                 :           2 :     strcpy(msg, "prepare");
     141                 :           2 :     exec sql prepare st_id2 FROM :stmt2;
     142         [ -  + ]:           2 : 
     143                 :           2 :     sqlda1 = sqlda2 = sqlda3 = NULL;
     144                 :             : 
     145                 :           2 :     strcpy(msg, "describe");
     146                 :           2 :     exec sql describe st_id2 into sql descriptor desc1;
     147                 :           2 :     exec sql describe st_id2 using sql descriptor desc2;
     148                 :             : 
     149                 :           2 :     exec sql describe st_id2 into descriptor sqlda1;
     150                 :           2 :     exec sql describe st_id2 using descriptor sqlda2;
     151                 :           2 :     exec sql describe st_id2 into sqlda3;
     152                 :             : 
     153   [ +  -  +  -  :           2 :     if (sqlda1 == NULL || sqlda2 == NULL || sqlda3 == NULL)
                   -  + ]
     154                 :           0 :         exit(1);
     155                 :             : 
     156                 :           2 :     strcpy(msg, "get descriptor");
     157                 :           2 :     exec sql get descriptor desc1 :count1 = count;
     158         [ -  + ]:           2 :     exec sql get descriptor desc1 :count2 = count;
     159         [ -  + ]:           2 : 
     160         [ +  - ]:           2 :     if (!(  count1 == count2 &&
     161         [ +  - ]:           2 :         count1 == sqlda1->sqld &&
     162         [ +  - ]:           2 :         count1 == sqlda2->sqld &&
     163         [ -  + ]:           2 :         count1 == sqlda3->sqld))
     164                 :           0 :         exit(1);
     165                 :             : 
     166         [ +  + ]:           6 :     for (i = 1; i <= count1; i++)
     167                 :             :     {
     168                 :           4 :         exec sql get descriptor desc1 value :i :field_name1 = name;
     169         [ -  + ]:           4 :         exec sql get descriptor desc2 value :i :field_name2 = name;
     170         [ -  + ]:           4 :         printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
     171                 :             :             "sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
     172                 :             :             i, field_name1, field_name2,
     173                 :           4 :             sqlda1->sqlvar[i-1].sqlname.data,
     174                 :           4 :             sqlda2->sqlvar[i-1].sqlname.data,
     175                 :           4 :             sqlda3->sqlvar[i-1].sqlname.data);
     176                 :             :     }
     177                 :             : 
     178                 :           2 :     strcpy(msg, "deallocate");
     179                 :           2 :     exec sql deallocate descriptor desc1;
     180         [ -  + ]:           2 :     exec sql deallocate descriptor desc2;
     181         [ -  + ]:           2 :     free(sqlda1);
     182                 :           2 :     free(sqlda2);
     183                 :           2 :     free(sqlda3);
     184                 :             : 
     185                 :           2 :     exec sql deallocate prepare st_id2;
     186         [ -  + ]:           2 : 
     187                 :             :     /* End test */
     188                 :             : 
     189                 :           2 :     strcpy(msg, "drop");
     190                 :           2 :     exec sql drop table descr_t2;
     191         [ -  + ]:           2 : 
     192                 :           2 :     strcpy(msg, "commit");
     193                 :           2 :     exec sql commit;
     194         [ -  + ]:           2 : 
     195                 :           2 :     strcpy(msg, "disconnect");
     196                 :           2 :     exec sql disconnect;
     197         [ -  + ]:           2 : 
     198                 :           2 :     return 0;
     199                 :             : }
        

Generated by: LCOV version 2.0-1