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

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


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

commit 0b04cc9fe2311a77aaeb1eedd0a73ca836e3cdef
Author: 924060929 <[email protected]>
AuthorDate: Thu Sep 4 15:22:28 2025 +0800

    branch-3.0: [feature](nereids) support explain command return empty string 
to test planner performance (#54422) (#55038)
    
    cherry pick from #54422
---
 .../java/org/apache/doris/nereids/NereidsPlanner.java |  4 ++++
 .../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(+)

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 584b0e67c13..ca2b17ac775 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
@@ -653,6 +653,10 @@ public class NereidsPlanner extends Planner {
 
     @Override
     public String getExplainString(ExplainOptions explainOptions) {
+        ConnectContext context = cascadesContext == null ? 
ConnectContext.get() : cascadesContext.getConnectContext();
+        if (context.getSessionVariable().enableExplainNone) {
+            return "";
+        }
         ExplainLevel explainLevel = getExplainLevel(explainOptions);
         String plan = "";
         String mvSummary = "";
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 e05ca844f58..3bc7c92ca8b 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
@@ -2216,6 +2216,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";
@@ -2238,6 +2240,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