This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new e717ac53ca5 branch-2.1: [feature](nereids) support explain command
return empty string to test planner performance (#54422) (#55039)
e717ac53ca5 is described below
commit e717ac53ca5a4690b9d72670cf7ea0c290ec14ab
Author: 924060929 <[email protected]>
AuthorDate: Fri Aug 22 09:00:59 2025 +0800
branch-2.1: [feature](nereids) support explain command return empty string
to test planner performance (#54422) (#55039)
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 69ec05893a3..3ffa56fd49d 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
@@ -562,6 +562,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 0a22ec841dd..1824d82c1ba 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
@@ -23,6 +23,7 @@ import org.apache.doris.analysis.StatementBase;
import org.apache.doris.common.UserException;
import org.apache.doris.common.profile.PlanTreeBuilder;
import org.apache.doris.common.profile.PlanTreePrinter;
+import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.ResultSet;
import org.apache.doris.thrift.TQueryOptions;
@@ -52,6 +53,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 c33e26d0b06..4d4c427128c 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
@@ -2063,6 +2063,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 Set<String> getIgnoreShapePlanNodes() {
@@ -2083,6 +2085,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]