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