Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3b8fda6

Browse files
author
Michael Meskes
committed
Several fixes to array handling in ecpg.
Patches by Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
1 parent601c01e commit3b8fda6

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(structvarchar_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(structcustomer4),
239+
ECPGt_short,&(inds[0].name_ind),(long)1,(long)1,sizeof(structind),
240+
ECPGt_int,&(custs4.phone),(long)1,(long)1,sizeof(structcustomer4),
241+
ECPGt_short,&(inds[0].phone_ind),(long)1,(long)1,sizeof(structind),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(structmytype),
206+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).id),(long)1,(long)1,sizeof(structmynulltype),
207+
ECPGt_char,&((*(MYTYPE*)(ECPGget_var(0)) ).t),(long)64,(long)1,sizeof(structmytype),
208+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).t),(long)1,(long)1,sizeof(structmynulltype),
209+
ECPGt_double,&((*(MYTYPE*)(ECPGget_var(0)) ).d1),(long)1,(long)1,sizeof(structmytype),
210+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).d1),(long)1,(long)1,sizeof(structmynulltype),
211+
ECPGt_double,&((*(MYTYPE*)(ECPGget_var(0)) ).d2),(long)1,(long)1,sizeof(structmytype),
212+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).d2),(long)1,(long)1,sizeof(structmynulltype),
213+
ECPGt_char,&((*(MYTYPE*)(ECPGget_var(0)) ).c),(long)30,(long)1,sizeof(structmytype),
214+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).c),(long)1,(long)1,sizeof(structmynulltype),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(structmytype),
230+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).id),(long)1,(long)1,sizeof(structmynulltype),
231+
ECPGt_char,&((*(MYTYPE*)(ECPGget_var(0)) ).t),(long)64,(long)1,sizeof(structmytype),
232+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).t),(long)1,(long)1,sizeof(structmynulltype),
233+
ECPGt_double,&((*(MYTYPE*)(ECPGget_var(0)) ).d1),(long)1,(long)1,sizeof(structmytype),
234+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).d1),(long)1,(long)1,sizeof(structmynulltype),
235+
ECPGt_double,&((*(MYTYPE*)(ECPGget_var(0)) ).d2),(long)1,(long)1,sizeof(structmytype),
236+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).d2),(long)1,(long)1,sizeof(structmynulltype),
237+
ECPGt_char,&((*(MYTYPE*)(ECPGget_var(0)) ).c),(long)30,(long)1,sizeof(structmytype),
238+
ECPGt_int,&((*(MYNULLTYPE*)(ECPGget_var(1)) ).c),(long)1,(long)1,sizeof(structmynulltype),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(structTBempl),
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(structTBempl),
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(structTBempl),
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(structvarchar_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(structbirthinfo),
211+
ECPGt_int,&(i->ind_name),(long)1,(long)-1,sizeof(structbirthinfo),
212+
ECPGt_long,&(p->birth.born),(long)1,(long)1,sizeof(structbirthinfo),
213+
ECPGt_long,&(i->ind_birth.born),(long)1,(long)1,sizeof(structbirthinfo),
214+
ECPGt_short,&(p->birth.age),(long)1,(long)1,sizeof(structbirthinfo),
215+
ECPGt_short,&(i->ind_birth.age),(long)1,(long)1,sizeof(structbirthinfo),
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)

[8]ページ先頭

©2009-2025 Movatter.jp