aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/ecpg/ChangeLog5
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y22
-rw-r--r--src/interfaces/ecpg/preproc/type.c2
-rw-r--r--src/interfaces/ecpg/preproc/variable.c2
4 files changed, 16 insertions, 15 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index e714705cf16..3d6fe4fbb1f 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -1877,6 +1877,11 @@ Mon Oct 18 15:34:51 CEST 2004
Wed Nov 10 14:43:50 CET 2004
- List VALUE as a keyword.
+
+Mon Dec 6 21:27:34 CET 2004
+
+ - Fixed bug in parsing of typedef'ed array sizes.
+ - Synced parser.
- Set ecpg version to 3.2.0.
- Set compat library version to 1.2.
- Set ecpg library version to 4.2.
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 3339ec477ec..02b33e8bbd5 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.301 2004/11/10 13:48:10 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.302 2004/12/06 20:35:35 meskes Exp $ */
/* Copyright comment */
%{
@@ -208,16 +208,16 @@ static char *
adjust_informix(struct arguments *list)
{
/* Informix accepts DECLARE with variables that are out of scope when OPEN is called.
- * for instance you can declare variables in a function, and then subsequently use them
- * {
- * declare_vars();
- * exec sql ... which uses vars declared in the above function
- *
+ * for instance you can declare variables in a function, and then subsequently use them
+ * {
+ * declare_vars();
+ * exec sql ... which uses vars declared in the above function
+ *
* This breaks standard and leads to some very dangerous programming.
* Since they do, we have to work around and accept their syntax as well.
* But we will do so ONLY in Informix mode.
* We have to change the variables to our own struct and just store the pointer instead of the variable
- */
+ */
struct arguments *ptr;
char *result = make_str("");
@@ -1955,12 +1955,8 @@ any_name: ColId { $$ = $1; }
| ColId attrs { $$ = cat2_str($1, $2); }
;
-/*
- * The slightly convoluted way of writing this production avoids reduce/reduce
- * errors against indirection_el.
- */
attrs: '.' attr_name { $$ = cat2_str(make_str("."), $2); }
- | '.' attr_name attrs { $$ = cat_str(3, make_str("."), $2, $3); }
+ | attrs '.' attr_name { $$ = cat_str(3, $1, make_str("."), $3); }
;
/*****************************************************************************
@@ -4167,7 +4163,7 @@ qualified_name_list: qualified_name
qualified_name: relation_name
{ $$ = $1; }
- | relation_name attrs
+ | relation_name indirection
{ $$ = cat2_str($1, $2); }
;
diff --git a/src/interfaces/ecpg/preproc/type.c b/src/interfaces/ecpg/preproc/type.c
index c55b0ae32f6..acd2faf83d3 100644
--- a/src/interfaces/ecpg/preproc/type.c
+++ b/src/interfaces/ecpg/preproc/type.c
@@ -365,7 +365,7 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
else
sprintf(variable, "&(%s%s)", prefix ? prefix : "", name);
- sprintf(offset, "%s*sizeof(char)", strcmp(varcharsize, "0") == 0 ? "1" : varcharsize);
+ sprintf(offset, "(%s)*sizeof(char)", strcmp(varcharsize, "0") == 0 ? "1" : varcharsize);
break;
case ECPGt_numeric:
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c
index 6037d978c70..e26dc029851 100644
--- a/src/interfaces/ecpg/preproc/variable.c
+++ b/src/interfaces/ecpg/preproc/variable.c
@@ -560,7 +560,7 @@ adjust_array(enum ECPGttype type_enum, char **dimension, char **length, char *ty
* changed later on when the variable is defined
*/
*length = make_str("1");
- else if (atoi(*dimension) == 0)
+ else if (strcmp(*dimension, "0") == 0)
*length = make_str("-1");
else
*length = *dimension;