From 9a4880a0dd3cc94770aae2d372302642990c9fc1 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Fri, 10 Feb 2012 03:58:57 +0100 Subject: [PATCH] Do not use the variable name when defining a varchar structure in ecpg. With a unique counter being added anyway, there is no need anymore to have the variable name listed, too. --- src/interfaces/ecpg/preproc/ecpg.trailer | 4 ++-- src/interfaces/ecpg/preproc/type.c | 13 +++--------- src/interfaces/ecpg/preproc/type.h | 1 - .../test/expected/preproc-array_of_struct.c | 14 ++++++------- .../ecpg/test/expected/preproc-cursor.c | 20 +++++++++---------- .../ecpg/test/expected/preproc-type.c | 4 ++-- .../ecpg/test/expected/preproc-variable.c | 8 ++++---- src/interfaces/ecpg/test/preproc/type.pgc | 2 +- 8 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index a362aff6e7..35bbe5414e 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -877,8 +877,8 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initialize mmerror(PARSE_ERROR, ET_ERROR, "pointers to varchar are not implemented"); /* make sure varchar struct name is unique by adding a unique counter to its definition */ - vcn = (char *) mm_alloc(strlen($2) + sizeof(int) * CHAR_BIT * 10 / 3); - sprintf(vcn, "%s_%d", $2, varchar_counter); + vcn = (char *) mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3); + sprintf(vcn, "%d", varchar_counter); if (strcmp(dimension, "0") == 0) $$ = cat_str(7, make2_str(mm_strdup(" struct varchar_"), vcn), mm_strdup(" { int len; char arr["), mm_strdup(length), mm_strdup("]; } *"), mm_strdup($2), $4, $5); else diff --git a/src/interfaces/ecpg/preproc/type.c b/src/interfaces/ecpg/preproc/type.c index 9934105c34..ff1224754e 100644 --- a/src/interfaces/ecpg/preproc/type.c +++ b/src/interfaces/ecpg/preproc/type.c @@ -375,8 +375,6 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type, { char *variable = (char *) mm_alloc(strlen(name) + ((prefix == NULL) ? 0 : strlen(prefix)) + 4); char *offset = (char *) mm_alloc(strlen(name) + strlen("sizeof(struct varchar_)") + 1 + strlen(varcharsize) + sizeof(int) * CHAR_BIT * 10 / 3); - char *var_name, - *ptr; switch (type) { @@ -398,16 +396,11 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type, else sprintf(variable, "&(%s%s)", prefix ? prefix : "", name); - /* remove trailing [] is name is array element */ - var_name = mm_strdup(name); - ptr = strchr(var_name, '['); - if (ptr) - *ptr = '\0'; + /* If we created a varchar structure atomatically, counter is greater than 0. */ if (counter) - sprintf(offset, "sizeof(struct varchar_%s_%d)", var_name, counter); + sprintf(offset, "sizeof(struct varchar_%d)", counter); else - sprintf(offset, "sizeof(struct varchar_%s)", var_name); - free(var_name); + sprintf(offset, "sizeof(struct varchar)"); break; case ECPGt_char: case ECPGt_unsigned_char: diff --git a/src/interfaces/ecpg/preproc/type.h b/src/interfaces/ecpg/preproc/type.h index 68e0d1aa20..b7768fd661 100644 --- a/src/interfaces/ecpg/preproc/type.h +++ b/src/interfaces/ecpg/preproc/type.h @@ -36,7 +36,6 @@ struct ECPGtype /* Everything is malloced. */ void ECPGmake_struct_member(char *, struct ECPGtype *, struct ECPGstruct_member **); struct ECPGtype *ECPGmake_simple_type(enum ECPGttype, char *, int); -struct ECPGtype *ECPGmake_varchar_type(enum ECPGttype, long); struct ECPGtype *ECPGmake_array_type(struct ECPGtype *, char *); struct ECPGtype *ECPGmake_struct_type(struct ECPGstruct_member *, enum ECPGttype, char *, char *); struct ECPGstruct_member *ECPGstruct_member_dup(struct ECPGstruct_member *); diff --git a/src/interfaces/ecpg/test/expected/preproc-array_of_struct.c b/src/interfaces/ecpg/test/expected/preproc-array_of_struct.c index 5579ed4132..9bb09cc38f 100644 --- a/src/interfaces/ecpg/test/expected/preproc-array_of_struct.c +++ b/src/interfaces/ecpg/test/expected/preproc-array_of_struct.c @@ -32,7 +32,7 @@ typedef struct { #line 12 "array_of_struct.pgc" - struct varchar_name_1 { int len; char arr[ 50 ]; } name ; + struct varchar_1 { int len; char arr[ 50 ]; } name ; #line 13 "array_of_struct.pgc" int phone ; @@ -61,7 +61,7 @@ int main() typedef struct { #line 30 "array_of_struct.pgc" - struct varchar_name_2 { int len; char arr[ 50 ]; } name ; + struct varchar_2 { int len; char arr[ 50 ]; } name ; #line 31 "array_of_struct.pgc" int phone ; @@ -95,7 +95,7 @@ int main() #line 38 "array_of_struct.pgc" struct customer3 { #line 36 "array_of_struct.pgc" - struct varchar_name_3 { int len; char arr[ 50 ]; } name ; + struct varchar_3 { int len; char arr[ 50 ]; } name ; #line 37 "array_of_struct.pgc" int phone ; @@ -104,7 +104,7 @@ int main() #line 43 "array_of_struct.pgc" struct customer4 { #line 41 "array_of_struct.pgc" - struct varchar_name_4 { int len; char arr[ 50 ]; } name ; + struct varchar_4 { int len; char arr[ 50 ]; } name ; #line 42 "array_of_struct.pgc" int phone ; @@ -114,7 +114,7 @@ int main() int r ; #line 45 "array_of_struct.pgc" - struct varchar_onlyname_5 { int len; char arr[ 50 ]; } onlyname [ 2 ] ; + struct varchar_5 { int len; char arr[ 50 ]; } onlyname [ 2 ] ; /* exec sql end declare section */ #line 46 "array_of_struct.pgc" @@ -235,7 +235,7 @@ if (sqlca.sqlcode < 0) sqlprint();} } { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select * from customers limit 1", ECPGt_EOIT, - ECPGt_varchar,&(custs4.name),(long)50,(long)1,sizeof(struct varchar_name_4), + ECPGt_varchar,&(custs4.name),(long)50,(long)1,sizeof(struct varchar_4), ECPGt_short,&(inds[0].name_ind),(long)1,(long)1,sizeof(short), ECPGt_int,&(custs4.phone),(long)1,(long)1,sizeof(int), ECPGt_short,&(inds[0].phone_ind),(long)1,(long)1,sizeof(short), ECPGt_EORT); @@ -255,7 +255,7 @@ if (sqlca.sqlcode < 0) sqlprint();} printf( "phone - %d\n", custs4.phone ); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select c from customers limit 2", ECPGt_EOIT, - ECPGt_varchar,(onlyname),(long)50,(long)2,sizeof(struct varchar_onlyname_5), + ECPGt_varchar,(onlyname),(long)50,(long)2,sizeof(struct varchar_5), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); #line 85 "array_of_struct.pgc" diff --git a/src/interfaces/ecpg/test/expected/preproc-cursor.c b/src/interfaces/ecpg/test/expected/preproc-cursor.c index 84ba020108..150fc9a243 100644 --- a/src/interfaces/ecpg/test/expected/preproc-cursor.c +++ b/src/interfaces/ecpg/test/expected/preproc-cursor.c @@ -75,7 +75,7 @@ main (void) char * curname3 = CURNAME ; #line 27 "cursor.pgc" - struct varchar_curname4_1 { int len; char arr[ 50 ]; } curname4 ; + struct varchar_1 { int len; char arr[ 50 ]; } curname4 ; #line 28 "cursor.pgc" char * curname5 = CURNAME ; @@ -664,7 +664,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "declare $0 cursor for $1", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char_variable,(ECPGprepared_statement("test1", "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); @@ -676,7 +676,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "fetch from"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "fetch from $0", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(id),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, @@ -691,7 +691,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "fetch"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "fetch $0", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(id),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, @@ -706,7 +706,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "fetch 1 from"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "fetch 1 from $0", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(id),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, @@ -724,7 +724,7 @@ if (sqlca.sqlcode < 0) exit (1);} { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "fetch $0 from $0", ECPGt_int,&(count),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(id),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, @@ -739,7 +739,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "move"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "move absolute 0 $0", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); #line 226 "cursor.pgc" @@ -749,7 +749,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "fetch 1"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "fetch 1 $0", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(id),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, @@ -767,7 +767,7 @@ if (sqlca.sqlcode < 0) exit (1);} { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "fetch $0 $0", ECPGt_int,&(count),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(id),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, @@ -782,7 +782,7 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "close $0", - ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_curname4_1), + ECPGt_varchar,&(curname4),(long)50,(long)1,sizeof(struct varchar_1), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); #line 238 "cursor.pgc" diff --git a/src/interfaces/ecpg/test/expected/preproc-type.c b/src/interfaces/ecpg/test/expected/preproc-type.c index c18cfd675b..f913158ff9 100644 --- a/src/interfaces/ecpg/test/expected/preproc-type.c +++ b/src/interfaces/ecpg/test/expected/preproc-type.c @@ -93,7 +93,7 @@ main (void) c ptr = NULL ; #line 36 "type.pgc" - struct varchar_vc { + struct varchar { #line 34 "type.pgc" int len ; @@ -150,7 +150,7 @@ main (void) ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,&(ptr),(long)0,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, - ECPGt_varchar,&(vc),(long)10,(long)1,sizeof(struct varchar_vc), + ECPGt_varchar,&(vc),(long)10,(long)1,sizeof(struct varchar), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} #line 68 "type.pgc" diff --git a/src/interfaces/ecpg/test/expected/preproc-variable.c b/src/interfaces/ecpg/test/expected/preproc-variable.c index ca3032faca..32e9778ee6 100644 --- a/src/interfaces/ecpg/test/expected/preproc-variable.c +++ b/src/interfaces/ecpg/test/expected/preproc-variable.c @@ -75,7 +75,7 @@ main (void) #line 27 "variable.pgc" struct personal_struct { #line 25 "variable.pgc" - struct varchar_name_1 { int len; char arr[ BUFFERSIZ ]; } name ; + struct varchar_1 { int len; char arr[ BUFFERSIZ ]; } name ; #line 26 "variable.pgc" struct birthinfo birth ; @@ -94,10 +94,10 @@ main (void) ind ind_children ; struct t1 { #line 32 "variable.pgc" - struct varchar_name_2 { int len; char arr[ BUFFERSIZ ]; } name ; + struct varchar_2 { int len; char arr[ BUFFERSIZ ]; } name ; } ; struct t2 { #line 32 "variable.pgc" - struct varchar_name_3 { int len; char arr[ BUFFERSIZ ]; } name ; + struct varchar_3 { int len; char arr[ BUFFERSIZ ]; } name ; } ;/* exec sql end declare section */ #line 33 "variable.pgc" @@ -207,7 +207,7 @@ if (sqlca.sqlcode < 0) exit (1);} while (1) { strcpy(msg, "fetch"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch cur", ECPGt_EOIT, - ECPGt_varchar,&(p->name),(long)BUFFERSIZ,(long)1,sizeof(struct varchar_name_1), + ECPGt_varchar,&(p->name),(long)BUFFERSIZ,(long)1,sizeof(struct varchar_1), ECPGt_int,&(i->ind_name),(long)1,(long)1,sizeof(int), ECPGt_long,&(p->birth.born),(long)1,(long)1,sizeof(long), ECPGt_long,&(i->ind_birth.born),(long)1,(long)1,sizeof(long), diff --git a/src/interfaces/ecpg/test/preproc/type.pgc b/src/interfaces/ecpg/test/preproc/type.pgc index 461401c8ee..359a7f49a0 100644 --- a/src/interfaces/ecpg/test/preproc/type.pgc +++ b/src/interfaces/ecpg/test/preproc/type.pgc @@ -29,7 +29,7 @@ main (void) struct TBempl empl; string str; c ptr = NULL; - struct varchar_vc + struct varchar { int len; char text[10];