diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java index 693dc0dfc2..acb9663caa 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java @@ -292,11 +292,15 @@ public class BindSink implements AnalysisRuleFactory { Map replaceMap = Maps.newHashMap(); NereidsParser expressionParser = new NereidsParser(); List materializedViewColumn = Lists.newArrayList(); + List shadowColumns = Lists.newArrayList(); // generate slots not mentioned in sql, mv slots and shaded slots. for (Column column : boundSink.getTargetTable().getFullSchema()) { if (column.isMaterializedViewColumn()) { materializedViewColumn.add(column); continue; + } else if (Column.isShadowColumn(column.getName())) { + shadowColumns.add(column); + continue; } if (columnToChildOutput.containsKey(column) // do not process explicitly use DEFAULT value here: @@ -423,6 +427,15 @@ public class BindSink implements AnalysisRuleFactory { columnToOutput.put(column.getName(), output); } } + for (Column column : shadowColumns) { + NamedExpression expression = columnToOutput.get(column.getNonShadowName()); + if (expression != null) { + Alias alias = (Alias) expression; + Expression newExpr = TypeCoercionUtils.castIfNotSameType(alias.child(), + DataType.fromCatalogType(column.getType())); + columnToOutput.put(column.getName(), new Alias(newExpr, column.getName())); + } + } return columnToOutput; }