[ 
https://issues.apache.org/jira/browse/LUCENE-7266?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Trejkaz updated LUCENE-7266:
----------------------------
    Affects Version/s: 5.4.1

> QueryNode#cloneTree produces a new tree where parents are not correctly set
> ---------------------------------------------------------------------------
>
>                 Key: LUCENE-7266
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7266
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: modules/queryparser
>    Affects Versions: 5.4.1
>            Reporter: Trejkaz
>
> The following unit test performs a sanity check on the QueryNode tree, 
> checking that each node has the parent set to the same node it was retrieved 
> from. After calling cloneTree, this check fails on the returned node, as the 
> parents in the cloned node still point back into the original tree.
> {code}
> import java.util.Arrays;
> import java.util.List;
> import org.apache.lucene.queryparser.flexible.core.nodes.BooleanQueryNode;
> import org.apache.lucene.queryparser.flexible.core.nodes.FieldQueryNode;
> import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
> import org.junit.Test;
> public class TestCloneTree {
>     @Test
>     public void testCloneTree() throws Exception {
>         QueryNode original = new BooleanQueryNode(Arrays.asList(
>                 new FieldQueryNode(null, "a", 0, 0),
>                 new FieldQueryNode(null, "b", 0, 0)));
>         sanityCheckQueryTree(original);
>         QueryNode cloned = original.cloneTree();
>         sanityCheckQueryTree(cloned);
>     }
>     private void sanityCheckQueryTree(QueryNode node) {
>         List<QueryNode> children = node.getChildren();
>         if (children != null) {
>             for (QueryNode child : children) {
>                 // Matching what Lucene is using in QueryNodeImpl itself.
>                 //noinspection ObjectEquality
>                 if (child.getParent() != node) {
>                     throw new IllegalStateException("Sanity check failed for 
> child: " + child + '\n' +
>                                                     "  Parent is: " + 
> child.getParent() + '\n' +
>                                                     "  But we got to it via: 
> " + node);
>                 }
>                 sanityCheckQueryTree(child);
>             }
>         }
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to