-/* $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.
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
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;
}
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';
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
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));
}
}
}
*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
{
/* 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);
}
}