Skip to content

Commit 0c2eb98

Browse files
author
Michael Meskes
committed
Several fixes to array handling in ecpg.
Patches by Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> Conflicts: src/interfaces/ecpg/test/expected/preproc-outofscope.c
1 parent d034e9b commit 0c2eb98

File tree

5 files changed

+46
-37
lines changed

5 files changed

+46
-37
lines changed

src/interfaces/ecpg/preproc/type.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ ECPGdump_a_type(FILE *o, const char *name, struct ECPGtype * type, const int bra
303303

304304
ECPGdump_a_simple(o, name,
305305
type->u.element->type,
306-
type->u.element->size, type->size, NULL, prefix, type->u.element->counter);
306+
type->u.element->size, type->size, struct_sizeof ? struct_sizeof : NULL,
307+
prefix, type->u.element->counter);
307308

308309
if (ind_type != NULL)
309310
{
@@ -478,11 +479,19 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
478479
sprintf(offset, "sizeof(%s)", ecpg_type_name(type));
479480
break;
480481
}
481-
482-
if (atoi(arrsize) < 0)
482+
483+
/*
484+
* Array size would be -1 for addresses of members within structure,
485+
* when pointer to structure is being dumped.
486+
*/
487+
if (atoi(arrsize) < 0 && !siz)
483488
strcpy(arrsize, "1");
484489

485-
if (siz == NULL || strlen(siz) == 0 || strcmp(arrsize, "0") == 0 || strcmp(arrsize, "1") == 0)
490+
/*
491+
* If siz i.e. the size of structure of which this variable is part of,
492+
* that gives the offset to the next element, if required
493+
*/
494+
if (siz == NULL || strlen(siz) == 0)
486495
fprintf(o, "\n\t%s,%s,(long)%s,(long)%s,%s, ", get_type(type), variable, varcharsize, arrsize, offset);
487496
else
488497
fprintf(o, "\n\t%s,%s,(long)%s,(long)%s,%s, ", get_type(type), variable, varcharsize, arrsize, siz);

src/interfaces/ecpg/test/expected/preproc-array_of_struct.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
235235
}
236236

237237
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from customers limit 1", ECPGt_EOIT,
238-
ECPGt_varchar,&(custs4.name),(long)50,(long)1,sizeof(struct varchar_4),
239-
ECPGt_short,&(inds[0].name_ind),(long)1,(long)1,sizeof(short),
240-
ECPGt_int,&(custs4.phone),(long)1,(long)1,sizeof(int),
241-
ECPGt_short,&(inds[0].phone_ind),(long)1,(long)1,sizeof(short), ECPGt_EORT);
238+
ECPGt_varchar,&(custs4.name),(long)50,(long)1,sizeof( struct customer4 ),
239+
ECPGt_short,&(inds[0].name_ind),(long)1,(long)1,sizeof( struct ind ),
240+
ECPGt_int,&(custs4.phone),(long)1,(long)1,sizeof( struct customer4 ),
241+
ECPGt_short,&(inds[0].phone_ind),(long)1,(long)1,sizeof( struct ind ), ECPGt_EORT);
242242
#line 80 "array_of_struct.pgc"
243243

244244
if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint();

src/interfaces/ecpg/test/expected/preproc-outofscope.c

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -203,16 +203,16 @@ static void
203203
open_cur1(void)
204204
{
205205
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur cursor for select * from a1", ECPGt_EOIT,
206-
ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0))).id),(long)1,(long)1,sizeof(int),
207-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).id),(long)1,(long)1,sizeof(int),
208-
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).t),(long)64,(long)1,(64)*sizeof(char),
209-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).t),(long)1,(long)1,sizeof(int),
210-
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d1),(long)1,(long)1,sizeof(double),
211-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d1),(long)1,(long)1,sizeof(int),
212-
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d2),(long)1,(long)1,sizeof(double),
213-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d2),(long)1,(long)1,sizeof(int),
214-
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).c),(long)30,(long)1,(30)*sizeof(char),
215-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).c),(long)1,(long)1,sizeof(int), ECPGt_EORT);
206+
ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0))).id),(long)1,(long)1,sizeof( struct mytype ),
207+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).id),(long)1,(long)1,sizeof( struct mynulltype ),
208+
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).t),(long)64,(long)1,sizeof( struct mytype ),
209+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).t),(long)1,(long)1,sizeof( struct mynulltype ),
210+
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d1),(long)1,(long)1,sizeof( struct mytype ),
211+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d1),(long)1,(long)1,sizeof( struct mynulltype ),
212+
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d2),(long)1,(long)1,sizeof( struct mytype ),
213+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d2),(long)1,(long)1,sizeof( struct mynulltype ),
214+
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).c),(long)30,(long)1,sizeof( struct mytype ),
215+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).c),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_EORT);
216216
#line 40 "outofscope.pgc"
217217

218218
if (sqlca.sqlcode < 0) exit (1);}
@@ -227,16 +227,16 @@ static void
227227
get_record1(void)
228228
{
229229
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch mycur", ECPGt_EOIT,
230-
ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0))).id),(long)1,(long)1,sizeof(int),
231-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).id),(long)1,(long)1,sizeof(int),
232-
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).t),(long)64,(long)1,(64)*sizeof(char),
233-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).t),(long)1,(long)1,sizeof(int),
234-
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d1),(long)1,(long)1,sizeof(double),
235-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d1),(long)1,(long)1,sizeof(int),
236-
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d2),(long)1,(long)1,sizeof(double),
237-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d2),(long)1,(long)1,sizeof(int),
238-
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).c),(long)30,(long)1,(30)*sizeof(char),
239-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).c),(long)1,(long)1,sizeof(int), ECPGt_EORT);
230+
ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0))).id),(long)1,(long)1,sizeof( struct mytype ),
231+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).id),(long)1,(long)1,sizeof( struct mynulltype ),
232+
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).t),(long)64,(long)1,sizeof( struct mytype ),
233+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).t),(long)1,(long)1,sizeof( struct mynulltype ),
234+
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d1),(long)1,(long)1,sizeof( struct mytype ),
235+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d1),(long)1,(long)1,sizeof( struct mynulltype ),
236+
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0))).d2),(long)1,(long)1,sizeof( struct mytype ),
237+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).d2),(long)1,(long)1,sizeof( struct mynulltype ),
238+
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0))).c),(long)30,(long)1,sizeof( struct mytype ),
239+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1))).c),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_EORT);
240240
#line 49 "outofscope.pgc"
241241

242242
if (sqlca.sqlcode < 0) exit (1);}

src/interfaces/ecpg/test/expected/preproc-type.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,11 @@ main (void)
140140
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select idnum , name , accs , string1 , string2 , string3 from empl where idnum = $1 ",
141141
ECPGt_long,&(empl.idnum),(long)1,(long)1,sizeof(long),
142142
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT,
143-
ECPGt_long,&(empl.idnum),(long)1,(long)1,sizeof(long),
143+
ECPGt_long,&(empl.idnum),(long)1,(long)1,sizeof( struct TBempl ),
144144
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
145-
ECPGt_char,&(empl.name),(long)21,(long)1,(21)*sizeof(char),
145+
ECPGt_char,&(empl.name),(long)21,(long)1,sizeof( struct TBempl ),
146146
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
147-
ECPGt_short,&(empl.accs),(long)1,(long)1,sizeof(short),
147+
ECPGt_short,&(empl.accs),(long)1,(long)1,sizeof( struct TBempl ),
148148
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
149149
ECPGt_char,(str),(long)11,(long)1,(11)*sizeof(char),
150150
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,

src/interfaces/ecpg/test/expected/preproc-variable.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,12 +207,12 @@ if (sqlca.sqlcode < 0) exit (1);}
207207
while (1) {
208208
strcpy(msg, "fetch");
209209
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch cur", ECPGt_EOIT,
210-
ECPGt_varchar,&(p->name),(long)BUFFERSIZ,(long)1,sizeof(struct varchar_1),
211-
ECPGt_int,&(i->ind_name),(long)1,(long)1,sizeof(int),
212-
ECPGt_long,&(p->birth.born),(long)1,(long)1,sizeof(long),
213-
ECPGt_long,&(i->ind_birth.born),(long)1,(long)1,sizeof(long),
214-
ECPGt_short,&(p->birth.age),(long)1,(long)1,sizeof(short),
215-
ECPGt_short,&(i->ind_birth.age),(long)1,(long)1,sizeof(short),
210+
ECPGt_varchar,&(p->name),(long)BUFFERSIZ,(long)-1,sizeof( struct birthinfo ),
211+
ECPGt_int,&(i->ind_name),(long)1,(long)-1,sizeof( struct birthinfo ),
212+
ECPGt_long,&(p->birth.born),(long)1,(long)1,sizeof( struct birthinfo ),
213+
ECPGt_long,&(i->ind_birth.born),(long)1,(long)1,sizeof( struct birthinfo ),
214+
ECPGt_short,&(p->birth.age),(long)1,(long)1,sizeof( struct birthinfo ),
215+
ECPGt_short,&(i->ind_birth.age),(long)1,(long)1,sizeof( struct birthinfo ),
216216
ECPGt_char,&(married),(long)0,(long)1,(1)*sizeof(char),
217217
ECPGt_long,&(ind_married),(long)1,(long)1,sizeof(long),
218218
ECPGt_int,&(children.integer),(long)1,(long)1,sizeof(int),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy