From 8dc48ba8772bff315fc0e6cd200fbcc2d0cd5776 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 31 Mar 1998 23:31:10 +0000 Subject: [PATCH] Small HAVING cleanup. --- src/backend/optimizer/plan/planmain.c | 10 ++++++---- src/backend/optimizer/plan/planner.c | 7 +++---- src/backend/optimizer/prep/prepunion.c | 4 +++- src/backend/parser/analyze.c | 6 ++++-- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index 132cda732b..e9f27cd509 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.20 1998/02/26 04:32:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.21 1998/03/31 23:30:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -187,7 +187,9 @@ query_planner(Query *root, */ if (constant_qual) { - subplan = (Plan *) make_result((!root->hasAggs && !root->groupClause) + subplan = (Plan *) make_result((!root->hasAggs && + !root->groupClause && + !root->havingQual) ? tlist : subplan->targetlist, (Node *) constant_qual, subplan); @@ -195,7 +197,7 @@ query_planner(Query *root, /* * Change all varno's of the Result's node target list. */ - if (!root->hasAggs && !root->groupClause) + if (!root->hasAggs && !root->groupClause && !root->havingQual) set_tlist_references(subplan); return subplan; @@ -216,7 +218,7 @@ query_planner(Query *root, */ else { - if (!root->hasAggs && !root->groupClause) + if (!root->hasAggs && !root->groupClause && !root->havingQual) subplan->targetlist = flatten_tlist_vars(tlist, subplan->targetlist); return subplan; diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 35c19d6c44..260bf230cf 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.24 1998/03/30 16:36:04 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.25 1998/03/31 23:30:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -292,11 +292,10 @@ union_planner(Query *parse) ((Agg *) result_plan)->aggs = set_agg_tlist_references((Agg *) result_plan); - /***S*H***/ - if(parse->havingQual!=NULL) { + if(parse->havingQual != NULL) { List *clause; - /***S*H***/ /* set qpqual of having clause */ + /* set qpqual of having clause */ ((Agg *) result_plan)->plan.qual=cnfify((Expr *)parse->havingQual,true); foreach(clause, ((Agg *) result_plan)->plan.qual) diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index e1c620956a..5cede30f48 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.22 1998/03/31 04:43:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.23 1998/03/31 23:30:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -280,6 +280,8 @@ plan_inherit_query(List *relids, new_root->uniqueFlag = NULL; new_root->sortClause = NULL; new_root->groupClause = NULL; + new_root->havingQual = NULL; + if (new_root->hasAggs) { new_root->hasAggs = false; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 4ec2f1853a..7d107e49c3 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.73 1998/03/30 16:47:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.74 1998/03/31 23:31:10 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -319,6 +319,9 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) /* fix where clause */ qry->qual = transformWhereClause(pstate, stmt->whereClause); + + qry->havingQual = transformWhereClause(pstate, stmt->havingClause); + qry->hasSubLinks = pstate->p_hasSubLinks; /* now the range table will not change */ @@ -784,7 +787,6 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) qry->qual = transformWhereClause(pstate, stmt->whereClause); - /***S*H***/ qry->havingQual = transformWhereClause(pstate, stmt->havingClause); qry->hasSubLinks = pstate->p_hasSubLinks;