This is an automated email from the ASF dual-hosted git repository.
dlych pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new a93f36d [NO ISSUE][COMP] Add equivalence support in DISTINCT FD
visitor.
a93f36d is described below
commit a93f36df22debbdbd5290b4155d23a57b173794a
Author: Glenn <[email protected]>
AuthorDate: Thu Oct 1 15:20:47 2020 -0700
[NO ISSUE][COMP] Add equivalence support in DISTINCT FD visitor.
- user model changes: no
- storage format changes: no
- interface changes: no
Detail:
- FD visitor for DISTINCT operator now correctly accounts for
equivalent variables.
Change-Id: I78d66c65864aeacd1713ee60e7f4d221af0eacd1
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/8206
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Dmitry Lychagin <[email protected]>
---
.../operators/logical/visitors/FDsAndEquivClassesVisitor.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java
index eaac45d..ccdbd1f 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java
@@ -189,7 +189,10 @@ public class FDsAndEquivClassesVisitor implements
ILogicalOperatorVisitor<Void,
if (p2.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
VariableReferenceExpression var2 =
(VariableReferenceExpression) p2;
LogicalVariable v2 = var2.getVariableReference();
- if (normSet.contains(v2)) {
+ // We must additionally account for equivalent variables.
+ EquivalenceClass v2EquivalenceClass =
equivalenceClasses.get(v2);
+ if ((v2EquivalenceClass != null &&
normSet.contains(v2EquivalenceClass.getVariableRepresentative()))
+ || (v2EquivalenceClass == null &&
normSet.contains(v2))) {
newDistinctByList.add(p2Ref);
}
} else {