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

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

commit 9a3f54c1394123c8ec54c377c7ea499623f55d32
Author: jakevin <jakevin...@gmail.com>
AuthorDate: Thu Jul 6 20:37:17 2023 +0800

    [refactor](Nereids): remove withLogicalProperties & check children size 
(#21563)
---
 .../doris/nereids/analyzer/UnboundOlapTableSink.java  |  6 ------
 .../doris/nereids/analyzer/UnboundOneRowRelation.java |  5 -----
 .../doris/nereids/analyzer/UnboundRelation.java       |  6 ------
 .../doris/nereids/analyzer/UnboundTVFRelation.java    |  5 -----
 .../apache/doris/nereids/rules/rewrite/MultiJoin.java |  5 -----
 .../mv/AbstractSelectMaterializedIndexRule.java       |  3 ++-
 .../apache/doris/nereids/trees/plans/FakePlan.java    |  5 -----
 .../apache/doris/nereids/trees/plans/GroupPlan.java   | 10 ----------
 .../org/apache/doris/nereids/trees/plans/Plan.java    |  6 ------
 .../doris/nereids/trees/plans/commands/Command.java   |  5 -----
 .../nereids/trees/plans/logical/LogicalAggregate.java |  5 +++--
 .../nereids/trees/plans/logical/LogicalApply.java     |  8 +-------
 .../trees/plans/logical/LogicalAssertNumRows.java     |  9 ++-------
 .../doris/nereids/trees/plans/logical/LogicalCTE.java |  7 +------
 .../nereids/trees/plans/logical/LogicalCTEAnchor.java |  5 -----
 .../trees/plans/logical/LogicalCTEConsumer.java       |  8 --------
 .../trees/plans/logical/LogicalCTEProducer.java       |  6 ------
 .../trees/plans/logical/LogicalCheckPolicy.java       |  6 +-----
 .../trees/plans/logical/LogicalEmptyRelation.java     |  5 -----
 .../nereids/trees/plans/logical/LogicalEsScan.java    |  6 ------
 .../nereids/trees/plans/logical/LogicalExcept.java    |  6 ------
 .../nereids/trees/plans/logical/LogicalFileScan.java  |  6 ------
 .../nereids/trees/plans/logical/LogicalFilter.java    |  6 +-----
 .../nereids/trees/plans/logical/LogicalGenerate.java  |  7 +------
 .../nereids/trees/plans/logical/LogicalHaving.java    |  6 +-----
 .../nereids/trees/plans/logical/LogicalIntersect.java |  6 ------
 .../nereids/trees/plans/logical/LogicalJdbcScan.java  |  6 ------
 .../nereids/trees/plans/logical/LogicalJoin.java      |  7 +------
 .../nereids/trees/plans/logical/LogicalLimit.java     |  6 +-----
 .../nereids/trees/plans/logical/LogicalOlapScan.java  |  8 --------
 .../trees/plans/logical/LogicalOlapTableSink.java     |  6 ------
 .../trees/plans/logical/LogicalOneRowRelation.java    |  5 -----
 .../trees/plans/logical/LogicalPartitionTopN.java     |  7 +------
 .../nereids/trees/plans/logical/LogicalProject.java   |  7 +------
 .../nereids/trees/plans/logical/LogicalRepeat.java    |  7 +------
 .../trees/plans/logical/LogicalSchemaScan.java        |  5 -----
 .../trees/plans/logical/LogicalSelectHint.java        | 13 ++-----------
 .../nereids/trees/plans/logical/LogicalSort.java      |  6 +-----
 .../trees/plans/logical/LogicalSubQueryAlias.java     |  7 +------
 .../trees/plans/logical/LogicalTVFRelation.java       |  5 -----
 .../nereids/trees/plans/logical/LogicalTopN.java      |  6 +-----
 .../nereids/trees/plans/logical/LogicalUnion.java     |  6 ------
 .../nereids/trees/plans/logical/LogicalWindow.java    |  7 +------
 .../doris/nereids/trees/plans/logical/UsingJoin.java  |  6 ------
 .../trees/plans/physical/PhysicalAssertNumRows.java   |  7 +------
 .../trees/plans/physical/PhysicalCTEAnchor.java       |  7 +------
 .../trees/plans/physical/PhysicalCTEConsumer.java     |  6 ------
 .../trees/plans/physical/PhysicalCTEProducer.java     |  5 -----
 .../trees/plans/physical/PhysicalDistribute.java      |  7 +------
 .../trees/plans/physical/PhysicalEmptyRelation.java   |  6 ------
 .../nereids/trees/plans/physical/PhysicalEsScan.java  |  5 -----
 .../nereids/trees/plans/physical/PhysicalExcept.java  |  6 ------
 .../trees/plans/physical/PhysicalFileScan.java        |  6 ------
 .../nereids/trees/plans/physical/PhysicalFilter.java  |  6 +-----
 .../trees/plans/physical/PhysicalGenerate.java        |  7 +------
 .../trees/plans/physical/PhysicalHashAggregate.java   |  8 +-------
 .../trees/plans/physical/PhysicalHashJoin.java        |  8 +-------
 .../trees/plans/physical/PhysicalIntersect.java       |  6 ------
 .../trees/plans/physical/PhysicalJdbcScan.java        |  5 -----
 .../nereids/trees/plans/physical/PhysicalLimit.java   |  6 +-----
 .../trees/plans/physical/PhysicalNestedLoopJoin.java  |  9 +--------
 .../trees/plans/physical/PhysicalOlapScan.java        |  7 -------
 .../trees/plans/physical/PhysicalOlapTableSink.java   |  6 ------
 .../trees/plans/physical/PhysicalOneRowRelation.java  |  6 ------
 .../trees/plans/physical/PhysicalPartitionTopN.java   |  6 ------
 .../nereids/trees/plans/physical/PhysicalProject.java | 12 ++++--------
 .../trees/plans/physical/PhysicalQuickSort.java       |  6 +-----
 .../nereids/trees/plans/physical/PhysicalRepeat.java  |  7 +------
 .../trees/plans/physical/PhysicalSchemaScan.java      |  6 ------
 .../plans/physical/PhysicalStorageLayerAggregate.java |  6 ------
 .../trees/plans/physical/PhysicalTVFRelation.java     |  6 ------
 .../nereids/trees/plans/physical/PhysicalTopN.java    |  6 +-----
 .../nereids/trees/plans/physical/PhysicalUnion.java   |  6 ------
 .../nereids/trees/plans/physical/PhysicalWindow.java  |  7 +------
 .../doris/nereids/jobs/RewriteTopDownJobTest.java     |  5 -----
 .../nereids/jobs/cascades/DeriveStatsJobTest.java     |  5 +++--
 .../doris/nereids/stats/StatsCalculatorTest.java      |  5 +++--
 .../doris/nereids/trees/plans/PlanOutputTest.java     | 19 -------------------
 78 files changed, 47 insertions(+), 462 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOlapTableSink.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOlapTableSink.java
index 0bc82838a5..344cfb9b69 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOlapTableSink.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOlapTableSink.java
@@ -113,12 +113,6 @@ public class UnboundOlapTableSink<CHILD_TYPE extends Plan> 
extends LogicalUnary<
                 Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new UnboundOlapTableSink<>(nameParts, colNames, hints, 
partitions, groupExpression,
-                logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOneRowRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOneRowRelation.java
index 1b68127a38..3f349c9224 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOneRowRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundOneRowRelation.java
@@ -87,11 +87,6 @@ public class UnboundOneRowRelation extends LogicalLeaf 
implements Unbound, OneRo
         return new UnboundOneRowRelation(id, projects, groupExpression, 
Optional.of(logicalPropertiesSupplier.get()));
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new UnboundOneRowRelation(id, projects, Optional.empty(), 
logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java
index 08a1c8ebfb..1f820398d9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java
@@ -98,12 +98,6 @@ public class UnboundRelation extends LogicalRelation 
implements Unbound {
                 isTempPart, hints);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new UnboundRelation(id, nameParts, Optional.empty(), 
logicalProperties, partNames,
-                isTempPart, hints);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTVFRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTVFRelation.java
index ccceb55373..2116c63c29 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTVFRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundTVFRelation.java
@@ -99,11 +99,6 @@ public class UnboundTVFRelation extends LogicalLeaf 
implements TVFRelation, Unbo
                 Optional.of(getLogicalProperties()));
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new UnboundTVFRelation(id, functionName, properties, 
Optional.empty(), logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MultiJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MultiJoin.java
index 11aedf3536..4255648c31 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MultiJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/MultiJoin.java
@@ -168,11 +168,6 @@ public class MultiJoin extends AbstractLogicalPlan {
         throw new RuntimeException("multiJoin can't invoke 
withGroupExpression");
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        throw new RuntimeException("multiJoin can't invoke 
withLogicalProperties");
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
index 7fd1e080e1..1960dbabdc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/AbstractSelectMaterializedIndexRule.java
@@ -504,7 +504,8 @@ public abstract class AbstractSelectMaterializedIndexRule {
 
         @Override
         public LogicalOlapScan visitLogicalOlapScan(LogicalOlapScan scan, Void 
ctx) {
-            return scan.withLogicalProperties(Optional.empty());
+            return (LogicalOlapScan) 
scan.withGroupExprLogicalPropChildren(scan.getGroupExpression(), 
Optional.empty(),
+                    ImmutableList.of());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java
index e1011bf69e..b964bec262 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/FakePlan.java
@@ -100,11 +100,6 @@ public class FakePlan implements Plan {
         return this;
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return this;
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/GroupPlan.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/GroupPlan.java
index 7384f353f9..0d4d278abf 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/GroupPlan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/GroupPlan.java
@@ -64,11 +64,6 @@ public class GroupPlan extends LogicalLeaf {
         throw new IllegalStateException("GroupPlan can not invoke getStats()");
     }
 
-    @Override
-    public GroupPlan withOutput(List<Slot> output) {
-        throw new IllegalStateException("GroupPlan can not invoke 
withOutput()");
-    }
-
     @Override
     public GroupPlan withChildren(List<Plan> children) {
         throw new IllegalStateException("GroupPlan can not invoke 
withChildren()");
@@ -79,11 +74,6 @@ public class GroupPlan extends LogicalLeaf {
         throw new IllegalStateException("GroupPlan can not invoke 
withGroupExpression()");
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        throw new IllegalStateException("GroupPlan can not invoke 
withLogicalProperties()");
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java
index 8388f256c8..05bebf7403 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/Plan.java
@@ -121,14 +121,8 @@ public interface Plan extends TreeNode<Plan> {
 
     String treeString();
 
-    default Plan withOutput(List<Slot> output) {
-        return 
withLogicalProperties(Optional.of(getLogicalProperties().withOutput(output)));
-    }
-
     Plan withGroupExpression(Optional<GroupExpression> groupExpression);
 
-    Plan withLogicalProperties(Optional<LogicalProperties> logicalProperties);
-
     Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children);
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
index f53246c881..e5c7413fa6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/Command.java
@@ -123,9 +123,4 @@ public abstract class Command extends AbstractPlan 
implements LogicalPlan {
     public Plan withGroupExpression(Optional<GroupExpression> groupExpression) 
{
         throw new RuntimeException("Command do not implement 
withGroupExpression");
     }
-
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        throw new RuntimeException("Command do not implement 
withLogicalProperties");
-    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
index d15fa0c3c6..f244d8090e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java
@@ -228,8 +228,9 @@ public class LogicalAggregate<CHILD_TYPE extends Plan>
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
-        return new LogicalAggregate<>(groupByExpressions, outputExpressions, 
normalized, ordinalIsResolved,
-                sourceRepeat, groupExpression, 
Optional.of(getLogicalProperties()), children.get(0));
+        Preconditions.checkArgument(children.size() == 1);
+        return new LogicalAggregate<>(groupByExpressions, outputExpressions, 
normalized, ordinalIsResolved, generated,
+                hasPushed, sourceRepeat, groupExpression, 
Optional.of(getLogicalProperties()), children.get(0));
     }
 
     public LogicalAggregate<Plan> withGroupByAndOutput(List<Expression> 
groupByExprList,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
index eb0d9f90cc..4d255c5c04 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalApply.java
@@ -215,16 +215,10 @@ public class LogicalApply<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
                 markJoinSlotReference, subCorrespondingConjunct, 
needAddSubOutputToProjects, left(), right());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalApply<>(Optional.empty(), logicalProperties,
-                correlationSlot, subqueryExpr, correlationFilter,
-                markJoinSlotReference, subCorrespondingConjunct, 
needAddSubOutputToProjects, left(), right());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 2);
         return new LogicalApply<>(groupExpression, logicalProperties, 
correlationSlot, subqueryExpr, correlationFilter,
                 markJoinSlotReference, subCorrespondingConjunct, 
needAddSubOutputToProjects, children.get(0),
                 children.get(1));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAssertNumRows.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAssertNumRows.java
index d5d00e5816..69b5942c72 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAssertNumRows.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAssertNumRows.java
@@ -104,16 +104,11 @@ public class LogicalAssertNumRows<CHILD_TYPE extends 
Plan> extends LogicalUnary<
                 groupExpression, Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalAssertNumRows<>(assertNumRowsElement, 
Optional.empty(), logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
-        return new LogicalAssertNumRows<>(assertNumRowsElement,
-                groupExpression, logicalProperties, children.get(0));
+        Preconditions.checkArgument(children.size() == 1);
+        return new LogicalAssertNumRows<>(assertNumRowsElement, 
groupExpression, logicalProperties, children.get(0));
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTE.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTE.java
index 081892d561..9b2727faab 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTE.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTE.java
@@ -145,15 +145,10 @@ public class LogicalCTE<CHILD_TYPE extends Plan> extends 
LogicalUnary<CHILD_TYPE
                 registered, cteNameToId);
     }
 
-    @Override
-    public LogicalCTE<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalCTE<>(aliasQueries, Optional.empty(), 
logicalProperties, child(), registered,
-                cteNameToId);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(aliasQueries.size() > 0);
         return new LogicalCTE<>(aliasQueries, groupExpression, 
logicalProperties, children.get(0),
                 registered, cteNameToId);
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEAnchor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEAnchor.java
index 418b5e1ecd..605554efc1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEAnchor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEAnchor.java
@@ -72,11 +72,6 @@ public class LogicalCTEAnchor<LEFT_CHILD_TYPE extends Plan,
         return new LogicalCTEAnchor<>(groupExpression, 
Optional.of(getLogicalProperties()), left(), right(), cteId);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalCTEAnchor<>(groupExpression, logicalProperties, 
left(), right(), cteId);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
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 ada59a6728..33e688645d 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
@@ -117,14 +117,6 @@ public class LogicalCTEConsumer extends LogicalLeaf {
                 consumerId, name);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalCTEConsumer(groupExpression, logicalProperties, 
cteId,
-                consumerToProducerOutputMap,
-                producerToConsumerOutputMap,
-                consumerId, name);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEProducer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEProducer.java
index 135d8c35bd..b6123edaca 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEProducer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCTEProducer.java
@@ -97,12 +97,6 @@ public class LogicalCTEProducer<CHILD_TYPE extends Plan> 
extends LogicalUnary<CH
             projects, rewritten);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalCTEProducer<>(groupExpression, logicalProperties, 
child(), cteId,
-            projects, rewritten);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCheckPolicy.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCheckPolicy.java
index 78349a87ae..78578fa7b5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCheckPolicy.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCheckPolicy.java
@@ -99,14 +99,10 @@ public class LogicalCheckPolicy<CHILD_TYPE extends Plan> 
extends LogicalUnary<CH
         return new LogicalCheckPolicy<>(groupExpression, 
Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalCheckPolicy<>(Optional.empty(), logicalProperties, 
child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalCheckPolicy<>(groupExpression, logicalProperties, 
children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java
index 15748c6eb9..3484b95983 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEmptyRelation.java
@@ -77,11 +77,6 @@ public class LogicalEmptyRelation extends LogicalLeaf 
implements EmptyRelation,
         return new LogicalEmptyRelation(projects, groupExpression, 
Optional.of(logicalPropertiesSupplier.get()));
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalEmptyRelation(projects, Optional.empty(), 
logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
index 4948603b86..012348938b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalEsScan.java
@@ -70,12 +70,6 @@ public class LogicalEsScan extends LogicalRelation {
             Optional.of(getLogicalProperties()));
     }
 
-    @Override
-    public LogicalEsScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalEsScan(id, (ExternalTable) table, qualifier, 
groupExpression,
-            logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalExcept.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalExcept.java
index 0bb91b25d8..9766e7d846 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalExcept.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalExcept.java
@@ -70,12 +70,6 @@ public class LogicalExcept extends LogicalSetOperation {
                 Optional.of(getLogicalProperties()), children);
     }
 
-    @Override
-    public LogicalExcept withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalExcept(qualifier, outputs,
-                Optional.empty(), logicalProperties, children);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
index e3dd7d4097..52d66de129 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java
@@ -83,12 +83,6 @@ public class LogicalFileScan extends LogicalRelation {
                 Optional.of(getLogicalProperties()), conjuncts);
     }
 
-    @Override
-    public LogicalFileScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalFileScan(id, (ExternalTable) table, qualifier, 
groupExpression,
-            logicalProperties, conjuncts);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
index 6f38a633a5..6943062e7d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFilter.java
@@ -126,14 +126,10 @@ public class LogicalFilter<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
         return new LogicalFilter<>(conjuncts, groupExpression, 
Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public LogicalFilter<Plan> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalFilter<>(conjuncts, Optional.empty(), 
logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalFilter<>(conjuncts, groupExpression, 
logicalProperties, children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java
index 2310930c96..e8778b13d7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalGenerate.java
@@ -90,15 +90,10 @@ public class LogicalGenerate<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD
                 groupExpression, Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public LogicalGenerate<Plan> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalGenerate<>(generators, generatorOutput,
-                Optional.empty(), logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalGenerate<>(generators, generatorOutput, 
groupExpression, logicalProperties, children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java
index dad0f71c6f..6537770b40 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java
@@ -80,14 +80,10 @@ public class LogicalHaving<CHILD_TYPE extends Plan> extends 
LogicalUnary<CHILD_T
         return new LogicalHaving<>(conjuncts, groupExpression, 
Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalHaving<>(conjuncts, Optional.empty(), 
logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalHaving<>(conjuncts, groupExpression, 
logicalProperties, children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalIntersect.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalIntersect.java
index 41f9c81a2a..5d9b910916 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalIntersect.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalIntersect.java
@@ -71,12 +71,6 @@ public class LogicalIntersect extends LogicalSetOperation {
                 Optional.of(getLogicalProperties()), children);
     }
 
-    @Override
-    public LogicalIntersect withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalIntersect(qualifier, outputs,
-                Optional.empty(), logicalProperties, children);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
index 775cfedfd8..ee12dc521a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJdbcScan.java
@@ -73,12 +73,6 @@ public class LogicalJdbcScan extends LogicalRelation {
             Optional.of(getLogicalProperties()));
     }
 
-    @Override
-    public LogicalJdbcScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalJdbcScan(id, table, qualifier, groupExpression,
-            logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
index 6492d9f9bf..5a6d53a792 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java
@@ -261,15 +261,10 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
                 groupExpression, Optional.of(getLogicalProperties()), left(), 
right(), joinReorderContext);
     }
 
-    @Override
-    public LogicalJoin<Plan, Plan> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
-                Optional.empty(), logicalProperties, left(), right(), 
joinReorderContext);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 2);
         return new LogicalJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
                 groupExpression, logicalProperties, children.get(0), 
children.get(1), joinReorderContext);
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
index dd6f02e68e..48b89e761d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalLimit.java
@@ -121,14 +121,10 @@ public class LogicalLimit<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_TY
         return new LogicalLimit<>(limit, offset, phase, groupExpression, 
Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalLimit<>(limit, offset, phase, Optional.empty(), 
logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalLimit<>(limit, offset, phase, groupExpression, 
logicalProperties, children.get(0));
     }
 
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 ecd3c10ffe..ffd69a94e5 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
@@ -229,14 +229,6 @@ public class LogicalOlapScan extends LogicalRelation 
implements CatalogRelation,
                 hints, cacheSlotWithSlotName);
     }
 
-    @Override
-    public LogicalOlapScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalOlapScan(id, (Table) table, qualifier, 
Optional.empty(), logicalProperties,
-                selectedPartitionIds, partitionPruned, selectedTabletIds,
-                selectedIndexId, indexSelected, preAggStatus, 
manuallySpecifiedPartitions,
-                hints, cacheSlotWithSlotName);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java
index ab5dd01d78..e1469397e0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapTableSink.java
@@ -121,12 +121,6 @@ public class LogicalOlapTableSink<CHILD_TYPE extends Plan> 
extends LogicalUnary<
                 Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalOlapTableSink<>(database, targetTable, cols, 
partitionIds, groupExpression,
-                logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOneRowRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOneRowRelation.java
index 27ed333233..575c13b75b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOneRowRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOneRowRelation.java
@@ -79,11 +79,6 @@ public class LogicalOneRowRelation extends LogicalLeaf 
implements OneRowRelation
         return new LogicalOneRowRelation(projects, groupExpression, 
Optional.of(getLogicalProperties()));
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalOneRowRelation(projects, Optional.empty(), 
logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java
index d9c5f47693..3c6da5534a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPartitionTopN.java
@@ -188,15 +188,10 @@ public class LogicalPartitionTopN<CHILD_TYPE extends 
Plan> extends LogicalUnary<
             groupExpression, Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public LogicalPartitionTopN<Plan> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalPartitionTopN<>(function, partitionKeys, orderKeys, 
hasGlobalLimit, partitionLimit,
-            Optional.empty(), logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalPartitionTopN<>(function, partitionKeys, orderKeys, 
hasGlobalLimit, partitionLimit,
                 groupExpression, logicalProperties, children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
index 6c809173ca..2d1e2db3cc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalProject.java
@@ -181,15 +181,10 @@ public class LogicalProject<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_
                 groupExpression, Optional.of(getLogicalProperties()), child(), 
isDistinct);
     }
 
-    @Override
-    public LogicalProject<Plan> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalProject<>(projects, excepts, canEliminate, 
Optional.empty(), logicalProperties, child(),
-                isDistinct);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalProject<>(projects, excepts, canEliminate,
                 groupExpression, logicalProperties, children.get(0), 
isDistinct);
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRepeat.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRepeat.java
index 9e3241f072..6c4dc30631 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRepeat.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRepeat.java
@@ -149,15 +149,10 @@ public class LogicalRepeat<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
                 Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public LogicalRepeat<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalRepeat<>(groupingSets, outputExpressions, 
Optional.empty(),
-                logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalRepeat<>(groupingSets, outputExpressions, 
groupExpression, logicalProperties,
                 children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
index 47a53ee703..1b0e51d17b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java
@@ -60,11 +60,6 @@ public class LogicalSchemaScan extends LogicalRelation 
implements Scan {
         return new LogicalSchemaScan(id, table, qualifier, groupExpression, 
Optional.of(getLogicalProperties()));
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalSchemaScan(id, table, qualifier, groupExpression, 
logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSelectHint.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSelectHint.java
index 2444a2fe3f..260d29a1ab 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSelectHint.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSelectHint.java
@@ -48,11 +48,6 @@ public class LogicalSelectHint<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHI
         this(hints, Optional.empty(), Optional.empty(), child);
     }
 
-    public LogicalSelectHint(Map<String, SelectHint> hints,
-            Optional<LogicalProperties> logicalProperties, CHILD_TYPE child) {
-        this(hints, Optional.empty(), logicalProperties, child);
-    }
-
     /**
      * LogicalSelectHint's full parameter constructor.
      * @param hints hint maps, key is hint name, e.g. 'SET_VAR', and value is 
parameter pairs, e.g. query_time=100
@@ -79,7 +74,7 @@ public class LogicalSelectHint<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHI
 
     @Override
     public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
-        return visitor.visitLogicalSelectHint((LogicalSelectHint<Plan>) this, 
context);
+        return visitor.visitLogicalSelectHint(this, context);
     }
 
     @Override
@@ -92,14 +87,10 @@ public class LogicalSelectHint<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHI
         return new LogicalSelectHint<>(hints, groupExpression, 
Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public LogicalSelectHint<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalSelectHint<>(hints, Optional.empty(), 
logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalSelectHint<>(hints, groupExpression, 
logicalProperties, children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
index 569c895df7..5918422966 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSort.java
@@ -131,14 +131,10 @@ public class LogicalSort<CHILD_TYPE extends Plan> extends 
LogicalUnary<CHILD_TYP
                 normalized);
     }
 
-    @Override
-    public LogicalSort<Plan> withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalSort<>(orderKeys, Optional.empty(), 
logicalProperties, child(), false);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalSort<>(orderKeys, groupExpression, 
logicalProperties, children.get(0),
                 normalized);
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
index fd99c98f4a..53bbee0002 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSubQueryAlias.java
@@ -165,15 +165,10 @@ public class LogicalSubQueryAlias<CHILD_TYPE extends 
Plan> extends LogicalUnary<
                 Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public LogicalSubQueryAlias<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalSubQueryAlias<>(qualifier, columnAliases, 
Optional.empty(),
-                logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalSubQueryAlias<>(qualifier, columnAliases, 
groupExpression, logicalProperties,
                 children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java
index 1d0fe13179..e068048d28 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java
@@ -58,11 +58,6 @@ public class LogicalTVFRelation extends LogicalRelation 
implements TVFRelation {
         return new LogicalTVFRelation(id, function, groupExpression, 
Optional.of(getLogicalProperties()));
     }
 
-    @Override
-    public LogicalTVFRelation 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new LogicalTVFRelation(id, function, Optional.empty(), 
logicalProperties);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
index 3e21c46ab8..348a709176 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTopN.java
@@ -131,14 +131,10 @@ public class LogicalTopN<CHILD_TYPE extends Plan> extends 
LogicalUnary<CHILD_TYP
                 child());
     }
 
-    @Override
-    public LogicalTopN<Plan> withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalTopN<>(orderKeys, limit, offset, Optional.empty(), 
logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalTopN<>(orderKeys, limit, offset, groupExpression, 
logicalProperties, children.get(0));
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java
index 68e3bdcb61..d74af5a3af 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalUnion.java
@@ -124,12 +124,6 @@ public class LogicalUnion extends LogicalSetOperation 
implements Union, OutputPr
                 Optional.of(getLogicalProperties()), children);
     }
 
-    @Override
-    public LogicalUnion withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalUnion(qualifier, outputs, constantExprsList, 
hasPushedFilter,
-                Optional.empty(), logicalProperties, children);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java
index 76b07f7359..fcfe9906d6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalWindow.java
@@ -109,15 +109,10 @@ public class LogicalWindow<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
                 groupExpression, Optional.of(getLogicalProperties()), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new LogicalWindow<>(windowExpressions, isChecked,
-                Optional.empty(), logicalProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new LogicalWindow<>(windowExpressions, isChecked, 
groupExpression, logicalProperties, children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java
index 5ae762dcbd..dd4ffbe796 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java
@@ -116,12 +116,6 @@ public class UsingJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends Pl
                 hashJoinConjuncts, groupExpression, 
Optional.of(getLogicalProperties()), hint, markJoinSlotReference);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new UsingJoin(joinType, child(0), child(1), otherJoinConjuncts,
-                hashJoinConjuncts, groupExpression, logicalProperties, hint, 
markJoinSlotReference);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAssertNumRows.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAssertNumRows.java
index 201ff8c49b..cb1d175b39 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAssertNumRows.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalAssertNumRows.java
@@ -115,15 +115,10 @@ public class PhysicalAssertNumRows<CHILD_TYPE extends 
Plan> extends PhysicalUnar
                 getLogicalProperties(), physicalProperties, statistics, 
child());
     }
 
-    @Override
-    public PhysicalAssertNumRows<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalAssertNumRows<>(assertNumRowsElement, 
Optional.empty(),
-                logicalProperties.get(), physicalProperties, statistics, 
child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalAssertNumRows<>(assertNumRowsElement, 
groupExpression,
                 logicalProperties.get(), physicalProperties, statistics, 
children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEAnchor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEAnchor.java
index 4d4dd60e4f..d85a73d1b2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEAnchor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEAnchor.java
@@ -116,15 +116,10 @@ public class PhysicalCTEAnchor<
         return new PhysicalCTEAnchor<>(cteId, groupExpression, 
getLogicalProperties(), child(0), child(1));
     }
 
-    @Override
-    public PhysicalCTEAnchor<Plan, Plan> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalCTEAnchor<>(cteId,
-                Optional.empty(), logicalProperties.get(), child(0), child(1));
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 2);
         return new PhysicalCTEAnchor<>(cteId, groupExpression, 
logicalProperties.get(), children.get(0),
                 children.get(1));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEConsumer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEConsumer.java
index 7e2fcde661..91c0f2a403 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEConsumer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEConsumer.java
@@ -154,12 +154,6 @@ public class PhysicalCTEConsumer extends PhysicalRelation {
                 groupExpression, getLogicalProperties());
     }
 
-    @Override
-    public PhysicalCTEConsumer 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalCTEConsumer(cteId, consumerToProducerSlotMap, 
producerToConsumerSlotMap,
-            Optional.empty(), logicalProperties.get());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEProducer.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEProducer.java
index c63ce08f20..bf148b17ac 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEProducer.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalCTEProducer.java
@@ -116,11 +116,6 @@ public class PhysicalCTEProducer<CHILD_TYPE extends Plan> 
extends PhysicalUnary<
         return new PhysicalCTEProducer<>(cteId, projects, groupExpression, 
getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalCTEProducer<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalCTEProducer<>(cteId, projects, Optional.empty(), 
logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
index d64898dc5c..6fc7f0bd44 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java
@@ -104,15 +104,10 @@ public class PhysicalDistribute<CHILD_TYPE extends Plan> 
extends PhysicalUnary<C
         return new PhysicalDistribute<>(distributionSpec, groupExpression, 
getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalDistribute<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalDistribute<>(distributionSpec, Optional.empty(),
-                logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalDistribute<>(distributionSpec, groupExpression,
                 logicalProperties.get(), children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEmptyRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEmptyRelation.java
index a77a5914de..d0865b83b8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEmptyRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEmptyRelation.java
@@ -73,12 +73,6 @@ public class PhysicalEmptyRelation extends PhysicalLeaf 
implements EmptyRelation
                 logicalPropertiesSupplier.get(), physicalProperties, 
statistics);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalEmptyRelation(projects, Optional.empty(),
-                logicalProperties.get(), physicalProperties, statistics);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
index eaa9459535..2dcc0bd0cc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalEsScan.java
@@ -101,11 +101,6 @@ public class PhysicalEsScan extends PhysicalRelation {
         return new PhysicalEsScan(id, table, qualifier, distributionSpec, 
groupExpression, getLogicalProperties());
     }
 
-    @Override
-    public PhysicalEsScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalEsScan(id, table, qualifier, distributionSpec, 
groupExpression, logicalProperties.get());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalExcept.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalExcept.java
index 2b8587a77a..762d0d6d03 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalExcept.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalExcept.java
@@ -78,12 +78,6 @@ public class PhysicalExcept extends PhysicalSetOperation {
         return new PhysicalExcept(qualifier, groupExpression, 
getLogicalProperties(), children);
     }
 
-    @Override
-    public PhysicalExcept withLogicalProperties(
-            Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalExcept(qualifier, Optional.empty(), 
logicalProperties.get(), children);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java
index bd829976ee..f9584c0c46 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java
@@ -107,12 +107,6 @@ public class PhysicalFileScan extends PhysicalRelation {
             groupExpression, getLogicalProperties(), conjuncts);
     }
 
-    @Override
-    public PhysicalFileScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalFileScan(id, table, qualifier, distributionSpec,
-            groupExpression, logicalProperties.get(), conjuncts);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
index f4c9403640..c46adff343 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java
@@ -113,14 +113,10 @@ public class PhysicalFilter<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHILD
         return new PhysicalFilter<>(conjuncts, groupExpression, 
getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalFilter<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalFilter<>(conjuncts, Optional.empty(), 
logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalFilter<>(conjuncts, groupExpression, 
logicalProperties.get(), children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalGenerate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalGenerate.java
index e148d5b0fd..2e7d09d3f9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalGenerate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalGenerate.java
@@ -137,15 +137,10 @@ public class PhysicalGenerate<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHI
                 groupExpression, getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalGenerate<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalGenerate<>(generators, generatorOutput,
-                Optional.empty(), logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalGenerate<>(generators, generatorOutput,
                 groupExpression, logicalProperties.get(), children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java
index 2621e061aa..01c9065ab3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java
@@ -245,16 +245,10 @@ public class PhysicalHashAggregate<CHILD_TYPE extends 
Plan> extends PhysicalUnar
                 aggregateParam, maybeUsingStream, groupExpression, 
getLogicalProperties(), requireProperties, child());
     }
 
-    @Override
-    public PhysicalHashAggregate<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalHashAggregate<>(groupByExpressions, 
outputExpressions, partitionExpressions,
-                aggregateParam, maybeUsingStream, Optional.empty(), 
logicalProperties.get(),
-                requireProperties, child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalHashAggregate<>(groupByExpressions, 
outputExpressions, partitionExpressions,
                 aggregateParam, maybeUsingStream, groupExpression, 
logicalProperties.get(),
                 requireProperties, children.get(0));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
index edba3fb717..c8ed9ec8ed 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java
@@ -175,16 +175,10 @@ public class PhysicalHashJoin<
                 groupExpression, getLogicalProperties(), left(), right());
     }
 
-    @Override
-    public PhysicalHashJoin<LEFT_CHILD_TYPE, RIGHT_CHILD_TYPE> 
withLogicalProperties(
-            Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalHashJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
-                Optional.empty(), logicalProperties.get(), left(), right());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 2);
         return new PhysicalHashJoin<>(joinType, hashJoinConjuncts, 
otherJoinConjuncts, hint, markJoinSlotReference,
                 groupExpression, logicalProperties.get(), children.get(0), 
children.get(1));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalIntersect.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalIntersect.java
index 5bf7b43e49..3df464e33f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalIntersect.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalIntersect.java
@@ -78,12 +78,6 @@ public class PhysicalIntersect extends PhysicalSetOperation {
         return new PhysicalIntersect(qualifier, groupExpression, 
getLogicalProperties(), children);
     }
 
-    @Override
-    public PhysicalIntersect withLogicalProperties(
-            Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalIntersect(qualifier, Optional.empty(), 
logicalProperties.get(), children);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java
index 31319cff6d..dd98dd7452 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalJdbcScan.java
@@ -101,11 +101,6 @@ public class PhysicalJdbcScan extends PhysicalRelation {
         return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, 
groupExpression, getLogicalProperties());
     }
 
-    @Override
-    public PhysicalJdbcScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalJdbcScan(id, table, qualifier, distributionSpec, 
groupExpression, logicalProperties.get());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
index 4aef608d1b..dd4e6388cf 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalLimit.java
@@ -117,14 +117,10 @@ public class PhysicalLimit<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHILD_
         return new PhysicalLimit<>(limit, offset, phase, groupExpression, 
getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalLimit<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalLimit<>(limit, offset, phase, 
logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalLimit<>(limit, offset, phase, groupExpression, 
logicalProperties.get(), children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
index f42cfe0924..5ba9f60a86 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalNestedLoopJoin.java
@@ -140,17 +140,10 @@ public class PhysicalNestedLoopJoin<
                 groupExpression, getLogicalProperties(), left(), right());
     }
 
-    @Override
-    public PhysicalNestedLoopJoin<LEFT_CHILD_TYPE, RIGHT_CHILD_TYPE> 
withLogicalProperties(
-            Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalNestedLoopJoin<>(joinType,
-                hashJoinConjuncts, otherJoinConjuncts, markJoinSlotReference, 
Optional.empty(),
-                logicalProperties.get(), left(), right());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 2);
         return new PhysicalNestedLoopJoin<>(joinType,
                 hashJoinConjuncts, otherJoinConjuncts, markJoinSlotReference, 
groupExpression,
                 logicalProperties.get(), children.get(0), children.get(1));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
index b7beeb976f..87823d9bc7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapScan.java
@@ -157,13 +157,6 @@ public class PhysicalOlapScan extends PhysicalRelation 
implements OlapScan {
                 groupExpression, getLogicalProperties());
     }
 
-    @Override
-    public PhysicalOlapScan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalOlapScan(id, olapTable, qualifier, selectedIndexId, 
selectedTabletIds,
-                selectedPartitionIds, distributionSpec, preAggStatus, 
baseOutputs, Optional.empty(),
-                logicalProperties.get());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
index 40cfc65768..915c1eec70 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOlapTableSink.java
@@ -173,12 +173,6 @@ public class PhysicalOlapTableSink<CHILD_TYPE extends 
Plan> extends PhysicalUnar
                 groupExpression, getLogicalProperties(), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalOlapTableSink<>(database, targetTable, 
partitionIds, cols, singleReplicaLoad,
-                groupExpression, logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOneRowRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOneRowRelation.java
index 6cc6c3f4d1..00328f739e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOneRowRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalOneRowRelation.java
@@ -77,12 +77,6 @@ public class PhysicalOneRowRelation extends PhysicalLeaf 
implements OneRowRelati
                 logicalPropertiesSupplier.get(), physicalProperties, 
statistics);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalOneRowRelation(projects, Optional.empty(),
-                logicalProperties.get(), physicalProperties, statistics);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPartitionTopN.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPartitionTopN.java
index 9c0e290ff5..a64528ea9f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPartitionTopN.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalPartitionTopN.java
@@ -161,12 +161,6 @@ public class PhysicalPartitionTopN<CHILD_TYPE extends 
Plan> extends PhysicalUnar
             groupExpression, getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalPartitionTopN<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalPartitionTopN<>(function, partitionKeys, orderKeys, 
hasGlobalLimit, partitionLimit,
-            Optional.empty(), logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
index 1131056c2d..6c36045df4 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalProject.java
@@ -103,7 +103,7 @@ public class PhysicalProject<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHIL
     @Override
     public PhysicalProject<Plan> withChildren(List<Plan> children) {
         Preconditions.checkArgument(children.size() == 1);
-        return new PhysicalProject<Plan>(projects,
+        return new PhysicalProject<>(projects,
                 groupExpression,
                 getLogicalProperties(),
                 physicalProperties,
@@ -117,14 +117,10 @@ public class PhysicalProject<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHIL
         return new PhysicalProject<>(projects, groupExpression, 
getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalProject<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalProject<>(projects, Optional.empty(), 
logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalProject<>(projects, groupExpression, 
logicalProperties.get(), children.get(0));
     }
 
@@ -142,12 +138,12 @@ public class PhysicalProject<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHIL
      * @return new project
      */
     public PhysicalProject<Plan> withProjectionsAndChild(List<NamedExpression> 
projections, Plan child) {
-        return new PhysicalProject<Plan>(ImmutableList.copyOf(projections),
+        return new PhysicalProject<>(ImmutableList.copyOf(projections),
                 groupExpression,
                 getLogicalProperties(),
                 physicalProperties,
                 statistics,
                 child
-                );
+        );
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
index ea5fa4e723..c2ca598ab6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalQuickSort.java
@@ -84,14 +84,10 @@ public class PhysicalQuickSort<CHILD_TYPE extends Plan> 
extends AbstractPhysical
         return new PhysicalQuickSort<>(orderKeys, phase, groupExpression, 
getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalQuickSort<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalQuickSort<>(orderKeys, phase, Optional.empty(), 
logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalQuickSort<>(orderKeys, phase, groupExpression, 
logicalProperties.get(), children.get(0));
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalRepeat.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalRepeat.java
index cfe423a9f6..258b99e128 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalRepeat.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalRepeat.java
@@ -157,15 +157,10 @@ public class PhysicalRepeat<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHILD
                 getLogicalProperties(), physicalProperties, statistics, 
child());
     }
 
-    @Override
-    public PhysicalRepeat<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalRepeat<>(groupingSets, outputExpressions, 
Optional.empty(),
-                logicalProperties.get(), physicalProperties, statistics, 
child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalRepeat<>(groupingSets, outputExpressions, 
groupExpression,
                 logicalProperties.get(), physicalProperties, statistics, 
children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java
index 666a50252c..44e85777c0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java
@@ -69,12 +69,6 @@ public class PhysicalSchemaScan extends PhysicalRelation 
implements Scan {
                 statistics);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalSchemaScan(id, table, qualifier, groupExpression, 
logicalProperties.get(),
-                physicalProperties, statistics);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java
index cc865c9e87..ed57eebcb0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java
@@ -122,12 +122,6 @@ public class PhysicalStorageLayerAggregate extends 
PhysicalRelation {
                 physicalProperties, statistics);
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalStorageLayerAggregate(relation, aggOp, 
Optional.empty(),
-                logicalProperties.get(), physicalProperties, statistics);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTVFRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTVFRelation.java
index 776714a696..dfe5ad1168 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTVFRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTVFRelation.java
@@ -61,12 +61,6 @@ public class PhysicalTVFRelation extends PhysicalRelation 
implements TVFRelation
                 physicalProperties, statistics);
     }
 
-    @Override
-    public PhysicalTVFRelation 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalTVFRelation(id, function, Optional.empty(),
-                logicalProperties.get(), physicalProperties, statistics);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
index 461cce9fab..559f7f2d0c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalTopN.java
@@ -119,14 +119,10 @@ public class PhysicalTopN<CHILD_TYPE extends Plan> 
extends AbstractPhysicalSort<
         return new PhysicalTopN<>(orderKeys, limit, offset, phase, 
groupExpression, getLogicalProperties(), child());
     }
 
-    @Override
-    public PhysicalTopN<CHILD_TYPE> 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalTopN<>(orderKeys, limit, offset, phase, 
Optional.empty(), logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkArgument(children.size() == 1);
         return new PhysicalTopN<>(orderKeys, limit, offset, phase, 
groupExpression, logicalProperties.get(),
                 children.get(0));
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnion.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnion.java
index ac6dbe5e3e..c44dda6a3f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnion.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalUnion.java
@@ -99,12 +99,6 @@ public class PhysicalUnion extends PhysicalSetOperation 
implements Union {
         return new PhysicalUnion(qualifier, constantExprsList, 
groupExpression, getLogicalProperties(), children);
     }
 
-    @Override
-    public PhysicalUnion withLogicalProperties(
-            Optional<LogicalProperties> logicalProperties) {
-        return new PhysicalUnion(qualifier, constantExprsList, 
Optional.empty(), logicalProperties.get(), children);
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalWindow.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalWindow.java
index bd06792655..fe5559940e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalWindow.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalWindow.java
@@ -137,15 +137,10 @@ public class PhysicalWindow<CHILD_TYPE extends Plan> 
extends PhysicalUnary<CHILD
                 getLogicalProperties(), child());
     }
 
-    @Override
-    public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-        return new PhysicalWindow<>(windowFrameGroup, requireProperties, 
Optional.empty(),
-                logicalProperties.get(), child());
-    }
-
     @Override
     public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
             Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
+        Preconditions.checkState(children.size() == 1);
         return new PhysicalWindow<>(windowFrameGroup, requireProperties, 
groupExpression,
                 logicalProperties.get(), children.get(0));
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java
index 7a8aba1bbe..8eb03d5b65 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java
@@ -118,11 +118,6 @@ public class RewriteTopDownJobTest {
             return new LogicalBoundRelation(table, qualifier, groupExpression, 
Optional.of(getLogicalProperties()));
         }
 
-        @Override
-        public Plan withLogicalProperties(Optional<LogicalProperties> 
logicalProperties) {
-            return new LogicalBoundRelation(table, qualifier, 
Optional.empty(), logicalProperties);
-        }
-
         @Override
         public Plan withGroupExprLogicalPropChildren(Optional<GroupExpression> 
groupExpression,
                 Optional<LogicalProperties> logicalProperties, List<Plan> 
children) {
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 3fff39d2de..e4c031e4a8 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 {
             }};
 
         OlapTable table1 = PlanConstructor.newOlapTable(tableId1, "t1", 0);
-        return new LogicalOlapScan(RelationUtil.newRelationId(), table1, 
Collections.emptyList()).withLogicalProperties(
-                Optional.of(new LogicalProperties(() -> 
ImmutableList.of(slot1))));
+        return (LogicalOlapScan) new 
LogicalOlapScan(RelationUtil.newRelationId(), table1,
+                
Collections.emptyList()).withGroupExprLogicalPropChildren(Optional.empty(),
+                Optional.of(new LogicalProperties(() -> 
ImmutableList.of(slot1))), ImmutableList.of());
     }
 
     private LogicalAggregate constructAgg(Plan child) {
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 8b928f4215..63365901a8 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
@@ -252,8 +252,9 @@ public class StatsCalculatorTest {
         SlotReference slot1 = new SlotReference("c1", IntegerType.INSTANCE, 
true, qualifier);
 
         OlapTable table1 = PlanConstructor.newOlapTable(tableId1, "t1", 0);
-        LogicalOlapScan logicalOlapScan1 = new 
LogicalOlapScan(RelationUtil.newRelationId(), table1, Collections.emptyList())
-                .withLogicalProperties(Optional.of(new LogicalProperties(() -> 
ImmutableList.of(slot1))));
+        LogicalOlapScan logicalOlapScan1 = (LogicalOlapScan) new 
LogicalOlapScan(RelationUtil.newRelationId(), table1,
+                
Collections.emptyList()).withGroupExprLogicalPropChildren(Optional.empty(),
+                Optional.of(new LogicalProperties(() -> 
ImmutableList.of(slot1))), ImmutableList.of());
         Group childGroup = newGroup();
         GroupExpression groupExpression = new 
GroupExpression(logicalOlapScan1, ImmutableList.of(childGroup));
         Group ownerGroup = newGroup();
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
index 93d3ea6234..eb508f53c9 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/PlanOutputTest.java
@@ -69,20 +69,6 @@ public class PlanOutputTest {
         }
     }
 
-    @Test
-    public void testWithOutput() {
-        LogicalOlapScan relationPlan = PlanConstructor.newLogicalOlapScan(0, 
"a", 0);
-
-        List<Slot> output = relationPlan.getOutput();
-        // column prune
-        Plan newPlan = 
relationPlan.withOutput(ImmutableList.of(output.get(0)));
-        output = newPlan.getOutput();
-        Assertions.assertEquals(1, output.size());
-        Assertions.assertEquals(output.get(0).getName(), "id");
-        Assertions.assertEquals(output.get(0).getQualifiedName(), "db.a.id");
-        Assertions.assertEquals(output.get(0).getDataType(), 
IntegerType.INSTANCE);
-    }
-
     @Test
     public void testPhysicalPlanMustHaveLogicalProperties() {
         Assertions.assertThrows(NullPointerException.class, () ->
@@ -93,11 +79,6 @@ public class PlanOutputTest {
                         return null;
                     }
 
-                    @Override
-                    public Plan 
withLogicalProperties(Optional<LogicalProperties> logicalProperties) {
-                        return null;
-                    }
-
                     @Override
                     public Plan 
withGroupExprLogicalPropChildren(Optional<GroupExpression> groupExpression,
                             Optional<LogicalProperties> logicalProperties, 
List<Plan> children) {


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

Reply via email to