diff options
Diffstat (limited to 'src/backend/nodes/equalfuncs.c')
-rw-r--r-- | src/backend/nodes/equalfuncs.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index 5888f49515e..3ddc8d6c98a 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.59 2000/02/07 04:40:57 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.60 2000/02/15 03:37:08 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -96,6 +96,17 @@ _equalExpr(Expr *a, Expr *b) } static bool +_equalAttr(Attr *a, Attr *b) +{ + if (!strcmp(a->relname, b->relname)) + return false; + if (length(a->attrs) != length(b->attrs)) + return false; + + return equal(a->attrs, b->attrs); +} + +static bool _equalVar(Var *a, Var *b) { if (a->varno != b->varno) @@ -633,14 +644,14 @@ _equalRangeTblEntry(RangeTblEntry *a, RangeTblEntry *b) if (a->relname != b->relname) return false; } - if (a->refname && b->refname) + if (a->ref && b->ref) { - if (strcmp(a->refname, b->refname) != 0) + if (! equal(a->ref, b->ref)) return false; } else { - if (a->refname != b->refname) + if (a->ref != b->ref) return false; } if (a->relid != b->relid) @@ -845,6 +856,9 @@ equal(void *a, void *b) case T_EState: retval = _equalEState(a, b); break; + case T_Attr: + retval = _equalAttr(a, b); + break; case T_Integer: case T_String: case T_Float: |