mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
Cause EXPLAIN's VERBOSE option to print the target list (output column list)
of each plan node, instead of its former behavior of dumping the internal representation of the plan tree. The latter display is still available for those who really want it (see debug_print_plan), but uses for it are certainly few and and far between. Per discussion. This patch also removes the explain_pretty_print GUC, which is obsoleted by the change.
This commit is contained in:
@ -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.172 2008/04/17 18:30:18 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.173 2008/04/18 01:42:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -20,7 +20,6 @@
|
||||
#include "commands/prepare.h"
|
||||
#include "commands/trigger.h"
|
||||
#include "executor/instrument.h"
|
||||
#include "nodes/print.h"
|
||||
#include "optimizer/clauses.h"
|
||||
#include "optimizer/planner.h"
|
||||
#include "optimizer/var.h"
|
||||
@ -44,7 +43,7 @@ explain_get_index_name_hook_type explain_get_index_name_hook = NULL;
|
||||
typedef struct ExplainState
|
||||
{
|
||||
/* options */
|
||||
bool printNodes; /* do nodeToString() too */
|
||||
bool printTList; /* print plan targetlists */
|
||||
bool printAnalyze; /* print actual times */
|
||||
/* other states */
|
||||
PlannedStmt *pstmt; /* top of plan */
|
||||
@ -271,30 +270,11 @@ ExplainOnePlan(PlannedStmt *plannedstmt, ParamListInfo params,
|
||||
|
||||
es = (ExplainState *) palloc0(sizeof(ExplainState));
|
||||
|
||||
es->printNodes = stmt->verbose;
|
||||
es->printTList = stmt->verbose;
|
||||
es->printAnalyze = stmt->analyze;
|
||||
es->pstmt = queryDesc->plannedstmt;
|
||||
es->rtable = queryDesc->plannedstmt->rtable;
|
||||
|
||||
if (es->printNodes)
|
||||
{
|
||||
char *s;
|
||||
char *f;
|
||||
|
||||
s = nodeToString(queryDesc->plannedstmt->planTree);
|
||||
if (s)
|
||||
{
|
||||
if (Explain_pretty_print)
|
||||
f = pretty_format_node_dump(s);
|
||||
else
|
||||
f = format_node_dump(s);
|
||||
pfree(s);
|
||||
do_text_output_multiline(tstate, f);
|
||||
pfree(f);
|
||||
do_text_output_oneline(tstate, ""); /* separator line */
|
||||
}
|
||||
}
|
||||
|
||||
initStringInfo(&buf);
|
||||
explain_outNode(&buf,
|
||||
queryDesc->plannedstmt->planTree, queryDesc->planstate,
|
||||
@ -747,7 +727,8 @@ explain_outNode(StringInfo str,
|
||||
appendStringInfoChar(str, '\n');
|
||||
|
||||
/* target list */
|
||||
show_plan_tlist(plan, str, indent, es);
|
||||
if (es->printTList)
|
||||
show_plan_tlist(plan, str, indent, es);
|
||||
|
||||
/* quals, sort keys, etc */
|
||||
switch (nodeTag(plan))
|
||||
@ -1055,7 +1036,6 @@ static void
|
||||
show_plan_tlist(Plan *plan,
|
||||
StringInfo str, int indent, ExplainState *es)
|
||||
{
|
||||
#ifdef EXPLAIN_PRINT_TLISTS
|
||||
List *context;
|
||||
bool useprefix;
|
||||
ListCell *lc;
|
||||
@ -1095,7 +1075,6 @@ show_plan_tlist(Plan *plan,
|
||||
}
|
||||
|
||||
appendStringInfoChar(str, '\n');
|
||||
#endif /* EXPLAIN_PRINT_TLISTS */
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user