[
https://issues.apache.org/jira/browse/CALCITE-6698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17899220#comment-17899220
]
Julian Hyde commented on CALCITE-6698:
--------------------------------------
I think this is not a bug. The methods do the right thing, you just have their
names swapped. The javadoc can be improved.
"getNonParents" returns all nodes that are not parents, i.e. that have no
children, i.e. that occur at the 'top' of the partially-ordered set. If the
partially-ordered set is a lattice, it has a unique 'join' node, and
'getNonParents' will be a singleton set containing the join.
Similarly "getNonChildren", 'meet'.
> Wrong (swapped) results in PartiallyOrderedSet#getNonChildren and
> getNonParents
> -------------------------------------------------------------------------------
>
> Key: CALCITE-6698
> URL: https://issues.apache.org/jira/browse/CALCITE-6698
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Stamatis Zampetakis
> Assignee: Stamatis Zampetakis
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.39.0
>
>
> {{PartiallyOrderedSet#getNonChildren}} and
> {{PartiallyOrderedSet#getNonParents}} methods return wrong results.
> According to the class Javadoc:
> {code:java}
> * <p>In addition to the usual set methods, there are methods to determine the
> * immediate parents and children of an element in the set, and method to find
> * all elements which have no parents or no children (i.e. "root" and "leaf"
> * elements).
> {code}
> * {{getNonChildren}} should return all elements which have no children (leafs)
> * {{getNonParents}} should return all elements which have no parents (roots)
> Currently, the two methods return the opposite results.
> {code:java}
> PartiallyOrderedSet<Integer> poset =
> new PartiallyOrderedSet<>((i,j) -> i <= j);
> poset.add(10);
> poset.add(20);
> poset.add(30);
> StringBuilder sb = new StringBuilder();
> poset.out(sb);
> {code}
> {noformat}
> PartiallyOrderedSet size: 3 elements: {
> 30 parents: [] children: [20]
> 20 parents: [30] children: [10]
> 10 parents: [20] children: []
> }
> {noformat}
> {code:java}
> poset.getNonChildren(); // should return 10 but it returns 30
> poset.getNonParents(); // should return 30 but it returns 10
> {code}
> The current implementation also contradicts the results of
> getChildren/getParents methods:
> {code:java}
> poset.getChildren(30); // returns 20 so it contradicts getNonChildren()
> poset.getParents(10); // returns 20 so it contradicts getNonParents()
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)