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

            Line data    Source code
       1              : #include <stdio.h>
       2              : #include <stdlib.h>
       3              : 
       4              : exec sql include ../regression;
       5              : 
       6              : EXEC SQL WHENEVER sqlerror sqlprint;
       7              : EXEC SQL WHENEVER sqlwarning sqlprint;
       8              : EXEC SQL WHENEVER not found sqlprint;
       9              : 
      10              : EXEC SQL TYPE customer IS
      11              :     struct
      12              :     {
      13              :         varchar name[50];
      14              :         int     phone;
      15              :     };
      16              : 
      17              : EXEC SQL TYPE cust_ind IS
      18              :     struct ind
      19              :     {
      20              :         short   name_ind;
      21              :         short   phone_ind;
      22              :     };
      23              : 
      24              : EXEC SQL TYPE company IS
      25              :     struct
      26              :     {
      27              :         customer *customers;
      28              :     };
      29              : 
      30            0 : int main()
      31              : {
      32              :     EXEC SQL begin declare section;
      33            0 :       customer  *custs1 = (customer *) malloc(sizeof(customer) * 10);
      34            0 :       cust_ind  *inds = (cust_ind *) malloc(sizeof(cust_ind) * 10);
      35              :       typedef struct
      36              :       {
      37              :         varchar name[50];
      38              :         int     phone;
      39              :       } customer2;
      40            0 :       customer2  *custs2 = (customer2 *) malloc(sizeof(customer2) * 10);
      41              : 
      42              :       struct customer3
      43              :       {
      44              :         char name[50];
      45              :         int     phone;
      46            0 :       } *custs3 = (struct customer3 *) malloc(sizeof(struct customer3) * 10);
      47              : 
      48              :       struct customer4
      49              :       {
      50              :         varchar name[50];
      51              :         int     phone;
      52            0 :       } *custs4 = (struct customer4 *) malloc(sizeof(struct customer4));
      53              : 
      54            0 :       company acme;
      55              : 
      56            0 :       int r;
      57            0 :       varchar onlyname[2][50];
      58              :     EXEC SQL end declare section;
      59              : 
      60            0 :     ECPGdebug(1, stderr);
      61              : 
      62            0 :     acme.customers = (customer *) malloc(sizeof(customer) * 10);
      63              : 
      64            0 :     EXEC SQL connect to REGRESSDB1;
      65            0 : 
      66            0 :     EXEC SQL create table customers (c varchar(50), p int);
      67            0 : 
      68              :     /* First we'll insert some data using C variable references */
      69            0 :     strcpy(custs1[0].name.arr, "John Doe");
      70            0 :     custs1[0].name.len = strlen(custs1[0].name.arr);
      71            0 :     custs1[0].phone = 12345;
      72              : 
      73            0 :     strcpy(acme.customers[1].name.arr, "Jane Doe");
      74            0 :     acme.customers[1].name.len = strlen(acme.customers[1].name.arr);
      75            0 :     acme.customers[1].phone = 67890;
      76              : 
      77            0 :     EXEC SQL insert into customers values (:custs1->name,
      78            0 :                                            :custs1[0].phone);
      79            0 :     EXEC SQL insert into customers values (:acme.customers[1].name,
      80            0 :                                            :acme.customers[1].phone);
      81            0 : 
      82            0 :     /* Clear the array, to be sure reading back into it actually gets data */
      83            0 :     memset(custs1, 0, sizeof(customer) * 10);
      84              : 
      85              :     /* Now read back the data */
      86            0 :     EXEC SQL select * INTO :custs1:inds from customers limit 2;
      87            0 :     printf("custs1:\n");
      88            0 :     for (r = 0; r < 2; r++)
      89            0 :     {
      90            0 :             printf( "name  - %s\n", custs1[r].name.arr );
      91            0 :             printf( "phone - %d\n", custs1[r].phone );
      92            0 :     }
      93              : 
      94            0 :     EXEC SQL select * INTO :custs2:inds from customers limit 2;
      95            0 :     printf("\ncusts2:\n");
      96            0 :     for (r = 0; r < 2; r++)
      97            0 :     {
      98            0 :             printf( "name  - %s\n", custs2[r].name.arr );
      99            0 :             printf( "phone - %d\n", custs2[r].phone );
     100            0 :     }
     101              : 
     102            0 :     EXEC SQL select * INTO :custs3:inds from customers limit 2;
     103            0 :     printf("\ncusts3:\n");
     104            0 :     for (r = 0; r < 2; r++)
     105            0 :     {
     106            0 :             printf( "name  - %s\n", custs3[r].name );
     107            0 :             printf( "phone - %d\n", custs3[r].phone );
     108            0 :     }
     109              : 
     110            0 :     EXEC SQL select * INTO :custs4:inds from customers limit 1;
     111            0 :     printf("\ncusts4:\n");
     112            0 :     printf( "name  - %s\n", custs4->name.arr );
     113            0 :     printf( "phone - %d\n", custs4->phone );
     114            0 : 
     115            0 :     EXEC SQL select c INTO :onlyname from customers limit 2;
     116            0 :     printf("\nname:\n");
     117            0 :     for (r = 0; r < 2; r++)
     118              :     {
     119            0 :             printf( "name  - %s\n", onlyname[r].arr );
     120            0 :     }
     121              : 
     122            0 :     EXEC SQL disconnect all;
     123            0 : 
     124              :         /* All the memory will anyway be freed at the end */
     125            0 :     return 0;
     126            0 : }
        

Generated by: LCOV version 2.3.2-1