seawinde commented on code in PR #39629: URL: https://github.com/apache/doris/pull/39629#discussion_r1724198661
########## fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/mapping/EquivalenceClassMapping.java: ########## @@ -30,39 +31,41 @@ * This will extract the equivalence class set in EquivalenceClass and mapping set in * two different EquivalenceClass. */ -public class EquivalenceClassSetMapping extends Mapping { +public class EquivalenceClassMapping extends Mapping { - private final Map<Set<SlotReference>, Set<SlotReference>> equivalenceClassSetMap; + private final Map<List<SlotReference>, List<SlotReference>> equivalenceClassSetMap; - public EquivalenceClassSetMapping(Map<Set<SlotReference>, - Set<SlotReference>> equivalenceClassSetMap) { + public EquivalenceClassMapping(Map<List<SlotReference>, + List<SlotReference>> equivalenceClassSetMap) { this.equivalenceClassSetMap = equivalenceClassSetMap; } - public static EquivalenceClassSetMapping of(Map<Set<SlotReference>, Set<SlotReference>> equivalenceClassSetMap) { - return new EquivalenceClassSetMapping(equivalenceClassSetMap); + public static EquivalenceClassMapping of(Map<List<SlotReference>, List<SlotReference>> equivalenceClassSetMap) { + return new EquivalenceClassMapping(equivalenceClassSetMap); } /** * Generate source equivalence set map to target equivalence set */ - public static EquivalenceClassSetMapping generate(EquivalenceClass source, EquivalenceClass target) { + public static EquivalenceClassMapping generate(EquivalenceClass source, EquivalenceClass target) { - Map<Set<SlotReference>, Set<SlotReference>> equivalenceClassSetMap = new HashMap<>(); - List<Set<SlotReference>> sourceSets = source.getEquivalenceSetList(); - List<Set<SlotReference>> targetSets = target.getEquivalenceSetList(); + Map<List<SlotReference>, List<SlotReference>> equivalenceClassSetMap = new HashMap<>(); Review Comment: such as the expression `o_orderstatus = o_orderstatus` we should compensate `o_orderstatus = o_orderstatus` on materialized view. If we record the slot equal expression in set, only get` {o_orderstatus}`, in `Predicates#compensateEquivalence` we couldn't compensate filter. Change set to list. we get {`o_orderstatus, o_orderstatus}`, then we can compensate filter by `Predicates#compensateEquivalence` . -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org