This is an automated email from the ASF dual-hosted git repository.
jakevin pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 71f53995738 [fix](Nereids): fix datetime fold-constant-be in
Branch-2.0 (#27938)
71f53995738 is described below
commit 71f539957380e22fd442fb06eeeb34eb4adc9d62
Author: jakevin <[email protected]>
AuthorDate: Tue Dec 5 09:58:42 2023 +0800
[fix](Nereids): fix datetime fold-constant-be in Branch-2.0 (#27938)
fix fold-constant-be datetimev2 will lose the scale of datetime.
---
.../expression/rules/FoldConstantRuleOnBE.java | 30 ++++++++++++++--------
1 file changed, 20 insertions(+), 10 deletions(-)
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 db647f114ea..d3a5b0c2cd1 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
@@ -19,12 +19,12 @@ package org.apache.doris.nereids.rules.expression.rules;
import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.ExprId;
-import org.apache.doris.analysis.LiteralExpr;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.PrimitiveType;
-import org.apache.doris.catalog.Type;
+import org.apache.doris.catalog.ScalarType;
import org.apache.doris.common.IdGenerator;
import org.apache.doris.common.UserException;
+import org.apache.doris.common.util.DebugUtil;
import org.apache.doris.common.util.TimeUtils;
import org.apache.doris.nereids.glue.translator.ExpressionTranslator;
import org.apache.doris.nereids.rules.expression.AbstractExpressionRewriteRule;
@@ -34,8 +34,10 @@ import org.apache.doris.nereids.trees.expressions.Cast;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.types.DataType;
+import org.apache.doris.nereids.types.DateTimeV2Type;
import org.apache.doris.proto.InternalService;
import org.apache.doris.proto.InternalService.PConstantExprResult;
+import org.apache.doris.proto.Types.PScalarType;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.rpc.BackendServiceProxy;
import org.apache.doris.system.Backend;
@@ -181,26 +183,34 @@ public class FoldConstantRuleOnBE extends
AbstractExpressionRewriteRule {
if (result.getStatus().getStatusCode() == 0) {
for (Entry<String, InternalService.PExprResultMap> e :
result.getExprResultMapMap().entrySet()) {
for (Entry<String, InternalService.PExprResult> e1 :
e.getValue().getMapMap().entrySet()) {
+ PScalarType pScalarType = e1.getValue().getType();
+ TPrimitiveType tPrimitiveType =
TPrimitiveType.findByValue(pScalarType.getType());
+ PrimitiveType primitiveType =
PrimitiveType.fromThrift(Objects.requireNonNull(tPrimitiveType));
Expression ret;
if (e1.getValue().getSuccess()) {
- TPrimitiveType type =
TPrimitiveType.findByValue(e1.getValue().getType().getType());
- Type t =
Type.fromPrimitiveType(PrimitiveType.fromThrift(Objects.requireNonNull(type)));
- Expr staleExpr =
LiteralExpr.create(e1.getValue().getContent(), Objects.requireNonNull(t));
- // Nereids type
- DataType t1 =
DataType.convertFromString(staleExpr.getType().getPrimitiveType().toString());
- ret =
Literal.of(staleExpr.getStringValue()).castTo(t1);
+ DataType type;
+ if (primitiveType == PrimitiveType.DATETIMEV2) {
+ type =
DateTimeV2Type.of(pScalarType.getScale());
+ } else {
+ type =
DataType.fromCatalogType(ScalarType.createType(
+
PrimitiveType.fromThrift(tPrimitiveType)));
+ }
+ ret =
Literal.of(e1.getValue().getContent()).castTo(type);
} else {
ret = constMap.get(e1.getKey());
}
+ LOG.debug("Be constant folding convert {} to {}",
e1.getKey(), ret);
resultMap.put(e1.getKey(), ret);
}
}
} else {
- LOG.warn("failed to get const expr value from be: {}",
result.getStatus().getErrorMsgsList());
+ LOG.warn("query {} failed to get const expr value from be: {}",
+ DebugUtil.printId(context.queryId()),
result.getStatus().getErrorMsgsList());
}
} catch (Exception e) {
- LOG.warn("failed to get const expr value from be: {}",
e.getMessage());
+ LOG.warn("query {} failed to get const expr value from be: {}",
+ DebugUtil.printId(context.queryId()), e.getMessage());
}
return resultMap;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]