summaryrefslogtreecommitdiffstats
path: root/src/interfaces/ecpg/test/preproc/pointer_to_struct.pgc
blob: 1ec651e3fc31a14c9d49288b0857ef671766f83d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <stdlib.h>

exec sql include ../regression;

EXEC SQL WHENEVER sqlerror sqlprint;
EXEC SQL WHENEVER sqlwarning sqlprint;
EXEC SQL WHENEVER not found sqlprint;

EXEC SQL TYPE customer IS
    struct
    {
        varchar name[50];
        int     phone;
    };

EXEC SQL TYPE cust_ind IS
    struct ind
    {
        short   name_ind;
        short   phone_ind;
    };

int main()
{
    EXEC SQL begin declare section;
      customer  *custs1 = (customer *) malloc(sizeof(customer) * 10);
      cust_ind  *inds = (cust_ind *) malloc(sizeof(cust_ind) * 10);
      typedef struct
      {
        varchar name[50];
        int     phone;
      } customer2;
      customer2  *custs2 = (customer2 *) malloc(sizeof(customer2) * 10);

      struct customer3
      {
        char name[50];
        int     phone;
      } *custs3 = (struct customer3 *) malloc(sizeof(struct customer3) * 10);

      struct customer4
      {
        varchar name[50];
        int     phone;
      } *custs4 = (struct customer4 *) malloc(sizeof(struct customer4));

      int r;
      varchar onlyname[2][50];
    EXEC SQL end declare section;

    ECPGdebug(1, stderr);

    EXEC SQL connect to REGRESSDB1;

    EXEC SQL create table customers (c varchar(50), p int);
    EXEC SQL insert into customers values ('John Doe', '12345');
    EXEC SQL insert into customers values ('Jane Doe', '67890');

    EXEC SQL select * INTO :custs1:inds from customers limit 2;
    printf("custs1:\n");
    for (r = 0; r < 2; r++)
    {
	    printf( "name  - %s\n", custs1[r].name.arr );
	    printf( "phone - %d\n", custs1[r].phone );
    }

    EXEC SQL select * INTO :custs2:inds from customers limit 2;
    printf("\ncusts2:\n");
    for (r = 0; r < 2; r++)
    {
	    printf( "name  - %s\n", custs2[r].name.arr );
	    printf( "phone - %d\n", custs2[r].phone );
    }

    EXEC SQL select * INTO :custs3:inds from customers limit 2;
    printf("\ncusts3:\n");
    for (r = 0; r < 2; r++)
    {
	    printf( "name  - %s\n", custs3[r].name );
	    printf( "phone - %d\n", custs3[r].phone );
    }

    EXEC SQL select * INTO :custs4:inds from customers limit 1;
    printf("\ncusts4:\n");
    printf( "name  - %s\n", custs4->name.arr );
    printf( "phone - %d\n", custs4->phone );

    EXEC SQL select c INTO :onlyname from customers limit 2;
    printf("\nname:\n");
    for (r = 0; r < 2; r++)
    {
	    printf( "name  - %s\n", onlyname[r].arr );
    }

    EXEC SQL disconnect all;

	/* All the memory will anyway be freed at the end */
    return 0;
}