You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/01/07 22:15:49 UTC

svn commit: r609780 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/index/SegmentTermEnum.java src/test/org/apache/lucene/index/TestSegmentTermEnum.java

Author: mikemccand
Date: Mon Jan  7 13:15:48 2008
New Revision: 609780

URL: http://svn.apache.org/viewvc?rev=609780&view=rev
Log:
LUCENE-508: make sure SegmentTermEnum.prev() is accurate (= last term) after next() returns false

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/index/SegmentTermEnum.java
    lucene/java/trunk/src/test/org/apache/lucene/index/TestSegmentTermEnum.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=609780&r1=609779&r2=609780&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Mon Jan  7 13:15:48 2008
@@ -213,7 +213,11 @@
     
 28. LUCENE-749: ChainedFilter behavior fixed when logic of 
     first filter is ANDNOT.  (Antonio Bruno via Doron Cohen)
-    
+
+29. LUCENE-508: Make sure SegmentTermEnum.prev() is accurate (= last
+    term) after next() returns false.  (Steven Tamm via Mike
+    McCandless)
+
     
 New features
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/SegmentTermEnum.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/SegmentTermEnum.java?rev=609780&r1=609779&r2=609780&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/SegmentTermEnum.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/SegmentTermEnum.java Mon Jan  7 13:15:48 2008
@@ -114,6 +114,7 @@
   /** Increments the enumeration to the next element.  True if one exists.*/
   public final boolean next() throws IOException {
     if (position++ >= size - 1) {
+      prevBuffer.set(termBuffer);
       termBuffer.reset();
       return false;
     }

Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestSegmentTermEnum.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestSegmentTermEnum.java?rev=609780&r1=609779&r2=609780&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestSegmentTermEnum.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestSegmentTermEnum.java Mon Jan  7 13:15:48 2008
@@ -30,6 +30,7 @@
 import org.apache.lucene.index.TermEnum;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.store.MockRAMDirectory;
 
 /**
  * @author goller
@@ -64,6 +65,23 @@
 
     // verify document frequency of terms in an optimized index
     verifyDocFreq();
+  }
+
+  public void testPrevTermAtEnd() throws IOException
+  {
+    Directory dir = new MockRAMDirectory();
+    IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
+    addDoc(writer, "aaa bbb");
+    writer.close();
+    IndexReader reader = IndexReader.open(dir);
+    SegmentTermEnum termEnum = (SegmentTermEnum) reader.terms();
+    assertTrue(termEnum.next());
+    assertEquals("aaa", termEnum.term().text());
+    assertTrue(termEnum.next());
+    assertEquals("aaa", termEnum.prev().text());
+    assertEquals("bbb", termEnum.term().text());
+    assertFalse(termEnum.next());
+    assertEquals("bbb", termEnum.prev().text());
   }
 
   private void verifyDocFreq()