You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2010/10/30 09:37:27 UTC

svn commit: r1029003 [1/2] - in /lucene/dev/branches/docvalues: ./ lucene/ lucene/contrib/ lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/ lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/ lucene/contri...

Author: simonw
Date: Sat Oct 30 07:37:24 2010
New Revision: 1029003

URL: http://svn.apache.org/viewvc?rev=1029003&view=rev
Log:
MERGE - catching up with trunk

Added:
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/CollectionUtil.java
      - copied unchanged from r1029001, lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/CollectionUtil.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/SorterTemplate.java
      - copied unchanged from r1029001, lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/SorterTemplate.java
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestCollectionUtil.java
      - copied unchanged from r1029001, lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/TestCollectionUtil.java
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/cluster.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/cluster.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/clusterResults.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/clusterResults.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/doc.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/doc.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/head.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/head.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/hitGrouped.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/hitGrouped.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/queryGroup.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/queryGroup.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/querySpatial.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/querySpatial.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/tabs.vm
      - copied unchanged from r1029001, lucene/dev/trunk/solr/example/solr/conf/velocity/tabs.vm
Modified:
    lucene/dev/branches/docvalues/   (props changed)
    lucene/dev/branches/docvalues/lucene/   (props changed)
    lucene/dev/branches/docvalues/lucene/CHANGES.txt
    lucene/dev/branches/docvalues/lucene/NOTICE.txt
    lucene/dev/branches/docvalues/lucene/build.xml   (props changed)
    lucene/dev/branches/docvalues/lucene/contrib/   (props changed)
    lucene/dev/branches/docvalues/lucene/contrib/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/docvalues/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiContentSource.java
    lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenSources.java
    lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenStreamFromTermPositionVector.java
    lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/test/   (props changed)
    lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java
    lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java   (props changed)
    lucene/dev/branches/docvalues/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
    lucene/dev/branches/docvalues/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/spell/DirectSpellChecker.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/analysis/Tokenizer.java   (props changed)
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriter.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexReader.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserConstants.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/ConjunctionScorer.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQuery.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java   (props changed)
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/PhraseQuery.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/QueryTermVector.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/cache/DocTermsCreator.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/spans/NearSpansOrdered.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/ArrayUtil.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/BytesRefHash.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/BasicOperations.java
    lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/util/automaton/State.java
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/TestExternalCodecs.java
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/document/TestDateTools.java   (props changed)
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/document/TestNumberTools.java   (props changed)
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java   (props changed)
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestArrayUtil.java
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestAttributeSource.java   (props changed)
    lucene/dev/branches/docvalues/lucene/src/test/org/apache/lucene/util/TestBytesRefHash.java
    lucene/dev/branches/docvalues/modules/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestISOLatin1AccentFilter.java   (props changed)
    lucene/dev/branches/docvalues/solr/   (props changed)
    lucene/dev/branches/docvalues/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/docvalues/solr/KEYS   (props changed)
    lucene/dev/branches/docvalues/solr/LICENSE.txt   (props changed)
    lucene/dev/branches/docvalues/solr/NOTICE.txt   (props changed)
    lucene/dev/branches/docvalues/solr/README.txt   (props changed)
    lucene/dev/branches/docvalues/solr/build.xml   (props changed)
    lucene/dev/branches/docvalues/solr/client/   (props changed)
    lucene/dev/branches/docvalues/solr/common-build.xml   (props changed)
    lucene/dev/branches/docvalues/solr/contrib/   (props changed)
    lucene/dev/branches/docvalues/solr/example/   (props changed)
    lucene/dev/branches/docvalues/solr/example/solr/conf/solrconfig.xml
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/VM_global_library.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/browse.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/facets.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/hit.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/layout.vm
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/main.css
    lucene/dev/branches/docvalues/solr/example/solr/conf/velocity/query.vm
    lucene/dev/branches/docvalues/solr/lib/   (props changed)
    lucene/dev/branches/docvalues/solr/lib/commons-httpclient-3.1.jar   (props changed)
    lucene/dev/branches/docvalues/solr/lib/jcl-over-slf4j-1.5.5.jar   (props changed)
    lucene/dev/branches/docvalues/solr/site/   (props changed)
    lucene/dev/branches/docvalues/solr/src/   (props changed)
    lucene/dev/branches/docvalues/solr/src/common/org/apache/solr/common/   (props changed)
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/Grouping.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/SolrIndexSearcher.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocValues.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java
    lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java
    lucene/dev/branches/docvalues/solr/src/maven/solr-core-pom.xml.template   (props changed)
    lucene/dev/branches/docvalues/solr/src/maven/solr-solrj-pom.xml.template   (props changed)
    lucene/dev/branches/docvalues/solr/src/solrj/org/   (props changed)
    lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java
    lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/   (props changed)
    lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/   (props changed)
    lucene/dev/branches/docvalues/solr/testlogging.properties   (props changed)

Propchange: lucene/dev/branches/docvalues/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,3 +1,3 @@
 /lucene/dev/branches/branch_3x:949730,957490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes:967125-979432
-/lucene/dev/trunk:1021634-1027393
+/lucene/dev/trunk:1021634-1029001

Propchange: lucene/dev/branches/docvalues/lucene/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene:967125-979432
-/lucene/dev/trunk/lucene:1021634-1027393
+/lucene/dev/trunk/lucene:1021634-1029001
 /lucene/java/branches/flex_1458:824912-931101
 /lucene/java/branches/lucene_2_4:748824
 /lucene/java/branches/lucene_2_9:817269-818600,829134,829881,831036,896850,909334,948516

Modified: lucene/dev/branches/docvalues/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/CHANGES.txt?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/docvalues/lucene/CHANGES.txt Sat Oct 30 07:37:24 2010
@@ -152,6 +152,9 @@ API Changes
   call is the same as it was prior to the API change.
   (Grant Ingersoll, Mike McCandless)
 
+* LUCENE-2566: QueryParser: Unary operators +,-,! will not be treated as
+  operators if they are followed by whitespace. (yonik)
+
 New features
 
 * LUCENE-2604: Added RegexpQuery support to QueryParser. Regular expressions
@@ -321,9 +324,11 @@ Bug fixes
 
 Changes in backwards compatibility policy
 
-* LUCENE-1483: Removed utility class oal.util.SorterTemplate; this
-  class is no longer used by Lucene.  (Gunnar Wagenknecht via Mike
-  McCandless)
+* LUCENE-2719: Changed API of internal utility class
+  org.apche.lucene.util.SorterTemplate to support faster quickSort using
+  pivot values and also merge sort and insertion sort. If you have used
+  this class, you have to implement two more methods for handling pivots.
+  (Uwe Schindler, Robert Muir, Mike McCandless)
 
 * LUCENE-1923: Renamed SegmentInfo & SegmentInfos segString method to
   toString.  These are advanced APIs and subject to change suddenly.
@@ -591,9 +596,6 @@ Bug fixes
   can cause the same document to score to differently depending on
   what segment it resides in. (yonik)
 
-* LUCENE-2616: FastVectorHighlighter: out of alignment when the first value is
-  empty in multiValued field (Koji Sekiguchi)
-
 * LUCENE-2627: Fixed bug in MMapDirectory chunking when a file is an
   exact multiple of the chunk size.  (Robert Muir)
 
@@ -762,6 +764,12 @@ Optimizations
 * LUCENE-2556: Improve memory usage after cloning (Char)TermAttribute.
   (Adriano Crestani via Uwe Schindler)
 
+* LUCENE-2719: Improved TermsHashPerField's sorting to use a better
+  quick sort algorithm that dereferences the privot element not on
+  every compare call. Also replaced lots of sorting code in Lucene
+  by the improved SorterTemplate class.
+  (Uwe Schindler, Robert Muir, Mike McCandless)
+
 Build
 
 * LUCENE-2124: Moved the JDK-based collation support from contrib/collation 

Modified: lucene/dev/branches/docvalues/lucene/NOTICE.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/NOTICE.txt?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/NOTICE.txt (original)
+++ lucene/dev/branches/docvalues/lucene/NOTICE.txt Sat Oct 30 07:37:24 2010
@@ -22,3 +22,8 @@ automatically generated with the moman/f
 Jean-Philippe Barrette-LaPierre. This library is available under an MIT license,
 see http://sites.google.com/site/rrettesite/moman and 
 http://bitbucket.org/jpbarrette/moman/overview/
+
+The class org.apache.lucene.SorterTemplate was inspired by CGLIB's class with
+the same name. The implementation part is mainly done using pre-existing
+Lucene sorting code. In-place stable mergesort was borrowed from CGLIB,
+which is Apache-licensed.

Propchange: lucene/dev/branches/docvalues/lucene/build.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/build.xml:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/build.xml:967125-979432
-/lucene/dev/trunk/lucene/build.xml:1021634-1027393
+/lucene/dev/trunk/lucene/build.xml:1021634-1029001
 /lucene/java/branches/flex_1458/build.xml:824912-931101
 /lucene/java/branches/lucene_2_9/build.xml:909334,948516
 /lucene/java/trunk/build.xml:924483-924731,924781,925176-925462

Propchange: lucene/dev/branches/docvalues/lucene/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/contrib:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/contrib:967125-979432
-/lucene/dev/trunk/lucene/contrib:1021634-1027393
+/lucene/dev/trunk/lucene/contrib:1021634-1029001
 /lucene/java/branches/flex_1458/contrib:824912-931101
 /lucene/java/branches/lucene_2_4/contrib:748824
 /lucene/java/branches/lucene_2_9/contrib:817269-818600,825998,829134,829816,829881,831036,896850,909334,948516

Modified: lucene/dev/branches/docvalues/lucene/contrib/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/CHANGES.txt?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/CHANGES.txt (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/CHANGES.txt Sat Oct 30 07:37:24 2010
@@ -132,6 +132,8 @@ Bug fixes
   always the case. If the dictionary is unavailable, the filter will now throw 
   UnsupportedOperationException in the constructor.  (Robert Muir)
 
+* LUCENE-2616: FastVectorHighlighter: out of alignment when the first value is
+  empty in multiValued field (Koji Sekiguchi)
    
 API Changes
 

Propchange: lucene/dev/branches/docvalues/lucene/contrib/CHANGES.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/contrib/CHANGES.txt:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/contrib/CHANGES.txt:967125-979432
-/lucene/dev/trunk/lucene/contrib/CHANGES.txt:1021634-1027393
+/lucene/dev/trunk/lucene/contrib/CHANGES.txt:1021634-1029001
 /lucene/java/branches/flex_1458/contrib/CHANGES.txt:824912-931101
 /lucene/java/branches/lucene_2_4/contrib/CHANGES.txt:748824
 /lucene/java/branches/lucene_2_9/contrib/CHANGES.txt:817269-818600,825998,826775,829134,829816,829881,831036,896850,948516

Modified: lucene/dev/branches/docvalues/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiContentSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiContentSource.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiContentSource.java (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiContentSource.java Sat Oct 30 07:37:24 2010
@@ -152,7 +152,10 @@ public class EnwikiContentSource extends
           title = contents.toString();
           break;
         case ID:
-          id = contents.toString();
+          //the doc id is the first one in the page.  All other ids after that one can be ignored according to the schema
+          if (id == null) {
+            id = contents.toString();
+          }
           break;
         default:
           // this element should be discarded.

Modified: lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenSources.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenSources.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenSources.java (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenSources.java Sat Oct 30 07:37:24 2010
@@ -23,7 +23,6 @@ package org.apache.lucene.search.highlig
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Comparator;
 
 import org.apache.lucene.analysis.Analyzer;
@@ -36,6 +35,7 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.TermFreqVector;
 import org.apache.lucene.index.TermPositionVector;
 import org.apache.lucene.index.TermVectorOffsetInfo;
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
 
 /**
@@ -231,13 +231,9 @@ public class TokenSources {
     if (unsortedTokens != null) {
       tokensInOriginalOrder = unsortedTokens.toArray(new Token[unsortedTokens
           .size()]);
-      Arrays.sort(tokensInOriginalOrder, new Comparator<Token>() {
+      ArrayUtil.quickSort(tokensInOriginalOrder, new Comparator<Token>() {
         public int compare(Token t1, Token t2) {
-          if (t1.startOffset() > t2.endOffset())
-            return 1;
-          if (t1.startOffset() < t2.startOffset())
-            return -1;
-          return 0;
+          return t1.startOffset() - t2.endOffset();
         }
       });
     }

Modified: lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenStreamFromTermPositionVector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenStreamFromTermPositionVector.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenStreamFromTermPositionVector.java (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/java/org/apache/lucene/search/highlight/TokenStreamFromTermPositionVector.java Sat Oct 30 07:37:24 2010
@@ -18,7 +18,6 @@ package org.apache.lucene.search.highlig
  */
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
@@ -31,6 +30,7 @@ import org.apache.lucene.analysis.tokena
 import org.apache.lucene.index.TermPositionVector;
 import org.apache.lucene.index.TermVectorOffsetInfo;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.CollectionUtil;
 
 public final class TokenStreamFromTermPositionVector extends TokenStream {
 
@@ -75,18 +75,7 @@ public final class TokenStreamFromTermPo
         this.positionedTokens.add(token);
       }
     }
-    final Comparator<Token> tokenComparator = new Comparator<Token>() {
-      public int compare(final Token o1, final Token o2) {
-        if (o1.getPositionIncrement() < o2.getPositionIncrement()) {
-          return -1;
-        }
-        if (o1.getPositionIncrement() > o2.getPositionIncrement()) {
-          return 1;
-        }
-        return 0;
-      }
-    };
-    Collections.sort(this.positionedTokens, tokenComparator);
+    CollectionUtil.mergeSort(this.positionedTokens, tokenComparator);
     int lastPosition = -1;
     for (final Token token : this.positionedTokens) {
       int thisPosition = token.getPositionIncrement();
@@ -96,6 +85,12 @@ public final class TokenStreamFromTermPo
     this.tokensAtCurrentPosition = this.positionedTokens.iterator();
   }
 
+  private static final Comparator<Token> tokenComparator = new Comparator<Token>() {
+    public int compare(final Token o1, final Token o2) {
+      return o1.getPositionIncrement() - o2.getPositionIncrement();
+    }
+  };
+  
   @Override
   public boolean incrementToken() throws IOException {
     if (this.tokensAtCurrentPosition.hasNext()) {

Propchange: lucene/dev/branches/docvalues/lucene/contrib/highlighter/src/test/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/contrib/highlighter/src/test:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/contrib/highlighter/src/test:967125-979432
-/lucene/dev/trunk/lucene/contrib/highlighter/src/test:1021634-1027393
+/lucene/dev/trunk/lucene/contrib/highlighter/src/test:1021634-1029001
 /lucene/java/branches/flex_1458/contrib/highlighter/src/test:824912-931101
 /lucene/java/branches/lucene_2_4/contrib/highlighter/src/test:748824
 /lucene/java/branches/lucene_2_9/contrib/highlighter/src/test:817269-818600,825998,826775,829134,829816,829881,831036,896850,909334,948516

Modified: lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java Sat Oct 30 07:37:24 2010
@@ -44,6 +44,8 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermVectorOffsetInfo;
 import org.apache.lucene.search.Similarity;
 import org.apache.lucene.util.StringHelper;
+import org.apache.lucene.util.ArrayUtil;
+import org.apache.lucene.util.CollectionUtil;
 import org.apache.lucene.util.AttributeImpl;
 import org.apache.lucene.util.BitVector;
 
@@ -345,11 +347,7 @@ public class InstantiatedIndexWriter imp
 
       for (Map.Entry<String, List<InstantiatedTermDocumentInformation>> eField_TermDocInfos : termDocumentInformationsByField.entrySet()) {
 
-        Collections.sort(eField_TermDocInfos.getValue(), new Comparator<InstantiatedTermDocumentInformation>() {
-          public int compare(InstantiatedTermDocumentInformation instantiatedTermDocumentInformation, InstantiatedTermDocumentInformation instantiatedTermDocumentInformation1) {
-            return instantiatedTermDocumentInformation.getTerm().getTerm().compareTo(instantiatedTermDocumentInformation1.getTerm().getTerm());
-          }
-        });
+        CollectionUtil.quickSort(eField_TermDocInfos.getValue(), tdComp);
 
         // add term vector
         if (documentFieldSettingsByFieldName.get(eField_TermDocInfos.getKey()).storeTermVector) {
@@ -366,7 +364,7 @@ public class InstantiatedIndexWriter imp
     // order document informations in dirty terms
     for (InstantiatedTerm term : dirtyTerms) {
       // todo optimize, i believe this is useless, that the natural order is document number?
-      Arrays.sort(term.getAssociatedDocuments(), InstantiatedTermDocumentInformation.documentNumberComparator);
+      ArrayUtil.mergeSort(term.getAssociatedDocuments(), InstantiatedTermDocumentInformation.documentNumberComparator);
 
 //      // update association class reference for speedy skipTo()
 //      for (int i = 0; i < term.getAssociatedDocuments().length; i++) {
@@ -426,6 +424,12 @@ public class InstantiatedIndexWriter imp
 
   }
 
+  private static final Comparator<InstantiatedTermDocumentInformation> tdComp = new Comparator<InstantiatedTermDocumentInformation>() {
+    public int compare(InstantiatedTermDocumentInformation instantiatedTermDocumentInformation, InstantiatedTermDocumentInformation instantiatedTermDocumentInformation1) {
+      return instantiatedTermDocumentInformation.getTerm().getTerm().compareTo(instantiatedTermDocumentInformation1.getTerm().getTerm());
+    }
+  };
+
   /**
    * Adds a document to this index.  If the document contains more than
    * {@link #setMaxFieldLength(int)} terms for a given field, the remainder are

Propchange: lucene/dev/branches/docvalues/lucene/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:967125-979432
-/lucene/dev/trunk/lucene/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:1021634-1027393
+/lucene/dev/trunk/lucene/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:1021634-1029001
 /lucene/java/branches/flex_1458/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:824912-931101
 /lucene/java/branches/lucene_2_9/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:909334,948516
 /lucene/java/trunk/contrib/instantiated/src/test/org/apache/lucene/store/instantiated/TestIndicesEquals.java:924483-924731,924781,925176-925462

Modified: lucene/dev/branches/docvalues/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java Sat Oct 30 07:37:24 2010
@@ -56,6 +56,7 @@ import org.apache.lucene.search.Searcher
 import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.Similarity;
 import org.apache.lucene.store.RAMDirectory; // for javadocs
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.Constants; // for javadocs
@@ -523,7 +524,7 @@ public class MemoryIndex implements Seri
       entries[i] = iter.next();
     }
     
-    if (size > 1) Arrays.sort(entries, termComparator);
+    if (size > 1) ArrayUtil.quickSort(entries, termComparator);
     return entries;
   }
   

Modified: lucene/dev/branches/docvalues/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/spell/DirectSpellChecker.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/spell/DirectSpellChecker.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/spell/DirectSpellChecker.java (original)
+++ lucene/dev/branches/docvalues/lucene/contrib/spellchecker/src/java/org/apache/lucene/search/spell/DirectSpellChecker.java Sat Oct 30 07:37:24 2010
@@ -18,7 +18,6 @@ package org.apache.lucene.search.spell;
  */
 
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -30,6 +29,7 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.FuzzyTermsEnum;
 import org.apache.lucene.search.MultiTermQuery;
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.AttributeSource;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.automaton.LevenshteinAutomata;
@@ -376,7 +376,7 @@ public class DirectSpellChecker {
       suggestions[index--] = suggestion;
     }
     
-    Arrays.sort(suggestions, Collections.reverseOrder(comparator));
+    ArrayUtil.mergeSort(suggestions, Collections.reverseOrder(comparator));
     if (numSug < suggestions.length) {
       SuggestWord trimmed[] = new SuggestWord[numSug];
       System.arraycopy(suggestions, 0, trimmed, 0, numSug);

Propchange: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/analysis/Tokenizer.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/analysis/Tokenizer.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/src/java/org/apache/lucene/analysis/Tokenizer.java:967125-979432
-/lucene/dev/trunk/lucene/src/java/org/apache/lucene/analysis/Tokenizer.java:1021634-1027393
+/lucene/dev/trunk/lucene/src/java/org/apache/lucene/analysis/Tokenizer.java:1021634-1029001
 /lucene/java/branches/flex_1458/src/java/org/apache/lucene/analysis/Tokenizer.java:824912-931101
 /lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/analysis/Tokenizer.java:909334,948516
 /lucene/java/trunk/src/java/org/apache/lucene/analysis/Tokenizer.java:924483-924731,924781,925176-925462

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/ConcurrentMergeScheduler.java Sat Oct 30 07:37:24 2010
@@ -19,12 +19,12 @@ package org.apache.lucene.index;
 
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.ThreadInterruptedException;
+import org.apache.lucene.util.CollectionUtil;
 
 import java.io.IOException;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Comparator;
-import java.util.Collections;
 
 /** A {@link MergeScheduler} that runs each merge using a
  *  separate thread.
@@ -138,7 +138,7 @@ public class ConcurrentMergeScheduler ex
   }
 
   // Larger merges come first
-  protected static class CompareByMergeDocCount implements Comparator<MergeThread> {
+  protected static final Comparator<MergeThread> compareByMergeDocCount = new Comparator<MergeThread>() {
     public int compare(MergeThread t1, MergeThread t2) {
       final MergePolicy.OneMerge m1 = t1.getCurrentMerge();
       final MergePolicy.OneMerge m2 = t2.getCurrentMerge();
@@ -148,13 +148,13 @@ public class ConcurrentMergeScheduler ex
 
       return c2 - c1;
     }
-  }
+  };
 
   /** Called whenever the running merges have changed, to
    *  pause & unpause threads. */
   protected synchronized void updateMergeThreads() {
 
-    Collections.sort(mergeThreads, new CompareByMergeDocCount());
+    CollectionUtil.mergeSort(mergeThreads, compareByMergeDocCount);
     
     final int count = mergeThreads.size();
     int pri = mergeThreadPriority;

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/DocFieldProcessorPerThread.java Sat Oct 30 07:37:24 2010
@@ -17,6 +17,7 @@ package org.apache.lucene.index;
  * limitations under the License.
  */
 
+import java.util.Comparator;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -246,7 +247,7 @@ final class DocFieldProcessorPerThread e
     // sort the subset of fields that have vectors
     // enabled; we could save [small amount of] CPU
     // here.
-    quickSort(fields, 0, fieldCount-1);
+    ArrayUtil.quickSort(fields, 0, fieldCount, fieldsComp);
    
 
     for(int i=0;i<fieldCount;i++) {
@@ -285,67 +286,12 @@ final class DocFieldProcessorPerThread e
       return both;
     }
   }
-
-  void quickSort(DocFieldProcessorPerField[] array, int lo, int hi) {
-    if (lo >= hi)
-      return;
-    else if (hi == 1+lo) {
-      if (array[lo].fieldInfo.name.compareTo(array[hi].fieldInfo.name) > 0) {
-        final DocFieldProcessorPerField tmp = array[lo];
-        array[lo] = array[hi];
-        array[hi] = tmp;
-      }
-      return;
-    }
-
-    int mid = (lo + hi) >>> 1;
-
-    if (array[lo].fieldInfo.name.compareTo(array[mid].fieldInfo.name) > 0) {
-      DocFieldProcessorPerField tmp = array[lo];
-      array[lo] = array[mid];
-      array[mid] = tmp;
-    }
-
-    if (array[mid].fieldInfo.name.compareTo(array[hi].fieldInfo.name) > 0) {
-      DocFieldProcessorPerField tmp = array[mid];
-      array[mid] = array[hi];
-      array[hi] = tmp;
-
-      if (array[lo].fieldInfo.name.compareTo(array[mid].fieldInfo.name) > 0) {
-        DocFieldProcessorPerField tmp2 = array[lo];
-        array[lo] = array[mid];
-        array[mid] = tmp2;
-      }
+  
+  private static final Comparator<DocFieldProcessorPerField> fieldsComp = new Comparator<DocFieldProcessorPerField>() {
+    public int compare(DocFieldProcessorPerField o1, DocFieldProcessorPerField o2) {
+      return o1.fieldInfo.name.compareTo(o2.fieldInfo.name);
     }
-
-    int left = lo + 1;
-    int right = hi - 1;
-
-    if (left >= right)
-      return;
-
-    DocFieldProcessorPerField partition = array[mid];
-
-    for (; ;) {
-      while (array[right].fieldInfo.name.compareTo(partition.fieldInfo.name) > 0)
-        --right;
-
-      while (left < right && array[left].fieldInfo.name.compareTo(partition.fieldInfo.name) <= 0)
-        ++left;
-
-      if (left < right) {
-        DocFieldProcessorPerField tmp = array[left];
-        array[left] = array[right];
-        array[right] = tmp;
-        --right;
-      } else {
-        break;
-      }
-    }
-
-    quickSort(array, lo, left);
-    quickSort(array, left + 1, hi);
-  }
+  };
 
   PerDoc[] docFreeList = new PerDoc[1];
   int freeCount;

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriter.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriter.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/FreqProxTermsWriter.java Sat Oct 30 07:37:24 2010
@@ -20,7 +20,6 @@ package org.apache.lucene.index;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -30,6 +29,7 @@ import org.apache.lucene.index.codecs.Po
 import org.apache.lucene.index.codecs.FieldsConsumer;
 import org.apache.lucene.index.codecs.TermsConsumer;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.CollectionUtil;
 
 final class FreqProxTermsWriter extends TermsHashConsumer {
 
@@ -75,7 +75,7 @@ final class FreqProxTermsWriter extends 
     final int numAllFields = allFields.size();
 
     // Sort by field name
-    Collections.sort(allFields);
+    CollectionUtil.quickSort(allFields);
 
     // TODO: allow Lucene user to customize this codec:
     final FieldsConsumer consumer = state.codec.fieldsConsumer(state);

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java Sat Oct 30 07:37:24 2010
@@ -32,6 +32,7 @@ import java.util.Map;
 import org.apache.lucene.index.codecs.CodecProvider;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.NoSuchDirectoryException;
+import org.apache.lucene.util.CollectionUtil;
 
 /*
  * This class keeps track of each SegmentInfos instance that
@@ -235,7 +236,7 @@ final class IndexFileDeleter {
     }
 
     // We keep commits list in sorted order (oldest to newest):
-    Collections.sort(commits);
+    CollectionUtil.mergeSort(commits);
 
     // Now delete anything with ref count at 0.  These are
     // presumably abandoned files eg due to crash of

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/index/IndexReader.java Sat Oct 30 07:37:24 2010
@@ -23,6 +23,7 @@ import org.apache.lucene.search.Similari
 import org.apache.lucene.index.codecs.CodecProvider;
 import org.apache.lucene.index.values.DocValues;
 import org.apache.lucene.store.*;
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.ReaderUtil;         // for javadocs
@@ -1254,7 +1255,7 @@ public abstract class IndexReader implem
       cfr = new CompoundFileReader(dir, filename);
 
       String [] files = cfr.listAll();
-      Arrays.sort(files);   // sort the array of filename so that the output is more readable
+      ArrayUtil.quickSort(files);   // sort the array of filename so that the output is more readable
 
       for (int i = 0; i < files.length; ++i) {
         long len = cfr.fileLength(files[i]);

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.java Sat Oct 30 07:37:24 2010
@@ -219,6 +219,7 @@ public class QueryParser extends QueryPa
       case NOT:
       case PLUS:
       case MINUS:
+      case BAREOPER:
       case LPAREN:
       case STAR:
       case QUOTED:
@@ -272,6 +273,7 @@ public class QueryParser extends QueryPa
       ;
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case BAREOPER:
     case STAR:
     case QUOTED:
     case TERM:
@@ -316,6 +318,7 @@ public class QueryParser extends QueryPa
   boolean endInc=false;
   Query q;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case BAREOPER:
     case STAR:
     case TERM:
     case PREFIXTERM:
@@ -345,6 +348,10 @@ public class QueryParser extends QueryPa
       case NUMBER:
         term = jj_consume_token(NUMBER);
         break;
+      case BAREOPER:
+        term = jj_consume_token(BAREOPER);
+                           term.image = term.image.substring(0,1);
+        break;
       default:
         jj_la1[8] = jj_gen;
         jj_consume_token(-1);
@@ -533,11 +540,16 @@ public class QueryParser extends QueryPa
   private int jj_gen;
   final private int[] jj_la1 = new int[21];
   static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
   static {
       jj_la1_init_0();
+      jj_la1_init_1();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x300,0x300,0x1c00,0x1c00,0x7ed3f00,0x90000,0x20000,0x7ed2000,0x4e90000,0x100000,0x100000,0x20000,0x3000000,0xc0000000,0x8000000,0xc0000000,0x30000000,0x20000,0x100000,0x20000,0x7ed0000,};
+      jj_la1_0 = new int[] {0x300,0x300,0x1c00,0x1c00,0xfda7f00,0x120000,0x40000,0xfda6000,0x9d22000,0x200000,0x200000,0x40000,0x6000000,0x80000000,0x10000000,0x80000000,0x60000000,0x40000,0x200000,0x40000,0xfda2000,};
+   }
+   private static void jj_la1_init_1() {
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,};
    }
   final private JJCalls[] jj_2_rtns = new JJCalls[1];
   private boolean jj_rescan = false;
@@ -691,7 +703,7 @@ public class QueryParser extends QueryPa
   /** Generate ParseException. */
   public ParseException generateParseException() {
     jj_expentries.clear();
-    boolean[] la1tokens = new boolean[32];
+    boolean[] la1tokens = new boolean[33];
     if (jj_kind >= 0) {
       la1tokens[jj_kind] = true;
       jj_kind = -1;
@@ -702,10 +714,13 @@ public class QueryParser extends QueryPa
           if ((jj_la1_0[i] & (1<<j)) != 0) {
             la1tokens[j] = true;
           }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
         }
       }
     }
-    for (int i = 0; i < 32; i++) {
+    for (int i = 0; i < 33; i++) {
       if (la1tokens[i]) {
         jj_expentry = new int[1];
         jj_expentry[0] = i;

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj Sat Oct 30 07:37:24 2010
@@ -183,6 +183,7 @@ PARSER_END(QueryParser)
 | <NOT:       ("NOT" | "!") >
 | <PLUS:      "+" >
 | <MINUS:     "-" >
+| <BAREOPER:    ("+"|"-"|"!") <_WHITESPACE> >
 | <LPAREN:    "(" >
 | <RPAREN:    ")" >
 | <COLON:     ":" >
@@ -315,6 +316,7 @@ Query Term(String field) : {
        | term=<WILDTERM> { wildcard=true; }
        | term=<REGEXPTERM> { regexp=true; }
        | term=<NUMBER>
+       | term=<BAREOPER> { term.image = term.image.substring(0,1); }
      )
      [ fuzzySlop=<FUZZY_SLOP> { fuzzy=true; } ]
      [ <CARAT> boost=<NUMBER> [ fuzzySlop=<FUZZY_SLOP> { fuzzy=true; } ] ]

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserConstants.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserConstants.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserConstants.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserConstants.java Sat Oct 30 07:37:24 2010
@@ -33,43 +33,45 @@ public interface QueryParserConstants {
   /** RegularExpression Id. */
   int MINUS = 12;
   /** RegularExpression Id. */
-  int LPAREN = 13;
+  int BAREOPER = 13;
   /** RegularExpression Id. */
-  int RPAREN = 14;
+  int LPAREN = 14;
   /** RegularExpression Id. */
-  int COLON = 15;
+  int RPAREN = 15;
   /** RegularExpression Id. */
-  int STAR = 16;
+  int COLON = 16;
   /** RegularExpression Id. */
-  int CARAT = 17;
+  int STAR = 17;
   /** RegularExpression Id. */
-  int QUOTED = 18;
+  int CARAT = 18;
   /** RegularExpression Id. */
-  int TERM = 19;
+  int QUOTED = 19;
   /** RegularExpression Id. */
-  int FUZZY_SLOP = 20;
+  int TERM = 20;
   /** RegularExpression Id. */
-  int PREFIXTERM = 21;
+  int FUZZY_SLOP = 21;
   /** RegularExpression Id. */
-  int WILDTERM = 22;
+  int PREFIXTERM = 22;
   /** RegularExpression Id. */
-  int REGEXPTERM = 23;
+  int WILDTERM = 23;
   /** RegularExpression Id. */
-  int RANGEIN_START = 24;
+  int REGEXPTERM = 24;
   /** RegularExpression Id. */
-  int RANGEEX_START = 25;
+  int RANGEIN_START = 25;
   /** RegularExpression Id. */
-  int NUMBER = 26;
+  int RANGEEX_START = 26;
   /** RegularExpression Id. */
-  int RANGE_TO = 27;
+  int NUMBER = 27;
   /** RegularExpression Id. */
-  int RANGEIN_END = 28;
+  int RANGE_TO = 28;
   /** RegularExpression Id. */
-  int RANGEEX_END = 29;
+  int RANGEIN_END = 29;
   /** RegularExpression Id. */
-  int RANGE_QUOTED = 30;
+  int RANGEEX_END = 30;
   /** RegularExpression Id. */
-  int RANGE_GOOP = 31;
+  int RANGE_QUOTED = 31;
+  /** RegularExpression Id. */
+  int RANGE_GOOP = 32;
 
   /** Lexical state. */
   int Boost = 0;
@@ -93,6 +95,7 @@ public interface QueryParserConstants {
     "<NOT>",
     "\"+\"",
     "\"-\"",
+    "<BAREOPER>",
     "\"(\"",
     "\")\"",
     "\":\"",

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/queryParser/QueryParserTokenManager.java Sat Oct 30 07:37:24 2010
@@ -67,23 +67,23 @@ private int jjMoveStringLiteralDfa0_2()
    switch(curChar)
    {
       case 40:
-         return jjStopAtPos(0, 13);
-      case 41:
          return jjStopAtPos(0, 14);
+      case 41:
+         return jjStopAtPos(0, 15);
       case 42:
-         return jjStartNfaWithStates_2(0, 16, 41);
+         return jjStartNfaWithStates_2(0, 17, 43);
       case 43:
-         return jjStopAtPos(0, 11);
+         return jjStartNfaWithStates_2(0, 11, 15);
       case 45:
-         return jjStopAtPos(0, 12);
+         return jjStartNfaWithStates_2(0, 12, 15);
       case 58:
-         return jjStopAtPos(0, 15);
+         return jjStopAtPos(0, 16);
       case 91:
-         return jjStopAtPos(0, 24);
+         return jjStopAtPos(0, 25);
       case 94:
-         return jjStopAtPos(0, 17);
+         return jjStopAtPos(0, 18);
       case 123:
-         return jjStopAtPos(0, 25);
+         return jjStopAtPos(0, 26);
       default :
          return jjMoveNfa_2(0, 0);
    }
@@ -111,7 +111,7 @@ static final long[] jjbitVec4 = {
 private int jjMoveNfa_2(int startState, int curPos)
 {
    int startsAt = 0;
-   jjnewStateCnt = 41;
+   jjnewStateCnt = 43;
    int i = 1;
    jjstateSet[0] = startState;
    int kind = 0x7fffffff;
@@ -129,45 +129,47 @@ private int jjMoveNfa_2(int startState, 
                case 0:
                   if ((0xfbffd4f8ffffd9ffL & l) != 0L)
                   {
-                     if (kind > 22)
-                        kind = 22;
-                     jjCheckNAddTwoStates(25, 26);
+                     if (kind > 23)
+                        kind = 23;
+                     jjCheckNAddTwoStates(27, 28);
                   }
                   else if ((0x100002600L & l) != 0L)
                   {
                      if (kind > 7)
                         kind = 7;
                   }
+                  else if ((0x280200000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 15;
                   else if (curChar == 34)
                      jjCheckNAddStates(0, 2);
-                  else if (curChar == 33)
-                  {
-                     if (kind > 10)
-                        kind = 10;
-                  }
                   if ((0x7bffd0f8ffffd9ffL & l) != 0L)
                   {
-                     if (kind > 19)
-                        kind = 19;
+                     if (kind > 20)
+                        kind = 20;
                      jjCheckNAddStates(3, 7);
                   }
                   else if (curChar == 42)
                   {
-                     if (kind > 21)
-                        kind = 21;
+                     if (kind > 22)
+                        kind = 22;
+                  }
+                  else if (curChar == 33)
+                  {
+                     if (kind > 10)
+                        kind = 10;
                   }
                   if (curChar == 47)
                      jjCheckNAddStates(8, 10);
                   else if (curChar == 38)
                      jjstateSet[jjnewStateCnt++] = 4;
                   break;
-               case 41:
-               case 25:
+               case 43:
+               case 27:
                   if ((0xfbfffcf8ffffd9ffL & l) == 0L)
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
                case 4:
                   if (curChar == 38 && kind > 8)
@@ -182,91 +184,99 @@ private int jjMoveNfa_2(int startState, 
                      kind = 10;
                   break;
                case 14:
+                  if ((0x280200000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 15;
+                  break;
+               case 15:
+                  if ((0x100002600L & l) != 0L && kind > 13)
+                     kind = 13;
+                  break;
+               case 16:
                   if (curChar == 34)
                      jjCheckNAddStates(0, 2);
                   break;
-               case 15:
+               case 17:
                   if ((0xfffffffbffffffffL & l) != 0L)
                      jjCheckNAddStates(0, 2);
                   break;
-               case 17:
+               case 19:
                   jjCheckNAddStates(0, 2);
                   break;
-               case 18:
-                  if (curChar == 34 && kind > 18)
-                     kind = 18;
-                  break;
                case 20:
+                  if (curChar == 34 && kind > 19)
+                     kind = 19;
+                  break;
+               case 22:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 20)
-                     kind = 20;
+                  if (kind > 21)
+                     kind = 21;
                   jjAddStates(11, 12);
                   break;
-               case 21:
+               case 23:
                   if (curChar == 46)
-                     jjCheckNAdd(22);
+                     jjCheckNAdd(24);
                   break;
-               case 22:
+               case 24:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 20)
-                     kind = 20;
-                  jjCheckNAdd(22);
-                  break;
-               case 23:
-                  if (curChar == 42 && kind > 21)
+                  if (kind > 21)
                      kind = 21;
+                  jjCheckNAdd(24);
                   break;
-               case 24:
+               case 25:
+                  if (curChar == 42 && kind > 22)
+                     kind = 22;
+                  break;
+               case 26:
                   if ((0xfbffd4f8ffffd9ffL & l) == 0L)
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
-               case 27:
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+               case 29:
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
-               case 28:
                case 30:
+               case 32:
                   if (curChar == 47)
                      jjCheckNAddStates(8, 10);
                   break;
-               case 29:
+               case 31:
                   if ((0xffff7fffffffffffL & l) != 0L)
                      jjCheckNAddStates(8, 10);
                   break;
-               case 32:
-                  if (curChar == 47 && kind > 23)
-                     kind = 23;
+               case 34:
+                  if (curChar == 47 && kind > 24)
+                     kind = 24;
                   break;
-               case 33:
+               case 35:
                   if ((0x7bffd0f8ffffd9ffL & l) == 0L)
                      break;
-                  if (kind > 19)
-                     kind = 19;
+                  if (kind > 20)
+                     kind = 20;
                   jjCheckNAddStates(3, 7);
                   break;
-               case 34:
+               case 36:
                   if ((0x7bfff8f8ffffd9ffL & l) == 0L)
                      break;
-                  if (kind > 19)
-                     kind = 19;
-                  jjCheckNAddTwoStates(34, 35);
+                  if (kind > 20)
+                     kind = 20;
+                  jjCheckNAddTwoStates(36, 37);
                   break;
-               case 36:
-                  if (kind > 19)
-                     kind = 19;
-                  jjCheckNAddTwoStates(34, 35);
+               case 38:
+                  if (kind > 20)
+                     kind = 20;
+                  jjCheckNAddTwoStates(36, 37);
                   break;
-               case 37:
+               case 39:
                   if ((0x7bfff8f8ffffd9ffL & l) != 0L)
                      jjCheckNAddStates(13, 15);
                   break;
-               case 39:
+               case 41:
                   jjCheckNAddStates(13, 15);
                   break;
                default : break;
@@ -283,23 +293,23 @@ private int jjMoveNfa_2(int startState, 
                case 0:
                   if ((0x97ffffff87ffffffL & l) != 0L)
                   {
-                     if (kind > 19)
-                        kind = 19;
+                     if (kind > 20)
+                        kind = 20;
                      jjCheckNAddStates(3, 7);
                   }
                   else if (curChar == 92)
                      jjCheckNAddStates(16, 18);
                   else if (curChar == 126)
                   {
-                     if (kind > 20)
-                        kind = 20;
-                     jjstateSet[jjnewStateCnt++] = 20;
+                     if (kind > 21)
+                        kind = 21;
+                     jjstateSet[jjnewStateCnt++] = 22;
                   }
                   if ((0x97ffffff87ffffffL & l) != 0L)
                   {
-                     if (kind > 22)
-                        kind = 22;
-                     jjCheckNAddTwoStates(25, 26);
+                     if (kind > 23)
+                        kind = 23;
+                     jjCheckNAddTwoStates(27, 28);
                   }
                   if (curChar == 78)
                      jjstateSet[jjnewStateCnt++] = 11;
@@ -310,15 +320,15 @@ private int jjMoveNfa_2(int startState, 
                   else if (curChar == 65)
                      jjstateSet[jjnewStateCnt++] = 2;
                   break;
-               case 41:
+               case 43:
                   if ((0x97ffffff87ffffffL & l) != 0L)
                   {
-                     if (kind > 22)
-                        kind = 22;
-                     jjCheckNAddTwoStates(25, 26);
+                     if (kind > 23)
+                        kind = 23;
+                     jjCheckNAddTwoStates(27, 28);
                   }
                   else if (curChar == 92)
-                     jjCheckNAddTwoStates(27, 27);
+                     jjCheckNAddTwoStates(29, 29);
                   break;
                case 1:
                   if (curChar == 68 && kind > 8)
@@ -360,89 +370,89 @@ private int jjMoveNfa_2(int startState, 
                   if (curChar == 78)
                      jjstateSet[jjnewStateCnt++] = 11;
                   break;
-               case 15:
+               case 17:
                   if ((0xffffffffefffffffL & l) != 0L)
                      jjCheckNAddStates(0, 2);
                   break;
-               case 16:
+               case 18:
                   if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 17;
+                     jjstateSet[jjnewStateCnt++] = 19;
                   break;
-               case 17:
+               case 19:
                   jjCheckNAddStates(0, 2);
                   break;
-               case 19:
+               case 21:
                   if (curChar != 126)
                      break;
-                  if (kind > 20)
-                     kind = 20;
-                  jjstateSet[jjnewStateCnt++] = 20;
+                  if (kind > 21)
+                     kind = 21;
+                  jjstateSet[jjnewStateCnt++] = 22;
                   break;
-               case 24:
+               case 26:
                   if ((0x97ffffff87ffffffL & l) == 0L)
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
-               case 25:
+               case 27:
                   if ((0x97ffffff87ffffffL & l) == 0L)
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
-               case 26:
+               case 28:
                   if (curChar == 92)
-                     jjCheckNAddTwoStates(27, 27);
-                  break;
-               case 27:
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                     jjCheckNAddTwoStates(29, 29);
                   break;
                case 29:
-                  jjAddStates(8, 10);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
                case 31:
-                  if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 30;
+                  jjAddStates(8, 10);
                   break;
                case 33:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 32;
+                  break;
+               case 35:
                   if ((0x97ffffff87ffffffL & l) == 0L)
                      break;
-                  if (kind > 19)
-                     kind = 19;
+                  if (kind > 20)
+                     kind = 20;
                   jjCheckNAddStates(3, 7);
                   break;
-               case 34:
+               case 36:
                   if ((0x97ffffff87ffffffL & l) == 0L)
                      break;
-                  if (kind > 19)
-                     kind = 19;
-                  jjCheckNAddTwoStates(34, 35);
+                  if (kind > 20)
+                     kind = 20;
+                  jjCheckNAddTwoStates(36, 37);
                   break;
-               case 35:
+               case 37:
                   if (curChar == 92)
-                     jjCheckNAddTwoStates(36, 36);
+                     jjCheckNAddTwoStates(38, 38);
                   break;
-               case 36:
-                  if (kind > 19)
-                     kind = 19;
-                  jjCheckNAddTwoStates(34, 35);
+               case 38:
+                  if (kind > 20)
+                     kind = 20;
+                  jjCheckNAddTwoStates(36, 37);
                   break;
-               case 37:
+               case 39:
                   if ((0x97ffffff87ffffffL & l) != 0L)
                      jjCheckNAddStates(13, 15);
                   break;
-               case 38:
+               case 40:
                   if (curChar == 92)
-                     jjCheckNAddTwoStates(39, 39);
+                     jjCheckNAddTwoStates(41, 41);
                   break;
-               case 39:
+               case 41:
                   jjCheckNAddStates(13, 15);
                   break;
-               case 40:
+               case 42:
                   if (curChar == 92)
                      jjCheckNAddStates(16, 18);
                   break;
@@ -469,74 +479,78 @@ private int jjMoveNfa_2(int startState, 
                   }
                   if (jjCanMove_2(hiByte, i1, i2, l1, l2))
                   {
-                     if (kind > 22)
-                        kind = 22;
-                     jjCheckNAddTwoStates(25, 26);
+                     if (kind > 23)
+                        kind = 23;
+                     jjCheckNAddTwoStates(27, 28);
                   }
                   if (jjCanMove_2(hiByte, i1, i2, l1, l2))
                   {
-                     if (kind > 19)
-                        kind = 19;
+                     if (kind > 20)
+                        kind = 20;
                      jjCheckNAddStates(3, 7);
                   }
                   break;
-               case 41:
-               case 25:
+               case 43:
+               case 27:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
                case 15:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 13)
+                     kind = 13;
+                  break;
                case 17:
+               case 19:
                   if (jjCanMove_1(hiByte, i1, i2, l1, l2))
                      jjCheckNAddStates(0, 2);
                   break;
-               case 24:
+               case 26:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
-               case 27:
+               case 29:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 22)
-                     kind = 22;
-                  jjCheckNAddTwoStates(25, 26);
+                  if (kind > 23)
+                     kind = 23;
+                  jjCheckNAddTwoStates(27, 28);
                   break;
-               case 29:
+               case 31:
                   if (jjCanMove_1(hiByte, i1, i2, l1, l2))
                      jjAddStates(8, 10);
                   break;
-               case 33:
+               case 35:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 19)
-                     kind = 19;
+                  if (kind > 20)
+                     kind = 20;
                   jjCheckNAddStates(3, 7);
                   break;
-               case 34:
+               case 36:
                   if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 19)
-                     kind = 19;
-                  jjCheckNAddTwoStates(34, 35);
+                  if (kind > 20)
+                     kind = 20;
+                  jjCheckNAddTwoStates(36, 37);
                   break;
-               case 36:
+               case 38:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 19)
-                     kind = 19;
-                  jjCheckNAddTwoStates(34, 35);
+                  if (kind > 20)
+                     kind = 20;
+                  jjCheckNAddTwoStates(36, 37);
                   break;
-               case 37:
+               case 39:
                   if (jjCanMove_2(hiByte, i1, i2, l1, l2))
                      jjCheckNAddStates(13, 15);
                   break;
-               case 39:
+               case 41:
                   if (jjCanMove_1(hiByte, i1, i2, l1, l2))
                      jjCheckNAddStates(13, 15);
                   break;
@@ -551,7 +565,7 @@ private int jjMoveNfa_2(int startState, 
          kind = 0x7fffffff;
       }
       ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 41 - (jjnewStateCnt = startsAt)))
+      if ((i = jjnewStateCnt) == (startsAt = 43 - (jjnewStateCnt = startsAt)))
          return curPos;
       try { curChar = input_stream.readChar(); }
       catch(java.io.IOException e) { return curPos; }
@@ -582,8 +596,8 @@ private int jjMoveNfa_0(int startState, 
                case 0:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 26)
-                     kind = 26;
+                  if (kind > 27)
+                     kind = 27;
                   jjAddStates(19, 20);
                   break;
                case 1:
@@ -593,8 +607,8 @@ private int jjMoveNfa_0(int startState, 
                case 2:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 26)
-                     kind = 26;
+                  if (kind > 27)
+                     kind = 27;
                   jjCheckNAdd(2);
                   break;
                default : break;
@@ -645,9 +659,9 @@ private final int jjStopStringLiteralDfa
    switch (pos)
    {
       case 0:
-         if ((active0 & 0x8000000L) != 0L)
+         if ((active0 & 0x10000000L) != 0L)
          {
-            jjmatchedKind = 31;
+            jjmatchedKind = 32;
             return 6;
          }
          return -1;
@@ -664,11 +678,11 @@ private int jjMoveStringLiteralDfa0_1()
    switch(curChar)
    {
       case 84:
-         return jjMoveStringLiteralDfa1_1(0x8000000L);
+         return jjMoveStringLiteralDfa1_1(0x10000000L);
       case 93:
-         return jjStopAtPos(0, 28);
-      case 125:
          return jjStopAtPos(0, 29);
+      case 125:
+         return jjStopAtPos(0, 30);
       default :
          return jjMoveNfa_1(0, 0);
    }
@@ -683,8 +697,8 @@ private int jjMoveStringLiteralDfa1_1(lo
    switch(curChar)
    {
       case 79:
-         if ((active0 & 0x8000000L) != 0L)
-            return jjStartNfaWithStates_1(1, 27, 6);
+         if ((active0 & 0x10000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 28, 6);
          break;
       default :
          break;
@@ -720,8 +734,8 @@ private int jjMoveNfa_1(int startState, 
                case 0:
                   if ((0xfffffffeffffffffL & l) != 0L)
                   {
-                     if (kind > 31)
-                        kind = 31;
+                     if (kind > 32)
+                        kind = 32;
                      jjCheckNAdd(6);
                   }
                   if ((0x100002600L & l) != 0L)
@@ -745,14 +759,14 @@ private int jjMoveNfa_1(int startState, 
                      jjCheckNAddStates(21, 23);
                   break;
                case 5:
-                  if (curChar == 34 && kind > 30)
-                     kind = 30;
+                  if (curChar == 34 && kind > 31)
+                     kind = 31;
                   break;
                case 6:
                   if ((0xfffffffeffffffffL & l) == 0L)
                      break;
-                  if (kind > 31)
-                     kind = 31;
+                  if (kind > 32)
+                     kind = 32;
                   jjCheckNAdd(6);
                   break;
                default : break;
@@ -770,8 +784,8 @@ private int jjMoveNfa_1(int startState, 
                case 6:
                   if ((0xdfffffffdfffffffL & l) == 0L)
                      break;
-                  if (kind > 31)
-                     kind = 31;
+                  if (kind > 32)
+                     kind = 32;
                   jjCheckNAdd(6);
                   break;
                case 2:
@@ -804,8 +818,8 @@ private int jjMoveNfa_1(int startState, 
                   }
                   if (jjCanMove_1(hiByte, i1, i2, l1, l2))
                   {
-                     if (kind > 31)
-                        kind = 31;
+                     if (kind > 32)
+                        kind = 32;
                      jjCheckNAdd(6);
                   }
                   break;
@@ -816,8 +830,8 @@ private int jjMoveNfa_1(int startState, 
                case 6:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 31)
-                     kind = 31;
+                  if (kind > 32)
+                     kind = 32;
                   jjCheckNAdd(6);
                   break;
                default : break;
@@ -838,8 +852,8 @@ private int jjMoveNfa_1(int startState, 
    }
 }
 static final int[] jjnextStates = {
-   15, 16, 18, 34, 37, 23, 38, 35, 29, 31, 32, 20, 21, 37, 23, 38, 
-   36, 39, 27, 0, 1, 2, 4, 5, 
+   17, 18, 20, 36, 39, 25, 40, 37, 31, 33, 34, 22, 23, 39, 25, 40, 
+   38, 41, 29, 0, 1, 2, 4, 5, 
 };
 private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
 {
@@ -881,8 +895,8 @@ private static final boolean jjCanMove_2
 /** Token literal values. */
 public static final String[] jjstrLiteralImages = {
 "", null, null, null, null, null, null, null, null, null, null, "\53", "\55", 
-"\50", "\51", "\72", "\52", "\136", null, null, null, null, null, null, "\133", 
-"\173", null, "\124\117", "\135", "\175", null, null, };
+null, "\50", "\51", "\72", "\52", "\136", null, null, null, null, null, null, 
+"\133", "\173", null, "\124\117", "\135", "\175", null, null, };
 
 /** Lexer state names. */
 public static final String[] lexStateNames = {
@@ -893,18 +907,18 @@ public static final String[] lexStateNam
 
 /** Lex State array. */
 public static final int[] jjnewLexState = {
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, 1, 
-   1, 2, -1, 2, 2, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, 
+   1, 1, 2, -1, 2, 2, -1, -1, 
 };
 static final long[] jjtoToken = {
-   0xffffff01L, 
+   0x1ffffff01L, 
 };
 static final long[] jjtoSkip = {
    0x80L, 
 };
 protected CharStream input_stream;
-private final int[] jjrounds = new int[41];
-private final int[] jjstateSet = new int[82];
+private final int[] jjrounds = new int[43];
+private final int[] jjstateSet = new int[86];
 protected char curChar;
 /** Constructor. */
 public QueryParserTokenManager(CharStream stream){
@@ -929,7 +943,7 @@ private void ReInitRounds()
 {
    int i;
    jjround = 0x80000001;
-   for (i = 41; i-- > 0;)
+   for (i = 43; i-- > 0;)
       jjrounds[i] = 0x80000000;
 }
 

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/ConjunctionScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/ConjunctionScorer.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/ConjunctionScorer.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/ConjunctionScorer.java Sat Oct 30 07:37:24 2010
@@ -17,9 +17,9 @@ package org.apache.lucene.search;
  * limitations under the License.
  */
 
+import org.apache.lucene.util.ArrayUtil;
 import java.io.IOException;
 import java.util.Collection;
-import java.util.Arrays;
 import java.util.Comparator;
 
 /** Scorer for conjunctions, sets of queries, all of which are required. */
@@ -51,8 +51,10 @@ class ConjunctionScorer extends Scorer {
     // We don't need to sort the array in any future calls because we know
     // it will already start off sorted (all scorers on same doc).
     
-    // note that this comparator is not consistent with equals!
-    Arrays.sort(scorers, new Comparator<Scorer>() {         // sort the array
+    // Note that this comparator is not consistent with equals!
+    // Also we use mergeSort here to be stable (so order of Scoreres that
+    // match on first document keeps preserved):
+    ArrayUtil.mergeSort(scorers, new Comparator<Scorer>() { // sort the array
       public int compare(Scorer o1, Scorer o2) {
         return o1.docID() - o2.docID();
       }

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiPhraseQuery.java Sat Oct 30 07:37:24 2010
@@ -24,6 +24,7 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.DocsEnum;
 import org.apache.lucene.index.DocsAndPositionsEnum;
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.ToStringUtils;
 import org.apache.lucene.util.PriorityQueue;
@@ -213,7 +214,7 @@ public class MultiPhraseQuery extends Qu
 
       // sort by increasing docFreq order
       if (slop == 0) {
-        Arrays.sort(postingsFreqs);
+        ArrayUtil.quickSort(postingsFreqs);
       }
 
       if (slop == 0) {

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQuery.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQuery.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQuery.java Sat Oct 30 07:37:24 2010
@@ -19,7 +19,6 @@ package org.apache.lucene.search;
 
 import java.io.IOException;
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -507,13 +506,7 @@ public abstract class MultiTermQuery ext
       final Term placeholderTerm = new Term(query.field);
       final BooleanQuery bq = new BooleanQuery(true);
       final ScoreTerm[] scoreTerms = stQueue.toArray(new ScoreTerm[stQueue.size()]);
-      Arrays.sort(scoreTerms, new Comparator<ScoreTerm>() {
-        public int compare(ScoreTerm st1, ScoreTerm st2) {
-          assert st1.termComp == st2.termComp :
-            "term comparator should not change between segments";
-          return st1.termComp.compare(st1.bytes, st2.bytes);
-        }
-      });
+      ArrayUtil.quickSort(scoreTerms, scoreTermSortByTermComp);
       for (final ScoreTerm st : scoreTerms) {
         final Term term = placeholderTerm.createTerm(st.bytes);
         assert reader.docFreq(term) == st.docFreq;
@@ -539,6 +532,15 @@ public abstract class MultiTermQuery ext
       if (size != other.size) return false;
       return true;
     }
+    
+    private static final Comparator<ScoreTerm> scoreTermSortByTermComp = 
+      new Comparator<ScoreTerm>() {
+        public int compare(ScoreTerm st1, ScoreTerm st2) {
+          assert st1.termComp == st2.termComp :
+            "term comparator should not change between segments";
+          return st1.termComp.compare(st1.bytes, st2.bytes);
+        }
+      };
   
     static final class ScoreTerm implements Comparable<ScoreTerm> {
       public final Comparator<BytesRef> termComp;

Propchange: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Oct 30 07:37:24 2010
@@ -1,6 +1,6 @@
 /lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:943137,949730,957490,960490,961612,979161,980654,982195,987811,988512,1025544,1026614
 /lucene/dev/branches/preflexfixes/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:967125-979432
-/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:1021634-1027393
+/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:1021634-1029001
 /lucene/java/branches/flex_1458/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:824912-931101
 /lucene/java/branches/lucene_2_9/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:909334,948516
 /lucene/java/trunk/src/java/org/apache/lucene/search/MultiTermQueryWrapperFilter.java:924483-924731,924781,925176-925462

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/PhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/PhraseQuery.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/PhraseQuery.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/PhraseQuery.java Sat Oct 30 07:37:24 2010
@@ -20,13 +20,13 @@ package org.apache.lucene.search;
 import java.io.IOException;
 import java.util.Set;
 import java.util.ArrayList;
-import java.util.Arrays;
 
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.DocsAndPositionsEnum;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.search.Explanation.IDFExplanation;
 import org.apache.lucene.util.ToStringUtils;
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.Bits;
 
 /** A Query that matches documents containing a particular sequence of terms.
@@ -201,7 +201,7 @@ public class PhraseQuery extends Query {
 
       // sort by increasing docFreq order
       if (slop == 0) {
-        Arrays.sort(postingsFreqs);
+        ArrayUtil.quickSort(postingsFreqs);
       }
 
       if (slop == 0) {				  // optimize exact case

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/QueryTermVector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/QueryTermVector.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/QueryTermVector.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/QueryTermVector.java Sat Oct 30 07:37:24 2010
@@ -31,6 +31,7 @@ import org.apache.lucene.analysis.TokenS
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
 import org.apache.lucene.analysis.tokenattributes.TermToBytesRefAttribute;
 import org.apache.lucene.index.TermFreqVector;
+import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
 
 /**
@@ -81,7 +82,7 @@ public class QueryTermVector implements 
   
   private void processTerms(BytesRef[] queryTerms) {
     if (queryTerms != null) {
-      Arrays.sort(queryTerms);
+      ArrayUtil.quickSort(queryTerms);
       Map<BytesRef,Integer> tmpSet = new HashMap<BytesRef,Integer>(queryTerms.length);
       //filter out duplicates
       List<BytesRef> tmpList = new ArrayList<BytesRef>(queryTerms.length);

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/cache/DocTermsCreator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/cache/DocTermsCreator.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/cache/DocTermsCreator.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/cache/DocTermsCreator.java Sat Oct 30 07:37:24 2010
@@ -164,7 +164,7 @@ public class DocTermsCreator extends Ent
 
     @Override
     public BytesRef getTerm(int docID, BytesRef ret) {
-      final int pointer = (int) docToOffset.get(docID);
+      final long pointer = docToOffset.get(docID);
       return bytes.fillUsingLengthPrefix(ret, pointer);
     }
   }

Modified: lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/spans/NearSpansOrdered.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/spans/NearSpansOrdered.java?rev=1029003&r1=1029002&r2=1029003&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/spans/NearSpansOrdered.java (original)
+++ lucene/dev/branches/docvalues/lucene/src/java/org/apache/lucene/search/spans/NearSpansOrdered.java Sat Oct 30 07:37:24 2010
@@ -18,10 +18,10 @@ package org.apache.lucene.search.spans;
  */
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.util.ArrayUtil;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -190,7 +190,7 @@ public class NearSpansOrdered extends Sp
 
   /** Advance the subSpans to the same document */
   private boolean toSameDoc() throws IOException {
-    Arrays.sort(subSpansByDoc, spanDocComparator);
+    ArrayUtil.quickSort(subSpansByDoc, spanDocComparator);
     int firstIndex = 0;
     int maxDoc = subSpansByDoc[subSpansByDoc.length - 1].doc();
     while (subSpansByDoc[firstIndex].doc() != maxDoc) {