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();
+  }
+
 }