This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 8b50b365c51 branch-3.1: [feature](nereids) support explain command 
return empty string to test planner performance #54422 (#54457)
8b50b365c51 is described below

commit 8b50b365c51e01fd7d55707ecb3484f085bef504
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Aug 8 10:11:20 2025 +0800

    branch-3.1: [feature](nereids) support explain command return empty string 
to test planner performance #54422 (#54457)
    
    Cherry-picked from #54422
    
    Co-authored-by: 924060929 <[email protected]>
---
 .../java/org/apache/doris/nereids/NereidsPlanner.java |  5 ++++-
 .../main/java/org/apache/doris/planner/Planner.java   |  5 +++++
 .../java/org/apache/doris/qe/SessionVariable.java     |  8 ++++++++
 .../nereids/trees/plans/ExplainInsertCommandTest.java | 19 +++++++++++++++++++
 4 files changed, 36 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index b091309d391..c2410e51d83 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -667,6 +667,9 @@ public class NereidsPlanner extends Planner {
 
     @Override
     public String getExplainString(ExplainOptions explainOptions) {
+        if (getConnectContext().getSessionVariable().enableExplainNone) {
+            return "";
+        }
         ExplainLevel explainLevel = getExplainLevel(explainOptions);
         String plan = "";
         String mvSummary = "";
@@ -817,7 +820,7 @@ public class NereidsPlanner extends Planner {
     }
 
     public ConnectContext getConnectContext() {
-        return cascadesContext.getConnectContext();
+        return cascadesContext == null ? ConnectContext.get() : 
cascadesContext.getConnectContext();
     }
 
     public StatementContext getStatementContext() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
index cfcd27af8fa..71755840726 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/Planner.java
@@ -24,6 +24,7 @@ import org.apache.doris.common.UserException;
 import org.apache.doris.common.profile.PlanTreeBuilder;
 import org.apache.doris.common.profile.PlanTreePrinter;
 import org.apache.doris.nereids.trees.plans.physical.TopnFilter;
+import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.ResultSet;
 import org.apache.doris.thrift.TQueryOptions;
 
@@ -53,6 +54,10 @@ public abstract class Planner {
 
     public String getExplainString(ExplainOptions explainOptions) {
         Preconditions.checkNotNull(explainOptions);
+        ConnectContext connectContext = ConnectContext.get();
+        if (connectContext != null && 
connectContext.getSessionVariable().enableExplainNone) {
+            return "";
+        }
         if (explainOptions.isGraph()) {
             // print the plan graph
             PlanTreeBuilder builder = new PlanTreeBuilder(fragments);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 39199a16496..4f739717037 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -2283,6 +2283,8 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String IGNORE_SHAPE_NODE = "ignore_shape_nodes";
 
+    public static final String ENABLE_EXPLAIN_NONE = "enable_explain_none";
+
     public static final String DETAIL_SHAPE_NODES = "detail_shape_nodes";
 
     public static final String ENABLE_SEGMENT_CACHE = "enable_segment_cache";
@@ -2305,6 +2307,12 @@ public class SessionVariable implements Serializable, 
Writable {
                     "the plan node type show detail in 'explain shape plan' 
command"})
     public String detailShapePlanNodes = "";
 
+    @VariableMgr.VarAttr(name = ENABLE_EXPLAIN_NONE, needForward = true, 
description = {
+            "执行explain命令,但不打印explain结果",
+            "execute explain command and return nothing"
+    })
+    public boolean enableExplainNone = false;
+
     private Set<String> detailShapePlanNodesSet = ImmutableSet.of();
 
     public Set<String> getDetailShapePlanNodesSet() {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
index d4756746e98..94e5bae2c75 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ExplainInsertCommandTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.nereids.trees.plans;
 
+import org.apache.doris.analysis.ExplainOptions;
 import org.apache.doris.nereids.NereidsPlanner;
 import org.apache.doris.nereids.StatementContext;
 import org.apache.doris.nereids.exceptions.AnalysisException;
@@ -26,10 +27,12 @@ import org.apache.doris.nereids.parser.NereidsParser;
 import org.apache.doris.nereids.properties.PhysicalProperties;
 import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
 import org.apache.doris.nereids.trees.plans.commands.ExplainCommand;
+import 
org.apache.doris.nereids.trees.plans.commands.ExplainCommand.ExplainLevel;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
 import org.apache.doris.nereids.util.MemoTestUtils;
 import org.apache.doris.planner.PlanFragment;
+import org.apache.doris.qe.StmtExecutor;
 import org.apache.doris.utframe.TestWithFeService;
 
 import org.junit.jupiter.api.Assertions;
@@ -134,6 +137,22 @@ public class ExplainInsertCommandTest extends 
TestWithFeService {
         Assertions.assertEquals(8, 
getOutputFragment(sql).getOutputExprs().size());
     }
 
+    @Test
+    public void explainNone() throws Exception {
+        String sql = "explain insert into agg_have_dup_base select -4, -4, -4, 
'd'";
+        connectContext.getSessionVariable().enableExplainNone = false;
+        StmtExecutor sqlStmtExecutor = getSqlStmtExecutor(sql);
+        String explainString = sqlStmtExecutor.planner()
+                .getExplainString(new ExplainOptions(ExplainLevel.VERBOSE, 
false));
+        Assertions.assertNotEquals("", explainString);
+
+        connectContext.getSessionVariable().enableExplainNone = true;
+        sqlStmtExecutor = getSqlStmtExecutor(sql);
+        explainString = sqlStmtExecutor.planner()
+                .getExplainString(new ExplainOptions(ExplainLevel.VERBOSE, 
false));
+        Assertions.assertEquals("", explainString);
+    }
+
     private PlanFragment getOutputFragment(String sql) throws Exception {
         StatementScopeIdGenerator.clear();
         StatementContext statementContext = 
MemoTestUtils.createStatementContext(connectContext, sql);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to