From d6fbb105560bc04eaf745a91e802052a23d7c029 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Sat, 8 Dec 2001 20:43:35 +0000 Subject: [PATCH] Fix ecpg to allow pointer to structs. --- src/interfaces/ecpg/ChangeLog | 4 ++++ src/interfaces/ecpg/preproc/type.c | 14 +++++++++++--- src/interfaces/ecpg/test/test2.pgc | 9 +++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 86bb787353..6f742a65cf 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -1166,5 +1166,9 @@ Thu Dec 6 14:02:56 CET 2001 - Removed debug message from preproc.y. - Fixed some bugs in exec sql var and exec sql type command. + +Sat Dec 8 21:35:45 CET 2001 + + - Fix ecpg to allow pointer to structs. - Set ecpg version to 2.9.0. - Set library version to 3.3.0. diff --git a/src/interfaces/ecpg/preproc/type.c b/src/interfaces/ecpg/preproc/type.c index 0be9ef7815..c0cfad9ff2 100644 --- a/src/interfaces/ecpg/preproc/type.c +++ b/src/interfaces/ecpg/preproc/type.c @@ -361,7 +361,7 @@ ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, long arrsiz, struct ECPGstruct_member *p, *ind_p = NULL; char obuf[BUFSIZ]; - char pbuf[BUFSIZ], + char pbuf[BUFSIZ*2], ind_pbuf[BUFSIZ]; const char *offset; @@ -373,7 +373,11 @@ ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, long arrsiz, else offset = offsetarg; - sprintf(pbuf, "%s%s.", prefix ? prefix : "", name); + if (arrsiz != 0) + sprintf(pbuf, "%s%s.", prefix ? prefix : "", name); + else + sprintf(pbuf, "%s%s->", prefix ? prefix : "", name); + prefix = pbuf; if (ind_typ == &ecpg_no_indicator) @@ -382,7 +386,11 @@ ECPGdump_a_struct(FILE *o, const char *name, const char *ind_name, long arrsiz, } else if (ind_typ != NULL) { - sprintf(ind_pbuf, "%s%s.", ind_prefix ? ind_prefix : "", ind_name); + if (arrsiz != 0) + sprintf(ind_pbuf, "%s%s.", ind_prefix ? ind_prefix : "", ind_name); + else + sprintf(ind_pbuf, "%s%s->", ind_prefix ? ind_prefix : "", ind_name); + ind_prefix = ind_pbuf; ind_p = ind_typ->u.members; } diff --git a/src/interfaces/ecpg/test/test2.pgc b/src/interfaces/ecpg/test/test2.pgc index ec2c790d2b..299250dfa5 100644 --- a/src/interfaces/ecpg/test/test2.pgc +++ b/src/interfaces/ecpg/test/test2.pgc @@ -19,10 +19,10 @@ main () exec sql begin declare section; struct personal_struct { str name; birthinfo birth; - } personal; + } personal, *p; struct personal_indicator { int ind_name; birthinfo ind_birth; - } ind_personal; + } ind_personal, *i; float ind_married; ind children; ind ind_children; @@ -63,9 +63,11 @@ exec sql end declare section; exec sql whenever not found do break; + p=&personal; + i=&ind_personal; while (1) { strcpy(msg, "fetch"); - exec sql fetch cur into :personal:ind_personal, :married:ind_married, :children.integer:ind_children.smallint; + exec sql fetch cur into :p:i, :married:ind_married, :children.integer:ind_children.smallint; printf("%8.8s", personal.name.arr); if (ind_personal.ind_birth.born >= 0) printf(", born %ld", personal.birth.born); @@ -125,6 +127,5 @@ exec sql end declare section; if (dbgs != NULL) fclose(dbgs); - return (0); } -- 2.40.0