Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3b8fda6

Browse files
author
Michael Meskes
committed
Several fixes to array handling in ecpg.
Patches by Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
1 parent 601c01e commit 3b8fda6

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
{
@@ -481,11 +482,19 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
481482
sprintf(offset, "sizeof(%s)", ecpg_type_name(type));
482483
break;
483484
}
484-
485-
if (atoi(arrsize) < 0)
485+
486+
/*
487+
* Array size would be -1 for addresses of members within structure,
488+
* when pointer to structure is being dumped.
489+
*/
490+
if (atoi(arrsize) < 0 && !siz)
486491
strcpy(arrsize, "1");
487492

488-
if (siz == NULL || strlen(siz) == 0 || strcmp(arrsize, "0") == 0 || strcmp(arrsize, "1") == 0)
493+
/*
494+
* If siz i.e. the size of structure of which this variable is part of,
495+
* that gives the offset to the next element, if required
496+
*/
497+
if (siz == NULL || strlen(siz) == 0)
489498
fprintf(o, "\n\t%s,%s,(long)%s,(long)%s,%s, ", get_type(type), variable, varcharsize, arrsize, offset);
490499
else
491500
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
@@ -202,16 +202,16 @@ static void
202202
open_cur1(void)
203203
{
204204
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur cursor for select * from a1", ECPGt_EOIT,
205-
ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0)) ).id),(long)1,(long)1,sizeof(int),
206-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).id),(long)1,(long)1,sizeof(int),
207-
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).t),(long)64,(long)1,(64)*sizeof(char),
208-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).t),(long)1,(long)1,sizeof(int),
209-
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d1),(long)1,(long)1,sizeof(double),
210-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d1),(long)1,(long)1,sizeof(int),
211-
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d2),(long)1,(long)1,sizeof(double),
212-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d2),(long)1,(long)1,sizeof(int),
213-
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).c),(long)30,(long)1,(30)*sizeof(char),
214-
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).c),(long)1,(long)1,sizeof(int), ECPGt_EORT);
205+
ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0)) ).id),(long)1,(long)1,sizeof( struct mytype ),
206+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).id),(long)1,(long)1,sizeof( struct mynulltype ),
207+
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).t),(long)64,(long)1,sizeof( struct mytype ),
208+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).t),(long)1,(long)1,sizeof( struct mynulltype ),
209+
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d1),(long)1,(long)1,sizeof( struct mytype ),
210+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d1),(long)1,(long)1,sizeof( struct mynulltype ),
211+
ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d2),(long)1,(long)1,sizeof( struct mytype ),
212+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d2),(long)1,(long)1,sizeof( struct mynulltype ),
213+
ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).c),(long)30,(long)1,sizeof( struct mytype ),
214+
ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).c),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_EORT);
215215
#line 40 "outofscope.pgc"
216216

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

241241
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)