Let me bring the bug fix again to the surface. Is anybody looking at this fix?
On Tue, Apr 29, 2014 at 2:25 PM, Ashutosh Bapat < ashutosh.ba...@enterprisedb.com> wrote: > Hi, > When array of char * is used as target for the FETCH statement returning > more than one row, it tries to store all the result in the first element. > PFA test_char_select.pgc, which fetches first 3 relnames from pg_class > ordered by relname. The program prints following result > > steps to compile and build the program > ecpg -c -I<ecpg_include_dir> test_char_select.pgc > cc -I<pg installation include dir> -g -c -o test_char_select.o > test_char_select.c > cc -g test_char_select.o -L<pg installation lib dir> -lecpg -lpq > -lpgtypes -o test_char_select > > output > ./test_char_select > relname=___pg_foreign_table_columns > relname= > relname= > > The first three relnames should have been > postgres=# select relname from pg_class order by relname limit 3; > relname > --------------------------- > _pg_foreign_data_wrappers > _pg_foreign_servers > _pg_foreign_table_columns > > It's obvious that the first element of the array is being overwritten with > an offset of 1. > > This happens because, the array of char pointer is dumped as > /* Fetch multiple columns into one structure. */ > { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 3 from cur1", > ECPGt_EOIT, > ECPGt_char,(strings),(long)0,(long)3,*(1)*sizeof(char)*, > ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); > > Since the offset is 1, the next result overwrites the previous result > except for the first byte. > > PFA patch ecpg_char_ptr_arr.patch to fix this issue. It has changes as > follows > 1. Dump array of char pointer with right offset i.e. sizeof(char *) > 2. While reading array of char pointer in ecpg_do_prologue(), use the > address instead of the value at that address > 3. The pointer arithmetic should treat such variable as char **, instead > of char * > > ECPG regression tests do not show any failures with this patch. > -- > Best Wishes, > Ashutosh Bapat > EnterpriseDB Corporation > The Postgres Database Company > -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company