diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 70ad65acf76209567573b4b46c7c4e325132416d..da687ae1aba1ad22875b524086df8ded0b0ac890 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -1201,5 +1201,11 @@ Fri Jan 11 15:43:39 CET 2002
 
 	- clear sqlca on : [de]allocate descriptor  & get descriptor and set
 	  sqlca.sqlerrd[2] accordingly (Christof).
+
+Sat Jan 12 22:04:02 CET 2002
+
+	- Fixed variable handling for struct members.
+	- Removed check for array input. An attribut might store the
+	  complete array.
 	- Set ecpg version to 2.9.0.
         - Set library version to 3.3.0.
diff --git a/src/interfaces/ecpg/lib/execute.c b/src/interfaces/ecpg/lib/execute.c
index dba99a1bd6c5dc53d7c7c179e06edcf2655ef504..33941a7f89b3a19d3e28c4eba04317e825d1284c 100644
--- a/src/interfaces/ecpg/lib/execute.c
+++ b/src/interfaces/ecpg/lib/execute.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.35 2002/01/08 14:25:04 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.36 2002/01/13 08:52:08 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -486,14 +486,15 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
 	char	   *newcopy = NULL;
 
 	/* 
-	 * arrays are not possible 
+	 * arrays are not possible unless the attribute is an array too
+	 * FIXME: we do not know if the attribute is an array here
 	 */
-	 
-	 if (var->arrsize > 1)
+
+/*	 if (var->arrsize > 1 && ...)
 	 {
 		ECPGraise(stmt->lineno, ECPG_ARRAY_INSERT, NULL);
 		return false;
-	 }
+	 }*/
 	 
 	/*
 	 * Some special treatment is needed for records since we want their
diff --git a/src/interfaces/ecpg/preproc/extern.h b/src/interfaces/ecpg/preproc/extern.h
index 985971647bc4de8f86dc51bf48345bab683db814..358a141025e2b799caf363b2fa07107efd618b03 100644
--- a/src/interfaces/ecpg/preproc/extern.h
+++ b/src/interfaces/ecpg/preproc/extern.h
@@ -75,7 +75,7 @@ extern void adjust_array(enum ECPGttype, int *, int *, int, int, int);
 extern void reset_variables(void);
 extern void check_indicator(struct ECPGtype *);
 extern void remove_variables(int);
-extern struct variable *new_variable(const char *, struct ECPGtype *);
+extern struct variable *new_variable(const char *, struct ECPGtype *, int);
 extern ScanKeyword *ScanKeywordLookup(char *text);
 
 /* return codes */
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 54c64d216ed93f4e7bb9eaa43f3e48147c5bc664..d94f2a78c5b011909e1ee4887e4965baa44b3f5f 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -4417,7 +4417,7 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
 			}
 
 			if (struct_level == 0)
-				new_variable($2, type);
+				new_variable($2, type, braces_open);
 			else
 				ECPGmake_struct_member($2, type, &(struct_member_list[struct_level - 1]));
 
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c
index 3131a76592adc7459d7f9d40395f5d71794fc73a..cee7ab3cf50fd39636545b69da72bfc632112d56 100644
--- a/src/interfaces/ecpg/preproc/variable.c
+++ b/src/interfaces/ecpg/preproc/variable.c
@@ -5,13 +5,13 @@
 struct variable *allvariables = NULL;
 
 struct variable *
-new_variable(const char *name, struct ECPGtype * type)
+new_variable(const char *name, struct ECPGtype * type, int brace_level)
 {
 	struct variable *p = (struct variable *) mm_alloc(sizeof(struct variable));
 
 	p->name = mm_strdup(name);
 	p->type = type;
-	p->brace_level = braces_open;
+	p->brace_level = brace_level;
 
 	p->next = allvariables;
 	allvariables = p;
@@ -20,7 +20,7 @@ new_variable(const char *name, struct ECPGtype * type)
 }
 
 static struct variable *
-find_struct_member(char *name, char *str, struct ECPGstruct_member * members)
+find_struct_member(char *name, char *str, struct ECPGstruct_member * members, int brace_level)
 {
 	char	   *next = strchr(++str, '.'),
 				c = '\0';
@@ -41,12 +41,12 @@ find_struct_member(char *name, char *str, struct ECPGstruct_member * members)
 				switch (members->type->type)
 				{
 					case ECPGt_array:
-						return (new_variable(name, ECPGmake_array_type(members->type->u.element, members->type->size)));
+						return (new_variable(name, ECPGmake_array_type(members->type->u.element, members->type->size), brace_level));
 					case ECPGt_struct:
 					case ECPGt_union:
-						return (new_variable(name, ECPGmake_struct_type(members->type->u.members, members->type->type, members->type->struct_sizeof)));
+						return (new_variable(name, ECPGmake_struct_type(members->type->u.members, members->type->type, members->type->struct_sizeof), brace_level));
 					default:
-						return (new_variable(name, ECPGmake_simple_type(members->type->type, members->type->size)));
+						return (new_variable(name, ECPGmake_simple_type(members->type->type, members->type->size), brace_level));
 				}
 			}
 			else
@@ -55,10 +55,10 @@ find_struct_member(char *name, char *str, struct ECPGstruct_member * members)
 				if (c == '-')
 				{
 					next++;
-					return (find_struct_member(name, next, members->type->u.element->u.members));
+					return (find_struct_member(name, next, members->type->u.element->u.members, brace_level));
 				}
 				else
-					return (find_struct_member(name, next, members->type->u.members));
+					return (find_struct_member(name, next, members->type->u.members, brace_level));
 			}
 		}
 	}
@@ -94,7 +94,7 @@ find_struct(char *name, char *next)
 		*next = c;
 		next++;
 
-		return find_struct_member(name, next, p->type->u.element->u.members);
+		return find_struct_member(name, next, p->type->u.element->u.members, p->brace_level);
 	}
 	else
 	{
@@ -107,7 +107,7 @@ find_struct(char *name, char *next)
 		/* restore the name, we will need it later on */
 		*next = c;
 
-		return find_struct_member(name, next, p->type->u.members);
+		return find_struct_member(name, next, p->type->u.members, p->brace_level);
 	}
 }
 
diff --git a/src/interfaces/ecpg/test/test1.pgc b/src/interfaces/ecpg/test/test1.pgc
index b5e745da8e95206e3e131325ff8eae92db070417..a539c72a9eed4f927c192e6170182babd09a50cd 100644
--- a/src/interfaces/ecpg/test/test1.pgc
+++ b/src/interfaces/ecpg/test/test1.pgc
@@ -1,7 +1,5 @@
 #include <string.h>
 
-exec sql include sqlca;
-
 /* just a test comment */ exec sql whenever sqlerror do PrintAndStop(msg);
 exec sql whenever sqlwarning do warn();