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