You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by al...@apache.org on 2011/10/10 19:31:34 UTC

svn commit: r1181086 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/

Author: alexparvulescu
Date: Mon Oct 10 17:31:33 2011
New Revision: 1181086

URL: http://svn.apache.org/viewvc?rev=1181086&view=rev
Log:
JCR-3091 Lucene Scorer implementations should handle the 'advance' to NO_MORE_DOCS optimisation better

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MatchAllScorer.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NotQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryHitsQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ChildAxisQuery.java Mon Oct 10 17:31:33 2011
@@ -419,6 +419,14 @@ class ChildAxisQuery extends Query imple
             if (nextDoc == NO_MORE_DOCS) {
                 return nextDoc;
             }
+            
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                hits.skipTo(target);
+                nextDoc = NO_MORE_DOCS;
+                return nextDoc;
+            }
 
             calculateChildren();
             nextDoc = hits.skipTo(target);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/DerefQuery.java Mon Oct 10 17:31:33 2011
@@ -289,6 +289,13 @@ class DerefQuery extends Query {
                 return nextDoc;
             }
 
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                nextDoc = NO_MORE_DOCS;
+                return nextDoc;
+            }
+
             calculateChildren();
             nextDoc = hits.nextSetBit(target);
             if (nextDoc < 0) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MatchAllScorer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MatchAllScorer.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MatchAllScorer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MatchAllScorer.java Mon Oct 10 17:31:33 2011
@@ -109,6 +109,13 @@ class MatchAllScorer extends Scorer {
             return nextDoc;
         }
 
+        // optimize in the case of an advance to finish.
+        // see https://issues.apache.org/jira/browse/JCR-3091
+        if (target == NO_MORE_DOCS) {
+            nextDoc = NO_MORE_DOCS;
+            return nextDoc;
+        }
+
         nextDoc = target - 1;
         return nextDoc();
     }

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java Mon Oct 10 17:31:33 2011
@@ -75,7 +75,6 @@ class MultiScorer extends Scorer {
                 currentDoc = NO_MORE_DOCS;
             }
         }
-
         return currentDoc;
     }
 
@@ -94,6 +93,18 @@ class MultiScorer extends Scorer {
         if (currentDoc == NO_MORE_DOCS) {
             return currentDoc;
         }
+        // optimize in the case of an advance to finish.
+        // see https://issues.apache.org/jira/browse/JCR-3091
+        if (target == NO_MORE_DOCS) {
+            // exhaust all the internal scorers
+            for (Scorer s : scorers) {
+                if (s.docID() != target) {
+                    s.advance(target);
+                }
+            }
+            currentDoc = NO_MORE_DOCS;
+            return currentDoc;
+        }
 
         currentScorer = scorerIndex(target);
         if (scorers[currentScorer].advance(target - starts[currentScorer]) != NO_MORE_DOCS) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NotQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NotQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NotQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NotQuery.java Mon Oct 10 17:31:33 2011
@@ -226,6 +226,14 @@ class NotQuery extends Query {
                 return docNo;
             }
 
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                contextScorer.advance(target);
+                docNo = NO_MORE_DOCS;
+                return docNo;
+            }
+
             if (contextNo != -1 && contextNo < target) {
                 int docId = contextScorer.advance(target);
                 contextNo = docId == NO_MORE_DOCS ? -1 : docId;

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ParentAxisQuery.java Mon Oct 10 17:31:33 2011
@@ -302,7 +302,12 @@ class ParentAxisQuery extends Query {
             if (nextDoc == NO_MORE_DOCS) {
                 return nextDoc;
             }
-
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                nextDoc = NO_MORE_DOCS;
+                return nextDoc;
+            }
             calculateParent();
             nextDoc = hits.nextSetBit(target);
             if (nextDoc < 0) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java Mon Oct 10 17:31:33 2011
@@ -287,6 +287,12 @@ public class PredicateDerefQuery extends
             if (nextDoc == NO_MORE_DOCS) {
                 return nextDoc;
             }
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                nextDoc = NO_MORE_DOCS;
+                return nextDoc;
+            }
 
             calculateChildren();
             nextDoc = hits.nextSetBit(target);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryHitsQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryHitsQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryHitsQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryHitsQuery.java Mon Oct 10 17:31:33 2011
@@ -239,6 +239,12 @@ public class QueryHitsQuery extends Quer
             if (currentDoc == NO_MORE_DOCS) {
                 return currentDoc;
             }
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                currentDoc = NO_MORE_DOCS;
+                return currentDoc;
+            }
 
             do {
                 if (nextDoc() == NO_MORE_DOCS) {

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/RangeQuery.java Mon Oct 10 17:31:33 2011
@@ -387,6 +387,12 @@ public class RangeQuery extends Query im
             if (nextDoc == NO_MORE_DOCS) {
                 return nextDoc;
             }
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                nextDoc = NO_MORE_DOCS;
+                return nextDoc;
+            }
 
             calculateHits();
             nextDoc = hits.nextSetBit(target);

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java?rev=1181086&r1=1181085&r2=1181086&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/WildcardQuery.java Mon Oct 10 17:31:33 2011
@@ -351,6 +351,12 @@ public class WildcardQuery extends Query
             if (nextDoc == NO_MORE_DOCS) {
                 return nextDoc;
             }
+            // optimize in the case of an advance to finish.
+            // see https://issues.apache.org/jira/browse/JCR-3091
+            if (target == NO_MORE_DOCS) {
+                nextDoc = NO_MORE_DOCS;
+                return nextDoc;
+            }
 
             calculateHits();
             nextDoc = hits.nextSetBit(target);