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]

Reply via email to