From c4b6fb1dd075f96d1f423ef89f47cf3c2653e940 Mon Sep 17 00:00:00 2001 From: EmelSimsek Date: Mon, 13 May 2024 15:19:25 +0300 Subject: [PATCH] Attempt to fix parameter passing with auto_explain --- src/backend/distributed/planner/multi_explain.c | 15 +++++---------- src/test/regress/sql/multi_explain.sql | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index 4584e7740..cb8029e94 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -808,7 +808,11 @@ FetchRemoteExplainFromWorkers(Task *task, ExplainState *es, ParamListInfo params if (params) { - ExtractParametersFromParamList(params, ¶mTypes, ¶mValues, false); + /* force evaluation of bound params */ + params = copyParamList(params); + + ExtractParametersForRemoteExecution(params, ¶mTypes, + ¶mValues); } int sendStatus = SendRemoteCommandParams(connection, explainQuery->data, @@ -1585,15 +1589,6 @@ FetchPlanQueryForExplainAnalyze(const char *queryString, ParamListInfo params) { StringInfo fetchQuery = makeStringInfo(); - if (params != NULL) - { - /* - * Add a dummy CTE to ensure all parameters are referenced, such that their - * types can be resolved. - */ - appendStringInfo(fetchQuery, "WITH unused AS (%s) ", - ParameterResolutionSubquery(params)); - } appendStringInfoString(fetchQuery, "SELECT explain_analyze_output, execution_duration " diff --git a/src/test/regress/sql/multi_explain.sql b/src/test/regress/sql/multi_explain.sql index 7fa75c8be..6b430935a 100644 --- a/src/test/regress/sql/multi_explain.sql +++ b/src/test/regress/sql/multi_explain.sql @@ -1168,6 +1168,22 @@ set auto_explain.log_analyze to true; -- the following should not be locally executed since explain analyze is on select * from test_ref_table; +CREATE TABLE test_auto_explain.test_params +( coll1 int8 NULL, + coll2 int4 NOT NULL); + +SELECT create_distributed_table('test_auto_explain.test_params', 'coll1'); + +CREATE OR REPLACE PROCEDURE test_auto_explain.test_delete_from(p_coll2 int) +LANGUAGE plpgsql +AS $$ +BEGIN +DELETE FROM test_auto_explain.test_params +WHERE coll2 = p_coll2; +END;$$; + +CALL test_auto_explain.test_delete_from(20240401); + DROP SCHEMA test_auto_explain CASCADE; SET client_min_messages TO ERROR;