From b8e5d108188866c3a762a477e2ef175455542ee9 Mon Sep 17 00:00:00 2001 From: Kuntal Ghosh Date: Fri, 10 Mar 2017 13:58:30 +0530 Subject: [PATCH] Show extParams and allParams in explain --- src/backend/commands/explain.c | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 49e2543..c7186cf 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -106,6 +106,7 @@ static void show_tidbitmap_info(BitmapHeapScanState *planstate, static void show_instrumentation_count(const char *qlabel, int which, PlanState *planstate, ExplainState *es); static void show_foreignscan_info(ForeignScanState *fsstate, ExplainState *es); +static void show_params(PlanState *plastate, ExplainState *es); static void show_eval_params(Bitmapset *bms_params, ExplainState *es); static const char *explain_get_index_name(Oid indexId); static void show_buffer_usage(ExplainState *es, const BufferUsage *usage); @@ -1605,6 +1606,10 @@ ExplainNode(PlanState *planstate, List *ancestors, break; } + /* Show params evaluated at a node */ + show_params(planstate, es); + + /* Show buffer usage */ if (es->buffers && planstate->instrument) show_buffer_usage(es, &planstate->instrument->bufusage); @@ -1771,6 +1776,47 @@ ExplainNode(PlanState *planstate, List *ancestors, } /* + * Show params at node. + */ +static void +show_params(PlanState *planstate, ExplainState *es) +{ + if (planstate->plan->allParam) + { + int paramid = -1; + List *params = NIL; + Bitmapset *bms_params = planstate->plan->allParam; + while ((paramid = bms_next_member(bms_params, paramid)) >= 0) + { + char param[32]; + + snprintf(param, sizeof(param), "$%d", paramid); + params = lappend(params, pstrdup(param)); + } + + if (params) + ExplainPropertyList("allParams", params, es); + } + + if (planstate->plan->extParam) + { + int paramid = -1; + List *params = NIL; + Bitmapset *bms_params = planstate->plan->extParam; + while ((paramid = bms_next_member(bms_params, paramid)) >= 0) + { + char param[32]; + + snprintf(param, sizeof(param), "$%d", paramid); + params = lappend(params, pstrdup(param)); + } + + if (params) + ExplainPropertyList("extParams", params, es); + } +} + +/* * Show the targetlist of a plan node */ static void -- 1.8.3.1