diff options
Diffstat (limited to 'src/backend/optimizer/prep')
-rw-r--r-- | src/backend/optimizer/prep/prepkeyset.c | 18 | ||||
-rw-r--r-- | src/backend/optimizer/prep/prepunion.c | 4 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/backend/optimizer/prep/prepkeyset.c b/src/backend/optimizer/prep/prepkeyset.c index a28e329e53..60166289a5 100644 --- a/src/backend/optimizer/prep/prepkeyset.c +++ b/src/backend/optimizer/prep/prepkeyset.c @@ -85,19 +85,14 @@ transformKeySetQuery(Query *origNode) /*************************/ /* Qualify where clause */ /*************************/ - if (!inspectOrNode((Expr *) origNode->qual) || TotalExpr < 9) + if (!inspectOrNode((Expr *) origNode->jointree->quals) || TotalExpr < 9) return; /* Copy essential elements into a union node */ - while (((Expr *) origNode->qual)->opType == OR_EXPR) + while (((Expr *) origNode->jointree->quals)->opType == OR_EXPR) { Query *unionNode = makeNode(Query); - - /* Pull up Expr = */ - unionNode->qual = lsecond(((Expr *) origNode->qual)->args); - - /* Pull up balance of tree */ - origNode->qual = lfirst(((Expr *) origNode->qual)->args); + List *qualargs = ((Expr *) origNode->jointree->quals)->args; unionNode->commandType = origNode->commandType; unionNode->resultRelation = origNode->resultRelation; @@ -107,9 +102,16 @@ transformKeySetQuery(Query *origNode) Node_Copy(origNode, unionNode, distinctClause); Node_Copy(origNode, unionNode, sortClause); Node_Copy(origNode, unionNode, rtable); + origNode->jointree->quals = NULL; /* avoid unnecessary copying */ Node_Copy(origNode, unionNode, jointree); Node_Copy(origNode, unionNode, targetList); + /* Pull up Expr = */ + unionNode->jointree->quals = lsecond(qualargs); + + /* Pull up balance of tree */ + origNode->jointree->quals = lfirst(qualargs); + origNode->unionClause = lappend(origNode->unionClause, unionNode); } return; diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index d284dd51e0..d3df886327 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.52 2000/09/12 21:06:57 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.53 2000/09/29 18:21:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -411,7 +411,7 @@ find_all_inheritors(Oid parentrel) * there can't be any cycles in the inheritance graph anyway.) */ currentchildren = set_differencei(currentchildren, examined_relids); - unexamined_relids = LispUnioni(unexamined_relids, currentchildren); + unexamined_relids = set_unioni(unexamined_relids, currentchildren); } return examined_relids; |