From a4da7727041374569461e7fcbfdff17b18d092d0 Mon Sep 17 00:00:00 2001 From: openGaussDev Date: Thu, 3 Mar 2022 20:03:02 +0800 Subject: [PATCH] : Fix that deleting view will core when explain_perf_mode is not EXPLAIN_NORMAL. Offering: openGaussDev More detail: Fix that deleting view will core when explain_perf_mode is not EXPLAIN_NORMAL. Match-id-e8eddf898bbef7bec3e1d746a29aaa49ded93ef6 --- src/gausskernel/optimizer/commands/explain.cpp | 9 +++++++++ src/test/regress/expected/bypass_simplequery_support.out | 8 ++++++++ src/test/regress/sql/bypass_simplequery_support.sql | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/src/gausskernel/optimizer/commands/explain.cpp b/src/gausskernel/optimizer/commands/explain.cpp index f9686f447..f884f6ef4 100755 --- a/src/gausskernel/optimizer/commands/explain.cpp +++ b/src/gausskernel/optimizer/commands/explain.cpp @@ -454,6 +454,15 @@ void ExplainQuery( */ if (es.format == EXPLAIN_FORMAT_TEXT) appendStringInfoString(es.str, "Query rewrites to nothing\n"); + + /* + * In centralized mode, non-stream plans only support EXPLAIN_NORMAL. + * So set explain_perf_mode to EXPLAIN_NORMAL here. + */ + if (t_thrd.explain_cxt.explain_perf_mode != EXPLAIN_NORMAL && + !(IS_STREAM_PLAN && u_sess->exec_cxt.under_stream_runtime)) { + t_thrd.explain_cxt.explain_perf_mode = EXPLAIN_NORMAL; + } } else { ListCell* l = NULL; diff --git a/src/test/regress/expected/bypass_simplequery_support.out b/src/test/regress/expected/bypass_simplequery_support.out index f5bd4a9b9..7527bc401 100755 --- a/src/test/regress/expected/bypass_simplequery_support.out +++ b/src/test/regress/expected/bypass_simplequery_support.out @@ -1911,6 +1911,14 @@ create table test(a int); create view v_test as select * from test; CREATE OR REPLACE RULE v_delete as ON DELETE TO v_test DO INSTEAD NOTHING; delete from v_test; +set explain_perf_mode=pretty; +explain delete from v_test; + QUERY PLAN +--------------------------- + Query rewrites to nothing +(1 row) + +reset explain_perf_mode; drop table test cascade; NOTICE: drop cascades to view v_test -- end diff --git a/src/test/regress/sql/bypass_simplequery_support.sql b/src/test/regress/sql/bypass_simplequery_support.sql index d7c644c7f..ada3ec28a 100755 --- a/src/test/regress/sql/bypass_simplequery_support.sql +++ b/src/test/regress/sql/bypass_simplequery_support.sql @@ -424,6 +424,10 @@ create view v_test as select * from test; CREATE OR REPLACE RULE v_delete as ON DELETE TO v_test DO INSTEAD NOTHING; delete from v_test; +set explain_perf_mode=pretty; +explain delete from v_test; +reset explain_perf_mode; + drop table test cascade; -- end