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: 谢健 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]