From b8e5d108188866c3a762a477e2ef175455542ee9 Mon Sep 17 00:00:00 2001
From: Kuntal Ghosh <kuntal.ghosh@enterprisedb.com>
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

