aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2003-06-11 06:39:13 +0000
committerMichael Meskes <meskes@postgresql.org>2003-06-11 06:39:13 +0000
commit1ca0b6d047a96a69800a0e00f3e61f148beed1db (patch)
tree54877902e8684e283cee258e2991336e2d5aae24 /src
parent8de72414ea78cf765ccca89c11c4a0fc57e3a6a8 (diff)
downloadpostgresql-1ca0b6d047a96a69800a0e00f3e61f148beed1db.tar.gz
postgresql-1ca0b6d047a96a69800a0e00f3e61f148beed1db.zip
Make sure a variable is no longer referenced when it is removed.
Fixed counting bug in parsing "->" operator. Removed that silly debugging function I accidently committed last night.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/ecpg/ChangeLog5
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y12
-rw-r--r--src/interfaces/ecpg/preproc/variable.c33
3 files changed, 38 insertions, 12 deletions
diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 6e3b5cb54ea..858c7f91116 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -1477,6 +1477,11 @@ Mon Jun 2 17:36:03 CEST 2003
Tue Jun 10 19:43:49 CEST 2003
- Fixed several small bugs.
+
+Wed Jun 11 08:30:41 CEST 2003
+
+ - Make sure a variable is no longer referenced when it is removed.
+ - Fixed counting bug in parsing "->" operator.
- Set ecpg version to 2.12.0.
- Set ecpg library to 3.4.2.
- Set pgtypes library to 1.0.0
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index b1e002c05a7..83015d04a59 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.229 2003/06/10 17:46:43 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.230 2003/06/11 06:39:12 meskes Exp $ */
/* Copyright comment */
%{
@@ -48,14 +48,6 @@ static struct inf_compat_val
struct inf_compat_val *next;
} *informix_val;
-void mm(void)
-{
- int i,j;
-
- i=1;
- j=i+1;
-}
-
/*
* Handle parsing errors and warnings
*/
@@ -673,7 +665,6 @@ stmt: AlterDatabaseSetStmt { output_statement($1, 0, connection); }
struct cursor *ptr;
struct arguments *p;
- mm();
for (ptr = cur; ptr != NULL; ptr=ptr->next)
{
if (strcmp(ptr->name, $1) == 0)
@@ -2632,7 +2623,6 @@ DeclareCursorStmt: DECLARE name cursor_options CURSOR opt_hold FOR SelectStmt
this = (struct cursor *) mm_alloc(sizeof(struct cursor));
/* initial definition */
- mm();
this->next = cur;
this->name = $2;
this->connection = connection;
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c
index 83b56ac9dc3..be96e18c0c5 100644
--- a/src/interfaces/ecpg/preproc/variable.c
+++ b/src/interfaces/ecpg/preproc/variable.c
@@ -137,7 +137,7 @@ find_struct(char *name, char *next, char *end)
/* restore the name, we will need it later */
*next = c;
- return find_struct_member(name, end, p->type->u.element->u.members, p->brace_level);
+ return find_struct_member(name, ++end, p->type->u.element->u.members, p->brace_level);
}
else
{
@@ -260,6 +260,37 @@ remove_variables(int brace_level)
{
if (p->brace_level >= brace_level)
{
+ /* is it still referenced by a cursor? */
+ struct cursor *ptr;
+
+ for (ptr = cur; ptr != NULL; ptr = ptr->next)
+ {
+ struct arguments *varptr, *prevvar;
+
+ for (varptr = prevvar = ptr->argsinsert; varptr != NULL; varptr = varptr->next)
+ {
+ if (p == varptr->variable)
+ {
+ /* remove from list */
+ if (varptr == ptr->argsinsert)
+ ptr->argsinsert = varptr->next;
+ else
+ prevvar->next = varptr->next;
+ }
+ }
+ for (varptr = ptr->argsresult; varptr != NULL; varptr = varptr->next)
+ {
+ if (p == varptr->variable)
+ {
+ /* remove from list */
+ if (varptr == ptr->argsresult)
+ ptr->argsresult = varptr->next;
+ else
+ prevvar->next = varptr->next;
+ }
+ }
+ }
+
/* remove it */
if (p == allvariables)
prev = allvariables = p->next;