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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 33e0ec7d3c8 [opt](Nereids) optimize view related capabilities (#51028)
33e0ec7d3c8 is described below

commit 33e0ec7d3c874755ac0bd0b3d9c75efc8374f7ba
Author: morrySnow <zhangwen...@selectdb.com>
AuthorDate: Fri May 23 16:45:25 2025 +0800

    [opt](Nereids) optimize view related capabilities (#51028)
    
    ### What problem does this PR solve?
    
    Problem Summary:
    
    - Checking for output columns with the same name has no obvious
    benefits, while bringing inconvenience in usage.
    - When query a view, should return view's column and table info in
    metadata's original-wise fields.
    
    This PR:
    - do not check output columns with the same name from inline view or CTE
    any more
    - remove useless variable interalName in SlotReference intro by #25627
    - add two variables in SlotReference to save info of view
    - return view's info if present when return metadata of query
    
    ### Release note
    
    use correct metadata when query view
---
 .../antlr4/org/apache/doris/nereids/DorisParser.g4 |   8 +-
 .../main/java/org/apache/doris/alter/Alter.java    |   9 +-
 .../java/org/apache/doris/mtmv/MTMVPlanUtil.java   |   4 +-
 .../org/apache/doris/nereids/NereidsPlanner.java   |   4 +-
 .../apache/doris/nereids/analyzer/MappingSlot.java |   5 -
 .../apache/doris/nereids/analyzer/UnboundSlot.java |   5 -
 .../org/apache/doris/nereids/cost/CostModelV1.java |   8 +-
 .../glue/translator/ExpressionTranslator.java      |   4 +-
 .../glue/translator/PhysicalPlanTranslator.java    |   4 +-
 .../glue/translator/PlanTranslatorContext.java     |   4 +-
 .../nereids/load/NereidsLoadPlanInfoCollector.java |   2 +-
 .../doris/nereids/parser/LogicalPlanBuilder.java   |   9 +-
 .../processor/post/RuntimeFilterPruner.java        |   4 +-
 .../doris/nereids/rules/analysis/AnalyzeCTE.java   |   2 -
 .../nereids/rules/analysis/BindExpression.java     |  18 +--
 .../doris/nereids/rules/analysis/BindRelation.java |   4 +-
 .../mv/AbstractMaterializedViewAggregateRule.java  |   4 +-
 .../exploration/mv/MaterializedViewUtils.java      |  13 +-
 .../rules/expression/QueryColumnCollector.java     |   4 +-
 .../nereids/rules/expression/rules/AddMinMax.java  |   2 +-
 .../rules/implementation/AggregateStrategies.java  |  36 ++---
 .../LogicalOlapScanToPhysicalOlapScan.java         |   8 +-
 ...ogicalPartitionTopNToPhysicalPartitionTopN.java |   2 +-
 .../nereids/rules/rewrite/CheckPrivileges.java     |   4 +-
 .../nereids/rules/rewrite/ForeignKeyContext.java   |   8 +-
 .../rewrite/PushDownFilterIntoSchemaScan.java      |   2 +-
 .../nereids/rules/rewrite/SetPreAggStatus.java     |  18 +--
 .../rules/rewrite/UnequalPredicateInfer.java       |   6 +-
 .../rules/rewrite/VariantSubPathPruning.java       |  10 +-
 .../doris/nereids/stats/FilterEstimation.java      |   8 +-
 .../doris/nereids/stats/StatsCalculator.java       |   8 +-
 .../doris/nereids/trees/expressions/Alias.java     |  26 +--
 .../trees/expressions/ArrayItemReference.java      |   3 +-
 .../nereids/trees/expressions/Expression.java      |   6 +-
 .../doris/nereids/trees/expressions/Slot.java      |   8 +-
 .../nereids/trees/expressions/SlotReference.java   | 152 +++++++++---------
 .../trees/expressions/functions/agg/AnyValue.java  |   2 +-
 .../trees/plans/commands/AddConstraintCommand.java |   4 +-
 .../commands/CreateMaterializedViewCommand.java    |   4 +-
 .../trees/plans/commands/CreateTableCommand.java   |   4 +-
 .../trees/plans/commands/DeleteFromCommand.java    |   4 +-
 .../trees/plans/commands/info/AlterViewInfo.java   |  10 +-
 .../trees/plans/commands/info/CreateViewInfo.java  |   3 +-
 .../trees/plans/logical/LogicalCTEConsumer.java    |   7 +-
 .../plans/logical/LogicalCatalogRelation.java      |   2 +-
 .../trees/plans/logical/LogicalOlapScan.java       |   2 +-
 .../nereids/trees/plans/logical/LogicalView.java   |  16 +-
 .../plans/physical/PhysicalCatalogRelation.java    |   2 +-
 .../org/apache/doris/nereids/util/PlanUtils.java   |   4 +-
 .../org/apache/doris/qe/PointQueryExecutor.java    |   2 +-
 .../java/org/apache/doris/qe/StmtExecutor.java     |   8 +-
 .../apache/doris/statistics/AnalysisManager.java   |   4 +-
 .../org/apache/doris/statistics/Statistics.java    |   2 +-
 .../doris/statistics/hbo/ScanPlanStatistics.java   |   4 +-
 .../org/apache/doris/mtmv/MTMVPlanUtilTest.java    |   4 +-
 .../nereids/jobs/cascades/DeriveStatsJobTest.java  |   5 +-
 .../rules/analysis/AnalyzeWhereSubqueryTest.java   |   4 +-
 .../expression/ExpressionRewriteTestHelper.java    |   2 +-
 .../rules/rewrite/EliminateGroupByTest.java        |   2 +-
 .../doris/nereids/stats/StatsCalculatorTest.java   |  10 +-
 .../doris/nereids/trees/plans/ConstraintTest.java  |   4 +-
 .../org/apache/doris/qe/OlapQueryCacheTest.java    |  16 ++
 .../doris/statistics/AnalysisManagerTest.java      |   7 +-
 .../data/ddl_p0/test_create_or_replace_view.out    | Bin 505 -> 605 bytes
 .../tpcds_sf100/noStatsRfPrune/query24.out         | Bin 3152 -> 3122 bytes
 .../tpcds_sf100/noStatsRfPrune/query6.out          | Bin 3007 -> 2984 bytes
 .../tpcds_sf100/no_stats_shape/query24.out         | Bin 3308 -> 3278 bytes
 .../tpcds_sf100/no_stats_shape/query6.out          | Bin 3217 -> 3194 bytes
 .../shape_check/tpcds_sf100/rf_prune/query24.out   | Bin 3152 -> 3122 bytes
 .../shape_check/tpcds_sf100/rf_prune/query6.out    | Bin 3256 -> 3233 bytes
 .../data/shape_check/tpcds_sf100/shape/query24.out | Bin 3307 -> 3277 bytes
 .../data/shape_check/tpcds_sf100/shape/query6.out  | Bin 3310 -> 3287 bytes
 .../tpcds_sf1000/bs_downgrade_shape/query6.out     | Bin 3310 -> 3287 bytes
 .../data/shape_check/tpcds_sf1000/hint/query24.out | Bin 3465 -> 3435 bytes
 .../data/shape_check/tpcds_sf1000/hint/query6.out  | Bin 3310 -> 3287 bytes
 .../shape_check/tpcds_sf1000/shape/query24.out     | Bin 3312 -> 3282 bytes
 .../data/shape_check/tpcds_sf1000/shape/query6.out | Bin 3310 -> 3287 bytes
 .../shape_check/tpcds_sf10t_orc/shape/query24.out  | Bin 3302 -> 3272 bytes
 .../shape_check/tpcds_sf10t_orc/shape/query6.out   | Bin 3215 -> 3192 bytes
 .../data/shape_check/tpch_sf1000/hint/q11.out      | Bin 2104 -> 2074 bytes
 .../tpch_sf1000/nostats_rf_prune/q11.out           | Bin 2197 -> 2167 bytes
 .../tpch_sf1000/nostats_rf_prune/q22.out           | Bin 1376 -> 1350 bytes
 .../data/shape_check/tpch_sf1000/rf_prune/q11.out  | Bin 2205 -> 2175 bytes
 .../data/shape_check/tpch_sf1000/rf_prune/q22.out  | Bin 1313 -> 1287 bytes
 .../data/shape_check/tpch_sf1000/shape/q11.out     | Bin 2205 -> 2175 bytes
 .../data/shape_check/tpch_sf1000/shape/q22.out     | Bin 1313 -> 1287 bytes
 .../shape_check/tpch_sf1000/shape_no_stats/q11.out | Bin 2197 -> 2167 bytes
 .../shape_check/tpch_sf1000/shape_no_stats/q22.out | Bin 1376 -> 1350 bytes
 .../ddl_p0/test_create_or_replace_view.groovy      |   5 +
 .../suites/mysql_compatibility_p0/metadata.groovy  |  59 +++++--
 .../cte/test_cte_with_duplicate_consumer.groovy    |   8 +-
 .../fold_constant/fold_constant_by_fe.groovy       |   4 +-
 .../subquery/test_duplicate_name_in_view.groovy    | 175 ---------------------
 .../test_convert_median_to_percentile.groovy       |   4 +-
 .../suites/nereids_syntax_p0/explain.groovy        |   5 +-
 .../query_p0/cte/query_with_dup_column.groovy      | 112 -------------
 96 files changed, 334 insertions(+), 598 deletions(-)

diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 
b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
index f26e617314d..2ae8b987f14 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
@@ -249,9 +249,11 @@ dictionaryColumnDef:
 supportedAlterStatement
     : ALTER SYSTEM alterSystemClause                                           
             #alterSystem
     | ALTER VIEW name=multipartIdentifier
-        ((MODIFY commentSpec) | ((LEFT_PAREN cols=simpleColumnDefs 
RIGHT_PAREN)? AS query)) #alterView
-    | ALTER CATALOG name=identifier RENAME newName=identifier                  
     #alterCatalogRename
-    | ALTER ROLE role=identifierOrText commentSpec                             
           #alterRole
+      (MODIFY commentSpec |
+      (LEFT_PAREN cols=simpleColumnDefs RIGHT_PAREN)?
+      (COMMENT STRING_LITERAL)? AS query)                                      
             #alterView
+    | ALTER CATALOG name=identifier RENAME newName=identifier                  
             #alterCatalogRename
+    | ALTER ROLE role=identifierOrText commentSpec                             
             #alterRole
     | ALTER STORAGE VAULT name=multipartIdentifier properties=propertyClause   
             #alterStorageVault
     | ALTER WORKLOAD GROUP name=identifierOrText (FOR 
computeGroup=identifierOrText)?
         properties=propertyClause?                                             
             #alterWorkloadGroup
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
index f4eff9fc005..fffa80da7a3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
@@ -855,8 +855,8 @@ public class Alter {
 
         String tableName = dbTableName.getTbl();
         View view = (View) db.getTableOrMetaException(tableName, 
TableType.VIEW);
-        modifyViewDef(db, view, stmt.getInlineViewDef(), 
ctx.getSessionVariable().getSqlMode(), stmt.getColumns(),
-                stmt.getComment());
+        modifyViewDef(db, view, stmt.getInlineViewDef(), 
ctx.getSessionVariable().getSqlMode(),
+                stmt.getColumns(), stmt.getComment());
     }
 
     private void modifyViewDef(Database db, View view, String inlineViewDef, 
long sqlMode,
@@ -867,14 +867,15 @@ public class Alter {
             try {
                 if (comment != null) {
                     view.setComment(comment);
-                } else {
+                }
+                // when do alter view modify comment, inlineViewDef and 
newFullSchema will be empty.
+                if (!Strings.isNullOrEmpty(inlineViewDef)) {
                     view.setInlineViewDefWithSqlMode(inlineViewDef, sqlMode);
                     view.setNewFullSchema(newFullSchema);
                 }
                 String viewName = view.getName();
                 db.unregisterTable(viewName);
                 db.registerTable(view);
-
                 AlterViewInfo alterViewInfo = new AlterViewInfo(db.getId(), 
view.getId(),
                         inlineViewDef, newFullSchema, sqlMode, comment);
                 
Env.getCurrentEnv().getEditLog().logModifyViewDef(alterViewInfo);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
index 8158564cd1d..2139d2937a3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java
@@ -299,8 +299,8 @@ public class MTMVPlanUtil {
                     DecimalV2Type.class, DecimalV2Type.SYSTEM_DEFAULT);
             if (s.isColumnFromTable()) {
                 // check if external table
-                if ((!((SlotReference) s).getTable().isPresent()
-                        || !((SlotReference) 
s).getTable().get().isManagedTable())) {
+                if ((!((SlotReference) s).getOriginalTable().isPresent()
+                        || !((SlotReference) 
s).getOriginalTable().get().isManagedTable())) {
                     if (s.getName().equals(partitionCol) || 
distributionColumnNames.contains(s.getName())) {
                         // String type can not be used in 
partition/distributed column
                         // so we replace it to varchar
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
index 3281093db8a..6a7f7d8e59d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java
@@ -555,8 +555,8 @@ public class NereidsPlanner extends Planner {
             Optional<TableIf> table = Optional.empty();
             if (output instanceof SlotReference) {
                 SlotReference slotReference = (SlotReference) output;
-                column = slotReference.getColumn();
-                table = slotReference.getTable();
+                column = slotReference.getOneLevelColumn();
+                table = slotReference.getOneLevelTable();
             }
             columnLabels.add(output.getName());
             FieldInfo fieldInfo = new FieldInfo(
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/MappingSlot.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/MappingSlot.java
index 2e9e8419550..76cbb1d42bd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/MappingSlot.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/MappingSlot.java
@@ -91,11 +91,6 @@ public class MappingSlot extends Slot {
         return slot.getDataType();
     }
 
-    @Override
-    public String getInternalName() {
-        return slot.getInternalName();
-    }
-
     @Override
     public Slot withName(String name) {
         return this;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java
index 227aefa1c64..3c5608f4f28 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundSlot.java
@@ -75,11 +75,6 @@ public class UnboundSlot extends Slot implements Unbound, 
PropagateNullable {
         return nameParts.subList(0, nameParts.size() - 1);
     }
 
-    @Override
-    public String getInternalName() {
-        return getName();
-    }
-
     @Override
     public String computeToSql() {
         switch (nameParts.size()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java
index ee96cf55b22..09e4d7e6773 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java
@@ -166,12 +166,12 @@ class CostModelV1 extends PlanVisitor<Cost, PlanContext> {
                 boolean hasSlot = compare.left() instanceof SlotReference || 
compare.right() instanceof SlotReference;
                 if (hasSlot && hasLiteral) {
                     if (compare.left() instanceof SlotReference) {
-                        if (((SlotReference) 
compare.left()).getColumn().isPresent()) {
-                            columns.add(((SlotReference) 
compare.left()).getColumn().get());
+                        if (((SlotReference) 
compare.left()).getOriginalColumn().isPresent()) {
+                            columns.add(((SlotReference) 
compare.left()).getOriginalColumn().get());
                         }
                     } else {
-                        if (((SlotReference) 
compare.right()).getColumn().isPresent()) {
-                            columns.add(((SlotReference) 
compare.right()).getColumn().get());
+                        if (((SlotReference) 
compare.right()).getOriginalColumn().isPresent()) {
+                            columns.add(((SlotReference) 
compare.right()).getOriginalColumn().get());
                         }
                     }
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
index e592fd09f49..f8958e55651 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
@@ -197,7 +197,7 @@ public class ExpressionTranslator extends 
DefaultExpressionVisitor<Expr, PlanTra
     }
 
     private OlapTable getOlapTableDirectly(SlotReference slot) {
-        return slot.getTable()
+        return slot.getOriginalTable()
                .filter(OlapTable.class::isInstance)
                .map(OlapTable.class::cast)
                .orElse(null);
@@ -219,7 +219,7 @@ public class ExpressionTranslator extends 
DefaultExpressionVisitor<Expr, PlanTra
                         .orElseThrow(() -> new AnalysisException(
                                     "No SlotReference found in Match, SQL is " 
+ match.toSql()));
 
-        Column column = slot.getColumn()
+        Column column = slot.getOriginalColumn()
                         .orElseThrow(() -> new AnalysisException(
                                     "SlotReference in Match failed to get 
Column, SQL is " + match.toSql()));
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
index cb7dd96df79..c9ed13d4637 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
@@ -821,8 +821,8 @@ public class PhysicalPlanTranslator extends 
DefaultPlanVisitor<PlanFragment, Pla
             if (context.getSessionVariable() != null && 
context.getSessionVariable().forbidUnknownColStats) {
                 for (int i = 0; i < slots.size(); i++) {
                     SlotReference slot = (SlotReference) slots.get(i);
-                    boolean inVisibleCol = slot.getColumn().isPresent()
-                            && StatisticConstants.shouldIgnoreCol(olapTable, 
slot.getColumn().get());
+                    boolean inVisibleCol = slot.getOriginalColumn().isPresent()
+                            && StatisticConstants.shouldIgnoreCol(olapTable, 
slot.getOriginalColumn().get());
                     if 
(olapScan.getStats().findColumnStatistics(slot).isUnKnown()
                             && !isComplexDataType(slot.getDataType())
                             && !StatisticConstants.isSystemTable(olapTable)
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java
index f6320383dea..de7fa61422b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PlanTranslatorContext.java
@@ -286,7 +286,7 @@ public class PlanTranslatorContext {
             @Nullable TableIf table) {
         SlotDescriptor slotDescriptor = this.addSlotDesc(tupleDesc);
         // Only the SlotDesc that in the tuple generated for scan node would 
have corresponding column.
-        Optional<Column> column = slotReference.getColumn();
+        Optional<Column> column = slotReference.getOriginalColumn();
         column.ifPresent(slotDescriptor::setColumn);
         
slotDescriptor.setType(slotReference.getDataType().toCatalogDataType());
         slotDescriptor.setIsMaterialized(true);
@@ -299,7 +299,7 @@ public class PlanTranslatorContext {
             slotDescriptor.setLabel(slotReference.getName());
         } else {
             slotRef = new SlotRef(slotDescriptor);
-            if (slotReference.hasSubColPath() && 
slotReference.getColumn().isPresent()) {
+            if (slotReference.hasSubColPath() && 
slotReference.getOriginalColumn().isPresent()) {
                 slotDescriptor.setSubColLables(slotReference.getSubPath());
                 // use lower case name for variant's root, since backend treat 
parent column as lower case
                 // see issue: 
https://github.com/apache/doris/pull/32999/commits
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadPlanInfoCollector.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadPlanInfoCollector.java
index 153c69bbd7f..562dfe81757 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadPlanInfoCollector.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadPlanInfoCollector.java
@@ -304,7 +304,7 @@ public class NereidsLoadPlanInfoCollector extends 
DefaultPlanVisitor<Void, PlanT
         for (int i = 0; i < targetTableSlots.size(); ++i) {
             if (targetTableSlots.get(i).isColumnFromTable()) {
                 SlotDescriptor srcSlot = srcSlots
-                        .get(((SlotReference) 
targetTableSlots.get(i)).getColumn().get().getName());
+                        .get(((SlotReference) 
targetTableSlots.get(i)).getOriginalColumn().get().getName());
                 if (srcSlot != null) {
                     
loadPlanInfo.destSlotIdToSrcSlotIdWithoutTrans.put(destSlots.get(i).getId(), 
srcSlot.getId());
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index 4d8e4df4f29..4992f880395 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -1166,8 +1166,7 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
     @Override
     public String visitCommentSpec(DorisParser.CommentSpecContext ctx) {
         String commentSpec = ctx == null ? "''" : 
ctx.STRING_LITERAL().getText();
-        return
-                
LogicalPlanBuilderAssistant.escapeBackSlash(commentSpec.substring(1, 
commentSpec.length() - 1));
+        return 
LogicalPlanBuilderAssistant.escapeBackSlash(commentSpec.substring(1, 
commentSpec.length() - 1));
     }
 
     /**
@@ -1571,7 +1570,11 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
             info = new AlterViewInfo(new TableNameInfo(nameParts), comment);
         } else {
             String querySql = getOriginSql(ctx.query());
-            info = new AlterViewInfo(new TableNameInfo(nameParts), querySql,
+            if (ctx.STRING_LITERAL() != null) {
+                comment = ctx.STRING_LITERAL().getText();
+                comment = 
LogicalPlanBuilderAssistant.escapeBackSlash(comment.substring(1, 
comment.length() - 1));
+            }
+            info = new AlterViewInfo(new TableNameInfo(nameParts), comment, 
querySql,
                     ctx.cols == null ? Lists.newArrayList() : 
visitSimpleColumnDefs(ctx.cols));
         }
         return new AlterViewCommand(info);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterPruner.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterPruner.java
index 884349da69c..51a9003b78f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterPruner.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RuntimeFilterPruner.java
@@ -189,8 +189,8 @@ public class RuntimeFilterPruner extends PlanPostProcessor {
     private boolean isVisibleColumn(Slot slot) {
         if (slot instanceof SlotReference) {
             SlotReference slotReference = (SlotReference) slot;
-            if (slotReference.getColumn().isPresent()) {
-                return slotReference.getColumn().get().isVisible();
+            if (slotReference.getOriginalColumn().isPresent()) {
+                return slotReference.getOriginalColumn().get().isVisible();
             }
         }
         return true;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTE.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTE.java
index 36a0459375b..129b0860a74 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTE.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/AnalyzeCTE.java
@@ -101,8 +101,6 @@ public class AnalyzeCTE extends OneAnalysisRuleFactory {
             CTEId cteId = StatementScopeIdGenerator.newCTEId();
             LogicalSubQueryAlias<Plan> logicalSubQueryAlias =
                     aliasQuery.withChildren(ImmutableList.of(analyzedCtePlan));
-            
BindExpression.checkSameNameSlot(logicalSubQueryAlias.child(0).getOutput(),
-                    logicalSubQueryAlias.getAlias());
             outerCteCtx = new CTEContext(cteId, logicalSubQueryAlias, 
outerCteCtx);
             outerCteCtx.setAnalyzedPlan(logicalSubQueryAlias);
             cteProducerPlans.add(new LogicalCTEProducer<>(cteId, 
logicalSubQueryAlias));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
index 3b804d7cf2b..c3ae8116067 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
@@ -252,9 +252,7 @@ public class BindExpression implements AnalysisRuleFactory {
     }
 
     private LogicalSubQueryAlias<Plan> 
bindSubqueryAlias(MatchingContext<LogicalSubQueryAlias<Plan>> ctx) {
-        LogicalSubQueryAlias<Plan> subQueryAlias = ctx.root;
-        checkSameNameSlot(subQueryAlias.child(0).getOutput(), 
subQueryAlias.getAlias());
-        return subQueryAlias;
+        return ctx.root;
     }
 
     private LogicalPlan bindGenerate(MatchingContext<LogicalGenerate<Plan>> 
ctx) {
@@ -1315,20 +1313,6 @@ public class BindExpression implements 
AnalysisRuleFactory {
         return new LogicalTVFRelation(unboundTVFRelation.getRelationId(), 
(TableValuedFunction) bindResult.first);
     }
 
-    /**
-     * Check the slot in childOutputs is duplicated or not
-     * If childOutputs has duplicated column name, would throw analysis 
exception
-     */
-    public static void checkSameNameSlot(List<Slot> childOutputs, String 
subQueryAlias) {
-        Set<String> nameSlots = new HashSet<>(childOutputs.size() * 2);
-        for (Slot s : childOutputs) {
-            if (!nameSlots.add(s.getInternalName())) {
-                throw new AnalysisException("Duplicated inline view column 
alias: '" + s.getName()
-                        + "'" + " in inline view: '" + subQueryAlias + "'");
-            }
-        }
-    }
-
     private void 
checkIfOutputAliasNameDuplicatedForGroupBy(Collection<Expression> expressions,
             List<? extends NamedExpression> output) {
         // if group_by_and_having_use_alias_first=true, we should fall back to 
original planner until we
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
index 02a244571e2..27569c1fef9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java
@@ -266,10 +266,10 @@ public class BindRelation extends OneAnalysisRuleFactory {
 
         for (Column col : columns) {
             // use exist slot in the plan
-            SlotReference slot = SlotReference.fromColumn(olapTable, col, 
col.getName(), olapScan.qualified());
+            SlotReference slot = SlotReference.fromColumn(olapTable, col, 
olapScan.qualified());
             ExprId exprId = slot.getExprId();
             for (Slot childSlot : childOutputSlots) {
-                if (childSlot instanceof SlotReference && ((SlotReference) 
childSlot).getName().equals(col.getName())) {
+                if (childSlot instanceof SlotReference && 
childSlot.getName().equals(col.getName())) {
                     exprId = childSlot.getExprId();
                     slot = slot.withExprId(exprId);
                     break;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
index fd2b5b4b8aa..452b791f7f2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
@@ -364,9 +364,9 @@ public abstract class AbstractMaterializedViewAggregateRule 
extends AbstractMate
         for (Expression expression : groupByShuttledExpressions) {
             canUnionRewrite = !expression.collectToSet(expr -> expr instanceof 
SlotReference
                     && ((SlotReference) expr).isColumnFromTable()
-                    && Objects.equals(((SlotReference) 
expr).getColumn().map(Column::getName).orElse(null),
+                    && Objects.equals(((SlotReference) 
expr).getOriginalColumn().map(Column::getName).orElse(null),
                     relatedCol)
-                    && Objects.equals(((SlotReference) 
expr).getTable().map(BaseTableInfo::new).orElse(null),
+                    && Objects.equals(((SlotReference) 
expr).getOriginalTable().map(BaseTableInfo::new).orElse(null),
                     relatedTableInfo)).isEmpty();
             if (canUnionRewrite) {
                 break;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
index 74cc21e0342..e642cc7cb6e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
@@ -385,13 +385,13 @@ public class MaterializedViewUtils {
             Set<Column> leftColumnSet = left.getOutputSet().stream()
                     .filter(slot -> slot instanceof SlotReference
                             && slot.isColumnFromTable())
-                    .map(slot -> ((SlotReference) slot).getColumn().get())
+                    .map(slot -> ((SlotReference) 
slot).getOriginalColumn().get())
                     .collect(Collectors.toSet());
             SlotReference contextPartitionColumn = 
getContextPartitionColumn(context);
             if (contextPartitionColumn == null) {
                 return null;
             }
-            boolean useLeft = 
leftColumnSet.contains(contextPartitionColumn.getColumn().get());
+            boolean useLeft = 
leftColumnSet.contains(contextPartitionColumn.getOriginalColumn().get());
             JoinType joinType = join.getJoinType();
             if (joinType.isInnerJoin() || joinType.isCrossJoin()) {
                 return visit(join, context);
@@ -424,7 +424,8 @@ public class MaterializedViewUtils {
             }
             // Check the table which mv partition column belonged to is same 
as the current check relation or not
             if (!((LogicalCatalogRelation) 
relation).getTable().getFullQualifiers().equals(
-                    
contextPartitionColumn.getTable().map(TableIf::getFullQualifiers).orElse(ImmutableList.of())))
 {
+                    contextPartitionColumn.getOriginalTable()
+                            
.map(TableIf::getFullQualifiers).orElse(ImmutableList.of()))) {
                 context.addFailReason(String.format("mv partition column name 
is not belonged to current check , "
                                 + "table, current table is %s",
                         ((LogicalCatalogRelation) 
relation).getTable().getFullQualifiers()));
@@ -459,7 +460,7 @@ public class MaterializedViewUtils {
             }
             Set<Column> partitionColumnSet = new HashSet<>(
                     
relatedTable.getPartitionColumns(MvccUtil.getSnapshotFromContext(relatedTable)));
-            Column mvReferenceColumn = 
contextPartitionColumn.getColumn().get();
+            Column mvReferenceColumn = 
contextPartitionColumn.getOriginalColumn().get();
             Expr definExpr = mvReferenceColumn.getDefineExpr();
             if (definExpr instanceof SlotRef) {
                 Column referenceRollupColumn = ((SlotRef) 
definExpr).getColumn();
@@ -534,14 +535,14 @@ public class MaterializedViewUtils {
                 Set<Column> originalPartitionbyExprSet = new HashSet<>();
                 partitionKeys.forEach(groupExpr -> {
                     if (groupExpr instanceof SlotReference && 
groupExpr.isColumnFromTable()) {
-                        originalPartitionbyExprSet.add(((SlotReference) 
groupExpr).getColumn().get());
+                        originalPartitionbyExprSet.add(((SlotReference) 
groupExpr).getOriginalColumn().get());
                     }
                 });
                 SlotReference contextPartitionColumn = 
getContextPartitionColumn(context);
                 if (contextPartitionColumn == null) {
                     return false;
                 }
-                if 
(!originalPartitionbyExprSet.contains(contextPartitionColumn.getColumn().get()))
 {
+                if 
(!originalPartitionbyExprSet.contains(contextPartitionColumn.getOriginalColumn().get()))
 {
                     return false;
                 }
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/QueryColumnCollector.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/QueryColumnCollector.java
index 1aa81c36d9a..bc1670221a7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/QueryColumnCollector.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/QueryColumnCollector.java
@@ -193,8 +193,8 @@ public class QueryColumnCollector extends 
DefaultPlanRewriter<CollectorContext>
         path.add(slot);
         if (slot instanceof SlotReference) {
             SlotReference slotReference = (SlotReference) slot;
-            Optional<Column> col = slotReference.getColumn();
-            Optional<TableIf> table = slotReference.getTable();
+            Optional<Column> col = slotReference.getOriginalColumn();
+            Optional<TableIf> table = slotReference.getOriginalTable();
             if (col.isPresent() && table.isPresent()) {
                 return Collections.singleton(slot);
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
index 1ac5ea851cf..e3ea1a43b3a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/AddMinMax.java
@@ -277,7 +277,7 @@ public class AddMinMax implements 
ExpressionPatternRuleFactory {
     }
 
     private boolean isExprNeedAddMinMax(Expression expr) {
-        return (expr instanceof SlotReference) && ((SlotReference) 
expr).getColumn().isPresent();
+        return (expr instanceof SlotReference) && ((SlotReference) 
expr).getOriginalColumn().isPresent();
     }
 
     private Map<Expression, MinMaxValue> getExprMinMaxValues(ValueDesc value) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
index fa511631fc6..2208e94506d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
@@ -188,7 +188,7 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
                                     }
                                     Expression childExpr = 
filter.getConjuncts().iterator().next().children().get(0);
                                     if (childExpr instanceof SlotReference) {
-                                        Optional<Column> column = 
((SlotReference) childExpr).getColumn();
+                                        Optional<Column> column = 
((SlotReference) childExpr).getOriginalColumn();
                                         return 
column.map(Column::isDeleteSignColumn).orElse(false);
                                     }
                                     return false;
@@ -210,23 +210,19 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
                         })
             ),
             RuleType.STORAGE_LAYER_AGGREGATE_MINMAX_ON_UNIQUE.build(
-                    logicalAggregate(
-                            logicalProject(
-                                    logicalFilter(
-                                            
logicalOlapScan().when(this::isUniqueKeyTable))
-                                            .when(filter -> {
-                                                if 
(filter.getConjuncts().size() != 1) {
-                                                    return false;
-                                                }
-                                                Expression childExpr = 
filter.getConjuncts().iterator().next()
-                                                        .children().get(0);
-                                                if (childExpr instanceof 
SlotReference) {
-                                                    Optional<Column> column = 
((SlotReference) childExpr).getColumn();
-                                                    return 
column.map(Column::isDeleteSignColumn).orElse(false);
-                                                }
-                                                return false;
-                                            }))
-                        )
+                    
logicalAggregate(logicalProject(logicalFilter(logicalOlapScan().when(this::isUniqueKeyTable))
+                            .when(filter -> {
+                                if (filter.getConjuncts().size() != 1) {
+                                    return false;
+                                }
+                                Expression childExpr = 
filter.getConjuncts().iterator().next()
+                                        .children().get(0);
+                                if (childExpr instanceof SlotReference) {
+                                    Optional<Column> column = ((SlotReference) 
childExpr).getOriginalColumn();
+                                    return 
column.map(Column::isDeleteSignColumn).orElse(false);
+                                }
+                                return false;
+                            })))
                         .when(agg -> enablePushDownMinMaxOnUnique())
                         .when(agg -> agg.getGroupByExpressions().isEmpty())
                         .when(agg -> {
@@ -687,7 +683,7 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
                 SlotReference.class::isInstance);
         List<SlotReference> usedSlotInTable = (List<SlotReference>) 
Project.findProject(aggUsedSlots, outPutSlots);
         for (SlotReference slot : usedSlotInTable) {
-            Column column = slot.getColumn().get();
+            Column column = slot.getOriginalColumn().get();
             PrimitiveType colType = column.getType().getPrimitiveType();
             if (colType.isComplexType() || colType.isHllType() || 
colType.isBitmapType()) {
                 return false;
@@ -821,7 +817,7 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
                 logicalScan.getOutput());
 
         for (SlotReference slot : usedSlotInTable) {
-            Column column = slot.getColumn().get();
+            Column column = slot.getOriginalColumn().get();
             if (column.isAggregated()) {
                 return canNotPush;
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
index 4d006e557ac..a7aa4ebc6e3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalOlapScanToPhysicalOlapScan.java
@@ -86,7 +86,7 @@ public class LogicalOlapScanToPhysicalOlapScan extends 
OneImplementationRuleFact
                 List<ExprId> hashColumns = Lists.newArrayList();
                 for (Column column : 
hashDistributionInfo.getDistributionColumns()) {
                     for (Slot slot : output) {
-                        if (((SlotReference) 
slot).getColumn().get().getNameWithoutMvPrefix()
+                        if (((SlotReference) 
slot).getOriginalColumn().get().getNameWithoutMvPrefix()
                                 .equals(column.getName())) {
                             hashColumns.add(slot.getExprId());
                         }
@@ -98,7 +98,8 @@ public class LogicalOlapScanToPhysicalOlapScan extends 
OneImplementationRuleFact
                             // If the length of the column in the bucket key 
changes after DDL, the length cannot be
                             // determined. As a result, some bucket fields are 
lost in the query execution plan.
                             // So here we use the column name to avoid this 
problem
-                            if (((SlotReference) 
slot).getColumn().get().getName().equalsIgnoreCase(column.getName())) {
+                            if (((SlotReference) 
slot).getOriginalColumn().get().getName()
+                                    .equalsIgnoreCase(column.getName())) {
                                 hashColumns.add(slot.getExprId());
                             }
                         }
@@ -115,7 +116,8 @@ public class LogicalOlapScanToPhysicalOlapScan extends 
OneImplementationRuleFact
                         // If the length of the column in the bucket key 
changes after DDL, the length cannot be
                         // determined. As a result, some bucket fields are 
lost in the query execution plan.
                         // So here we use the column name to avoid this problem
-                        if (((SlotReference) 
slot).getColumn().get().getName().equalsIgnoreCase(column.getName())) {
+                        if (((SlotReference) 
slot).getOriginalColumn().get().getName()
+                                .equalsIgnoreCase(column.getName())) {
                             hashColumns.add(slot.getExprId());
                         }
                     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalPartitionTopNToPhysicalPartitionTopN.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalPartitionTopNToPhysicalPartitionTopN.java
index 410e68f3ec2..7af0ebca511 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalPartitionTopNToPhysicalPartitionTopN.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalPartitionTopNToPhysicalPartitionTopN.java
@@ -159,7 +159,7 @@ public class LogicalPartitionTopNToPhysicalPartitionTopN 
extends OneImplementati
                 return false;
             } else {
                 SlotReference slot = (SlotReference) expr;
-                if (!slot.getColumn().isPresent() || 
!slot.getTable().isPresent()) {
+                if (!slot.getOriginalColumn().isPresent() || 
!slot.getOriginalTable().isPresent()) {
                     return false;
                 }
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CheckPrivileges.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CheckPrivileges.java
index ebef2ecea21..8cb24cceb09 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CheckPrivileges.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/CheckPrivileges.java
@@ -96,8 +96,8 @@ public class CheckPrivileges extends ColumnPruning {
             Slot slot = idToSlot.get(requiredSlot.getExprId().asInt());
             if (slot != null) {
                 // don't check privilege for hidden column, e.g. 
__DORIS_DELETE_SIGN__
-                if (slot instanceof SlotReference && ((SlotReference) 
slot).getColumn().isPresent()
-                        && !((SlotReference) 
slot).getColumn().get().isVisible()) {
+                if (slot instanceof SlotReference && ((SlotReference) 
slot).getOriginalColumn().isPresent()
+                        && !((SlotReference) 
slot).getOriginalColumn().get().isVisible()) {
                     continue;
                 }
                 usedColumns.add(slot.getName());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ForeignKeyContext.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ForeignKeyContext.java
index 776f2697c89..52021622ff8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ForeignKeyContext.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ForeignKeyContext.java
@@ -123,10 +123,10 @@ public class ForeignKeyContext {
     }
 
     void putSlot(SlotReference slot) {
-        if (!slot.getColumn().isPresent()) {
+        if (!slot.getOriginalColumn().isPresent()) {
             return;
         }
-        Column c = slot.getColumn().get();
+        Column c = slot.getOriginalColumn().get();
         slotToColumn.put(slot, c);
     }
 
@@ -139,8 +139,8 @@ public class ForeignKeyContext {
     private boolean isHiddenConjunct(Expression expression) {
         for (Slot slot : expression.getInputSlots()) {
             if (slot instanceof SlotReference
-                    && ((SlotReference) slot).getColumn().isPresent()
-                    && ((SlotReference) 
slot).getColumn().get().isDeleteSignColumn()) {
+                    && ((SlotReference) slot).getOriginalColumn().isPresent()
+                    && ((SlotReference) 
slot).getOriginalColumn().get().isDeleteSignColumn()) {
                 return true;
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownFilterIntoSchemaScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownFilterIntoSchemaScan.java
index d8ab4cf62a9..2f2ab47b75d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownFilterIntoSchemaScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownFilterIntoSchemaScan.java
@@ -52,7 +52,7 @@ public class PushDownFilterIntoSchemaScan extends 
OneRewriteRuleFactory {
                 if (!(slot instanceof SlotReference)) {
                     continue;
                 }
-                Optional<Column> column = ((SlotReference) slot).getColumn();
+                Optional<Column> column = ((SlotReference) 
slot).getOriginalColumn();
                 if (!column.isPresent()) {
                     continue;
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SetPreAggStatus.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SetPreAggStatus.java
index 77b1a357370..fad3e02c0cf 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SetPreAggStatus.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/SetPreAggStatus.java
@@ -295,12 +295,12 @@ public class SetPreAggStatus extends 
DefaultPlanRewriter<Stack<SetPreAggStatus.P
                 } else if (aggFunc.children().size() == 1 && aggFunc.child(0) 
instanceof Slot) {
                     Slot aggSlot = (Slot) aggFunc.child(0);
                     if (aggSlot instanceof SlotReference
-                            && ((SlotReference) 
aggSlot).getColumn().isPresent()) {
-                        if (((SlotReference) 
aggSlot).getColumn().get().isKey()) {
+                            && ((SlotReference) 
aggSlot).getOriginalColumn().isPresent()) {
+                        if (((SlotReference) 
aggSlot).getOriginalColumn().get().isKey()) {
                             preAggStatus = 
OneKeySlotAggChecker.INSTANCE.check(aggFunc);
                         } else {
                             preAggStatus = 
OneValueSlotAggChecker.INSTANCE.check(aggFunc,
-                                    ((SlotReference) 
aggSlot).getColumn().get().getAggregationType());
+                                    ((SlotReference) 
aggSlot).getOriginalColumn().get().getAggregationType());
                         }
                     } else {
                         preAggStatus = PreAggStatus.off(
@@ -323,8 +323,8 @@ public class SetPreAggStatus extends 
DefaultPlanRewriter<Stack<SetPreAggStatus.P
             Set<SlotReference> keySlots = 
com.google.common.collect.Sets.newHashSetWithExpectedSize(slots.size());
             Set<SlotReference> valueSlots = 
com.google.common.collect.Sets.newHashSetWithExpectedSize(slots.size());
             for (Slot slot : slots) {
-                if (slot instanceof SlotReference && ((SlotReference) 
slot).getColumn().isPresent()) {
-                    if (((SlotReference) slot).getColumn().get().isKey()) {
+                if (slot instanceof SlotReference && ((SlotReference) 
slot).getOriginalColumn().isPresent()) {
+                    if (((SlotReference) 
slot).getOriginalColumn().get().isKey()) {
                         keySlots.add((SlotReference) slot);
                     } else {
                         valueSlots.add((SlotReference) slot);
@@ -577,14 +577,14 @@ public class SetPreAggStatus extends 
DefaultPlanRewriter<Stack<SetPreAggStatus.P
 
             private boolean isKeySlot(Expression expression) {
                 return expression instanceof SlotReference
-                        && ((SlotReference) expression).getColumn().isPresent()
-                        && ((SlotReference) 
expression).getColumn().get().isKey();
+                        && ((SlotReference) 
expression).getOriginalColumn().isPresent()
+                        && ((SlotReference) 
expression).getOriginalColumn().get().isKey();
             }
 
             private boolean isAggTypeMatched(Expression expression, 
AggregateType aggregateType) {
                 return expression instanceof SlotReference
-                        && ((SlotReference) expression).getColumn().isPresent()
-                        && ((SlotReference) expression).getColumn().get()
+                        && ((SlotReference) 
expression).getOriginalColumn().isPresent()
+                        && ((SlotReference) 
expression).getOriginalColumn().get()
                                 .getAggregationType() == aggregateType;
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/UnequalPredicateInfer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/UnequalPredicateInfer.java
index 83209d6691c..cab3350c89b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/UnequalPredicateInfer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/UnequalPredicateInfer.java
@@ -274,14 +274,14 @@ public class UnequalPredicateInfer {
             if (!checkSlot.isColumnFromTable()) {
                 return false;
             }
-            Column column = checkSlot.getColumn().get();
+            Column column = checkSlot.getOriginalColumn().get();
             if (column.isKey()) {
                 return true;
             }
-            if (!checkSlot.getTable().isPresent()) {
+            if (!checkSlot.getOriginalTable().isPresent()) {
                 return false;
             }
-            TableIf tableIf = checkSlot.getTable().get();
+            TableIf tableIf = checkSlot.getOriginalTable().get();
             if (tableIf.isPartitionedTable() && 
tableIf.isPartitionColumn(column.getName())) {
                 return true;
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/VariantSubPathPruning.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/VariantSubPathPruning.java
index 414dac1c95d..d6ea99aa496 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/VariantSubPathPruning.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/VariantSubPathPruning.java
@@ -69,7 +69,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -192,8 +191,8 @@ public class VariantSubPathPruning extends 
DefaultPlanRewriter<PruneContext> imp
                 if (slot.getDataType() instanceof VariantType
                         && 
context.slotToSubPathsMap.containsKey((SlotReference) slot)) {
                     Set<List<String>> subPaths = 
context.slotToSubPathsMap.get(slot);
-                    if (((SlotReference) slot).getColumn().isPresent()) {
-                        colToSubPaths.put(((SlotReference) 
slot).getColumn().get().getName(), subPaths);
+                    if (((SlotReference) 
slot).getOriginalColumn().isPresent()) {
+                        colToSubPaths.put(((SlotReference) 
slot).getOriginalColumn().get().getName(), subPaths);
                     }
                 }
             }
@@ -308,10 +307,7 @@ public class VariantSubPathPruning extends 
DefaultPlanRewriter<PruneContext> imp
                     }
                     SlotReference outputSlot = new 
SlotReference(StatementScopeIdGenerator.newExprId(),
                             entry.getValue().get(0).getName(), 
VariantType.INSTANCE,
-                            true, ImmutableList.of(),
-                            null,
-                            null,
-                            Optional.empty());
+                            true, ImmutableList.of());
                     outputs.add(outputSlot);
                     // update element to slot map
                     Map<List<String>, SlotReference> s = 
oriSlotToSubPathToSlot.computeIfAbsent(
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java
index 61f4bc5f203..0be9d8cf1c7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/FilterEstimation.java
@@ -169,14 +169,14 @@ public class FilterEstimation extends 
ExpressionVisitor<Statistics, EstimationCo
     @Override
     public Statistics visitComparisonPredicate(ComparisonPredicate cp, 
EstimationContext context) {
         Expression left = cp.left();
-        if (left instanceof SlotReference && ((SlotReference) 
left).getColumn().isPresent()) {
-            if ("__DORIS_DELETE_SIGN__".equals(((SlotReference) 
left).getColumn().get().getName())) {
+        if (left instanceof SlotReference && ((SlotReference) 
left).getOriginalColumn().isPresent()) {
+            if ("__DORIS_DELETE_SIGN__".equals(((SlotReference) 
left).getOriginalColumn().get().getName())) {
                 return context.statistics;
             }
         }
         Expression right = cp.right();
-        if (right instanceof SlotReference && ((SlotReference) 
right).getColumn().isPresent()) {
-            if ("__DORIS_DELETE_SIGN__".equals(((SlotReference) 
right).getColumn().get().getName())) {
+        if (right instanceof SlotReference && ((SlotReference) 
right).getOriginalColumn().isPresent()) {
+            if ("__DORIS_DELETE_SIGN__".equals(((SlotReference) 
right).getOriginalColumn().get().getName())) {
                 return context.statistics;
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index baa7162b75e..c8578f0810e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -597,7 +597,7 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
                 } else {
                     cache = getColumnStatsFromTableCache((CatalogRelation) 
olapScan, slot);
                 }
-                if (slot.getColumn().isPresent()) {
+                if (slot.getOriginalColumn().isPresent()) {
                     cache = updateMinMaxForPartitionKey(olapTable, 
selectedPartitionNames, slot, cache);
                 }
                 ColumnStatisticBuilder colStatsBuilder = new 
ColumnStatisticBuilder(cache,
@@ -642,7 +642,7 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
     private ColumnStatistic updateMinMaxForListPartitionKey(OlapTable 
olapTable,
             List<String> selectedPartitionNames,
             SlotReference slot, ColumnStatistic cache) {
-        int partitionColumnIdx = 
olapTable.getPartitionColumns().indexOf(slot.getColumn().get());
+        int partitionColumnIdx = 
olapTable.getPartitionColumns().indexOf(slot.getOriginalColumn().get());
         if (partitionColumnIdx != -1) {
             try {
                 LiteralExpr minExpr = null;
@@ -686,7 +686,7 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
     private ColumnStatistic updateMinMaxForTheFirstRangePartitionKey(OlapTable 
olapTable,
             List<String> selectedPartitionNames,
             SlotReference slot, ColumnStatistic cache) {
-        int partitionColumnIdx = 
olapTable.getPartitionColumns().indexOf(slot.getColumn().get());
+        int partitionColumnIdx = 
olapTable.getPartitionColumns().indexOf(slot.getOriginalColumn().get());
         // for multi partition keys, only the first partition key need to 
adjust min/max
         if (partitionColumnIdx == 0) {
             // update partition column min/max by partition info
@@ -777,7 +777,7 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
 
     private boolean isVisibleSlotReference(Slot slot) {
         if (slot instanceof SlotReference) {
-            Optional<Column> colOpt = ((SlotReference) slot).getColumn();
+            Optional<Column> colOpt = ((SlotReference) 
slot).getOriginalColumn();
             if (colOpt.isPresent()) {
                 return colOpt.get().isVisible();
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
index 48a98eb3ee1..5bd08487025 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
@@ -89,21 +89,12 @@ public class Alias extends NamedExpression implements 
UnaryExpression {
     public Slot toSlot() throws UnboundException {
         SlotReference slotReference = child() instanceof SlotReference
                 ? (SlotReference) child() : null;
-
-        Supplier<Optional<String>> internalName = nameFromChild
-                        ? Suppliers.memoize(() -> 
Optional.of(child().toString()))
-                        : () -> Optional.of(name.get());
         return new SlotReference(exprId, name, child().getDataType(), 
child().nullable(), qualifier,
-                slotReference != null
-                        ? ((SlotReference) child()).getTable().orElse(null)
-                        : null,
-                slotReference != null
-                        ? slotReference.getColumn().orElse(null)
-                        : null,
-                internalName,
-                slotReference != null
-                        ? slotReference.getSubPath()
-                        : ImmutableList.of(), Optional.empty()
+                slotReference != null ? ((SlotReference) 
child()).getOriginalTable().orElse(null) : null,
+                slotReference != null ? 
slotReference.getOriginalColumn().orElse(null) : null,
+                slotReference != null ? ((SlotReference) 
child()).getOneLevelTable().orElse(null) : null,
+                slotReference != null ? 
slotReference.getOriginalColumn().orElse(null) : null,
+                slotReference != null ? slotReference.getSubPath() : 
ImmutableList.of(), Optional.empty()
         );
     }
 
@@ -160,12 +151,7 @@ public class Alias extends NamedExpression implements 
UnaryExpression {
     @Override
     public Alias withChildren(List<Expression> children) {
         Preconditions.checkArgument(children.size() == 1);
-        if (nameFromChild) {
-            return new Alias(exprId, children,
-                    Suppliers.memoize(() -> children.get(0).toSql()), 
qualifier, nameFromChild);
-        } else {
-            return new Alias(exprId, children, name, qualifier, nameFromChild);
-        }
+        return new Alias(exprId, children, name, qualifier, nameFromChild);
     }
 
     public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
index eca81d82028..b763d6741ab 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ArrayItemReference.java
@@ -29,7 +29,6 @@ import com.google.common.collect.ImmutableList;
 
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 
 /**
  * it is item from array, which used in lambda function
@@ -144,7 +143,7 @@ public class ArrayItemReference extends NamedExpression 
implements ExpectsInputT
          */
         public ArrayItemSlot(ExprId exprId, String name, DataType dataType, 
boolean nullable) {
             super(exprId, name, dataType, nullable, ImmutableList.of(),
-                    null, null, Optional.empty(), ImmutableList.of());
+                    null, null, null, null, ImmutableList.of());
         }
 
         @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
index 416e1f80c69..21d461c5746 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
@@ -398,12 +398,12 @@ public abstract class Expression extends 
AbstractTreeNode<Expression> implements
     }
 
     public boolean isColumnFromTable() {
-        return (this instanceof SlotReference) && ((SlotReference) 
this).getColumn().isPresent();
+        return (this instanceof SlotReference) && ((SlotReference) 
this).getOriginalColumn().isPresent();
     }
 
     public boolean isKeyColumnFromTable() {
-        return (this instanceof SlotReference) && ((SlotReference) 
this).getColumn().isPresent()
-                && ((SlotReference) this).getColumn().get().isKey();
+        return (this instanceof SlotReference) && ((SlotReference) 
this).getOriginalColumn().isPresent()
+                && ((SlotReference) this).getOriginalColumn().get().isKey();
     }
 
     /** containsNullLiteralChildren */
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Slot.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Slot.java
index 40cf360ab46..d2b40ecc2d6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Slot.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Slot.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.nereids.trees.expressions;
 
+import org.apache.doris.catalog.Column;
+import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.Pair;
 import org.apache.doris.nereids.trees.expressions.shape.LeafExpression;
 import org.apache.doris.nereids.types.DataType;
@@ -56,15 +58,15 @@ public abstract class Slot extends NamedExpression 
implements LeafExpression {
         throw new RuntimeException("Do not implement");
     }
 
-    public Slot withName(String name) {
+    public Slot withOneLevelTableAndColumnAndQualifier(TableIf oneLevelTable, 
Column column, List<String> qualifier) {
         throw new RuntimeException("Do not implement");
     }
 
-    public Slot withExprId(ExprId exprId) {
+    public Slot withName(String name) {
         throw new RuntimeException("Do not implement");
     }
 
-    public String getInternalName() {
+    public Slot withExprId(ExprId exprId) {
         throw new RuntimeException("Do not implement");
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SlotReference.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SlotReference.java
index 6da77da0fef..725d1fdf1f1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SlotReference.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SlotReference.java
@@ -26,7 +26,6 @@ import org.apache.doris.nereids.types.DataType;
 import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
-import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableList;
 
 import java.util.List;
@@ -49,48 +48,48 @@ public class SlotReference extends Slot {
     // e.g. For accessing variant["a"]["b"], the parsed paths is ["a", "b"]
     protected final List<String> subPath;
 
-    // the unique string representation of a SlotReference
-    // different SlotReference will have different internalName
-    // TODO: remove this member variable after mv selection is refactored
-    protected final Supplier<Optional<String>> internalName;
+    // table and column from the original table, fall through views
+    private final TableIf originalTable;
+    private final Column originalColumn;
 
-    private final TableIf table;
-    private final Column column;
+    // table and column from one level table/view, do not fall through views. 
use for compatible with MySQL protocol
+    // that need return original table and name for view not its original 
table if u query a view
+    private final TableIf oneLevelTable;
+    private final Column oneLevelColumn;
 
     public SlotReference(String name, DataType dataType) {
         this(StatementScopeIdGenerator.newExprId(), name, dataType, true, 
ImmutableList.of(),
-                null, null, Optional.empty(), ImmutableList.of());
+                null, null, null, null, ImmutableList.of());
     }
 
     public SlotReference(String name, DataType dataType, boolean nullable) {
         this(StatementScopeIdGenerator.newExprId(), name, dataType, nullable, 
ImmutableList.of(),
-                null, null, Optional.empty(), ImmutableList.of());
+                null, null, null, null, ImmutableList.of());
     }
 
     public SlotReference(String name, DataType dataType, boolean nullable, 
List<String> qualifier) {
         this(StatementScopeIdGenerator.newExprId(), name, dataType, nullable,
-                qualifier, null, null, Optional.empty(), ImmutableList.of());
+                qualifier, null, null, null, null, ImmutableList.of());
     }
 
     public SlotReference(ExprId exprId, String name, DataType dataType, 
boolean nullable, List<String> qualifier) {
-        this(exprId, name, dataType, nullable, qualifier, null, null, 
Optional.empty(), ImmutableList.of());
+        this(exprId, name, dataType, nullable, qualifier, null, null, null, 
null, ImmutableList.of());
     }
 
-    public SlotReference(ExprId exprId, String name, DataType dataType, 
boolean nullable,
-            List<String> qualifier, @Nullable TableIf table, @Nullable Column 
column) {
-        this(exprId, name, dataType, nullable, qualifier, table, column, 
Optional.empty(), ImmutableList.of());
+    public SlotReference(ExprId exprId, String name, DataType dataType, 
boolean nullable, List<String> qualifier,
+            @Nullable TableIf originalTable, @Nullable Column originalColumn,
+            @Nullable TableIf oneLevelTable, @Nullable Column oneLevelColumn) {
+        this(exprId, name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn, 
ImmutableList.of());
     }
 
-    public SlotReference(ExprId exprId, String name, DataType dataType, 
boolean nullable,
-            List<String> qualifier, @Nullable TableIf table, @Nullable Column 
column, Optional<String> internalName) {
-        this(exprId, name, dataType, nullable, qualifier, table, column, 
internalName, ImmutableList.of());
-    }
-
-    public SlotReference(ExprId exprId, String name, DataType dataType, 
boolean nullable,
-            List<String> qualifier, @Nullable TableIf table, @Nullable Column 
column,
-            Optional<String> internalName, List<String> subColLabels) {
-        this(exprId, () -> name, dataType, nullable, qualifier, table, column,
-                buildInternalName(() -> name, subColLabels, internalName), 
subColLabels, Optional.empty());
+    public SlotReference(ExprId exprId, String name, DataType dataType, 
boolean nullable, List<String> qualifier,
+            @Nullable TableIf originalTable, @Nullable Column originalColumn,
+            @Nullable TableIf oneLevelTable, @Nullable Column oneLevelColumn,
+            List<String> subPath) {
+        this(exprId, () -> name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, Optional.empty());
     }
 
     /**
@@ -101,14 +100,13 @@ public class SlotReference extends Slot {
      * @param dataType slot reference logical data type
      * @param nullable true if nullable
      * @param qualifier slot reference qualifier
-     * @param column the column which this slot come from
-     * @param internalName the internalName of this slot
+     * @param originalColumn the column which this slot come from
      * @param subPath subColumn access labels
      */
     public SlotReference(ExprId exprId, Supplier<String> name, DataType 
dataType, boolean nullable,
-            List<String> qualifier, @Nullable TableIf table, @Nullable Column 
column,
-            Supplier<Optional<String>> internalName, List<String> subPath,
-            Optional<Pair<Integer, Integer>> indexInSql) {
+            List<String> qualifier, @Nullable TableIf originalTable, @Nullable 
Column originalColumn,
+            @Nullable TableIf oneLevelTable, Column oneLevelColumn,
+            List<String> subPath, Optional<Pair<Integer, Integer>> indexInSql) 
{
         super(indexInSql);
         this.exprId = exprId;
         this.name = name;
@@ -116,10 +114,11 @@ public class SlotReference extends Slot {
         this.qualifier = Utils.fastToImmutableList(
                 Objects.requireNonNull(qualifier, "qualifier can not be 
null"));
         this.nullable = nullable;
-        this.table = table;
-        this.column = column;
+        this.originalTable = originalTable;
+        this.originalColumn = originalColumn;
+        this.oneLevelTable = oneLevelTable;
+        this.oneLevelColumn = oneLevelColumn;
         this.subPath = Objects.requireNonNull(subPath, "subPath can not be 
null");
-        this.internalName = internalName;
     }
 
     public static SlotReference of(String name, DataType type) {
@@ -132,16 +131,13 @@ public class SlotReference extends Slot {
      * @param qualifier the qualifier of SlotReference
      */
     public static SlotReference fromColumn(TableIf table, Column column, 
List<String> qualifier) {
-        DataType dataType = DataType.fromCatalogType(column.getType());
-        return new SlotReference(StatementScopeIdGenerator.newExprId(), 
column::getName, dataType,
-                column.isAllowNull(), qualifier, table, column,
-                () -> Optional.of(column.getName()), ImmutableList.of(), 
Optional.empty());
+        return fromColumn(table, column, column.getName(), qualifier);
     }
 
     public static SlotReference fromColumn(TableIf table, Column column, 
String name, List<String> qualifier) {
         DataType dataType = DataType.fromCatalogType(column.getType());
         return new SlotReference(StatementScopeIdGenerator.newExprId(), name, 
dataType,
-            column.isAllowNull(), qualifier, table, column, Optional.empty(), 
ImmutableList.of());
+            column.isAllowNull(), qualifier, table, column, table, column, 
ImmutableList.of());
     }
 
     @Override
@@ -169,17 +165,20 @@ public class SlotReference extends Slot {
         return nullable;
     }
 
-    @Override
-    public String getInternalName() {
-        return internalName.get().get();
+    public Optional<TableIf> getOriginalTable() {
+        return Optional.ofNullable(originalTable);
     }
 
-    public Optional<Column> getColumn() {
-        return Optional.ofNullable(column);
+    public Optional<Column> getOriginalColumn() {
+        return Optional.ofNullable(originalColumn);
     }
 
-    public Optional<TableIf> getTable() {
-        return Optional.ofNullable(table);
+    public Optional<TableIf> getOneLevelTable() {
+        return Optional.ofNullable(oneLevelTable);
+    }
+
+    public Optional<Column> getOneLevelColumn() {
+        return Optional.ofNullable(oneLevelColumn);
     }
 
     @Override
@@ -258,8 +257,9 @@ public class SlotReference extends Slot {
         if (this.nullable == nullable) {
             return this;
         }
-        return new SlotReference(exprId, name, dataType, nullable,
-                qualifier, table, column, internalName, subPath, 
indexInSqlString);
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, indexInSqlString);
     }
 
     @Override
@@ -267,14 +267,16 @@ public class SlotReference extends Slot {
         if (this.nullable == nullable && this.dataType.equals(dataType)) {
             return this;
         }
-        return new SlotReference(exprId, name, dataType, nullable,
-                qualifier, table, column, internalName, subPath, 
indexInSqlString);
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, indexInSqlString);
     }
 
     @Override
     public SlotReference withQualifier(List<String> qualifier) {
-        return new SlotReference(exprId, name, dataType, nullable, qualifier, 
table, column, internalName, subPath,
-                indexInSqlString);
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, indexInSqlString);
     }
 
     @Override
@@ -282,35 +284,46 @@ public class SlotReference extends Slot {
         if (this.name.get().equals(name)) {
             return this;
         }
-        return new SlotReference(
-                exprId, () -> name, dataType, nullable, qualifier, table, 
column, internalName, subPath,
-                indexInSqlString);
+        return new SlotReference(exprId, () -> name, dataType, nullable, 
qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, indexInSqlString);
     }
 
     @Override
     public SlotReference withExprId(ExprId exprId) {
-        return new SlotReference(exprId, name, dataType, nullable, qualifier, 
table, column, internalName, subPath,
-                indexInSqlString);
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, indexInSqlString);
     }
 
     public SlotReference withSubPath(List<String> subPath) {
-        return new SlotReference(exprId, name, dataType, !subPath.isEmpty() || 
nullable,
-                qualifier, table, column, internalName, subPath, 
indexInSqlString);
+        return new SlotReference(exprId, name, dataType, !subPath.isEmpty() || 
nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, indexInSqlString);
     }
 
     @Override
     public Slot withIndexInSql(Pair<Integer, Integer> index) {
-        return new SlotReference(exprId, name, dataType, nullable, qualifier, 
table, column, internalName, subPath,
-                Optional.ofNullable(index));
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, originalColumn, oneLevelTable, oneLevelColumn,
+                subPath, Optional.ofNullable(index));
     }
 
     public SlotReference withColumn(Column column) {
-        return new SlotReference(exprId, name, dataType, nullable, qualifier, 
table, column, internalName, subPath,
-                indexInSqlString);
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, column, oneLevelTable, column,
+                subPath, indexInSqlString);
+    }
+
+    @Override
+    public Slot withOneLevelTableAndColumnAndQualifier(TableIf oneLevelTable, 
Column column, List<String> qualifier) {
+        return new SlotReference(exprId, name, dataType, nullable, qualifier,
+                originalTable, column, oneLevelTable, column,
+                subPath, indexInSqlString);
     }
 
     public boolean isVisible() {
-        return column == null || column.isVisible();
+        return originalColumn == null || originalColumn.isVisible();
     }
 
     public List<String> getSubPath() {
@@ -321,24 +334,11 @@ public class SlotReference extends Slot {
         return !subPath.isEmpty();
     }
 
-    private static Supplier<Optional<String>> buildInternalName(
-            Supplier<String> name, List<String> subColLabels, Optional<String> 
internalName) {
-        if (subColLabels != null && !subColLabels.isEmpty()) {
-            // Modify internal name to distinguish from different sub-columns 
of same top level column,
-            // using the `.` to connect each part of paths
-            return Suppliers.memoize(() ->
-                    Optional.of(internalName.orElse(name.get()) + 
String.join(".", subColLabels)));
-        } else {
-            return Suppliers.memoize(() ->
-                    internalName.isPresent() ? internalName : 
Optional.of(name.get()));
-        }
-    }
-
     public String getQualifiedNameWithBackquote() throws UnboundException {
         return Utils.qualifiedNameWithBackquote(getQualifier(), getName());
     }
 
     public boolean hasAutoInc() {
-        return column != null ? column.isAutoInc() : false;
+        return originalColumn != null ? originalColumn.isAutoInc() : false;
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/AnyValue.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/AnyValue.java
index e9726ff9ff2..785e073bfaa 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/AnyValue.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/AnyValue.java
@@ -51,7 +51,7 @@ public class AnyValue extends NullableAggregateFunction
      * constructor with 1 argument.
      */
     public AnyValue(boolean distinct, Expression arg) {
-        this(distinct, false, arg);
+        this(false, false, arg);
     }
 
     private AnyValue(boolean distinct, boolean alwaysNullable, Expression arg) 
{
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
index f92a3b6103b..b7b34ed6185 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AddConstraintCommand.java
@@ -100,9 +100,9 @@ public class AddConstraintCommand extends Command 
implements ForwardWithSync {
         ImmutableList<String> columns = analyzedPlan.getOutput().stream()
                 .map(s -> {
                     Preconditions.checkArgument(s instanceof SlotReference
-                                    && ((SlotReference) 
s).getColumn().isPresent(),
+                                    && ((SlotReference) 
s).getOriginalColumn().isPresent(),
                             "Constraint contains a invalid slot ", s);
-                    return ((SlotReference) s).getColumn().get().getName();
+                    return ((SlotReference) 
s).getOriginalColumn().get().getName();
                 }).collect(ImmutableList.toImmutableList());
         return Pair.of(columns, catalogRelation.getTable());
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateMaterializedViewCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateMaterializedViewCommand.java
index 2f5d858f75b..92cf266f584 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateMaterializedViewCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateMaterializedViewCommand.java
@@ -289,7 +289,7 @@ public class CreateMaterializedViewCommand extends Command 
implements ForwardWit
                 Set<Slot> slots = expr.getInputSlots();
                 for (Slot slot : slots) {
                     if (slot instanceof SlotReference) {
-                        Column column = ((SlotReference) 
slot).getColumn().orElse(null);
+                        Column column = ((SlotReference) 
slot).getOriginalColumn().orElse(null);
                         if (column != null) {
                             if (column.isVisible()) {
                                 AggregateType aggregateType = 
column.getAggregationType();
@@ -729,7 +729,7 @@ public class CreateMaterializedViewCommand extends Command 
implements ForwardWit
 
         private AggregateType getAggTypeFromSlot(Slot slot) {
             if (slot instanceof SlotReference) {
-                Column column = ((SlotReference) 
slot).getColumn().orElse(null);
+                Column column = ((SlotReference) 
slot).getOriginalColumn().orElse(null);
                 if (column != null && column.isVisible()) {
                     return column.getAggregationType();
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
index f76d272aded..16a384edaac 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/CreateTableCommand.java
@@ -124,8 +124,8 @@ public class CreateTableCommand extends Command implements 
NeedAuditEncryption,
                 dataType = TypeCoercionUtils.replaceSpecifiedType(dataType,
                         DecimalV2Type.class, DecimalV2Type.SYSTEM_DEFAULT);
                 if (s.isColumnFromTable()) {
-                    if ((!((SlotReference) s).getTable().isPresent()
-                            || !((SlotReference) 
s).getTable().get().isManagedTable())) {
+                    if ((!((SlotReference) s).getOriginalTable().isPresent()
+                            || !((SlotReference) 
s).getOriginalTable().get().isManagedTable())) {
                         if 
(createTableInfo.getPartitionTableInfo().inIdentifierPartitions(s.getName())
                                 || (createTableInfo.getDistribution() != null
                                 && 
createTableInfo.getDistribution().inDistributionColumns(s.getName()))) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
index 896f7520683..146e03189a3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
@@ -297,10 +297,10 @@ public class DeleteFromCommand extends Command implements 
ForwardWithSync, Expla
 
     private void checkColumn(Set<String> tableColumns, SlotReference 
slotReference, OlapTable table) {
         // 0. must slot from table
-        if (!slotReference.getColumn().isPresent()) {
+        if (!slotReference.getOriginalColumn().isPresent()) {
             throw new AnalysisException("");
         }
-        Column column = slotReference.getColumn().get();
+        Column column = slotReference.getOriginalColumn().get();
 
         if (Column.DELETE_SIGN.equalsIgnoreCase(column.getName())) {
             return;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
index 483c37a8388..e1446dde9bd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterViewInfo.java
@@ -44,10 +44,10 @@ public class AlterViewInfo extends BaseViewInfo {
     private final String comment;
 
     /** constructor*/
-    public AlterViewInfo(TableNameInfo viewName,
+    public AlterViewInfo(TableNameInfo viewName, String comment,
             String querySql, List<SimpleColumnDefinition> 
simpleColumnDefinitions) {
         super(viewName, querySql, simpleColumnDefinitions);
-        this.comment = null;
+        this.comment = comment;
     }
 
     public AlterViewInfo(TableNameInfo viewName, String comment) {
@@ -78,7 +78,7 @@ public class AlterViewInfo extends BaseViewInfo {
             
ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLE_ACCESS_DENIED_ERROR,
                     PrivPredicate.ALTER.getPrivs().toString(), 
viewName.getTbl());
         }
-        if (comment != null) {
+        if (querySql == null) {
             // Modify comment only.
             return;
         }
@@ -91,7 +91,7 @@ public class AlterViewInfo extends BaseViewInfo {
 
     /**translateToLegacyStmt*/
     public AlterViewStmt translateToLegacyStmt(ConnectContext ctx) {
-        if (comment != null) {
+        if (querySql == null) {
             return new AlterViewStmt(viewName.transferToTableName(), comment);
         }
         // expand star(*) in project list and replace table name with qualifier
@@ -103,7 +103,7 @@ public class AlterViewInfo extends BaseViewInfo {
         for (SimpleColumnDefinition def : simpleColumnDefinitions) {
             cols.add(def.translateToColWithComment());
         }
-        AlterViewStmt alterViewStmt = new 
AlterViewStmt(viewName.transferToTableName(), cols, null);
+        AlterViewStmt alterViewStmt = new 
AlterViewStmt(viewName.transferToTableName(), cols, null, comment);
         alterViewStmt.setInlineViewDef(rewrittenSql);
         alterViewStmt.setFinalColumns(finalCols);
         return alterViewStmt;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
index d3cd4293f41..d0605753ae9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateViewInfo.java
@@ -31,6 +31,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
 import org.apache.doris.nereids.util.PlanUtils;
 import org.apache.doris.qe.ConnectContext;
 
+import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
 import java.util.List;
@@ -49,7 +50,7 @@ public class CreateViewInfo extends BaseViewInfo {
         super(viewName, querySql, simpleColumnDefinitions);
         this.ifNotExists = ifNotExists;
         this.orReplace = orReplace;
-        this.comment = comment;
+        this.comment = Strings.nullToEmpty(comment);
     }
 
     /** init */
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java
index 415fdddf80b..2941392ea71 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEConsumer.java
@@ -108,9 +108,10 @@ public class LogicalCTEConsumer extends LogicalRelation 
implements BlockFuncDeps
         return new SlotReference(StatementScopeIdGenerator.newExprId(),
                 producerOutputSlot.getName(), producerOutputSlot.getDataType(),
                 producerOutputSlot.nullable(), ImmutableList.of(cteName),
-                slotRef != null ? (slotRef.getTable().isPresent() ? 
slotRef.getTable().get() : null) : null,
-                slotRef != null ? (slotRef.getColumn().isPresent() ? 
slotRef.getColumn().get() : null) : null,
-                slotRef != null ? Optional.of(slotRef.getInternalName()) : 
Optional.empty());
+                slotRef != null ? slotRef.getOriginalTable().orElse(null) : 
null,
+                slotRef != null ? slotRef.getOriginalColumn().orElse(null) : 
null,
+                slotRef != null ? slotRef.getOneLevelTable().orElse(null) : 
null,
+                slotRef != null ? slotRef.getOneLevelColumn().orElse(null) : 
null);
     }
 
     public Map<Slot, Slot> getConsumerToProducerOutputMap() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
index d6e90804830..f9c7438c20c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
@@ -188,7 +188,7 @@ public abstract class LogicalCatalogRelation extends 
LogicalRelation implements
                 continue;
             }
             SlotReference slotRef = (SlotReference) slot;
-            if (slotRef.getColumn().isPresent() && 
columns.contains(slotRef.getColumn().get())) {
+            if (slotRef.getOriginalColumn().isPresent() && 
columns.contains(slotRef.getOriginalColumn().get())) {
                 slotSet.add(slotRef);
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
index 3d095287c44..d28ba05220f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java
@@ -608,7 +608,7 @@ public class LogicalOlapScan extends LogicalCatalogRelation 
implements OlapScan
                     continue;
                 }
                 SlotReference slotRef = (SlotReference) slot;
-                if (slotRef.getColumn().isPresent() && 
slotRef.getColumn().get().isKey()) {
+                if (slotRef.getOriginalColumn().isPresent() && 
slotRef.getOriginalColumn().get().isKey()) {
                     uniqSlots.add(slot);
                 }
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
index 0eaec7c3c18..c9be2ae5b52 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
@@ -31,6 +31,7 @@ import 
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.collect.ImmutableList;
+import org.apache.commons.collections.CollectionUtils;
 
 import java.util.List;
 import java.util.Objects;
@@ -81,13 +82,13 @@ public class LogicalView<BODY extends Plan> extends 
LogicalUnary<BODY> {
 
     @Override
     public Plan withGroupExpression(Optional<GroupExpression> groupExpression) 
{
-        return new LogicalView(view, child());
+        return new LogicalView<>(view, child());
     }
 
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
-        return new LogicalView(view, child());
+        return new LogicalView<>(view, child());
     }
 
     @Override
@@ -123,8 +124,15 @@ public class LogicalView<BODY extends Plan> extends 
LogicalUnary<BODY> {
         List<String> fullQualifiers = this.view.getFullQualifiers();
         for (int i = 0; i < childOutput.size(); i++) {
             Slot originSlot = childOutput.get(i);
-            Slot qualified = originSlot
-                    .withQualifier(fullQualifiers);
+            Slot qualified;
+            // ATTN: because bug intro by #40715, after replace view, full 
schema will be empty or null.
+            //   So, we must just here to avoid NPE or out of bound exception.
+            if (CollectionUtils.isEmpty(view.getFullSchema())) {
+                qualified = originSlot.withQualifier(fullQualifiers);
+            } else {
+                qualified = originSlot
+                        .withOneLevelTableAndColumnAndQualifier(view, 
view.getFullSchema().get(i), fullQualifiers);
+            }
             currentOutput.add(qualified);
         }
         return currentOutput.build();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCatalogRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCatalogRelation.java
index 4a4b6b61ffd..34970b25a0c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCatalogRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCatalogRelation.java
@@ -181,7 +181,7 @@ public abstract class PhysicalCatalogRelation extends 
PhysicalRelation implement
                 continue;
             }
             SlotReference slotRef = (SlotReference) slot;
-            if (slotRef.getColumn().isPresent() && 
columns.contains(slotRef.getColumn().get())) {
+            if (slotRef.getOriginalColumn().isPresent() && 
columns.contains(slotRef.getOriginalColumn().get())) {
                 slotSet.add(slotRef);
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/PlanUtils.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/PlanUtils.java
index fd04250c0fe..fe3a7db085a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/PlanUtils.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/PlanUtils.java
@@ -286,8 +286,8 @@ public class PlanUtils {
      */
     public static boolean isColumnRef(Expression expr) {
         return expr instanceof SlotReference
-                && ((SlotReference) expr).getColumn().isPresent()
-                && ((SlotReference) expr).getTable().isPresent();
+                && ((SlotReference) expr).getOriginalColumn().isPresent()
+                && ((SlotReference) expr).getOriginalTable().isPresent();
     }
 
     /**
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/qe/PointQueryExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/PointQueryExecutor.java
index 6010c7e0b17..5925b428a16 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/PointQueryExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/PointQueryExecutor.java
@@ -146,7 +146,7 @@ public class PointQueryExecutor implements CoordInterface {
         // update conjuncts
         Map<String, Expr> colNameToConjunct = Maps.newHashMap();
         for (Entry<PlaceholderId, SlotReference> entry : 
statementContext.getIdToComparisonSlot().entrySet()) {
-            String colName = entry.getValue().getColumn().get().getName();
+            String colName = 
entry.getValue().getOriginalColumn().get().getName();
             Expr conjunctVal = ((Literal)  
statementContext.getIdToPlaceholderRealExpr()
                     .get(entry.getKey())).toLegacyLiteral();
             colNameToConjunct.put(colName, conjunctVal);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index ebc892f038d..0f62f695aa0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -2884,11 +2884,11 @@ public class StmtExecutor {
             for (Slot slot : output) {
                 serializer.reset();
                 if (slot instanceof SlotReference
-                        && ((SlotReference) slot).getColumn().isPresent()
-                        && ((SlotReference) slot).getTable().isPresent()) {
+                        && ((SlotReference) 
slot).getOriginalColumn().isPresent()
+                        && ((SlotReference) 
slot).getOriginalTable().isPresent()) {
                     SlotReference slotReference = (SlotReference) slot;
-                    TableIf table = slotReference.getTable().get();
-                    Column column = slotReference.getColumn().get();
+                    TableIf table = slotReference.getOriginalTable().get();
+                    Column column = slotReference.getOriginalColumn().get();
                     DatabaseIf database = table.getDatabase();
                     String dbName = database == null ? "" : 
database.getFullName();
                     serializer.writeField(dbName, table.getName(), column, 
false);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
index 8b34ac4de18..b0a91736761 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
@@ -1749,8 +1749,8 @@ public class AnalysisManager implements Writable {
             if (!(s instanceof SlotReference)) {
                 return;
             }
-            Optional<Column> optionalColumn = ((SlotReference) s).getColumn();
-            Optional<TableIf> optionalTable = ((SlotReference) s).getTable();
+            Optional<Column> optionalColumn = ((SlotReference) 
s).getOriginalColumn();
+            Optional<TableIf> optionalTable = ((SlotReference) 
s).getOriginalTable();
             if (optionalColumn.isPresent() && optionalTable.isPresent()
                     && 
!StatisticsUtil.isUnsupportedType(optionalColumn.get().getType())) {
                 TableIf table = optionalTable.get();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
index 99537a51a2e..ed74babc43c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
@@ -200,7 +200,7 @@ public class Statistics {
         boolean allUnknown = true;
         for (Slot slot : slots) {
             if (slot instanceof SlotReference) {
-                Optional<Column> colOpt = ((SlotReference) slot).getColumn();
+                Optional<Column> colOpt = ((SlotReference) 
slot).getOriginalColumn();
                 if (colOpt.isPresent() && colOpt.get().isVisible()) {
                     ColumnStatistic colStats = 
expressionToColumnStats.get(slot);
                     if (colStats != null && !colStats.isUnKnown) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/hbo/ScanPlanStatistics.java
 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/hbo/ScanPlanStatistics.java
index 117dd838bd8..31835dded5a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/hbo/ScanPlanStatistics.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/hbo/ScanPlanStatistics.java
@@ -75,8 +75,8 @@ public class ScanPlanStatistics extends PlanStatistics {
             for (Expression expr : tableFilterSet) {
                 Set<Slot> inputSlot = expr.getInputSlots();
                 if (inputSlot.size() == 1 && inputSlot.iterator().next() 
instanceof SlotReference
-                        && ((SlotReference) 
inputSlot.iterator().next()).getColumn().isPresent()) {
-                    Column filterColumn = ((SlotReference) 
inputSlot.iterator().next()).getColumn().get();
+                        && ((SlotReference) 
inputSlot.iterator().next()).getOriginalColumn().isPresent()) {
+                    Column filterColumn = ((SlotReference) 
inputSlot.iterator().next()).getOriginalColumn().get();
                     if 
(partitionInfo.getPartitionColumns().contains(filterColumn)) {
                         partitionColumnPredicates.add(expr);
                     } else {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPlanUtilTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPlanUtilTest.java
index 110f457cd00..25e73b37506 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPlanUtilTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPlanUtilTest.java
@@ -144,7 +144,7 @@ public class MTMVPlanUtilTest extends SqlTestBase {
                 minTimes = 0;
                 result = true;
 
-                slot.getTable();
+                slot.getOriginalTable();
                 minTimes = 0;
                 result = Optional.empty();
 
@@ -171,7 +171,7 @@ public class MTMVPlanUtilTest extends SqlTestBase {
         // test managed table
         new Expectations() {
             {
-                slot.getTable();
+                slot.getOriginalTable();
                 minTimes = 0;
                 result = Optional.of(slotTable);
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
index d26417247eb..181ab5ba08c 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
@@ -81,8 +81,9 @@ public class DeriveStatsJobTest {
         long tableId1 = 0;
         OlapTable table1 = PlanConstructor.newOlapTable(tableId1, "t1", 0);
         List<String> qualifier = ImmutableList.of("test", "t");
-        slot1 = new SlotReference(new ExprId(1), "c1", IntegerType.INSTANCE, 
true, qualifier, table1,
-                    new Column("e", PrimitiveType.INT));
+        slot1 = new SlotReference(new ExprId(1), "c1", IntegerType.INSTANCE, 
true, qualifier,
+                table1, new Column("e", PrimitiveType.INT),
+                table1, new Column("e", PrimitiveType.INT));
         new Expectations() {{
                 ConnectContext.get();
                 result = context;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
index e551a1e0bf6..28993a66c5c 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/AnalyzeWhereSubqueryTest.java
@@ -169,7 +169,7 @@ public class AnalyzeWhereSubqueryTest extends 
TestWithFeService implements MemoP
                                                                             
"test",
                                                                             
"t7")))).withAlwaysNullable(
                                                                                
     true),
-                                                    "sum(k3)"))))
+                                                    "sum(t7.k3)"))))
                                 )
                         ).when(FieldChecker.check("correlationSlot", 
ImmutableList.of(
                                 new SlotReference(new ExprId(1), "k2", 
BigIntType.INSTANCE, true,
@@ -195,7 +195,7 @@ public class AnalyzeWhereSubqueryTest extends 
TestWithFeService implements MemoP
                                                 new Alias(new ExprId(7), (new 
Sum(
                                                         new SlotReference(new 
ExprId(4), "k3", BigIntType.INSTANCE, true,
                                                                 
ImmutableList.of("test", "t7")))).withAlwaysNullable(true),
-                                                        "sum(k3)"),
+                                                        "sum(t7.k3)"),
                                                 new SlotReference(new 
ExprId(6), "v2", BigIntType.INSTANCE, true,
                                                         
ImmutableList.of("test", "t7"))
                                         )))
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTestHelper.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTestHelper.java
index 1bf2d1432a9..3763c6145d8 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTestHelper.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/ExpressionRewriteTestHelper.java
@@ -113,7 +113,7 @@ public abstract class ExpressionRewriteTestHelper extends 
ExpressionRewrite {
             List<String> qualifier = ImmutableList.of();
             DataType dataType = getType(name.charAt(0));
             Column column = new Column(name, dataType.toCatalogDataType());
-            mem.putIfAbsent(name, new SlotReference(exprId, name, dataType, 
true, qualifier, null, column));
+            mem.putIfAbsent(name, new SlotReference(exprId, name, dataType, 
true, qualifier, null, column, null, null));
             return mem.get(name);
         }
         return hasNewChildren ? expression.withChildren(children) : expression;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByTest.java
index 70eb8e4a470..f2a9e480f32 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByTest.java
@@ -93,7 +93,7 @@ class EliminateGroupByTest extends TestWithFeService 
implements MemoPatternMatch
                 .matches(
                         logicalEmptyRelation().when(p -> 
p.getProjects().get(0).toSql().equals("id")
                                 && p.getProjects().get(1).toSql()
-                                .equals("if(age IS NULL, 0, 1) AS `if(age IS 
NULL, 0, 1)`")
+                                .equals("if(age IS NULL, 0, 1) AS 
`count(age)`")
                                 && 
p.getProjects().get(1).getDataType().isBigIntType()
                         )
                 );
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
index cf91eacb51c..75cf3f2bea0 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
@@ -246,8 +246,9 @@ public class StatsCalculatorTest {
         long tableId1 = 0;
         OlapTable table1 = PlanConstructor.newOlapTable(tableId1, "t1", 0);
         List<String> qualifier = ImmutableList.of("test", "t");
-        SlotReference slot1 = new SlotReference(new ExprId(0),
-                "c1", IntegerType.INSTANCE, true, qualifier, table1, new 
Column("c1", PrimitiveType.INT));
+        SlotReference slot1 = new SlotReference(new ExprId(0), "c1", 
IntegerType.INSTANCE, true, qualifier,
+                table1, new Column("c1", PrimitiveType.INT),
+                table1, new Column("c1", PrimitiveType.INT));
 
         LogicalOlapScan logicalOlapScan1 = (LogicalOlapScan) new 
LogicalOlapScan(
                 StatementScopeIdGenerator.newRelationId(), table1,
@@ -265,8 +266,9 @@ public class StatsCalculatorTest {
     @Test
     public void testLimit() {
         List<String> qualifier = ImmutableList.of("test", "t");
-        SlotReference slot1 = new SlotReference(new ExprId(0),
-                "c1", IntegerType.INSTANCE, true, qualifier, null, new 
Column("c1", PrimitiveType.INT));
+        SlotReference slot1 = new SlotReference(new ExprId(0), "c1", 
IntegerType.INSTANCE, true, qualifier,
+                null, new Column("c1", PrimitiveType.INT),
+                null, new Column("c1", PrimitiveType.INT));
         ColumnStatisticBuilder columnStat1 = new ColumnStatisticBuilder();
         columnStat1.setNdv(10);
         columnStat1.setNumNulls(5);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ConstraintTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ConstraintTest.java
index ea9d3ab30d6..c0ea7643697 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ConstraintTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/ConstraintTest.java
@@ -134,8 +134,8 @@ class ConstraintTest extends TestWithFeService implements 
PlanPatternMatchSuppor
             Constraint c = o.getTable().getConstraint("fk");
             if (c instanceof ForeignKeyConstraint) {
                 ForeignKeyConstraint f = (ForeignKeyConstraint) c;
-                Column ref1 = f.getReferencedColumn(((SlotReference) 
o.getOutput().get(0)).getColumn().get().getName());
-                Column ref2 = f.getReferencedColumn(((SlotReference) 
o.getOutput().get(1)).getColumn().get().getName());
+                Column ref1 = f.getReferencedColumn(((SlotReference) 
o.getOutput().get(0)).getOriginalColumn().get().getName());
+                Column ref2 = f.getReferencedColumn(((SlotReference) 
o.getOutput().get(1)).getOriginalColumn().get().getName());
                 return ref1.getName().equals("k1") && 
ref2.getName().equals("k2");
             }
             return false;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
index e8b545f3ffe..77db87b9231 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
@@ -451,6 +451,10 @@ public class OlapQueryCacheTest {
         Analyzer createViewAnalyzer = new Analyzer(env, ctx);
         createViewAnalyzer.setRootStatementClazz(CreateViewStmt.class);
         view.setInlineViewDefWithSqlMode(parseSql(originStmt, 
createViewAnalyzer, true).toSql(), 0L);
+        view.setNewFullSchema(Lists.newArrayList(
+                new Column("eventdate", ScalarType.DATE),
+                new Column("_count_2", ScalarType.BIGINT)
+        ));
         return view;
     }
 
@@ -460,6 +464,10 @@ public class OlapQueryCacheTest {
         Analyzer createViewAnalyzer = new Analyzer(env, ctx);
         createViewAnalyzer.setRootStatementClazz(CreateViewStmt.class);
         view.setInlineViewDefWithSqlMode(parseSql(originStmt, 
createViewAnalyzer, true).toSql(), 0L);
+        view.setNewFullSchema(Lists.newArrayList(
+                new Column("eventdate", ScalarType.DATE),
+                new Column("userid", ScalarType.INT)
+        ));
         return view;
     }
 
@@ -470,6 +478,10 @@ public class OlapQueryCacheTest {
         Analyzer createViewAnalyzer = new Analyzer(env, ctx);
         createViewAnalyzer.setRootStatementClazz(CreateViewStmt.class);
         view.setInlineViewDefWithSqlMode(parseSql(originStmt, 
createViewAnalyzer, true).toSql(), 0L);
+        view.setNewFullSchema(Lists.newArrayList(
+                new Column("eventdate", ScalarType.DATE),
+                new Column("_count_2", ScalarType.BIGINT)
+        ));
         return view;
     }
 
@@ -481,6 +493,10 @@ public class OlapQueryCacheTest {
         createViewAnalyzer.setRootStatementClazz(CreateViewStmt.class);
         view.setInlineViewDefWithSqlMode(
                 parseSql(originStmt, createViewAnalyzer, true).toSql(), 0L);
+        view.setNewFullSchema(Lists.newArrayList(
+                new Column("eventdate", ScalarType.DATE),
+                new Column("_count_2", ScalarType.BIGINT)
+        ));
         return view;
     }
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
index 6bcbec50047..c79a0404863 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
@@ -61,7 +61,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -381,11 +380,11 @@ public class AnalysisManagerTest {
         };
 
         SlotReference slot1 = new SlotReference(new ExprId(1), "slot1", 
IntegerType.INSTANCE, true,
-                new ArrayList<>(), table, column1, Optional.empty(), 
ImmutableList.of());
+                new ArrayList<>(), table, column1, table, column1, 
ImmutableList.of());
         SlotReference slot2 = new SlotReference(new ExprId(2), "slot2", 
IntegerType.INSTANCE, true,
-                new ArrayList<>(), table, column2, Optional.empty(), 
ImmutableList.of());
+                new ArrayList<>(), table, column2, table, column2, 
ImmutableList.of());
         SlotReference slot3 = new SlotReference(new ExprId(3), "slot3", 
IntegerType.INSTANCE, true,
-                new ArrayList<>(), table, column3, Optional.empty(), 
ImmutableList.of());
+                new ArrayList<>(), table, column3, table, column3, 
ImmutableList.of());
         Set<Slot> set1 = new HashSet<>();
         set1.add(slot1);
         set1.add(slot2);
diff --git a/regression-test/data/ddl_p0/test_create_or_replace_view.out 
b/regression-test/data/ddl_p0/test_create_or_replace_view.out
index 30c254b2386..cf385f2e9f7 100644
Binary files a/regression-test/data/ddl_p0/test_create_or_replace_view.out and 
b/regression-test/data/ddl_p0/test_create_or_replace_view.out differ
diff --git 
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out 
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out
index ace0813e2e7..9e39054cba9 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out and 
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query24.out differ
diff --git 
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query6.out 
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query6.out
index fe17bd5d3c7..3a5d6b4d440 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query6.out and 
b/regression-test/data/shape_check/tpcds_sf100/noStatsRfPrune/query6.out differ
diff --git 
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out 
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out
index 5815f02327d..45565a464e5 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out and 
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query24.out differ
diff --git 
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query6.out 
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query6.out
index 81aba1038a5..538ad1a80e2 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query6.out and 
b/regression-test/data/shape_check/tpcds_sf100/no_stats_shape/query6.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out 
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out
index 2c6c329803d..1a8f5d556b5 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out and 
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query24.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query6.out 
b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query6.out
index ddb58c3887e..e398b7817e6 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/rf_prune/query6.out 
and b/regression-test/data/shape_check/tpcds_sf100/rf_prune/query6.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query24.out 
b/regression-test/data/shape_check/tpcds_sf100/shape/query24.out
index 14dbf92e98e..04fcb9fdf6b 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/shape/query24.out 
and b/regression-test/data/shape_check/tpcds_sf100/shape/query24.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf100/shape/query6.out 
b/regression-test/data/shape_check/tpcds_sf100/shape/query6.out
index 43c8732d7f8..c6a9eb72ff0 100644
Binary files a/regression-test/data/shape_check/tpcds_sf100/shape/query6.out 
and b/regression-test/data/shape_check/tpcds_sf100/shape/query6.out differ
diff --git 
a/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query6.out 
b/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query6.out
index 43c8732d7f8..c6a9eb72ff0 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query6.out 
and 
b/regression-test/data/shape_check/tpcds_sf1000/bs_downgrade_shape/query6.out 
differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query24.out 
b/regression-test/data/shape_check/tpcds_sf1000/hint/query24.out
index a928ebd4ab3..4e8d72d0ebb 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/hint/query24.out 
and b/regression-test/data/shape_check/tpcds_sf1000/hint/query24.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/hint/query6.out 
b/regression-test/data/shape_check/tpcds_sf1000/hint/query6.out
index 43c8732d7f8..c6a9eb72ff0 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/hint/query6.out 
and b/regression-test/data/shape_check/tpcds_sf1000/hint/query6.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out 
b/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out
index b1e5bf29828..9311f413058 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out 
and b/regression-test/data/shape_check/tpcds_sf1000/shape/query24.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf1000/shape/query6.out 
b/regression-test/data/shape_check/tpcds_sf1000/shape/query6.out
index 43c8732d7f8..c6a9eb72ff0 100644
Binary files a/regression-test/data/shape_check/tpcds_sf1000/shape/query6.out 
and b/regression-test/data/shape_check/tpcds_sf1000/shape/query6.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query24.out 
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query24.out
index 09f12e931c6..060bac4d1e0 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query24.out and 
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query24.out differ
diff --git a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query6.out 
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query6.out
index 0c390df2e8e..8ac3c948319 100644
Binary files 
a/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query6.out and 
b/regression-test/data/shape_check/tpcds_sf10t_orc/shape/query6.out differ
diff --git a/regression-test/data/shape_check/tpch_sf1000/hint/q11.out 
b/regression-test/data/shape_check/tpch_sf1000/hint/q11.out
index c37989eb189..d726e84b919 100644
Binary files a/regression-test/data/shape_check/tpch_sf1000/hint/q11.out and 
b/regression-test/data/shape_check/tpch_sf1000/hint/q11.out differ
diff --git 
a/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q11.out 
b/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q11.out
index 6d414f1f56a..dcb4189583a 100644
Binary files 
a/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q11.out and 
b/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q11.out differ
diff --git 
a/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q22.out 
b/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q22.out
index 176b64caf78..5f75b319bf0 100644
Binary files 
a/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q22.out and 
b/regression-test/data/shape_check/tpch_sf1000/nostats_rf_prune/q22.out differ
diff --git a/regression-test/data/shape_check/tpch_sf1000/rf_prune/q11.out 
b/regression-test/data/shape_check/tpch_sf1000/rf_prune/q11.out
index 40df7553b03..48fbc3d1a1f 100644
Binary files a/regression-test/data/shape_check/tpch_sf1000/rf_prune/q11.out 
and b/regression-test/data/shape_check/tpch_sf1000/rf_prune/q11.out differ
diff --git a/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out 
b/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out
index 207538326c7..69a80f708f9 100644
Binary files a/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out 
and b/regression-test/data/shape_check/tpch_sf1000/rf_prune/q22.out differ
diff --git a/regression-test/data/shape_check/tpch_sf1000/shape/q11.out 
b/regression-test/data/shape_check/tpch_sf1000/shape/q11.out
index 40df7553b03..48fbc3d1a1f 100644
Binary files a/regression-test/data/shape_check/tpch_sf1000/shape/q11.out and 
b/regression-test/data/shape_check/tpch_sf1000/shape/q11.out differ
diff --git a/regression-test/data/shape_check/tpch_sf1000/shape/q22.out 
b/regression-test/data/shape_check/tpch_sf1000/shape/q22.out
index 207538326c7..69a80f708f9 100644
Binary files a/regression-test/data/shape_check/tpch_sf1000/shape/q22.out and 
b/regression-test/data/shape_check/tpch_sf1000/shape/q22.out differ
diff --git 
a/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q11.out 
b/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q11.out
index 6d414f1f56a..dcb4189583a 100644
Binary files 
a/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q11.out and 
b/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q11.out differ
diff --git 
a/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q22.out 
b/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q22.out
index 176b64caf78..5f75b319bf0 100644
Binary files 
a/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q22.out and 
b/regression-test/data/shape_check/tpch_sf1000/shape_no_stats/q22.out differ
diff --git a/regression-test/suites/ddl_p0/test_create_or_replace_view.groovy 
b/regression-test/suites/ddl_p0/test_create_or_replace_view.groovy
index 8617d5d0ae1..301be38542d 100644
--- a/regression-test/suites/ddl_p0/test_create_or_replace_view.groovy
+++ b/regression-test/suites/ddl_p0/test_create_or_replace_view.groovy
@@ -60,6 +60,11 @@ suite("test_create_or_replace_view") {
         CREATE OR REPLACE VIEW view_test_create_or_replace_view
         AS SELECT * FROM test_create_or_replace_view_tbl2;
     """
+
+    qt_desc_view_upper_after_replace """
+        desc view_test_create_or_replace_view
+    """
+
     qt_sql_2 """select * from view_test_create_or_replace_view"""
 
     qt_desc_view_upper_after_replace """
diff --git a/regression-test/suites/mysql_compatibility_p0/metadata.groovy 
b/regression-test/suites/mysql_compatibility_p0/metadata.groovy
index 5b441383e7e..f6b303dbfd6 100644
--- a/regression-test/suites/mysql_compatibility_p0/metadata.groovy
+++ b/regression-test/suites/mysql_compatibility_p0/metadata.groovy
@@ -23,6 +23,10 @@ suite ("metadata") {
         drop table if exists metadata
     """
 
+    sql """
+        drop view if exists view_metadata
+    """
+
     sql """
         create table metadata (
             k1 int null,
@@ -33,28 +37,57 @@ suite ("metadata") {
         properties("replication_num" = "1");
     """
 
-    sql """insert into metadata values (1, 1, 1)"""
+    def (tableResult, tableMeta) = 
JdbcUtils.executeToList(context.getConnection(), "select k1 + 1 as c1, k2 c2, 
abs(k3) as c3 from metadata ta ")
 
-    sql """sync"""
+    println tableMeta
 
-    def (result, meta) = JdbcUtils.executeToList(context.getConnection(), 
"select k1 + 1 as c1, k2 c2, abs(k3) as c3 from metadata ta ")
+    assertEquals("c1", tableMeta.getColumnName(1))
+    assertEquals("k2", tableMeta.getColumnName(2))
+    assertEquals("c3", tableMeta.getColumnName(3))
 
-    println meta
+    assertEquals("c1", tableMeta.getColumnLabel(1))
+    assertEquals("c2", tableMeta.getColumnLabel(2))
+    assertEquals("c3", tableMeta.getColumnLabel(3))
 
-    assertEquals("c1", meta.getColumnName(1))
-    assertEquals("k2", meta.getColumnName(2))
-    assertEquals("c3", meta.getColumnName(3))
+    assertEquals("", tableMeta.getTableName(1))
+    assertEquals("metadata", tableMeta.getTableName(2))
+    assertEquals("", tableMeta.getTableName(3))
+
+    sql """
+        create view view_metadata as
+        select k1 as vk1, k2 from metadata
+    """
 
-    assertEquals("c1", meta.getColumnLabel(1))
-    assertEquals("c2", meta.getColumnLabel(2))
-    assertEquals("c3", meta.getColumnLabel(3))
+    def (viewResult, viewMeta) = 
JdbcUtils.executeToList(context.getConnection(), "select vk1 + 1 as c1, vk1 c2, 
vk1, k2 c3, k2, abs(k2) as c4 from view_metadata ta")
 
-    assertEquals("", meta.getTableName(1))
-    assertEquals("metadata", meta.getTableName(2))
-    assertEquals("", meta.getTableName(3))
+    println viewMeta
 
+    assertEquals("c1", viewMeta.getColumnName(1))
+    assertEquals("vk1", viewMeta.getColumnName(2))
+    assertEquals("vk1", viewMeta.getColumnName(3))
+    assertEquals("k2", viewMeta.getColumnName(4))
+    assertEquals("k2", viewMeta.getColumnName(5))
+    assertEquals("c4", viewMeta.getColumnName(6))
+
+    assertEquals("c1", viewMeta.getColumnLabel(1))
+    assertEquals("c2", viewMeta.getColumnLabel(2))
+    assertEquals("vk1", viewMeta.getColumnLabel(3))
+    assertEquals("c3", viewMeta.getColumnLabel(4))
+    assertEquals("k2", viewMeta.getColumnLabel(5))
+    assertEquals("c4", viewMeta.getColumnLabel(6))
+
+    assertEquals("", viewMeta.getTableName(1))
+    assertEquals("view_metadata", viewMeta.getTableName(2))
+    assertEquals("view_metadata", viewMeta.getTableName(3))
+    assertEquals("view_metadata", viewMeta.getTableName(4))
+    assertEquals("view_metadata", viewMeta.getTableName(5))
+    assertEquals("", viewMeta.getTableName(6))
 
     sql """
         drop table if exists metadata
     """
+
+    sql """
+        drop view if exists view_metadata
+    """
 }
diff --git 
a/regression-test/suites/nereids_p0/cte/test_cte_with_duplicate_consumer.groovy 
b/regression-test/suites/nereids_p0/cte/test_cte_with_duplicate_consumer.groovy
index b5cb03ea174..893376456f6 100644
--- 
a/regression-test/suites/nereids_p0/cte/test_cte_with_duplicate_consumer.groovy
+++ 
b/regression-test/suites/nereids_p0/cte/test_cte_with_duplicate_consumer.groovy
@@ -14,15 +14,13 @@
 // KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
-import org.junit.Assert;
 suite("test_cte_with_duplicate_consumer") {
-    try {
+    test {
         sql """
             WITH cte1(col1) AS (SELECT 1), cte2(col2_1, col2_2) AS (SELECT 
col1, col1 FROM cte1) SELECT * FROM cte2
         """
-    } catch (Exception e) {
-        // Duplicated inline view column alias: 'col1' in inline view: 'cte2''
-        assertTrue(e.message.contains(" Duplicated inline view column alias"))
+
+        result([[1, 1]])
     }
 
     test {
diff --git 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_by_fe.groovy
 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_by_fe.groovy
index ab0353dab6a..5f054a47188 100644
--- 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_by_fe.groovy
+++ 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_by_fe.groovy
@@ -206,10 +206,10 @@ suite("test_fold_constant_by_fe") {
 
     // test null like string cause of fe need to fold constant like that to 
enable not null derive
     res = sql """explain select null like '%123%'"""
-    assertFalse(res.contains("like"))
+    assertTrue(res.contains("NULL"))
     // now fe fold constant still can not deal with this case
     res = sql """explain select "12" like '%123%'"""
-    assertTrue(res.contains("like"))
+    assertFalse(res.contains("NULL"))
 
     testFoldConst("select DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) + INTERVAL 
3600 SECOND")
 
diff --git 
a/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy 
b/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy
deleted file mode 100644
index 775636aba17..00000000000
--- 
a/regression-test/suites/nereids_p0/subquery/test_duplicate_name_in_view.groovy
+++ /dev/null
@@ -1,175 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-suite("test_duplicate_name_in_view") {
-    sql "SET enable_nereids_planner=true"
-    sql "SET enable_fallback_to_original_planner=false"
-    sql """
-        drop table if exists issue_19611_t0;
-    """
-
-    sql """
-        drop table if exists issue_19611_t1;
-    """
-
-    sql """
-        create table issue_19611_t0 (c0 int)
-        ENGINE=OLAP
-        DISTRIBUTED BY HASH(c0) BUCKETS 5
-        PROPERTIES (
-        "replication_allocation" = "tag.location.default: 1",
-        "in_memory" = "false",
-        "storage_format" = "V2"
-        );
-    """
-
-    sql """
-        create table issue_19611_t1 (c0 int)
-        ENGINE=OLAP
-        DISTRIBUTED BY HASH(c0) BUCKETS 5
-        PROPERTIES (
-        "replication_allocation" = "tag.location.default: 1",
-        "in_memory" = "false",
-        "storage_format" = "V2"
-        );
-    """
-
-    test {
-        sql """
-             select * from (
-                select * from issue_19611_t0, issue_19611_t1 where 
issue_19611_t1.c0 != 0 
-                    union select * from issue_19611_t0, issue_19611_t1 where 
issue_19611_t1.c0 = 0) tmp;
-        """
-        exception "Duplicated inline view column alias: 'c0' in inline view: 
'tmp'"
-
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT issue_19611_t1.c0 ,
-                        issue_19611_t1.c0
-                    FROM issue_19611_t1 ) tmp;
-        """
-        exception "Duplicated inline view column alias: 'c0' in inline view: 
'tmp'"
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT issue_19611_t1.c0 + 1,
-                        issue_19611_t1.c0 + 1
-                    FROM issue_19611_t1 ) tmp;
-        """
-        exception "Duplicated inline view column alias: 'issue_19611_t1.c0 + 
1' in inline view: 'tmp'"
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT issue_19611_t1.c0 ,
-                        issue_19611_t0.c0
-                    FROM issue_19611_t1, issue_19611_t0 ) tmp;
-        """
-        exception "Duplicated inline view column alias: 'c0' in inline view: 
'tmp'"
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT issue_19611_t1.c0 a,
-                        issue_19611_t1.c0 a
-                    FROM issue_19611_t1 ) tmp;
-        """
-        exception "Duplicated inline view column alias: 'a' in inline view: 
'tmp'"
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT issue_19611_t0.c0 + 1 a,
-                        issue_19611_t1.c0 + 1 a
-                    FROM issue_19611_t1, issue_19611_t0 ) tmp;
-        """
-        exception "Duplicated inline view column alias: 'a' in inline view: 
'tmp'"
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT '2023-10-07', '2023-10-07'
-                    FROM issue_19611_t1 ) tmp;
-        """
-        exception "Duplicated inline view column alias: ''2023-10-07'' in 
inline view: 'tmp'"
-    }
-
-    test {
-        sql """
-             SELECT *
-                FROM 
-                    (SELECT '2023-10-07' a, '2023-10-07' a
-                    FROM issue_19611_t1 ) tmp;
-        """
-        exception "Duplicated inline view column alias: 'a' in inline view: 
'tmp'"
-    }
-
-    sql """SELECT *
-            FROM 
-                (SELECT issue_19611_t1.c0 + 1,
-                    issue_19611_t0.c0 + 1
-                FROM issue_19611_t1, issue_19611_t0 ) tmp;
-    """
-
-    sql """SELECT *
-            FROM 
-                (SELECT issue_19611_t1.c0 a,
-                    issue_19611_t1.c0 b
-                FROM issue_19611_t1 ) tmp;"""
-
-    sql """SELECT *
-            FROM 
-                (SELECT issue_19611_t1.c0 a,
-                    issue_19611_t1.c0
-                FROM issue_19611_t1 ) tmp;"""
-
-    sql """SELECT *
-            FROM 
-                (SELECT '2023-10-07' a, '2023-10-07' b
-                FROM issue_19611_t1 ) tmp;
-    """
-
-    sql """SELECT *
-            FROM 
-                (SELECT '2023-10-07' a, '2023-10-07'
-                FROM issue_19611_t1 ) tmp;
-    """
-
-
-    sql """
-        drop table if exists issue_19611_t0;
-    """
-
-    sql """
-        drop table if exists issue_19611_t1;
-    """
-}
diff --git 
a/regression-test/suites/nereids_rules_p0/expression/test_convert_median_to_percentile.groovy
 
b/regression-test/suites/nereids_rules_p0/expression/test_convert_median_to_percentile.groovy
index dd5b8032df6..2d8cf3a8b59 100644
--- 
a/regression-test/suites/nereids_rules_p0/expression/test_convert_median_to_percentile.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/expression/test_convert_median_to_percentile.groovy
@@ -62,14 +62,14 @@ suite("test_convert_median_to_percentile") {
     def sql3 = "select year, median(profit) from sales group by year order by 
year"
     def sql4 = "select year, percentile(profit, 0.5) from sales group by year 
order by year"
     def explainStr3 = sql """ explain  ${sql3} """
-    assertTrue(explainStr3.toString().contains("percentile(profit, 0.5)"))
+    assertTrue(explainStr3.toString().contains("percentile(profit"))
     qt_select_3 "${sql3}"
     qt_select_4 "${sql4}"
 
     def sql5 = "select year, median(profit) from sales group by year having 
median(profit) > 100"
     def sql6 = "select year, percentile(profit, 0.5) from sales group by year 
having percentile(profit, 0.5) > 100"
     def explainStr5 = sql """ explain  ${sql5} """
-    assertTrue(explainStr5.toString().contains("percentile(profit, 0.5)"))
+    assertTrue(explainStr5.toString().contains("percentile(profit"))
     qt_select_5 "${sql5}"
     qt_select_6 "${sql6}"
 
diff --git a/regression-test/suites/nereids_syntax_p0/explain.groovy 
b/regression-test/suites/nereids_syntax_p0/explain.groovy
index 5b1bfa1f8ae..ca3a06fa303 100644
--- a/regression-test/suites/nereids_syntax_p0/explain.groovy
+++ b/regression-test/suites/nereids_syntax_p0/explain.groovy
@@ -69,8 +69,7 @@ suite("explain") {
     assertTrue(!explainStr.contains("projections"))
 
     explain {
-        sql("select week(cast('0000-01-01' as DATEV2), cast(2 as INT));")
-        notContains "week"
-        contains "1"
+        sql("select week(cast('0000-02-02' as DATEV2), cast(2 as INT));")
+        contains "5"
     }
 }
diff --git a/regression-test/suites/query_p0/cte/query_with_dup_column.groovy 
b/regression-test/suites/query_p0/cte/query_with_dup_column.groovy
deleted file mode 100644
index be88cb44bab..00000000000
--- a/regression-test/suites/query_p0/cte/query_with_dup_column.groovy
+++ /dev/null
@@ -1,112 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-import org.junit.Assert;
-
-suite("query_with_dup_column") {
-    String db = context.config.getDbNameByFile(context.file)
-    sql "use ${db}"
-    sql "set runtime_filter_mode=OFF";
-    sql "SET ignore_shape_nodes='PhysicalDistribute,PhysicalProject'"
-
-    sql """
-    drop table if exists test_table;
-    """
-
-    sql """
-    CREATE TABLE `test_table` (
-      `unique_id`    varchar(256) NULL,
-      `name` varchar(256) NULL
-    )
-    PROPERTIES (
-        "replication_num" = "1"
-    );
-    """
-
-    sql """
-    insert into test_table values ("yyyxxxzzz", "abc000000")
-    """
-
-    // should fail
-    try {
-    sql """
-    with tmp1 as (
-    select unique_id, unique_id  from test_table
-    )
-    select * from tmp1;
-    """
-    } catch (Exception e) {
-        assertTrue(e.message.contains("Duplicated inline view column alias"))
-    }
-
-    // should fail
-    try {
-    sql """
-    with tmp1 as (
-    select unique_id, unique_id  from test_table
-    )
-    select * from tmp1 t;
-    """
-    } catch (Exception e) {
-        assertTrue(e.message.contains("Duplicated inline view column alias"))
-    }
-
-
-    try {
-        sql """
-    with tmp1 as (
-    select *, unique_id from test_table
-    )
-    select * from tmp1;
-    """
-    } catch (Exception e) {
-        assertTrue(e.message.contains("Duplicated inline view column alias"))
-    }
-
-    // should fail
-    try {
-    sql """
-    with tmp1 as (
-    select *, unique_id from test_table
-    )
-    select * from tmp1 t;
-    """
-    } catch (Exception e) {
-        assertTrue(e.message.contains("Duplicated inline view column alias"))
-    }
-
-    // should success
-    sql """
-    select *, unique_id from test_table;
-    """
-
-    // should success
-    sql """
-    select *, unique_id from test_table t;
-    """
-
-    // should success
-    sql """
-    select unique_id, unique_id from test_table
-    """
-
-    // should success
-    sql """
-    select unique_id, unique_id from test_table t
-    """
-}
-


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org


Reply via email to