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

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


The following commit(s) were added to refs/heads/master by this push:
     new 95270eb1ee5 [opt](Nereids) fix comment and remove useless function 
`computeFdItem ` (#38282)
95270eb1ee5 is described below

commit 95270eb1ee5f1aa8d80655e6dd6e38afcd2297bf
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Wed Jul 24 13:56:40 2024 +0800

    [opt](Nereids) fix comment and remove useless function `computeFdItem ` 
(#38282)
    
    ## Proposed changes
    
    1. fix comment in eliminate func deps
    2. remove computeFdItem codes
---
 .../apache/doris/nereids/properties/FuncDeps.java  |  40 ++++--
 .../trees/plans/BlockFuncDepsPropagation.java      |   8 --
 .../nereids/trees/plans/PropagateFuncDeps.java     |  19 ---
 .../trees/plans/logical/LogicalAggregate.java      |  25 ----
 .../trees/plans/logical/LogicalAssertNumRows.java  |   7 -
 .../plans/logical/LogicalCatalogRelation.java      |   5 -
 .../plans/logical/LogicalDeferMaterializeTopN.java |  21 ---
 .../nereids/trees/plans/logical/LogicalExcept.java |  28 ----
 .../nereids/trees/plans/logical/LogicalFilter.java |  11 --
 .../trees/plans/logical/LogicalGenerate.java       |   7 -
 .../nereids/trees/plans/logical/LogicalHaving.java |  11 --
 .../trees/plans/logical/LogicalIntersect.java      |  30 ----
 .../nereids/trees/plans/logical/LogicalJoin.java   | 154 ---------------------
 .../nereids/trees/plans/logical/LogicalLimit.java  |  22 ---
 .../trees/plans/logical/LogicalOneRowRelation.java |  20 ---
 .../nereids/trees/plans/logical/LogicalPlan.java   |   5 -
 .../trees/plans/logical/LogicalProject.java        |  11 --
 .../nereids/trees/plans/logical/LogicalRepeat.java |  12 --
 .../trees/plans/logical/LogicalSubQueryAlias.java  |   8 --
 .../nereids/trees/plans/logical/LogicalTopN.java   |  22 ---
 .../nereids/trees/plans/logical/LogicalUnion.java  |  21 ---
 .../nereids/trees/plans/logical/LogicalView.java   |   7 -
 .../nereids/trees/plans/logical/LogicalWindow.java |  13 --
 23 files changed, 28 insertions(+), 479 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/FuncDeps.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/FuncDeps.java
index e637af8982c..5eebf08ddd7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/FuncDeps.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/FuncDeps.java
@@ -125,23 +125,39 @@ public class FuncDeps {
     }
 
     /**
-     * Reduces a given set of slot sets by eliminating dependencies using a 
breadth-first search (BFS) approach.
+     * Reduces a given set of slot sets by eliminating dependencies based on 
valid functional dependency items.
      * <p>
-     * Let's assume we have the following sets of slots and functional 
dependencies:
-     * Slots: {A, B, C}, {D, E}, {F}
-     * Dependencies: {A} -> {B}, {D, E} -> {F}
-     * The BFS reduction process would look like this:
-     * 1. Initial set: [{A, B, C}, {D, E}, {F}]
-     * 2. Apply {A} -> {B}:
-     *    - New set: [{A, C}, {D, E}, {F}]
-     * 3. Apply {D, E} -> {F}:
-     *    - New set: [{A, C}, {D, E}]
-     * 4. No more dependencies can be applied, output: [{A, C}, {D, E}]
+     * This method works as follows:
+     * 1. Find valid functional dependency items (those not part of circular 
dependencies).
+     * 2. For each valid functional dependency item:
+     *    - If both the determinants and dependencies are present in the 
current set of slots,
+     *      mark the dependencies for elimination.
+     * 3. Remove all marked dependencies from the set of slots.
+     * </p>
+     * <p>
+     * Example:
+     * Given:
+     * - Initial slots: {{A, B, C}, {D, E}, {F, G}}
+     * - Required outputs: {A, D, F}
+     * - Valid functional dependencies: {A} -> {B}, {D, E} -> {G}, {F} -> {G}
+     *
+     * Process:
+     * 1. Start with minSlotSet = {{A, B, C}, {D, E}, {F, G}}
+     * 2. For {A} -> {B}:
+     *    - Both {A} and {B} are in minSlotSet, so mark {B} for elimination
+     * 3. For {D, E} -> {G}:
+     *    - Both {D, E} and {G} are in minSlotSet, so mark {G} for elimination
+     * 4. For {F} -> {G}:
+     *    - Both {F} and {G} are in minSlotSet, but {G} is already marked for 
elimination
+     * 5. Remove eliminated slots: {B} and {G}
+     *
+     * Result: {{A, C}, {D, E}, {F}}
      * </p>
      *
      * @param slots the initial set of slot sets to be reduced
+     * @param requireOutputs the set of slots that must be preserved in the 
output
      * @return the minimal set of slot sets after applying all possible 
reductions
-     */
+    */
     public Set<Set<Slot>> eliminateDeps(Set<Set<Slot>> slots, Set<Slot> 
requireOutputs) {
         Set<Set<Slot>> minSlotSet = Sets.newHashSet(slots);
         Set<Set<Slot>> eliminatedSlots = new HashSet<>();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/BlockFuncDepsPropagation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/BlockFuncDepsPropagation.java
index c7b93af9ceb..f692b5b917f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/BlockFuncDepsPropagation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/BlockFuncDepsPropagation.java
@@ -18,11 +18,8 @@
 package org.apache.doris.nereids.trees.plans;
 
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Block fd propagation, it always returns an empty fd
  */
@@ -32,11 +29,6 @@ public interface BlockFuncDepsPropagation extends 
LogicalPlan {
         return DataTrait.EMPTY_TRAIT;
     }
 
-    @Override
-    default ImmutableSet<FdItem> computeFdItems() {
-        return ImmutableSet.of();
-    }
-
     @Override
     default void computeUnique(DataTrait.Builder builder) {
         // don't generate
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PropagateFuncDeps.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PropagateFuncDeps.java
index f94a13b3f8e..c316ea2462e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PropagateFuncDeps.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PropagateFuncDeps.java
@@ -18,11 +18,8 @@
 package org.apache.doris.nereids.trees.plans;
 
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Propagate fd, keep children's fd
  */
@@ -38,22 +35,6 @@ public interface PropagateFuncDeps extends LogicalPlan {
         children().stream()
                 .map(p -> p.getLogicalProperties().getTrait())
                 .forEach(builder::addDataTrait);
-        ImmutableSet<FdItem> fdItems = computeFdItems();
-        builder.addFdItems(fdItems);
-        return builder.build();
-    }
-
-    @Override
-    default ImmutableSet<FdItem> computeFdItems() {
-        if (children().size() == 1) {
-            // Note when changing function dependencies, we always clone it.
-            // So it's safe to return a reference
-            return child(0).getLogicalProperties().getTrait().getFdItems();
-        }
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-        children().stream()
-                .map(p -> p.getLogicalProperties().getTrait().getFdItems())
-                .forEach(builder::addAll);
         return builder.build();
     }
 
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 c3fef16fdb6..9f65988da95 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
@@ -19,14 +19,10 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
-import org.apache.doris.nereids.properties.TableFdItem;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
 import org.apache.doris.nereids.trees.expressions.Slot;
-import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.expressions.functions.ExpressionTrait;
 import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
 import org.apache.doris.nereids.trees.expressions.functions.agg.Ndv;
@@ -377,27 +373,6 @@ public class LogicalAggregate<CHILD_TYPE extends Plan>
         }
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<SlotReference> groupByExprs = 
getGroupByExpressions().stream()
-                .filter(SlotReference.class::isInstance)
-                .map(SlotReference.class::cast)
-                .collect(ImmutableSet.toImmutableSet());
-
-        // inherit from child
-        ImmutableSet<FdItem> childItems = 
child().getLogicalProperties().getTrait().getFdItems();
-        builder.addAll(childItems);
-
-        // todo: fill the table sets
-        TableFdItem fdItem = 
FdFactory.INSTANCE.createTableFdItem(groupByExprs, true,
-                false, ImmutableSet.of());
-        builder.add(fdItem);
-
-        return builder.build();
-    }
-
     @Override
     public void computeEqualSet(DataTrait.Builder builder) {
         builder.addEqualSet(child().getLogicalProperties().getTrait());
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 718ebd3b9de..ca2a9ff7c7d 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
@@ -20,7 +20,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.AssertNumRowsElement;
 import 
org.apache.doris.nereids.trees.expressions.AssertNumRowsElement.Assertion;
@@ -33,7 +32,6 @@ import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
 import java.util.Objects;
@@ -122,11 +120,6 @@ public class LogicalAssertNumRows<CHILD_TYPE extends Plan> 
extends LogicalUnary<
         return child().getOutput().stream().map(o -> 
o.withNullable(true)).collect(Collectors.toList());
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        return ImmutableSet.of();
-    }
-
     @Override
     public void computeUnique(Builder builder) {
         if (assertNumRowsElement.getDesiredNumOfRows() == 1
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
index 3294bba83cc..5eb9d868cdb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
@@ -143,11 +143,6 @@ public abstract class LogicalCatalogRelation extends 
LogicalRelation implements
         // No uniform slot for catalog relation
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        return computeFdItems(Utils.fastToImmutableSet(getOutputSet()));
-    }
-
     private ImmutableSet<FdItem> computeFdItems(Set<Slot> outputSet) {
         ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeTopN.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeTopN.java
index 0259057696b..9a0d03b52a1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeTopN.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalDeferMaterializeTopN.java
@@ -19,9 +19,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.properties.OrderKey;
 import org.apache.doris.nereids.trees.expressions.ExprId;
@@ -36,7 +33,6 @@ import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
 import java.util.Objects;
@@ -135,23 +131,6 @@ public class LogicalDeferMaterializeTopN<CHILD_TYPE 
extends Plan> extends Logica
         }
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet<FdItem> fdItems = 
child(0).getLogicalProperties().getTrait().getFdItems();
-        if (getLimit() == 1) {
-            ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-            List<Slot> output = getOutput();
-            ImmutableSet<SlotReference> slotSet = output.stream()
-                    .filter(SlotReference.class::isInstance)
-                    .map(SlotReference.class::cast)
-                    .collect(ImmutableSet.toImmutableSet());
-            ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(slotSet, 
true, slotSet);
-            builder.add(fdItem);
-            fdItems = builder.build();
-        }
-        return fdItems;
-    }
-
     @Override
     public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
         return visitor.visitLogicalDeferMaterializeTopN(this, context);
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 cc07c7244e1..3f93b97a624 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
@@ -20,9 +20,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -39,7 +36,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 
 /**
  * Logical Except.
@@ -108,30 +104,6 @@ public class LogicalExcept extends LogicalSetOperation {
                 Optional.empty(), Optional.empty(), children);
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        Set<NamedExpression> output = ImmutableSet.copyOf(getOutput());
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<SlotReference> exprs = output.stream()
-                .filter(SlotReference.class::isInstance)
-                .map(SlotReference.class::cast)
-                .collect(ImmutableSet.toImmutableSet());
-
-        if (qualifier == Qualifier.DISTINCT) {
-            ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(exprs, 
true, exprs);
-            builder.add(fdItem);
-
-            // only inherit from left side
-            ImmutableSet<FdItem> leftFdItems = child(0).getLogicalProperties()
-                    .getTrait().getFdItems();
-
-            builder.addAll(leftFdItems);
-        }
-
-        return builder.build();
-    }
-
     Map<Slot, Slot> constructReplaceMapForChild(int index) {
         Map<Slot, Slot> replaceMap = new HashMap<>();
         List<Slot> output = getOutput();
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 c845431e96d..d23ea3d2395 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
@@ -20,7 +20,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 import org.apache.doris.common.Pair;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -147,16 +146,6 @@ public class LogicalFilter<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
         return new LogicalFilter<>(conjuncts, groupExpression, 
logicalProperties, child);
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<FdItem> childItems = 
child().getLogicalProperties().getTrait().getFdItems();
-        builder.addAll(childItems);
-
-        return builder.build();
-    }
-
     @Override
     public void computeUnique(Builder builder) {
         builder.addUniqueSlot(child(0).getLogicalProperties().getTrait());
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 185964419f1..3dc0577779c 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
@@ -20,7 +20,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -33,7 +32,6 @@ import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 
 import java.util.List;
@@ -156,11 +154,6 @@ public class LogicalGenerate<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD
         return Objects.hash(generators, generatorOutput);
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        return ImmutableSet.of();
-    }
-
     @Override
     public void computeUnique(Builder builder) {
         // don't generate and propagate unique
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 15815845fbd..f4f2178840b 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
@@ -20,7 +20,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 import org.apache.doris.common.Pair;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -134,16 +133,6 @@ public class LogicalHaving<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
         builder.addUniformSlot(child(0).getLogicalProperties().getTrait());
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<FdItem> childItems = 
child().getLogicalProperties().getTrait().getFdItems();
-        builder.addAll(childItems);
-
-        return builder.build();
-    }
-
     @Override
     public void computeEqualSet(Builder builder) {
         builder.addEqualSet(child().getLogicalProperties().getTrait());
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 e3b9cf3ed9f..06f0f7d0ce6 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
@@ -19,9 +19,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -38,7 +35,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 
 /**
  * Logical Intersect.
@@ -159,30 +155,4 @@ public class LogicalIntersect extends LogicalSetOperation {
         }
         builder.replaceFuncDepsBy(constructReplaceMap());
     }
-
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        Set<NamedExpression> output = ImmutableSet.copyOf(getOutput());
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<SlotReference> exprs = output.stream()
-                .filter(SlotReference.class::isInstance)
-                .map(SlotReference.class::cast)
-                .collect(ImmutableSet.toImmutableSet());
-
-        if (qualifier == Qualifier.DISTINCT) {
-            ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(exprs, 
true, exprs);
-            builder.add(fdItem);
-            // inherit from both sides
-            ImmutableSet<FdItem> leftFdItems = child(0).getLogicalProperties()
-                    .getTrait().getFdItems();
-            ImmutableSet<FdItem> rightFdItems = child(1).getLogicalProperties()
-                    .getTrait().getFdItems();
-
-            builder.addAll(leftFdItems);
-            builder.addAll(rightFdItems);
-        }
-
-        return builder.build();
-    }
 }
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 deb652cf826..f557b07d3b6 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
@@ -17,16 +17,12 @@
 
 package org.apache.doris.nereids.trees.plans.logical;
 
-import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.Pair;
 import org.apache.doris.nereids.hint.DistributeHint;
 import org.apache.doris.nereids.jobs.joinorder.hypergraph.bitmap.LongBitmap;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
-import org.apache.doris.nereids.properties.TableFdItem;
 import org.apache.doris.nereids.rules.exploration.join.JoinReorderContext;
 import org.apache.doris.nereids.trees.expressions.EqualPredicate;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
@@ -43,7 +39,6 @@ import 
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.ExpressionUtils;
 import org.apache.doris.nereids.util.ImmutableEqualSet;
 import org.apache.doris.nereids.util.JoinUtils;
-import org.apache.doris.nereids.util.PlanUtils;
 import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
@@ -457,155 +452,6 @@ public class LogicalJoin<LEFT_CHILD_TYPE extends Plan, 
RIGHT_CHILD_TYPE extends
         return Pair.of(leftKeys, rightKeys);
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-        if (isMarkJoin() || joinType.isNullAwareLeftAntiJoin()
-                || joinType.isFullOuterJoin()
-                || !otherJoinConjuncts.isEmpty()) {
-            return ImmutableSet.of();
-        } else if (joinType.isLeftAntiJoin() || joinType.isLefSemiJoin()) {
-            return left().getLogicalProperties().getTrait().getFdItems();
-        } else if (joinType.isRightSemiJoin() || joinType.isRightAntiJoin()) {
-            return right().getLogicalProperties().getTrait().getFdItems();
-        } else if (joinType.isInnerJoin()) {
-            Pair<Set<Slot>, Set<Slot>> keys = extractNullRejectHashKeys();
-            if (keys == null) {
-                return ImmutableSet.of();
-            }
-            Set<Slot> leftSlotSet = keys.first;
-            Set<Slot> rightSlotSet = keys.second;
-
-            // enhance the fd from candidate to formal
-            ImmutableSet<FdItem> leftItems = 
left().getLogicalProperties().getTrait().getFdItems();
-            leftItems.stream().filter(e -> e.isCandidate()).forEach(f -> {
-                        if (leftSlotSet.containsAll(f.getParentExprs())) {
-                            f.setCandidate(false);
-                        }
-                    }
-            );
-            boolean isLeftUnique = leftItems.stream().filter(e -> 
e.isCandidate())
-                    .anyMatch(f -> 
leftSlotSet.containsAll(f.getParentExprs()));
-
-            ImmutableSet<FdItem> rightItems = 
right().getLogicalProperties().getTrait().getFdItems();
-            rightItems.stream().filter(e -> e.isCandidate()).forEach(f -> {
-                        if (rightSlotSet.containsAll(f.getParentExprs())) {
-                            f.setCandidate(false);
-                        }
-                    }
-            );
-            boolean isRightUnique = rightItems.stream().filter(e -> 
e.isCandidate())
-                    .anyMatch(f -> 
rightSlotSet.containsAll(f.getParentExprs()));
-
-            if (isRightUnique) {
-                // n to 1 unique
-                ImmutableSet<TableIf> rightTableSet = 
PlanUtils.getTableSet((LogicalPlan) right());
-                leftItems.stream().filter(e -> e.isUnique()).forEach(f -> {
-                    TableFdItem tableFdItem = 
FdFactory.INSTANCE.createTableFdItem(f.getParentExprs(),
-                            f.isUnique(), false, rightTableSet);
-                            builder.add(tableFdItem);
-                        }
-                );
-            } else if (isLeftUnique) {
-                // n to 1 unique
-                ImmutableSet<TableIf> leftTableSet = 
PlanUtils.getTableSet((LogicalPlan) left());
-                rightItems.stream().filter(e -> e.isUnique()).forEach(f -> {
-                            TableFdItem tableFdItem = 
FdFactory.INSTANCE.createTableFdItem(f.getParentExprs(),
-                                    f.isUnique(), false, leftTableSet);
-                            builder.add(tableFdItem);
-                        }
-                );
-            } else {
-                // n to n, set the unique false
-                leftItems.stream().forEach(e ->
-                        e.setUnique(false)
-                );
-                rightItems.stream().forEach(e ->
-                        e.setUnique(false)
-                );
-            }
-            builder.addAll(leftItems);
-            builder.addAll(rightItems);
-            return builder.build();
-        } else if (joinType.isLeftOuterJoin()) {
-            Pair<Set<Slot>, Set<Slot>> keys = extractNullRejectHashKeys();
-            if (keys == null) {
-                return ImmutableSet.of();
-            }
-            Set<Slot> leftSlotSet = keys.first;
-            Set<Slot> rightSlotSet = keys.second;
-
-            // enhance the fd from candidate to formal
-            ImmutableSet<FdItem> leftItems = 
left().getLogicalProperties().getTrait().getFdItems();
-            leftItems.stream().filter(e -> e.isCandidate()).forEach(f -> {
-                        if (leftSlotSet.containsAll(f.getParentExprs())) {
-                            f.setCandidate(false);
-                        }
-                    }
-            );
-
-            ImmutableSet<FdItem> rightItems = 
right().getLogicalProperties().getTrait().getFdItems();
-            boolean isRightUnique = rightItems.stream().filter(e -> 
e.isCandidate())
-                    .anyMatch(f -> 
rightSlotSet.containsAll(f.getParentExprs()));
-            if (isRightUnique) {
-                // n to 1 unique
-                ImmutableSet<TableIf> rightTableSet = 
PlanUtils.getTableSet((LogicalPlan) right());
-                leftItems.stream().filter(e -> e.isUnique()).forEach(f -> {
-                            TableFdItem tableFdItem = 
FdFactory.INSTANCE.createTableFdItem(f.getParentExprs(),
-                                    f.isUnique(), false, rightTableSet);
-                            builder.add(tableFdItem);
-                        }
-                );
-            } else {
-                // n to n, set the unique false
-                leftItems.stream().forEach(e ->
-                        e.setUnique(false)
-                );
-            }
-            builder.addAll(leftItems);
-            return builder.build();
-        } else if (joinType.isRightOuterJoin()) {
-            Pair<Set<Slot>, Set<Slot>> keys = extractNullRejectHashKeys();
-            if (keys == null) {
-                return ImmutableSet.of();
-            }
-            Set<Slot> leftSlotSet = keys.first;
-            Set<Slot> rightSlotSet = keys.second;
-
-            // enhance the fd from candidate to formal
-            ImmutableSet<FdItem> leftItems = 
left().getLogicalProperties().getTrait().getFdItems();
-            boolean isLeftUnique = leftItems.stream().filter(e -> 
e.isCandidate())
-                    .anyMatch(f -> 
leftSlotSet.containsAll(f.getParentExprs()));
-
-            ImmutableSet<FdItem> rightItems = 
right().getLogicalProperties().getTrait().getFdItems();
-            rightItems.stream().filter(e -> e.isCandidate()).forEach(f -> {
-                        if (rightSlotSet.containsAll(f.getParentExprs())) {
-                            f.setCandidate(false);
-                        }
-                    }
-            );
-            if (isLeftUnique) {
-                // n to 1 unique
-                ImmutableSet<TableIf> leftTableSet = 
PlanUtils.getTableSet((LogicalPlan) left());
-                rightItems.stream().filter(e -> e.isUnique()).forEach(f -> {
-                            TableFdItem tableFdItem = 
FdFactory.INSTANCE.createTableFdItem(f.getParentExprs(),
-                                    f.isUnique(), false, leftTableSet);
-                            builder.add(tableFdItem);
-                        }
-                );
-            } else {
-                // n to n, set the unique false
-                rightItems.stream().forEach(e ->
-                        e.setUnique(false)
-                );
-            }
-            builder.addAll(rightItems);
-            return builder.build();
-        } else {
-            return ImmutableSet.of();
-        }
-    }
-
     /**
      * get Equal slot from join
      */
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 09ffe62853c..071e93ca48d 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
@@ -19,13 +19,9 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
-import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.plans.LimitPhase;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.PlanType;
@@ -35,7 +31,6 @@ import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
 import java.util.Objects;
@@ -165,23 +160,6 @@ public class LogicalLimit<CHILD_TYPE extends Plan> extends 
LogicalUnary<CHILD_TY
         }
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet<FdItem> fdItems = 
child(0).getLogicalProperties().getTrait().getFdItems();
-        if (getLimit() == 1 && !phase.isLocal()) {
-            ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-            List<Slot> output = getOutput();
-            ImmutableSet<SlotReference> slotSet = output.stream()
-                    .filter(SlotReference.class::isInstance)
-                    .map(SlotReference.class::cast)
-                    .collect(ImmutableSet.toImmutableSet());
-            ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(slotSet, 
true, slotSet);
-            builder.add(fdItem);
-            fdItems = builder.build();
-        }
-        return fdItems;
-    }
-
     @Override
     public void computeEqualSet(DataTrait.Builder builder) {
         builder.addEqualSet(child().getLogicalProperties().getTrait());
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 c4851a5f14c..7023815c7c5 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
@@ -19,15 +19,11 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Alias;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
 import org.apache.doris.nereids.trees.expressions.Slot;
-import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.nereids.trees.plans.RelationId;
@@ -36,14 +32,12 @@ import 
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
-import java.util.Set;
 
 /**
  * A relation that contains only one row consist of some constant expressions.
@@ -152,20 +146,6 @@ public class LogicalOneRowRelation extends LogicalRelation 
implements OneRowRela
         getOutput().forEach(builder::addUniformSlot);
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        Set<NamedExpression> output = ImmutableSet.copyOf(getOutput());
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-        ImmutableSet<SlotReference> slotSet = output.stream()
-                .filter(SlotReference.class::isInstance)
-                .map(SlotReference.class::cast)
-                .collect(ImmutableSet.toImmutableSet());
-        ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(slotSet, true, 
slotSet);
-        builder.add(fdItem);
-
-        return builder.build();
-    }
-
     @Override
     public void computeEqualSet(DataTrait.Builder builder) {
         Map<Expression, NamedExpression> aliasMap = new HashMap<>();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPlan.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPlan.java
index c7eb8c838f2..f23d3f8d7a4 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPlan.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalPlan.java
@@ -18,7 +18,6 @@
 package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.trees.expressions.Slot;
 import org.apache.doris.nereids.trees.plans.Plan;
 
@@ -68,8 +67,6 @@ public interface LogicalPlan extends Plan {
         computeUnique(fdBuilder);
         computeEqualSet(fdBuilder);
         computeFd(fdBuilder);
-        ImmutableSet<FdItem> fdItems = computeFdItems();
-        fdBuilder.addFdItems(fdItems);
 
         for (Slot slot : getOutput()) {
             Set<Slot> o = ImmutableSet.of(slot);
@@ -98,8 +95,6 @@ public interface LogicalPlan extends Plan {
         return fdBuilder.build();
     }
 
-    ImmutableSet<FdItem> computeFdItems();
-
     void computeUnique(DataTrait.Builder builder);
 
     void computeUniform(DataTrait.Builder builder);
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 5f7964aa7dd..44b97086aa0 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
@@ -21,7 +21,6 @@ import org.apache.doris.nereids.analyzer.Unbound;
 import org.apache.doris.nereids.analyzer.UnboundStar;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Alias;
 import org.apache.doris.nereids.trees.expressions.BoundStar;
@@ -211,16 +210,6 @@ public class LogicalProject<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_
         return logicalProject;
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<FdItem> childItems = 
child().getLogicalProperties().getTrait().getFdItems();
-        builder.addAll(childItems);
-
-        return builder.build();
-    }
-
     @Override
     public void computeUnique(DataTrait.Builder builder) {
         builder.addUniqueSlot(child(0).getLogicalProperties().getTrait());
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 758273a1191..10695f65550 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
@@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
@@ -34,7 +33,6 @@ import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
 import java.util.Objects;
@@ -195,16 +193,6 @@ public class LogicalRepeat<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
         builder.addUniformSlot(child(0).getLogicalProperties().getTrait());
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<FdItem> childItems = 
child().getLogicalProperties().getTrait().getFdItems();
-        builder.addAll(childItems);
-
-        return builder.build();
-    }
-
     @Override
     public void computeEqualSet(DataTrait.Builder builder) {
         builder.addEqualSet(child().getLogicalProperties().getTrait());
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 04f3ad34b49..49e724f431b 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
@@ -19,7 +19,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -31,7 +30,6 @@ import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang3.StringUtils;
 
@@ -185,12 +183,6 @@ public class LogicalSubQueryAlias<CHILD_TYPE extends Plan> 
extends LogicalUnary<
         builder.replaceUniformBy(replaceMap);
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        // TODO: inherit from child with replaceMap
-        return ImmutableSet.of();
-    }
-
     @Override
     public void computeEqualSet(DataTrait.Builder builder) {
         builder.addEqualSet(child(0).getLogicalProperties().getTrait());
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 a791981511b..9c7cfacad8d 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
@@ -19,14 +19,10 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.properties.OrderKey;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
-import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.nereids.trees.plans.algebra.TopN;
@@ -37,7 +33,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
 import java.util.Objects;
@@ -191,21 +186,4 @@ public class LogicalTopN<CHILD_TYPE extends Plan> extends 
LogicalUnary<CHILD_TYP
     public void computeFd(DataTrait.Builder builder) {
         builder.addFuncDepsDG(child().getLogicalProperties().getTrait());
     }
-
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet<FdItem> fdItems = 
child(0).getLogicalProperties().getTrait().getFdItems();
-        if (getLimit() == 1) {
-            ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-            List<Slot> output = getOutput();
-            ImmutableSet<SlotReference> slotSet = output.stream()
-                    .filter(SlotReference.class::isInstance)
-                    .map(SlotReference.class::cast)
-                    .collect(ImmutableSet.toImmutableSet());
-            ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(slotSet, 
true, slotSet);
-            builder.add(fdItem);
-            fdItems = builder.build();
-        }
-        return fdItems;
-    }
 }
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 4a4daf6d471..459044100b6 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
@@ -19,9 +19,6 @@ package org.apache.doris.nereids.trees.plans.logical;
 
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
-import org.apache.doris.nereids.properties.ExprFdItem;
-import org.apache.doris.nereids.properties.FdFactory;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
@@ -283,22 +280,4 @@ public class LogicalUnion extends LogicalSetOperation 
implements Union, OutputPr
     public void computeFd(DataTrait.Builder builder) {
         // don't generate
     }
-
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        Set<NamedExpression> output = ImmutableSet.copyOf(getOutput());
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-
-        ImmutableSet<SlotReference> exprs = output.stream()
-                .filter(SlotReference.class::isInstance)
-                .map(SlotReference.class::cast)
-                .collect(ImmutableSet.toImmutableSet());
-
-        if (qualifier == Qualifier.DISTINCT) {
-            ExprFdItem fdItem = FdFactory.INSTANCE.createExprFdItem(exprs, 
true, exprs);
-            builder.add(fdItem);
-        }
-
-        return builder.build();
-    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
index 1d5cb4aa54e..9a6a26dfeeb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalView.java
@@ -22,7 +22,6 @@ import org.apache.doris.nereids.exceptions.AnalysisException;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.DataTrait;
 import org.apache.doris.nereids.properties.DataTrait.Builder;
-import org.apache.doris.nereids.properties.FdItem;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Slot;
@@ -32,7 +31,6 @@ import 
org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
 import org.apache.doris.nereids.util.Utils;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 
 import java.util.List;
 import java.util.Objects;
@@ -128,11 +126,6 @@ public class LogicalView<BODY extends Plan> extends 
LogicalUnary<BODY> {
         return child().getOutput();
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        return ((LogicalPlan) child()).computeFdItems();
-    }
-
     @Override
     public Plan withChildren(List<Plan> children) {
         return new LogicalView<>(view, (LogicalPlan) children.get(0));
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 163d533db6e..8eabe691751 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
@@ -293,19 +293,6 @@ public class LogicalWindow<CHILD_TYPE extends Plan> 
extends LogicalUnary<CHILD_T
         // TODO: if partition by keys are uniform, output is unique
     }
 
-    @Override
-    public ImmutableSet<FdItem> computeFdItems() {
-        ImmutableSet.Builder<FdItem> builder = ImmutableSet.builder();
-        ImmutableSet<FdItem> childItems = 
child().getLogicalProperties().getTrait().getFdItems();
-        builder.addAll(childItems);
-
-        for (NamedExpression namedExpression : windowExpressions) {
-            updateFuncDepsByWindowExpr(namedExpression, builder);
-        }
-
-        return builder.build();
-    }
-
     @Override
     public void computeUnique(Builder builder) {
         builder.addUniqueSlot(child(0).getLogicalProperties().getTrait());


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

Reply via email to