aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2002-01-13 08:52:09 +0000
committerMichael Meskes <meskes@postgresql.org>2002-01-13 08:52:09 +0000
commit7138a1e5fc034640afe1c570b426b325389377f4 (patch)
treee1a3e4059c240eef50e6aa0638199088b66a44ff
parent4b20cc10326a79289a223fc2f639b52e7f816f7e (diff)
downloadpostgresql-7138a1e5fc034640afe1c570b426b325389377f4.tar.gz
postgresql-7138a1e5fc034640afe1c570b426b325389377f4.zip
- Fixed variable handling for struct members.
- Removed check for array input. An attribut might store the complete array.
-rw-r--r--src/interfaces/ecpg/ChangeLog6
-rw-r--r--src/interfaces/ecpg/lib/execute.c11
-rw-r--r--src/interfaces/ecpg/preproc/extern.h2
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y2
-rw-r--r--src/interfaces/ecpg/preproc/variable.c20
-rw-r--r--src/interfaces/ecpg/test/test1.pgc2
6 files changed, 24 insertions, 19 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 70ad65acf76..da687ae1aba 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 dba99a1bd6c..33941a7f89b 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 985971647bc..358a141025e 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 54c64d216ed..d94f2a78c5b 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 3131a76592a..cee7ab3cf50 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 b5e745da8e9..a539c72a9ee 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();