LCOV - code coverage report
Current view: top level - src/interfaces/ecpg/test/compat_informix - describe.pgc (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 87.5 % 128 112
Test Date: 2026-02-28 06:15:02 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit

            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_t1";
      16            2 :     char    *stmt2 = "SELECT id, t FROM descr_t1 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_t1(id serial primary key, t text);
      34            2 : 
      35            2 :     strcpy(msg, "insert");
      36            2 :     exec sql insert into descr_t1(id, t) values (default, 'a');
      37            2 :     exec sql insert into descr_t1(id, t) values (default, 'b');
      38            2 :     exec sql insert into descr_t1(id, t) values (default, 'c');
      39            2 :     exec sql insert into descr_t1(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,
     121            4 :             sqlda2->sqlvar[i-1].sqlname,
     122            4 :             sqlda3->sqlvar[i-1].sqlname);
     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,
     174            4 :             sqlda2->sqlvar[i-1].sqlname,
     175            4 :             sqlda3->sqlvar[i-1].sqlname);
     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_t1;
     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