diff options
Diffstat (limited to 'src/backend/nodes/equalfuncs.c')
-rw-r--r-- | src/backend/nodes/equalfuncs.c | 123 |
1 files changed, 75 insertions, 48 deletions
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index b059e5cd5f0..51a7a03fc1b 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -20,7 +20,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.72 2000/08/11 23:45:31 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.73 2000/09/12 21:06:49 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -257,6 +257,26 @@ _equalSubLink(SubLink *a, SubLink *b) } static bool +_equalArrayRef(ArrayRef *a, ArrayRef *b) +{ + if (a->refelemtype != b->refelemtype) + return false; + if (a->refattrlength != b->refattrlength) + return false; + if (a->refelemlength != b->refelemlength) + return false; + if (a->refelembyval != b->refelembyval) + return false; + if (!equal(a->refupperindexpr, b->refupperindexpr)) + return false; + if (!equal(a->reflowerindexpr, b->reflowerindexpr)) + return false; + if (!equal(a->refexpr, b->refexpr)) + return false; + return equal(a->refassgnexpr, b->refassgnexpr); +} + +static bool _equalFieldSelect(FieldSelect *a, FieldSelect *b) { if (!equal(a->arg, b->arg)) @@ -283,23 +303,37 @@ _equalRelabelType(RelabelType *a, RelabelType *b) } static bool -_equalArrayRef(ArrayRef *a, ArrayRef *b) +_equalRangeTblRef(RangeTblRef *a, RangeTblRef *b) { - if (a->refelemtype != b->refelemtype) + if (a->rtindex != b->rtindex) return false; - if (a->refattrlength != b->refattrlength) + + return true; +} + +static bool +_equalJoinExpr(JoinExpr *a, JoinExpr *b) +{ + if (a->jointype != b->jointype) return false; - if (a->refelemlength != b->refelemlength) + if (a->isNatural != b->isNatural) return false; - if (a->refelembyval != b->refelembyval) + if (!equal(a->larg, b->larg)) return false; - if (!equal(a->refupperindexpr, b->refupperindexpr)) + if (!equal(a->rarg, b->rarg)) return false; - if (!equal(a->reflowerindexpr, b->reflowerindexpr)) + if (!equal(a->using, b->using)) return false; - if (!equal(a->refexpr, b->refexpr)) + if (!equal(a->quals, b->quals)) return false; - return equal(a->refassgnexpr, b->refassgnexpr); + if (!equal(a->alias, b->alias)) + return false; + if (!equal(a->colnames, b->colnames)) + return false; + if (!equal(a->colvars, b->colvars)) + return false; + + return true; } /* @@ -370,6 +404,8 @@ _equalIndexPath(IndexPath *a, IndexPath *b) return false; if (!equali(a->joinrelids, b->joinrelids)) return false; + if (a->alljoinquals != b->alljoinquals) + return false; /* * Skip 'rows' because of possibility of floating-point roundoff @@ -395,6 +431,8 @@ _equalJoinPath(JoinPath *a, JoinPath *b) { if (!_equalPath((Path *) a, (Path *) b)) return false; + if (a->jointype != b->jointype) + return false; if (!equal(a->outerjoinpath, b->outerjoinpath)) return false; if (!equal(a->innerjoinpath, b->innerjoinpath)) @@ -457,6 +495,8 @@ _equalRestrictInfo(RestrictInfo *a, RestrictInfo *b) { if (!equal(a->clause, b->clause)) return false; + if (a->isjoinqual != b->isjoinqual) + return false; if (!equal(a->subclauseindices, b->subclauseindices)) return false; if (a->mergejoinoperator != b->mergejoinoperator) @@ -557,6 +597,8 @@ _equalQuery(Query *a, Query *b) return false; if (!equal(a->rtable, b->rtable)) return false; + if (!equal(a->jointree, b->jointree)) + return false; if (!equal(a->targetList, b->targetList)) return false; if (!equal(a->qual, b->qual)) @@ -1476,31 +1518,33 @@ _equalTypeCast(TypeCast *a, TypeCast *b) } static bool -_equalRelExpr(RelExpr *a, RelExpr *b) +_equalSortGroupBy(SortGroupBy *a, SortGroupBy *b) { - if (!equalstr(a->relname, b->relname)) + if (!equalstr(a->useOp, b->useOp)) return false; - if (a->inh != b->inh) + if (!equal(a->node, b->node)) return false; return true; } static bool -_equalSortGroupBy(SortGroupBy *a, SortGroupBy *b) +_equalRangeVar(RangeVar *a, RangeVar *b) { - if (!equalstr(a->useOp, b->useOp)) + if (!equalstr(a->relname, b->relname)) return false; - if (!equal(a->node, b->node)) + if (a->inh != b->inh) + return false; + if (!equal(a->name, b->name)) return false; return true; } static bool -_equalRangeVar(RangeVar *a, RangeVar *b) +_equalRangeSubselect(RangeSubselect *a, RangeSubselect *b) { - if (!equal(a->relExpr, b->relExpr)) + if (!equal(a->subquery, b->subquery)) return false; if (!equal(a->name, b->name)) return false; @@ -1605,17 +1649,16 @@ _equalRangeTblEntry(RangeTblEntry *a, RangeTblEntry *b) { if (!equalstr(a->relname, b->relname)) return false; - if (!equal(a->ref, b->ref)) - return false; - /* XXX what about eref? */ if (a->relid != b->relid) return false; + if (!equal(a->alias, b->alias)) + return false; + if (!equal(a->eref, b->eref)) + return false; if (a->inh != b->inh) return false; if (a->inFromCl != b->inFromCl) return false; - if (a->inJoinSet != b->inJoinSet) - return false; if (a->skipAcl != b->skipAcl) return false; @@ -1645,25 +1688,6 @@ _equalRowMark(RowMark *a, RowMark *b) } static bool -_equalJoinExpr(JoinExpr *a, JoinExpr *b) -{ - if (a->jointype != b->jointype) - return false; - if (a->isNatural != b->isNatural) - return false; - if (!equal(a->larg, b->larg)) - return false; - if (!equal(a->rarg, b->rarg)) - return false; - if (!equal(a->alias, b->alias)) - return false; - if (!equal(a->quals, b->quals)) - return false; - - return true; -} - -static bool _equalFkConstraint(FkConstraint *a, FkConstraint *b) { if (!equalstr(a->constr_name, b->constr_name)) @@ -1808,6 +1832,12 @@ equal(void *a, void *b) case T_RelabelType: retval = _equalRelabelType(a, b); break; + case T_RangeTblRef: + retval = _equalRangeTblRef(a, b); + break; + case T_JoinExpr: + retval = _equalJoinExpr(a, b); + break; case T_RelOptInfo: retval = _equalRelOptInfo(a, b); @@ -2067,15 +2097,15 @@ equal(void *a, void *b) case T_TypeCast: retval = _equalTypeCast(a, b); break; - case T_RelExpr: - retval = _equalRelExpr(a, b); - break; case T_SortGroupBy: retval = _equalSortGroupBy(a, b); break; case T_RangeVar: retval = _equalRangeVar(a, b); break; + case T_RangeSubselect: + retval = _equalRangeSubselect(a, b); + break; case T_TypeName: retval = _equalTypeName(a, b); break; @@ -2104,9 +2134,6 @@ equal(void *a, void *b) /* GroupClause is equivalent to SortClause */ retval = _equalSortClause(a, b); break; - case T_JoinExpr: - retval = _equalJoinExpr(a, b); - break; case T_CaseExpr: retval = _equalCaseExpr(a, b); break; |