You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ad...@apache.org on 2014/01/22 04:49:45 UTC
svn commit: r1560245 - in /lucene/dev/trunk/lucene: ./
queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/
queryparser/src/test/org/apache/lucene/queryparser/flexible/core/nodes/
queryparser/src/test/org/apache/lucene/queryparser/util/
Author: adrianocrestani
Date: Wed Jan 22 03:49:44 2014
New Revision: 1560245
URL: http://svn.apache.org/r1560245
Log:
LUCENE-5099 - QueryNode should have the ability to detach from its node parent
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNode.java
lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNodeImpl.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/core/nodes/TestQueryNode.java
lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/util/QueryParserTestBase.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1560245&r1=1560244&r2=1560245&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Jan 22 03:49:44 2014
@@ -104,6 +104,10 @@ New Features
using SortField.setMissingValue(SortField.STRING_FIRST), or last,
using SortField.setMissingValue(SortField.STRING_LAST). (Rob Muir,
Mike McCandless)
+
+* LUCENE-5099: QueryNode should have the ability to detach from its node
+ parent. Added QueryNode.removeFromParent() that allows nodes to be
+ detached from its parent node. (Adriano Crestani)
Build
Modified: lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNode.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNode.java?rev=1560245&r1=1560244&r2=1560245&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNode.java (original)
+++ lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNode.java Wed Jan 22 03:49:44 2014
@@ -91,4 +91,8 @@ public interface QueryNode {
*/
public Map<String, Object> getTagMap();
+ /**
+ * Removes this query node from its parent.
+ */
+ public void removeFromParent();
}
Modified: lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNodeImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNodeImpl.java?rev=1560245&r1=1560244&r2=1560245&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNodeImpl.java (original)
+++ lucene/dev/trunk/lucene/queryparser/src/java/org/apache/lucene/queryparser/flexible/core/nodes/QueryNodeImpl.java Wed Jan 22 03:49:44 2014
@@ -19,6 +19,7 @@ package org.apache.lucene.queryparser.fl
import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -102,18 +103,19 @@ public abstract class QueryNodeImpl impl
// reset parent value
for (QueryNode child : children) {
-
- ((QueryNodeImpl) child).setParent(null);
-
+ child.removeFromParent();
}
-
+
+ ArrayList<QueryNode> existingChildren = new ArrayList<QueryNode>(getChildren());
+ for (QueryNode existingChild : existingChildren) {
+ existingChild.removeFromParent();
+ }
+
// allocate new children list
allocate();
-
+
// add new children and set parent
- for (QueryNode child : children) {
- add(child);
- }
+ add(children);
}
@Override
@@ -154,7 +156,7 @@ public abstract class QueryNodeImpl impl
if (isLeaf() || this.clauses == null) {
return null;
}
- return this.clauses;
+ return new ArrayList<QueryNode>(this.clauses);
}
@Override
@@ -181,7 +183,10 @@ public abstract class QueryNodeImpl impl
private QueryNode parent = null;
private void setParent(QueryNode parent) {
- this.parent = parent;
+ if (this.parent != parent) {
+ this.removeFromParent();
+ this.parent = parent;
+ }
}
@Override
@@ -241,5 +246,21 @@ public abstract class QueryNodeImpl impl
public Map<String, Object> getTagMap() {
return (Map<String, Object>) this.tags.clone();
}
+
+ @Override
+ public void removeFromParent() {
+ if (this.parent != null) {
+ List<QueryNode> parentChildren = this.parent.getChildren();
+ Iterator<QueryNode> it = parentChildren.iterator();
+
+ while (it.hasNext()) {
+ if (it.next() == this) {
+ it.remove();
+ }
+ }
+
+ this.parent = null;
+ }
+ }
} // end class QueryNodeImpl
Modified: lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/core/nodes/TestQueryNode.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/core/nodes/TestQueryNode.java?rev=1560245&r1=1560244&r2=1560245&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/core/nodes/TestQueryNode.java (original)
+++ lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/flexible/core/nodes/TestQueryNode.java Wed Jan 22 03:49:44 2014
@@ -18,6 +18,7 @@ package org.apache.lucene.queryparser.fl
*/
import java.util.Arrays;
+import java.util.Collections;
import org.apache.lucene.util.LuceneTestCase;
@@ -44,4 +45,23 @@ public class TestQueryNode extends Lucen
}
+ /* LUCENE-5099 - QueryNodeProcessorImpl should set parent to null before returning on processing */
+ public void testRemoveFromParent() throws Exception {
+ BooleanQueryNode booleanNode = new BooleanQueryNode(Collections.<QueryNode>emptyList());
+ FieldQueryNode fieldNode = new FieldQueryNode("foo", "A", 0, 1);
+ assertNull(fieldNode.getParent());
+
+ booleanNode.add(fieldNode);
+ assertNotNull(fieldNode.getParent());
+
+ fieldNode.removeFromParent();
+ assertNull(fieldNode.getParent());
+
+ booleanNode.add(fieldNode);
+ assertNotNull(fieldNode.getParent());
+
+ booleanNode.set(Collections.<QueryNode>emptyList());
+ assertNull(fieldNode.getParent());
+ }
+
}
Modified: lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/util/QueryParserTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/util/QueryParserTestBase.java?rev=1560245&r1=1560244&r2=1560245&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/util/QueryParserTestBase.java (original)
+++ lucene/dev/trunk/lucene/queryparser/src/test/org/apache/lucene/queryparser/util/QueryParserTestBase.java Wed Jan 22 03:49:44 2014
@@ -18,7 +18,6 @@ package org.apache.lucene.queryparser.ut
*/
import java.io.IOException;
-import java.io.Reader;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
@@ -1066,6 +1065,7 @@ public abstract class QueryParserTestBas
assertTrue(bq.getClauses()[1].getQuery() instanceof MatchAllDocsQuery);
}
+ @SuppressWarnings("unused")
private void assertHits(int expected, String query, IndexSearcher is) throws Exception {
String oldDefaultField = getDefaultField();
setDefaultField("date");