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

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


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 87c15267df4 branch-4.0: [refactor](file scan) remove castToSlot in 
FileScanNode #57515 (#57548)
87c15267df4 is described below

commit 87c15267df4af68b4c3dac5a7aaae87616723679
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Nov 5 00:37:16 2025 +0800

    branch-4.0: [refactor](file scan) remove castToSlot in FileScanNode #57515 
(#57548)
    
    Cherry-picked from #57515
    
    Co-authored-by: morrySnow <[email protected]>
---
 .../org/apache/doris/datasource/FileScanNode.java  | 37 ++++++++++++++++------
 .../java/org/apache/doris/planner/ScanNode.java    | 18 -----------
 2 files changed, 28 insertions(+), 27 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
index d09c1ef1c85..c79a134b220 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileScanNode.java
@@ -18,13 +18,23 @@
 package org.apache.doris.datasource;
 
 import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.NullLiteral;
 import org.apache.doris.analysis.SlotDescriptor;
-import org.apache.doris.analysis.StringLiteral;
 import org.apache.doris.analysis.TupleDescriptor;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.UserException;
+import org.apache.doris.nereids.CascadesContext;
+import org.apache.doris.nereids.analyzer.Scope;
+import org.apache.doris.nereids.glue.translator.ExpressionTranslator;
+import org.apache.doris.nereids.glue.translator.PlanTranslatorContext;
+import org.apache.doris.nereids.parser.NereidsParser;
+import org.apache.doris.nereids.rules.analysis.ExpressionAnalyzer;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
+import org.apache.doris.nereids.trees.expressions.literal.StringLiteral;
+import org.apache.doris.nereids.types.DataType;
+import org.apache.doris.nereids.types.VarcharType;
+import org.apache.doris.nereids.util.TypeCoercionUtils;
 import org.apache.doris.planner.PlanNodeId;
 import org.apache.doris.statistics.StatisticalType;
 import org.apache.doris.thrift.TExplainLevel;
@@ -39,6 +49,7 @@ import org.apache.doris.thrift.TScanRangeLocations;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
 
@@ -202,22 +213,27 @@ public abstract class FileScanNode extends 
ExternalScanNode {
 
         for (Column column : getColumns()) {
             Expr expr;
+            Expression expression;
             if (column.getDefaultValue() != null) {
                 if (column.getDefaultValueExprDef() != null) {
-                    expr = column.getDefaultValueExpr();
+                    expression = new NereidsParser().parseExpression(
+                            column.getDefaultValueExpr().toSqlWithoutTbl());
+                    ExpressionAnalyzer analyzer = new ExpressionAnalyzer(
+                            null, new Scope(ImmutableList.of()), null, true, 
true);
+                    expression = analyzer.analyze(expression);
                 } else {
-                    expr = new StringLiteral(column.getDefaultValue());
+                    expression = new StringLiteral(column.getDefaultValue());
                 }
             } else {
                 if (column.isAllowNull()) {
                     // For load, use Varchar as Null, for query, use column 
type.
                     if (useVarcharAsNull) {
-                        expr = 
NullLiteral.create(org.apache.doris.catalog.Type.VARCHAR);
+                        expression = new 
NullLiteral(VarcharType.SYSTEM_DEFAULT);
                     } else {
-                        expr = NullLiteral.create(column.getType());
+                        expression = new 
NullLiteral(DataType.fromCatalogType(column.getType()));
                     }
                 } else {
-                    expr = null;
+                    expression = null;
                 }
             }
             // if there is already an expr , just skip it.
@@ -235,8 +251,11 @@ public abstract class FileScanNode extends 
ExternalScanNode {
             // default value.
             // and if z is not nullable, the load will fail.
             if (slotDesc != null) {
-                if (expr != null) {
-                    expr = castToSlot(slotDesc, expr);
+                if (expression != null) {
+                    expression = 
TypeCoercionUtils.castIfNotSameType(expression,
+                            DataType.fromCatalogType(slotDesc.getType()));
+                    expr = ExpressionTranslator.translate(expression,
+                            new 
PlanTranslatorContext(CascadesContext.initTempContext()));
                     
params.putToDefaultValueOfSrcSlot(slotDesc.getId().asInt(), 
expr.treeToThrift());
                 } else {
                     
params.putToDefaultValueOfSrcSlot(slotDesc.getId().asInt(), tExpr);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java
index 4a9a1945d9b..fee9b0f8afc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java
@@ -39,7 +39,6 @@ import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.KeysType;
 import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.PartitionInfo;
-import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.cloud.catalog.CloudPartition;
 import org.apache.doris.common.Config;
@@ -129,23 +128,6 @@ public abstract class ScanNode extends PlanNode implements 
SplitGenerator {
         return desc;
     }
 
-    /**
-     * cast expr to SlotDescriptor type
-     */
-    protected Expr castToSlot(SlotDescriptor slotDesc, Expr expr) throws 
UserException {
-        PrimitiveType dstType = slotDesc.getType().getPrimitiveType();
-        PrimitiveType srcType = expr.getType().getPrimitiveType();
-        if (PrimitiveType.typeWithPrecision.contains(dstType) && 
PrimitiveType.typeWithPrecision.contains(srcType)
-                && !slotDesc.getType().equals(expr.getType())) {
-            return expr.castTo(slotDesc.getType());
-        } else if (dstType != srcType || slotDesc.getType().isAggStateType() 
&& expr.getType().isAggStateType()
-                && !slotDesc.getType().equals(expr.getType())) {
-            return expr.castTo(slotDesc.getType());
-        } else {
-            return expr;
-        }
-    }
-
     protected abstract void createScanRangeLocations() throws UserException;
 
     /**


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to