Is the trunk open for 3.1 already? simon
On Sat, Nov 21, 2009 at 8:49 PM, <[email protected]> wrote: > Author: uschindler > Date: Sat Nov 21 19:49:54 2009 > New Revision: 882977 > > URL: http://svn.apache.org/viewvc?rev=882977&view=rev > Log: > LUCENE-2087: Remove recursion in NumericRangeTermEnum > > Modified: > lucene/java/trunk/CHANGES.txt > lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java > > Modified: lucene/java/trunk/CHANGES.txt > URL: > http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=882977&r1=882976&r2=882977&view=diff > ============================================================================== > --- lucene/java/trunk/CHANGES.txt (original) > +++ lucene/java/trunk/CHANGES.txt Sat Nov 21 19:49:54 2009 > @@ -18,7 +18,10 @@ > Optimizations > > * LUCENE-2086: When resolving deleted terms, do so in term sort order > - for better performance (Bogdan Ghidireac via Mike McCandless) > + for better performance. (Bogdan Ghidireac via Mike McCandless) > + > +* LUCENE-2087: Remove recursion in NumericRangeTermEnum. > + (Uwe Schindler) > > Build > > > Modified: > lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java > URL: > http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java?rev=882977&r1=882976&r2=882977&view=diff > ============================================================================== > --- > lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java > (original) > +++ > lucene/java/trunk/src/java/org/apache/lucene/search/NumericRangeQuery.java > Sat Nov 21 19:49:54 2009 > @@ -27,6 +27,7 @@ > import org.apache.lucene.util.StringHelper; > import org.apache.lucene.index.IndexReader; > import org.apache.lucene.index.Term; > +import org.apache.lucene.index.TermEnum; > > /** > * <p>A {...@link Query} that matches numeric values within a > @@ -486,6 +487,12 @@ > throw new UnsupportedOperationException("not implemented"); > } > > + /** this is a dummy, it is not used by this class. */ > + �...@override > + protected void setEnum(TermEnum tenum) { > + throw new UnsupportedOperationException("not implemented"); > + } > + > /** > * Compares if current upper bound is reached, > * this also updates the term count for statistics. > @@ -507,29 +514,35 @@ > assert actualEnum != null; > if (actualEnum.next()) { > currentTerm = actualEnum.term(); > - if (termCompare(currentTerm)) return true; > + if (termCompare(currentTerm)) > + return true; > } > } > + > // if all above fails, we go forward to the next enum, > // if one is available > currentTerm = null; > - if (rangeBounds.size() < 2) { > - assert rangeBounds.size() == 0; > - return false; > - } > - // close the current enum and read next bounds > - if (actualEnum != null) { > - actualEnum.close(); > - actualEnum = null; > + while (rangeBounds.size() >= 2) { > + assert rangeBounds.size() % 2 == 0; > + // close the current enum and read next bounds > + if (actualEnum != null) { > + actualEnum.close(); > + actualEnum = null; > + } > + final String lowerBound = rangeBounds.removeFirst(); > + this.currentUpperBound = rangeBounds.removeFirst(); > + // create a new enum > + actualEnum = reader.terms(termTemplate.createTerm(lowerBound)); > + currentTerm = actualEnum.term(); > + if (currentTerm != null && termCompare(currentTerm)) > + return true; > + // clear the current term for next iteration > + currentTerm = null; > } > - final String lowerBound = rangeBounds.removeFirst(); > - this.currentUpperBound = rangeBounds.removeFirst(); > - // this call recursively uses next(), if no valid term in > - // next enum found. > - // if this behavior is changed/modified in the superclass, > - // this enum will not work anymore! > - setEnum(reader.terms(termTemplate.createTerm(lowerBound))); > - return (currentTerm != null); > + > + // no more sub-range enums available > + assert rangeBounds.size() == 0 && currentTerm == null; > + return false; > } > > /** Closes the enumeration to further activity, freeing resources. */ > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
