aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/explain.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2009-04-05 19:59:40 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2009-04-05 19:59:40 +0000
commitfbcce08046bc553901ccbcf1ea6cf82f61968970 (patch)
tree8848ad80ceb71406bf111bb2c99b3c1240410f00 /src/backend/commands/explain.c
parent329a5322e9280bde04907f947ada2e2627ef41c2 (diff)
downloadpostgresql-fbcce08046bc553901ccbcf1ea6cf82f61968970.tar.gz
postgresql-fbcce08046bc553901ccbcf1ea6cf82f61968970.zip
Change EXPLAIN output so that subplans and initplans (particularly CTEs)
are individually labeled, rather than just grouped under an "InitPlan" or "SubPlan" heading. This in turn makes it possible for decompilation of a subplan reference to usefully identify which subplan it's referencing. I also made InitPlans identify which parameter symbol(s) they compute, so that references to those parameters elsewhere in the plan tree can be connected to the initplan that will be executed. Per a gripe from Robert Haas about EXPLAIN output of a WITH query being inadequate, plus some longstanding pet peeves of my own.
Diffstat (limited to 'src/backend/commands/explain.c')
-rw-r--r--src/backend/commands/explain.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 8ad877e1652..d8f27a1175b 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994-5, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.184 2009/01/02 20:42:00 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.185 2009/04/05 19:59:39 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -951,9 +951,6 @@ explain_outNode(StringInfo str,
{
ListCell *lst;
- for (i = 0; i < indent; i++)
- appendStringInfo(str, " ");
- appendStringInfo(str, " InitPlan\n");
foreach(lst, planstate->initPlan)
{
SubPlanState *sps = (SubPlanState *) lfirst(lst);
@@ -961,6 +958,9 @@ explain_outNode(StringInfo str,
for (i = 0; i < indent; i++)
appendStringInfo(str, " ");
+ appendStringInfo(str, " %s\n", sp->plan_name);
+ for (i = 0; i < indent; i++)
+ appendStringInfo(str, " ");
appendStringInfo(str, " -> ");
explain_outNode(str,
exec_subplan_get_plan(es->pstmt, sp),
@@ -1099,9 +1099,6 @@ explain_outNode(StringInfo str,
{
ListCell *lst;
- for (i = 0; i < indent; i++)
- appendStringInfo(str, " ");
- appendStringInfo(str, " SubPlan\n");
foreach(lst, planstate->subPlan)
{
SubPlanState *sps = (SubPlanState *) lfirst(lst);
@@ -1109,6 +1106,9 @@ explain_outNode(StringInfo str,
for (i = 0; i < indent; i++)
appendStringInfo(str, " ");
+ appendStringInfo(str, " %s\n", sp->plan_name);
+ for (i = 0; i < indent; i++)
+ appendStringInfo(str, " ");
appendStringInfo(str, " -> ");
explain_outNode(str,
exec_subplan_get_plan(es->pstmt, sp),