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]