[ 
https://issues.apache.org/jira/browse/LUCENE-4314?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13438070#comment-13438070
 ] 

Uwe Schindler commented on LUCENE-4314:
---------------------------------------

Please use the upload functionality of this Issue Tracker JIRA and upload as a 
file (with extension .patch or .diff): Click on "More Actions..." -> "Attach 
Files" and also select that you agree with Apache's License.
                
> The specification of DocIdSetIterator is needlessly ambiguous.
> --------------------------------------------------------------
>
>                 Key: LUCENE-4314
>                 URL: https://issues.apache.org/jira/browse/LUCENE-4314
>             Project: Lucene - Core
>          Issue Type: Improvement
>          Components: core/search
>    Affects Versions: 3.6.1, 4.0-BETA
>         Environment: All
>            Reporter: Franco Callari
>              Labels: index,, iterators
>
> Quoth Lucene at org.apache.lucene.search.DocIdSetIterator.advance:
>      "Advances to the first beyond (see NOTE below) the current whose document
>       number is greater than or equal to <i>target</i>. [...]
>       NOTE:</b> when <code> target &le; current</code> implementations may opt
>       not to advance beyond their current {@link #docID()}."
> However, the same specification contradictorily states that advance must 
> behave as if written:
>      int advance(int target) {
>        int doc;
>        while ((doc = nextDoc()) < target) {}
>        return doc;
>      }
> That is, with at least one call to nextDoc() always made, unconditionally.
> This ambiguity can lead to unexpected behavior. In fact, arguably every user 
> of this interface that does not test after every call whether the iterator 
> has exhausted AND has advanced is incorrect.
> For example, I myself had one experimental implementation (coded against a 
> previous Lucene release) that caused an infinite loop in PhraseScorer.java 
> because, following the above specification, it "opted" not to move the 
> iterator when advance(target) was called with target < current.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to