============================================================================ POSTGRESQL BUG REPORT TEMPLATE ============================================================================ Your name : Fabienne Leclere Your email address : [EMAIL PROTECTED] System Configuration --------------------- Architecture (example: Intel Pentium) : HP 9000 serie E Operating System (example: Linux 2.0.26 ELF) : HPUX 11.0 PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3 Compiler used (example: gcc 2.8.0) : aCC HP aC++ B3910B A.03.13 Please enter a FULL description of your problem: ------------------------------------------------ With the ecpg precompiler: when using structure to define a table or union to define a field and insert values into the table, the arguments of the function ECPGdo are not correctly generated. Then the compiler give errors .... Please describe a way to repeat the problem. Please try to provide a concise reproducible example, if at all possible: ---------------------------------------------------------------------- 1) create the ttest table: create table ttest ( data0 double precision , data1 varchar(200)); 2) the .pc file edit : .... exec sql begin declare section; struct ttest1_{ double bla0; varchar bla1[200]; }ttest1; double data0; union ttest2_ { varchar bla1[200]; struct {short len; short lost; float buf[50]; }bla2; }ttest2; exec sql end declare section; ..... exec sql insert into ttest values ( :ttest1); exec sql insert into ttest values ( :data0,:ttest2.bla1); 3) precompile the .c file give: ... struct ttest1_ { double bla0 ; struct varchar_bla1 { int len; char arr[200]; } bla1 ; } ttest1 ; double data0 ; union ttest2_ { struct varchar_bla1 { int len; char arr[200]; } bla1 ; struct { short len ; short lost ; float buf[ 50 ] ; } bla2 ; } ttest2 ; ..... { ECPGdo(__LINE__, NULL, "insert into ttest values(?)", ECPGt_double,&(ttest1.bla0),1L,1L,sizeof(double), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_varchar,&(ttest1.bla1),200L,1L,sizeof(struct varchar_bla1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} ....... { ECPGdo(__LINE__, NULL, "insert into ttest values(? , ?)", ECPGt_double,&(data0),1L,1L,sizeof(double), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_varchar,&(ttest2.bla1),200L,1L,sizeof(struct varchar_ttest2.bla1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} ............. and it should be: ............. { ECPGdo(__LINE__, NULL, "insert into ttest values(? , ?)", ECPGt_double,&(ttest1.bla0),1L,1L,sizeof(double), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_varchar,&(ttest1.bla1),200L,1L,sizeof(struct ttest1_::varchar_bla1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} ............. { ECPGdo(__LINE__, NULL, "insert into ttest values(? , ?)", ECPGt_double,&(data0),1L,1L,sizeof(double), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_varchar,&(ttest2.bla1),200L,1L,sizeof(struct ttest2_::varchar_bla1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);} ............. If you know how this problem might be fixed, list the solution below: ---------------------------------------------------------------------