You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/02/22 14:39:11 UTC
svn commit: r1292288 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/CHANGES.txt
lucene/core/src/java/org/apache/lucene/search/FilteredDocIdSet.java
lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java
Author: uschindler
Date: Wed Feb 22 13:39:10 2012
New Revision: 1292288
URL: http://svn.apache.org/viewvc?rev=1292288&view=rev
Log:
Merged revision(s) 1292282 from lucene/dev/trunk:
LUCENE-3816: Fixed problem in FilteredDocIdSet, if null was returned from the delegate DocIdSet.iterator(), which is allowed to return null by DocIdSet specification when no documents match.
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/CHANGES.txt
lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/search/FilteredDocIdSet.java
lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java
Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1292288&r1=1292287&r2=1292288&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Wed Feb 22 13:39:10 2012
@@ -215,6 +215,11 @@ Bug fixes
These checks now use getFilePointer instead to avoid this.
(Jamir Shaikh, Mike McCandless, Robert Muir)
+* LUCENE-3816: Fixed problem in FilteredDocIdSet, if null was returned
+ from the delegate DocIdSet.iterator(), which is allowed to return
+ null by DocIdSet specification when no documents match.
+ (Shay Banon via Uwe Schindler)
+
Optimizations
* LUCENE-3653: Improve concurrency in VirtualMethod and AttributeSource by
Modified: lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/search/FilteredDocIdSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/search/FilteredDocIdSet.java?rev=1292288&r1=1292287&r2=1292288&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/search/FilteredDocIdSet.java (original)
+++ lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/search/FilteredDocIdSet.java Wed Feb 22 13:39:10 2012
@@ -69,7 +69,11 @@ public abstract class FilteredDocIdSet e
*/
@Override
public DocIdSetIterator iterator() throws IOException {
- return new FilteredDocIdSetIterator(_innerSet.iterator()) {
+ final DocIdSetIterator iterator = _innerSet.iterator();
+ if (iterator == null) {
+ return null;
+ }
+ return new FilteredDocIdSetIterator(iterator) {
@Override
protected boolean match(int docid) throws IOException {
return FilteredDocIdSet.this.match(docid);
Modified: lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java?rev=1292288&r1=1292287&r2=1292288&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java (original)
+++ lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/search/TestDocIdSet.java Wed Feb 22 13:39:10 2012
@@ -125,4 +125,41 @@ public class TestDocIdSet extends Lucene
dir.close();
}
+ public void testNullIteratorFilteredDocIdSet() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random, dir);
+ Document doc = new Document();
+ doc.add(newField("c", "val", Store.NO, Index.NOT_ANALYZED_NO_NORMS));
+ writer.addDocument(doc);
+ IndexReader reader = writer.getReader();
+ writer.close();
+
+ // First verify the document is searchable.
+ IndexSearcher searcher = newSearcher(reader);
+ Assert.assertEquals(1, searcher.search(new MatchAllDocsQuery(), 10).totalHits);
+
+ // Now search w/ a Filter which returns a null DocIdSet
+ Filter f = new Filter() {
+ @Override
+ public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
+ final DocIdSet innerNullIteratorSet = new DocIdSet() {
+ @Override
+ public DocIdSetIterator iterator() {
+ return null;
+ }
+ };
+ return new FilteredDocIdSet(innerNullIteratorSet) {
+ @Override
+ protected boolean match(int docid) {
+ return true;
+ }
+ };
+ }
+ };
+
+ Assert.assertEquals(0, searcher.search(new MatchAllDocsQuery(), f, 10).totalHits);
+ reader.close();
+ dir.close();
+ }
+
}