aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/setrefs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r--src/backend/optimizer/plan/setrefs.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index aaa383742e7..5240a7283b2 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/plan/setrefs.c,v 1.131 2007/02/22 22:00:24 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/plan/setrefs.c,v 1.132 2007/02/22 23:44:25 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -56,7 +56,6 @@ typedef struct
typedef struct
{
indexed_tlist *subplan_itlist;
- Index subvarno;
int rtoffset;
} fix_upper_expr_context;
@@ -73,7 +72,7 @@ static Node *fix_scan_expr_mutator(Node *node, fix_scan_expr_context *context);
static void set_join_references(Join *join, int rtoffset);
static void set_inner_join_references(Plan *inner_plan,
indexed_tlist *outer_itlist);
-static void set_upper_references(Plan *plan, Index subvarno, int rtoffset);
+static void set_upper_references(Plan *plan, int rtoffset);
static indexed_tlist *build_tlist_index(List *tlist);
static Var *search_indexed_tlist_for_var(Var *var,
indexed_tlist *itlist,
@@ -90,7 +89,6 @@ static Node *fix_join_expr_mutator(Node *node,
fix_join_expr_context *context);
static Node *fix_upper_expr(Node *node,
indexed_tlist *subplan_itlist,
- Index subvarno,
int rtoffset);
static Node *fix_upper_expr_mutator(Node *node,
fix_upper_expr_context *context);
@@ -345,7 +343,7 @@ set_plan_refs(PlannerGlobal *glob, Plan *plan, int rtoffset)
break;
case T_Agg:
case T_Group:
- set_upper_references(plan, (Index) 0, rtoffset);
+ set_upper_references(plan, rtoffset);
break;
case T_Result:
{
@@ -354,11 +352,9 @@ set_plan_refs(PlannerGlobal *glob, Plan *plan, int rtoffset)
/*
* Result may or may not have a subplan; if not, it's more
* like a scan node than an upper node.
- *
- * XXX why does Result use a different subvarno from Agg/Group?
*/
if (splan->plan.lefttree != NULL)
- set_upper_references(plan, (Index) OUTER, rtoffset);
+ set_upper_references(plan, rtoffset);
else
{
splan->plan.targetlist =
@@ -889,7 +885,7 @@ set_inner_join_references(Plan *inner_plan, indexed_tlist *outer_itlist)
* the expression.
*/
static void
-set_upper_references(Plan *plan, Index subvarno, int rtoffset)
+set_upper_references(Plan *plan, int rtoffset)
{
Plan *subplan = plan->lefttree;
indexed_tlist *subplan_itlist;
@@ -909,7 +905,6 @@ set_upper_references(Plan *plan, Index subvarno, int rtoffset)
newexpr = fix_upper_expr((Node *) tle->expr,
subplan_itlist,
- subvarno,
rtoffset);
tle = flatCopyTargetEntry(tle);
tle->expr = (Expr *) newexpr;
@@ -920,7 +915,6 @@ set_upper_references(Plan *plan, Index subvarno, int rtoffset)
plan->qual = (List *)
fix_upper_expr((Node *) plan->qual,
subplan_itlist,
- subvarno,
rtoffset);
pfree(subplan_itlist);
@@ -1233,23 +1227,20 @@ fix_join_expr_mutator(Node *node, fix_join_expr_context *context)
*
* 'node': the tree to be fixed (a target item or qual)
* 'subplan_itlist': indexed target list for subplan
- * 'subvarno': varno to be assigned to all Vars
* 'rtoffset': how much to increment varnoold by
*
* The resulting tree is a copy of the original in which all Var nodes have
- * varno = subvarno, varattno = resno of corresponding subplan target.
+ * varno = OUTER, varattno = resno of corresponding subplan target.
* The original tree is not modified.
*/
static Node *
fix_upper_expr(Node *node,
indexed_tlist *subplan_itlist,
- Index subvarno,
int rtoffset)
{
fix_upper_expr_context context;
context.subplan_itlist = subplan_itlist;
- context.subvarno = subvarno;
context.rtoffset = rtoffset;
return fix_upper_expr_mutator(node, &context);
}
@@ -1267,7 +1258,7 @@ fix_upper_expr_mutator(Node *node, fix_upper_expr_context *context)
newvar = search_indexed_tlist_for_var(var,
context->subplan_itlist,
- context->subvarno,
+ OUTER,
context->rtoffset);
if (!newvar)
elog(ERROR, "variable not found in subplan target list");
@@ -1278,7 +1269,7 @@ fix_upper_expr_mutator(Node *node, fix_upper_expr_context *context)
{
newvar = search_indexed_tlist_for_non_var(node,
context->subplan_itlist,
- context->subvarno);
+ OUTER);
if (newvar)
return (Node *) newvar;
}