This is an automated email from the ASF dual-hosted git repository.
zhangstar333 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 94db52c8205 [FE](session-variable) Add a debug variable of constant
fold (#35584)
94db52c8205 is described below
commit 94db52c82058574a23f66828218329996e60ba7c
Author: zclllyybb <[email protected]>
AuthorDate: Thu May 30 13:59:40 2024 +0800
[FE](session-variable) Add a debug variable of constant fold (#35584)
which force skip constant fold in nereids. make it easier for test,
especially for SqlLogic platform
---
.../nereids/rules/expression/rules/FoldConstantRuleOnBE.java | 2 ++
.../nereids/rules/expression/rules/FoldConstantRuleOnFE.java | 2 ++
.../src/main/java/org/apache/doris/qe/SessionVariable.java | 11 +++++++++++
.../src/main/java/org/apache/doris/qe/StmtExecutor.java | 3 ++-
4 files changed, 17 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
index d9e2187596b..9519d011d8d 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnBE.java
@@ -119,6 +119,8 @@ public class FoldConstantRuleOnBE implements
ExpressionPatternRuleFactory {
public List<ExpressionPatternMatcher<? extends Expression>> buildRules() {
return ImmutableList.of(
root(Expression.class)
+ .whenCtx(ctx ->
!ctx.cascadesContext.getConnectContext().getSessionVariable()
+ .isDebugSkipFoldConstant())
.whenCtx(FoldConstantRuleOnBE::isEnableFoldByBe)
.thenApply(FoldConstantRuleOnBE::foldByBE)
);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
index cf3d1a88d8c..1106df5f7c3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
@@ -690,6 +690,8 @@ public class FoldConstantRuleOnFE extends
AbstractExpressionRewriteRule
private <E extends Expression> ExpressionPatternMatcher<? extends
Expression> matches(
Class<E> clazz, BiFunction<E, ExpressionRewriteContext,
Expression> visitMethod) {
return matchesType(clazz)
+ .whenCtx(ctx ->
!ctx.cascadesContext.getConnectContext().getSessionVariable()
+ .isDebugSkipFoldConstant())
.whenCtx(NOT_UNDER_AGG_DISTINCT.as())
.thenApply(ctx -> visitMethod.apply(ctx.expr,
ctx.rewriteContext));
}
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 9d80a8a1bc5..29d48dc40ba 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
@@ -135,6 +135,7 @@ public class SessionVariable implements Serializable,
Writable {
public static final String PREFER_JOIN_METHOD = "prefer_join_method";
public static final String ENABLE_FOLD_CONSTANT_BY_BE =
"enable_fold_constant_by_be";
+ public static final String DEBUG_SKIP_FOLD_CONSTANT =
"debug_skip_fold_constant";
public static final String ENABLE_REWRITE_ELEMENT_AT_TO_SLOT =
"enable_rewrite_element_at_to_slot";
public static final String ENABLE_ODBC_TRANSCATION =
"enable_odbc_transcation";
@@ -999,6 +1000,8 @@ public class SessionVariable implements Serializable,
Writable {
@VariableMgr.VarAttr(name = ENABLE_FOLD_CONSTANT_BY_BE, fuzzy = true)
public boolean enableFoldConstantByBe = true;
+ @VariableMgr.VarAttr(name = DEBUG_SKIP_FOLD_CONSTANT)
+ public boolean debugSkipFoldConstant = false;
@VariableMgr.VarAttr(name = ENABLE_REWRITE_ELEMENT_AT_TO_SLOT, fuzzy =
true)
private boolean enableRewriteElementAtToSlot = true;
@@ -2491,6 +2494,10 @@ public class SessionVariable implements Serializable,
Writable {
return enableFoldConstantByBe;
}
+ public boolean isDebugSkipFoldConstant() {
+ return debugSkipFoldConstant;
+ }
+
public boolean isEnableRewriteElementAtToSlot() {
return enableRewriteElementAtToSlot;
}
@@ -2507,6 +2514,10 @@ public class SessionVariable implements Serializable,
Writable {
this.enableFoldConstantByBe = foldConstantByBe;
}
+ public void setDebugSkipFoldConstant(boolean debugSkipFoldConstant) {
+ this.debugSkipFoldConstant = debugSkipFoldConstant;
+ }
+
public int getParallelExecInstanceNum() {
ConnectContext connectContext = ConnectContext.get();
if (connectContext != null && connectContext.getEnv() != null &&
connectContext.getEnv().getAuth() != null) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 235d3ac2426..90bde60d06c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -1424,7 +1424,8 @@ public class StmtExecutor {
}
ExprRewriter rewriter = analyzer.getExprRewriter();
rewriter.reset();
- if (context.getSessionVariable().isEnableFoldConstantByBe()) {
+ if (context.getSessionVariable().isEnableFoldConstantByBe()
+ &&
!context.getSessionVariable().isDebugSkipFoldConstant()) {
// fold constant expr
parsedStmt.foldConstant(rewriter, tQueryOptions);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]