diff options
| author | Robert Haas | 2015-10-27 21:14:57 +0000 |
|---|---|---|
| committer | Robert Haas | 2015-10-28 17:51:25 +0000 |
| commit | 9d2631431f4ed43d00a103cf84bbd8966d8391dd (patch) | |
| tree | d53dfadc43603555cee7ea4004ee161b625f8648 /src/backend/commands | |
| parent | ca04790c276d1b97e19bd635b8221f9be1b6be59 (diff) | |
Test code, not completely working.gather3
Diffstat (limited to 'src/backend/commands')
| -rw-r--r-- | src/backend/commands/explain.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 12a59a3560..ee3165b733 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -58,7 +58,7 @@ static double elapsed_time(instr_time *starttime); static bool ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used); static void ExplainNode(PlanState *planstate, List *ancestors, const char *relationship, const char *plan_name, - ExplainState *es); + ExplainState *es, PlanState *squashstate); static void show_plan_tlist(PlanState *planstate, List *ancestors, ExplainState *es); static void show_expression(Node *node, const char *qlabel, @@ -579,7 +579,7 @@ ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc) es->rtable_names = select_rtable_names_for_explain(es->rtable, rels_used); es->deparse_cxt = deparse_context_for_plan_rtable(es->rtable, es->rtable_names); - ExplainNode(queryDesc->planstate, NIL, NULL, NULL, es); + ExplainNode(queryDesc->planstate, NIL, NULL, NULL, es, NULL); } /* @@ -787,7 +787,7 @@ ExplainPreScanNode(PlanState *planstate, Bitmapset **rels_used) static void ExplainNode(PlanState *planstate, List *ancestors, const char *relationship, const char *plan_name, - ExplainState *es) + ExplainState *es, PlanState *squashstate) { Plan *plan = planstate->plan; const char *pname; /* node type name for text output */ @@ -804,7 +804,7 @@ ExplainNode(PlanState *planstate, List *ancestors, if (gather->single_copy) { ExplainNode(outerPlanState(planstate), ancestors, relationship, - plan_name, es); + plan_name, es, planstate); return; } } @@ -1571,16 +1571,18 @@ ExplainNode(PlanState *planstate, List *ancestors, /* initPlan-s */ if (planstate->initPlan) ExplainSubPlans(planstate->initPlan, ancestors, "InitPlan", es); + if (squashstate != NULL && squashstate->initPlan) + ExplainSubPlans(squashstate->initPlan, ancestors, "SQUASHInitPlan", es); /* lefttree */ if (outerPlanState(planstate)) ExplainNode(outerPlanState(planstate), ancestors, - "Outer", NULL, es); + "Outer", NULL, es, NULL); /* righttree */ if (innerPlanState(planstate)) ExplainNode(innerPlanState(planstate), ancestors, - "Inner", NULL, es); + "Inner", NULL, es, NULL); /* special child plans */ switch (nodeTag(plan)) @@ -1612,7 +1614,7 @@ ExplainNode(PlanState *planstate, List *ancestors, break; case T_SubqueryScan: ExplainNode(((SubqueryScanState *) planstate)->subplan, ancestors, - "Subquery", NULL, es); + "Subquery", NULL, es, NULL); break; case T_CustomScan: ExplainCustomChildren((CustomScanState *) planstate, @@ -1625,6 +1627,11 @@ ExplainNode(PlanState *planstate, List *ancestors, /* subPlan-s */ if (planstate->subPlan) ExplainSubPlans(planstate->subPlan, ancestors, "SubPlan", es); + if (squashstate != NULL && squashstate->subPlan) + { + List *myancestors = lcons(squashstate, ancestors); + ExplainSubPlans(squashstate->subPlan, myancestors, "SQUASHSubPlan", es); + } /* end of child plans */ if (haschildren) @@ -2628,7 +2635,7 @@ ExplainMemberNodes(List *plans, PlanState **planstates, for (j = 0; j < nplans; j++) ExplainNode(planstates[j], ancestors, - "Member", NULL, es); + "Member", NULL, es, NULL); } /* @@ -2649,7 +2656,7 @@ ExplainSubPlans(List *plans, List *ancestors, SubPlan *sp = (SubPlan *) sps->xprstate.expr; ExplainNode(sps->planstate, ancestors, - relationship, sp->plan_name, es); + relationship, sp->plan_name, es, NULL); } } @@ -2664,7 +2671,8 @@ ExplainCustomChildren(CustomScanState *css, List *ancestors, ExplainState *es) (list_length(css->custom_ps) != 1 ? "children" : "child"); foreach(cell, css->custom_ps) - ExplainNode((PlanState *) lfirst(cell), ancestors, label, NULL, es); + ExplainNode((PlanState *) lfirst(cell), ancestors, label, NULL, es, + NULL); } /* |
