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 2011/03/28 12:50:48 UTC

svn commit: r1086181 [20/20] - in /lucene/dev/branches/docvalues: ./ dev-tools/eclipse/ dev-tools/idea/ dev-tools/idea/.idea/ dev-tools/idea/.idea/libraries/ dev-tools/idea/lucene/ dev-tools/idea/solr/ dev-tools/idea/solr/contrib/analysis-extras/ dev-t...

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Mon Mar 28 10:50:28 2011
@@ -27,6 +27,10 @@ import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import junit.framework.Assert;
 
+import org.apache.lucene.util._TestUtil;
+import org.apache.solr.client.solrj.impl.BinaryResponseParser;
+import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
+import org.apache.solr.client.solrj.impl.XMLResponseParser;
 import org.apache.solr.client.solrj.request.DirectXmlRequest;
 import org.apache.solr.client.solrj.request.LukeRequest;
 import org.apache.solr.client.solrj.request.SolrPing;
@@ -42,9 +46,11 @@ import org.apache.solr.client.solrj.resp
 import org.apache.solr.client.solrj.response.UpdateResponse;
 import org.apache.solr.client.solrj.util.ClientUtils;
 import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.XML;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.FacetParams;
 import org.junit.Test;
 
@@ -181,7 +187,7 @@ abstract public class SolrExampleTests e
 
     SolrInputDocument doc2 = new SolrInputDocument();
     doc2.addField( "id", "id2", 1.0f );
-    doc2.addField( "name", "h\u1234llo", 1.0f );
+    doc2.addField( "name", "h\uD866\uDF05llo", 1.0f );
     doc2.addField( "price", 20 );
     
     Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
@@ -209,12 +215,129 @@ abstract public class SolrExampleTests e
     // System.out.println( rsp.getResults() );
 
     // query outside ascii range
-    query.setQuery("name:h\u1234llo");
+    query.setQuery("name:h\uD866\uDF05llo");
     rsp = server.query( query );
     assertEquals( 1, rsp.getResults().getNumFound() );
 
   }
+ 
+
+ /**
+  * Get empty results
+  */
+  @Test
+  public void testGetEmptyResults() throws Exception
+  {    
+    SolrServer server = getSolrServer();
+     
+    // Empty the database...
+    server.deleteByQuery( "*:*" );// delete everything!
+    server.commit();
+     
+    // Add two docs
+    SolrInputDocument doc = new SolrInputDocument();
+    doc.addField( "id", "id1", 1.0f );
+    doc.addField( "name", "doc1", 1.0f );
+    doc.addField( "price", 10 );
+    server.add( doc );
+    
+    doc = new SolrInputDocument();
+    doc.addField( "id", "id2", 1.0f );
+    server.add( doc );
+    server.commit();
+    
+    // Make sure we get empty docs for unknown field
+    SolrDocumentList out = server.query( new SolrQuery( "*:*" ).set("fl", "foofoofoo" ) ).getResults();
+    assertEquals( 2, out.getNumFound() );
+    assertEquals( 0, out.get(0).size() );
+    assertEquals( 0, out.get(1).size() );
+
+  }
+  
+  private String randomTestString(int maxLength) {
+    // we can't just use _TestUtil.randomUnicodeString() or we might get 0xfffe etc
+    // (considered invalid by XML)
+    
+    int size = random.nextInt(maxLength);
+    StringBuilder sb = new StringBuilder();
+    for (int i = 0; i < size; i++) {
+      switch(random.nextInt(4)) {
+        case 0: /* single byte */ 
+          sb.append('a'); 
+          break;
+        case 1: /* two bytes */
+          sb.append('\u0645');
+          break;
+        case 2: /* three bytes */
+          sb.append('\u092a');
+          break;
+        case 3: /* four bytes */
+          sb.appendCodePoint(0x29B05);
+      }
+    }
+    return sb.toString();
+  }
   
+  public void testUnicode() throws Exception {
+    int numIterations = 100 * RANDOM_MULTIPLIER;
+    
+    SolrServer server = getSolrServer();
+    
+    // save the old parser, so we can set it back.
+    ResponseParser oldParser = null;
+    if (server instanceof CommonsHttpSolrServer) {
+      CommonsHttpSolrServer cserver = (CommonsHttpSolrServer) server;
+      oldParser = cserver.getParser();
+    }
+    
+    try {
+      for (int iteration = 0; iteration < numIterations; iteration++) {
+        // choose format
+        if (server instanceof CommonsHttpSolrServer) {
+          if (random.nextBoolean()) {
+            ((CommonsHttpSolrServer) server).setParser(new BinaryResponseParser());
+          } else {
+            ((CommonsHttpSolrServer) server).setParser(new XMLResponseParser());
+          }
+        }
+
+        int numDocs = _TestUtil.nextInt(random, 1, 100);
+        
+        // Empty the database...
+        server.deleteByQuery("*:*");// delete everything!
+        
+        List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
+        for (int i = 0; i < numDocs; i++) {
+          // Now add something...
+          SolrInputDocument doc = new SolrInputDocument();
+          doc.addField("id", "" + i);
+          doc.addField("unicode_s", randomTestString(30));
+          docs.add(doc);
+        }
+        
+        server.add(docs);
+        server.commit();
+        
+        SolrQuery query = new SolrQuery();
+        query.setQuery("*:*");
+        query.setRows(numDocs);
+        
+        QueryResponse rsp = server.query( query );
+        
+        for (int i = 0; i < numDocs; i++) {
+          String expected = (String) docs.get(i).getFieldValue("unicode_s");
+          String actual = (String) rsp.getResults().get(i).getFieldValue("unicode_s");
+          assertEquals(expected, actual);
+        }
+      }
+    } finally {
+      if (oldParser != null) {
+        // set the old parser back
+        ((CommonsHttpSolrServer)server).setParser(oldParser);
+      }
+    }
+  }
+
   /**
    * query the example
    */
@@ -257,6 +380,58 @@ abstract public class SolrExampleTests e
   }
 
 
+  @Test
+  public void testAugmentFields() throws Exception
+  {    
+    SolrServer server = getSolrServer();
+    
+    // Empty the database...
+    server.deleteByQuery( "*:*" );// delete everything!
+    
+    // Now add something...
+    SolrInputDocument doc = new SolrInputDocument();
+    doc.addField( "id", "111", 1.0f );
+    doc.addField( "name", "doc1", 1.0f );
+    doc.addField( "price", 11 );
+    server.add( doc );
+    server.commit(); // make sure this gets in first
+    
+    doc = new SolrInputDocument();
+    doc.addField( "id", "222", 1.0f );
+    doc.addField( "name", "doc2", 1.0f );
+    doc.addField( "price", 22 );
+    server.add( doc );
+    server.commit();
+    
+    SolrQuery query = new SolrQuery();
+    query.setQuery( "*:*" );
+    query.set( CommonParams.FL, "id,price,_docid_,_explain:nl_,score,aaa=_value:aaa_,ten=_value:int:10_" );
+    query.addSortField( "price", SolrQuery.ORDER.asc );
+    QueryResponse rsp = server.query( query );
+    
+    SolrDocumentList out = rsp.getResults();
+    assertEquals( 2, out.getNumFound() );
+    SolrDocument out1 = out.get( 0 ); 
+    SolrDocument out2 = out.get( 1 );
+    assertEquals( "111", out1.getFieldValue( "id" ) );
+    assertEquals( "222", out2.getFieldValue( "id" ) );
+    assertEquals( 1.0f, out1.getFieldValue( "score" ) );
+    assertEquals( 1.0f, out2.getFieldValue( "score" ) );
+    
+    // check that the docid is one bigger
+    int id1 = (Integer)out1.getFieldValue( "_docid_" );
+    int id2 = (Integer)out2.getFieldValue( "_docid_" );
+    assertTrue( "should be bigger ["+id1+","+id2+"]", id2 > id1 );
+    
+    // The score from explain should be the same as the score
+    NamedList explain = (NamedList)out1.getFieldValue( "_explain:nl_" );
+    assertEquals( out1.get( "score"), explain.get( "value" ) );
+    
+    // Augmented _value_ with alias
+    assertEquals( "aaa", out1.get( "aaa" ) );
+    assertEquals( 10, ((Integer)out1.get( "ten" )).intValue() );
+  }
+
  @Test
  public void testContentStreamRequest() throws Exception {
     SolrServer server = getSolrServer();
@@ -471,8 +646,8 @@ abstract public class SolrExampleTests e
     assertEquals( "they have the same distribution", inStockF.getStddev(), inStockT.getStddev() );
   }
 
- @Test
- public void testPingHandler() throws Exception
+  @Test
+  public void testPingHandler() throws Exception
   {    
     SolrServer server = getSolrServer();
     
@@ -495,8 +670,8 @@ abstract public class SolrExampleTests e
     }
   }
   
- @Test
- public void testFaceting() throws Exception
+  @Test
+  public void testFaceting() throws Exception
   {    
     SolrServer server = getSolrServer();
     
@@ -716,6 +891,7 @@ abstract public class SolrExampleTests e
    
     // Make sure it ran OK
     SolrQuery query = new SolrQuery("*:*");
+    query.set( CommonParams.FL, "id,score,_docid_" );
     QueryResponse response = server.query(query);
     assertEquals(0, response.getStatus());
     assertEquals(10, response.getResults().getNumFound());
@@ -732,6 +908,11 @@ abstract public class SolrExampleTests e
       @Override
       public void streamSolrDocument(SolrDocument doc) {
         cnt.incrementAndGet();
+        
+        // Make sure the transformer works for streaming
+        Float score = (Float)doc.get( "score" );
+        Integer docid = (Integer)doc.get( "_docid_" );
+        assertEquals( "should have score", new Float(1.0), score );
       }
      
     });

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/BasicZkTest.java Mon Mar 28 10:50:28 2011
@@ -18,6 +18,7 @@ package org.apache.solr.cloud;
  */
 
 import org.apache.lucene.index.LogMergePolicy;
+import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.update.SolrIndexWriter;
 
@@ -50,7 +51,7 @@ public class BasicZkTest extends Abstrac
     assertEquals("Mergefactor was not picked up", ((LogMergePolicy)writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
     writer.close();
     
-    lrf.args.put("version", "2.0");
+    lrf.args.put(CommonParams.VERSION, "2.2");
     assertQ("test query on empty index", req("qlkciyopsbgzyvkylsjhchghjrdf"),
         "//result[@numFound='0']");
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/cloud/ZkSolrClientTest.java Mon Mar 28 10:50:28 2011
@@ -40,7 +40,7 @@ public class ZkSolrClientTest extends Ab
     server = new ZkTestServer(zkDir);
     server.run();
 
-    SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), 100);
+    SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), AbstractZkTestCase.TIMEOUT);
 
     zkClient.close();
     server.shutdown();

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestArbitraryIndexDir.java Mon Mar 28 10:50:28 2011
@@ -32,6 +32,7 @@ import org.apache.lucene.queryParser.Par
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.Version;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.solr.util.TestHarness;
 import org.junit.Test;
@@ -56,7 +57,7 @@ public class TestArbitraryIndexDir exten
         solrConfig,
         "schema12.xml");
     lrf = h.getRequestFactory
-    ("standard",0,20,"version","2.2");
+    ("standard",0,20,CommonParams.VERSION,"2.2");
   }
   
   @Override

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/core/TestXIncludeConfig.java Mon Mar 28 10:50:28 2011
@@ -17,11 +17,8 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
-import java.io.File;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.util.AbstractSolrTestCase;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 
@@ -46,19 +43,16 @@ public class TestXIncludeConfig extends 
 
   @Override
   public void setUp() throws Exception {
-    File dest = new File("solrconfig-reqHandler.incl");
-    dest.deleteOnExit();
-    FileUtils.copyFile(getFile("solr/conf/solrconfig-reqHandler.incl"), dest);
     supports = true;
     javax.xml.parsers.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
     try {
       //see whether it even makes sense to run this test
       dbf.setXIncludeAware(true);
       dbf.setNamespaceAware(true);
-      super.setUp();
     } catch (UnsupportedOperationException e) {
       supports = false;
     }
+    super.setUp();
   }
 
   public void testXInclude() throws Exception {

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/handler/TestCSVLoader.java Mon Mar 28 10:50:28 2011
@@ -19,6 +19,7 @@ package org.apache.solr.handler;
 
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.request.LocalSolrQueryRequest;
+import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.junit.After;
@@ -121,12 +122,12 @@ public class TestCSVLoader extends SolrT
 
   @Test
   public void testCSV() throws Exception {
-    lrf.args.put("version","2.0");
+    lrf.args.put(CommonParams.VERSION,"2.2");
     
     makeFile("id,str_s\n100,\"quoted\"\n101,\n102,\"\"\n103,");
     loadLocal("stream.file",filename,"commit","true");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
     assertQ(req("id:101"),"count(//str[@name='str_s'])=0");
     // 102 is a quoted zero length field ,"", as opposed to ,,
     // but we can't distinguish this case (and it's debateable
@@ -154,7 +155,7 @@ public class TestCSVLoader extends SolrT
     // test global value mapping
     loadLocal("stream.file",filename, "commit","true", "map","quoted:QUOTED");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='QUOTED']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='QUOTED']");
     assertQ(req("id:101"),"count(//str[@name='str_s'])=0");
     assertQ(req("id:102"),"count(//str[@name='str_s'])=0");
     assertQ(req("id:103"),"count(//str[@name='str_s'])=0");
@@ -167,39 +168,39 @@ public class TestCSVLoader extends SolrT
     // test value mapping from empty
     loadLocal("stream.file",filename, "commit","true", "map",":EMPTY");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
-    assertQ(req("id:101"),"//str[@name='str_s'][.='EMPTY']");
-    assertQ(req("id:102"),"//str[@name='str_s'][.='EMPTY']");
-    assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
+    assertQ(req("id:101"),"//arr[@name='str_s']/str[.='EMPTY']");
+    assertQ(req("id:102"),"//arr[@name='str_s']/str[.='EMPTY']");
+    assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
 
     // test multiple map rules
     loadLocal("stream.file",filename, "commit","true", "map",":EMPTY", "map","quoted:QUOTED");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='QUOTED']");
-    assertQ(req("id:101"),"//str[@name='str_s'][.='EMPTY']");
-    assertQ(req("id:102"),"//str[@name='str_s'][.='EMPTY']");
-    assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='QUOTED']");
+    assertQ(req("id:101"),"//arr[@name='str_s']/str[.='EMPTY']");
+    assertQ(req("id:102"),"//arr[@name='str_s']/str[.='EMPTY']");
+    assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
 
     // test indexing empty fields
     loadLocal("stream.file",filename, "commit","true", "f.str_s.keepEmpty","true");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
-    assertQ(req("id:101"),"//str[@name='str_s'][.='']");
-    assertQ(req("id:102"),"//str[@name='str_s'][.='']");
-    assertQ(req("id:103"),"//str[@name='str_s'][.='']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
+    assertQ(req("id:101"),"//arr[@name='str_s']/str[.='']");
+    assertQ(req("id:102"),"//arr[@name='str_s']/str[.='']");
+    assertQ(req("id:103"),"//arr[@name='str_s']/str[.='']");
 
     // test overriding the name of fields
     loadLocal("stream.file",filename, "commit","true",
              "fieldnames","id,my_s", "header","true",
              "f.my_s.map",":EMPTY");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='my_s'][.='quoted']");
-    assertQ(req("id:101"),"count(//str[@name='str_s'])=0");
-    assertQ(req("id:102"),"count(//str[@name='str_s'])=0");
-    assertQ(req("id:103"),"count(//str[@name='str_s'])=0");
-    assertQ(req("id:101"),"//str[@name='my_s'][.='EMPTY']");
-    assertQ(req("id:102"),"//str[@name='my_s'][.='EMPTY']");
-    assertQ(req("id:103"),"//str[@name='my_s'][.='EMPTY']");
+    assertQ(req("id:100"),"//arr[@name='my_s']/str[.='quoted']");
+    assertQ(req("id:101"),"count(//arr[@name='str_s']/str)=0");
+    assertQ(req("id:102"),"count(//arr[@name='str_s']/str)=0");
+    assertQ(req("id:103"),"count(//arr[@name='str_s']/str)=0");
+    assertQ(req("id:101"),"//arr[@name='my_s']/str[.='EMPTY']");
+    assertQ(req("id:102"),"//arr[@name='my_s']/str[.='EMPTY']");
+    assertQ(req("id:103"),"//arr[@name='my_s']/str[.='EMPTY']");
 
     // test that header in file was skipped
     assertQ(req("id:id"),"//*[@numFound='0']");
@@ -207,24 +208,24 @@ public class TestCSVLoader extends SolrT
     // test skipping a field via the "skip" parameter
     loadLocal("stream.file",filename,"commit","true","keepEmpty","true","skip","str_s");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s'])=0");
+    assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s']/str)=0");
 
     // test skipping a field by specifying an empty name
     loadLocal("stream.file",filename,"commit","true","keepEmpty","true","fieldnames","id,");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s'])=0");
+    assertQ(req("id:[100 TO 110]"),"count(//str[@name='str_s']/str)=0");
 
     // test loading file as if it didn't have a header
     loadLocal("stream.file",filename, "commit","true",
              "fieldnames","id,my_s", "header","false");
     assertQ(req("id:id"),"//*[@numFound='1']");
-    assertQ(req("id:100"),"//str[@name='my_s'][.='quoted']");
+    assertQ(req("id:100"),"//arr[@name='my_s']/str[.='quoted']");
 
     // test skipLines
     loadLocal("stream.file",filename, "commit","true",
              "fieldnames","id,my_s", "header","false", "skipLines","1");
     assertQ(req("id:id"),"//*[@numFound='1']");
-    assertQ(req("id:100"),"//str[@name='my_s'][.='quoted']");
+    assertQ(req("id:100"),"//arr[@name='my_s']/str[.='quoted']");
 
 
     // test multi-valued fields via field splitting w/ mapping of subvalues
@@ -237,12 +238,12 @@ public class TestCSVLoader extends SolrT
               "f.str_s.map",":EMPTY",
               "f.str_s.split","true");
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='4']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
     assertQ(req("id:101"),"//arr[@name='str_s']/str[1][.='a']");
     assertQ(req("id:101"),"//arr[@name='str_s']/str[2][.='b']");
     assertQ(req("id:101"),"//arr[@name='str_s']/str[3][.='c']");
     assertQ(req("id:102"),"//arr[@name='str_s']/str[2][.='EMPTY']");
-    assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
+    assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
 
 
     // test alternate values for delimiters
@@ -263,13 +264,13 @@ public class TestCSVLoader extends SolrT
               "f.str_s.encapsulator","'"
     );
     assertQ(req("id:[100 TO 110]"),"//*[@numFound='5']");
-    assertQ(req("id:100"),"//str[@name='str_s'][.='quoted']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted']");
     assertQ(req("id:101"),"//arr[@name='str_s']/str[1][.='a']");
     assertQ(req("id:101"),"//arr[@name='str_s']/str[2][.='b']");
     assertQ(req("id:101"),"//arr[@name='str_s']/str[3][.='c']");
     assertQ(req("id:102"),"//arr[@name='str_s']/str[2][.='EMPTY']");
-    assertQ(req("id:103"),"//str[@name='str_s'][.='EMPTY']");
-    assertQ(req("id:104"),"//str[@name='str_s'][.='a\\\\b']");
+    assertQ(req("id:103"),"//arr[@name='str_s']/str[.='EMPTY']");
+    assertQ(req("id:104"),"//arr[@name='str_s']/str[.='a\\\\b']");
 
     // test no escaping + double encapsulator escaping by default
     makeFile("id,str_s\n"
@@ -279,9 +280,9 @@ public class TestCSVLoader extends SolrT
     );
     loadLocal("stream.file",filename, "commit","true"
     );
-    assertQ(req("id:100"),"//str[@name='str_s'][.='quoted \" \\ string']");
-    assertQ(req("id:101"),"//str[@name='str_s'][.='unquoted \"\" \\ string']");
-    assertQ(req("id:102"),"//str[@name='str_s'][.='end quote \\']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='quoted \" \\ string']");
+    assertQ(req("id:101"),"//arr[@name='str_s']/str[.='unquoted \"\" \\ string']");
+    assertQ(req("id:102"),"//arr[@name='str_s']/str[.='end quote \\']");
 
 
     // setting an escape should disable encapsulator
@@ -292,8 +293,8 @@ public class TestCSVLoader extends SolrT
     loadLocal("stream.file",filename, "commit","true"
             ,"escape","\\"
     );
-    assertQ(req("id:100"),"//str[@name='str_s'][.='\"quoted \"\" \" \\ string\"']");
-    assertQ(req("id:101"),"//str[@name='str_s'][.='unquoted \"\" \" , \\ string']");
+    assertQ(req("id:100"),"//arr[@name='str_s']/str[.='\"quoted \"\" \" \\ string\"']");
+    assertQ(req("id:101"),"//arr[@name='str_s']/str[.='unquoted \"\" \" , \\ string']");
 
   }
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/request/SimpleFacetsTest.java Mon Mar 28 10:50:28 2011
@@ -370,6 +370,12 @@ public class SimpleFacetsTest extends So
     final String pre = "//lst[@name='"+b+"']/lst[@name='"+f+"']" + c;
     final String meta = pre + (rangeMode ? "/../" : "");
 
+    
+    // date faceting defaults to include both endpoints, 
+    // range faceting defaults to including only lower
+    // doc exists with value @ 00:00:00.000 on July5
+    final String jul4 = rangeMode ? "[.='1'  ]" : "[.='2'  ]";
+
     assertQ("check counts for month of facet by day",
             req( "q", "*:*"
                 ,"rows", "0"
@@ -381,12 +387,10 @@ public class SimpleFacetsTest extends So
                 ,p+".other", "all"
                 )
             ,"*[count("+pre+"/int)="+(rangeMode ? 31 : 34)+"]"
-            ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='0'  ]"
-            ,pre+"/int[@name='1976-07-02T00:00:00Z'][.='0'  ]"
+            ,pre+"/int[@name='1976-07-01T00:00:00Z'][.='0']"
+            ,pre+"/int[@name='1976-07-02T00:00:00Z'][.='0']"
             ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
-            // july4th = 2 because exists doc @ 00:00:00.000 on July5
-            // (date faceting is inclusive)
-            ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-04T00:00:00Z']" + jul4
             ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
             ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
             ,pre+"/int[@name='1976-07-07T00:00:00Z'][.='0']"
@@ -433,9 +437,7 @@ public class SimpleFacetsTest extends So
                 )
             ,"*[count("+pre+"/int)="+(rangeMode ? 8 : 11)+"]"
             ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
-            // july4th = 2 because exists doc @ 00:00:00.000 on July5
-            // (date faceting is inclusive)
-            ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-04T00:00:00Z']" + jul4
             ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
             ,pre+"/int[@name='1976-07-12T00:00:00Z'][.='1'  ]"
             ,pre+"/int[@name='1976-07-13T00:00:00Z'][.='1'  ]"
@@ -458,11 +460,9 @@ public class SimpleFacetsTest extends So
                 ,p+".other", "all"
                 ,"f." + f + ".facet.mincount", "2"
                 )
-            ,"*[count("+pre+"/int)="+(rangeMode ? 4 : 7)+"]"
+            ,"*[count("+pre+"/int)="+(rangeMode ? 3 : 7)+"]"
             ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
-            // july4th = 2 because exists doc @ 00:00:00.000 on July5
-            // (date faceting is inclusive)
-            ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,pre+(rangeMode ? "" : "/int[@name='1976-07-04T00:00:00Z']" +jul4)
             ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
             ,pre+"/int[@name='1976-07-15T00:00:00Z'][.='2'  ]"
             ,meta+"/int[@name='before' ][.='2']"
@@ -482,11 +482,11 @@ public class SimpleFacetsTest extends So
                 )
             ,"*[count("+pre+"/int)="+(rangeMode ? 2 : 5)+"]"
             ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
-            ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0'  ]"
+            ,pre+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
             
             ,meta+"/int[@name='before' ][.='5']"
             );
-    assertQ("check after is not inclusive of lower bound by default",
+    assertQ("check after is not inclusive of lower bound by default (for dates)",
             req("q", "*:*"
                 ,"rows", "0"
                 ,"facet", "true"
@@ -498,9 +498,9 @@ public class SimpleFacetsTest extends So
                 )
             ,"*[count("+pre+"/int)="+(rangeMode ? 2 : 5)+"]"
             ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
-            ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-04T00:00:00Z']" + jul4
             
-            ,meta+"/int[@name='after' ][.='8']"
+            ,meta+"/int[@name='after' ][.='"+(rangeMode ? 9 : 8)+"']"
             );
             
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/response/TestCSVResponseWriter.java Mon Mar 28 10:50:28 2011
@@ -22,7 +22,7 @@ import org.apache.solr.common.SolrDocume
 import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.util.DateUtil;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.util.SolrPluginUtils;
+import org.apache.solr.search.ReturnFields;
 import org.junit.*;
 
 import java.io.StringWriter;
@@ -129,19 +129,19 @@ public class TestCSVResponseWriter exten
     rsp.add("response", sdl);
     QueryResponseWriter w = new CSVResponseWriter();
     
-    SolrPluginUtils.setReturnFields("id,foo_s", rsp);
+    rsp.setReturnFields( new ReturnFields("id,foo_s", req) );
     StringWriter buf = new StringWriter();
     w.write(buf, req, rsp);
     assertEquals("id,foo_s\n1,hi\n2,\n", buf.toString());
 
     // try scores
-    SolrPluginUtils.setReturnFields("id,score,foo_s", rsp);
+    rsp.setReturnFields( new ReturnFields("id,score,foo_s", req) );
     buf = new StringWriter();
     w.write(buf, req, rsp);
     assertEquals("id,score,foo_s\n1,2.718,hi\n2,89.83,\n", buf.toString());
 
     // get field values from docs... should be ordered and not include score unless requested
-    SolrPluginUtils.setReturnFields("*", rsp);
+    rsp.setReturnFields( new ReturnFields("*", req) );
     buf = new StringWriter();
     w.write(buf, req, rsp);
     assertEquals("id,foo_i,foo_s,foo_l,foo_b,foo_f,foo_d,foo_dt,v_ss,v2_ss\n" +
@@ -151,7 +151,7 @@ public class TestCSVResponseWriter exten
     
 
     // get field values and scores - just check that the scores are there... we don't guarantee where
-    SolrPluginUtils.setReturnFields("*,score", rsp);
+    rsp.setReturnFields( new ReturnFields("*,score", req) );
     buf = new StringWriter();
     w.write(buf, req, rsp);
     String s = buf.toString();

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/BadIndexSchemaTest.java Mon Mar 28 10:50:28 2011
@@ -22,6 +22,8 @@ import org.apache.solr.common.SolrExcept
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.core.SolrConfig;
 
+import java.util.regex.Pattern;
+
 import org.junit.Test;
 
 public class BadIndexSchemaTest extends SolrTestCaseJ4 {
@@ -29,7 +31,7 @@ public class BadIndexSchemaTest extends 
   private void doTest(final String schema, final String errString) 
     throws Exception {
 
-    ignoreException(errString);
+    ignoreException(Pattern.quote(errString));
     try {
       initCore( "solrconfig.xml", schema );
     } catch (SolrException e) {
@@ -60,4 +62,9 @@ public class BadIndexSchemaTest extends 
   public void testSevereErrorsForDuplicateFieldType() throws Exception {
     doTest("bad-schema-dup-fieldType.xml", "ftAgain");
   }
+
+  @Test
+  public void testSevereErrorsForUnexpectedAnalyzer() throws Exception {
+    doTest("bad-schema-nontext-analyzer.xml", "StrField (bad_type)");
+  }
 }

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java Mon Mar 28 10:50:28 2011
@@ -16,9 +16,9 @@
  */
 package org.apache.solr.schema;
 
-import org.apache.lucene.search.DefaultSimilarity;
+import org.apache.lucene.search.DefaultSimilarityProvider;
 
-public class MockConfigurableSimilarity extends DefaultSimilarity {
+public class MockConfigurableSimilarity extends DefaultSimilarityProvider {
   private String passthrough;
 
   public MockConfigurableSimilarity(String passthrough) {

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestFastLRUCache.java Mon Mar 28 10:50:28 2011
@@ -254,6 +254,18 @@ public class TestFastLRUCache extends Lu
     cache.destroy();
   }
 
+  // enough randomness to exercise all of the different cache purging phases
+  public void testRandom() {
+    int sz = random.nextInt(100)+5;
+    int lowWaterMark = random.nextInt(sz-3)+1;
+    int keyrange = random.nextInt(sz*3)+1;
+    ConcurrentLRUCache<Integer, String> cache = new ConcurrentLRUCache<Integer, String>(sz, lowWaterMark);
+    for (int i=0; i<10000; i++) {
+      cache.put(random.nextInt(keyrange), "");
+      cache.get(random.nextInt(keyrange));
+    }
+  }
+
   void doPerfTest(int iter, int cacheSize, int maxKey) {
     long start = System.currentTimeMillis();
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestRangeQuery.java Mon Mar 28 10:50:28 2011
@@ -19,6 +19,7 @@ package org.apache.solr.search;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.ResultContext;
 import org.apache.solr.response.SolrQueryResponse;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -263,7 +264,9 @@ public class TestRangeQuery extends Solr
         SolrQueryResponse qr = h.queryAndResponse(handler, req);
         if (last != null) {
           // we only test if the same docs matched since some queries will include factors like idf, etc.
-          sameDocs((DocSet)qr.getValues().get("response"), (DocSet)last.getValues().get("response"));
+          DocList rA = ((ResultContext)qr.getValues().get("response")).docs;
+          DocList rB = ((ResultContext)last.getValues().get("response")).docs;
+          sameDocs( rA, rB );
         }
         req.close();
         last = qr;

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/search/TestSolrQueryParser.java Mon Mar 28 10:50:28 2011
@@ -17,6 +17,7 @@
 package org.apache.solr.search;
 
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.response.transform.ScoreAugmenter;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -49,4 +50,32 @@ public class TestSolrQueryParser extends
     );
   }
 
+  @Test
+  public void testReturnFields() {
+    ReturnFields rf = new ReturnFields( req("fl", "id,score") );
+    assertTrue( rf.wantsScore() );
+    assertTrue( rf.wantsField( "score" ) );
+    assertTrue( rf.wantsField( "id" ) );
+    assertFalse( rf.wantsField( "xxx" ) );
+    assertTrue( rf.getTransformer() instanceof ScoreAugmenter );
+    
+    rf = new ReturnFields( req("fl", "*") );
+    assertFalse( rf.wantsScore() );
+    assertTrue( rf.wantsField( "xxx" ) );
+    assertTrue( rf.wantsAllFields() );
+    assertNull( rf.getTransformer() );
+    
+    rf = new ReturnFields( req("fl", "_explain_") );
+    assertFalse( rf.wantsScore() );
+    assertFalse( rf.wantsField( "id" ) );
+    assertEquals( "_explain_", rf.getTransformer().getName() );
+
+    // Check that we want wildcards
+    rf = new ReturnFields( req("fl", "id,aaa*,*bbb") );
+    assertTrue( rf.wantsField( "id" ) );
+    assertTrue( rf.wantsField( "aaaa" ) );
+    assertTrue( rf.wantsField( "xxxbbb" ) );
+    assertFalse( rf.wantsField( "aa" ) );
+    assertFalse( rf.wantsField( "bb" ) );
+  }
 }

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/spelling/suggest/SuggesterTest.java Mon Mar 28 10:50:28 2011
@@ -27,6 +27,7 @@ import org.apache.solr.util.TermFreqIter
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -65,6 +66,29 @@ public class SuggesterTest extends SolrT
   
   @Test
   public void testReload() throws Exception {
+    String leaveData = System.getProperty("solr.test.leavedatadir");
+    if (leaveData == null) leaveData = "";
+    System.setProperty("solr.test.leavedatadir", "true");
+    addDocs();
+    assertU(commit());
+    File data = dataDir;
+    String config = configString;
+    deleteCore();
+    dataDir = data;
+    configString = config;
+    initCore();
+    assertQ(req("qt","/suggest", "q","ac", SpellingParams.SPELLCHECK_COUNT, "2", SpellingParams.SPELLCHECK_ONLY_MORE_POPULAR, "true"),
+            "//lst[@name='spellcheck']/lst[@name='suggestions']/lst[@name='ac']/int[@name='numFound'][.='2']",
+            "//lst[@name='spellcheck']/lst[@name='suggestions']/lst[@name='ac']/arr[@name='suggestion']/str[1][.='acquire']",
+            "//lst[@name='spellcheck']/lst[@name='suggestions']/lst[@name='ac']/arr[@name='suggestion']/str[2][.='accommodate']"
+        );
+    
+    // restore the property
+    System.setProperty("solr.test.leavedatadir", leaveData);
+  }
+  
+  @Test
+  public void testRebuild() throws Exception {
     addDocs();
     assertU(commit());
     assertQ(req("qt","/suggest", "q","ac", SpellingParams.SPELLCHECK_COUNT, "2", SpellingParams.SPELLCHECK_ONLY_MORE_POPULAR, "true"),

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/update/DocumentBuilderTest.java Mon Mar 28 10:50:28 2011
@@ -67,6 +67,40 @@ public class DocumentBuilderTest extends
   }
 
   @Test
+  public void testExceptions() 
+  {
+    SolrCore core = h.getCore();
+    
+    // make sure a null value is not indexed
+    SolrInputDocument doc = new SolrInputDocument();
+    doc.addField( "id", "123", 1.0f );
+    doc.addField( "unknown", "something", 1.0f );
+    try {
+      DocumentBuilder.toDocument( doc, core.getSchema() );
+      fail( "added an unknown field" );
+    }
+    catch( Exception ex ) {
+      assertTrue( "should have document ID", ex.getMessage().indexOf( "doc=123" ) > 0 );
+    }
+    doc.remove( "unknown" );
+    
+
+    doc.addField( "weight", "not a number", 1.0f );
+    try {
+      DocumentBuilder.toDocument( doc, core.getSchema() );
+      fail( "invalid 'float' field value" );
+    }
+    catch( Exception ex ) {
+      assertTrue( "should have document ID", ex.getMessage().indexOf( "doc=123" ) > 0 );
+      assertTrue( "cause is number format", ex.getCause() instanceof NumberFormatException );
+    }
+    
+    // now make sure it is OK
+    doc.setField( "weight", "1.34", 1.0f );
+    DocumentBuilder.toDocument( doc, core.getSchema() );
+  }
+
+  @Test
   public void testMultiField() throws Exception {
     SolrCore core = h.getCore();
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/util/AbstractSolrTestCase.java Mon Mar 28 10:50:28 2011
@@ -25,6 +25,7 @@ import org.apache.solr.core.SolrConfig;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.SolrInputField;
+import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.XML;
 import org.apache.solr.request.*;
 import org.apache.solr.util.TestHarness;
@@ -132,7 +133,7 @@ public abstract class AbstractSolrTestCa
               solrConfig,
               getSchemaFile());
       lrf = h.getRequestFactory
-              ("standard",0,20,"version","2.2");
+              ("standard",0,20,CommonParams.VERSION,"2.2");
     }
     log.info("####SETUP_END " + getName());
   }

Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java Mon Mar 28 10:50:28 2011
@@ -43,7 +43,9 @@ import org.apache.solr.request.SolrQuery
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.response.BinaryResponseWriter;
+import org.apache.solr.response.ResultContext;
 import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.response.transform.DocTransformer;
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
 import org.apache.solr.servlet.SolrRequestParsers;
@@ -164,28 +166,16 @@ public class EmbeddedSolrServer extends 
             new BinaryResponseWriter.Resolver( req, rsp.getReturnFields()) 
           {
             @Override
-            public void writeDocList(DocList ids, JavaBinCodec codec) throws IOException {
+            public void writeResults(ResultContext ctx, JavaBinCodec codec) throws IOException {
               // write an empty list...
               SolrDocumentList docs = new SolrDocumentList();
-              docs.setNumFound( ids.matches() );
-              docs.setStart( ids.offset() );
-              docs.setMaxScore( ids.maxScore() );
+              docs.setNumFound( ctx.docs.matches() );
+              docs.setStart( ctx.docs.offset() );
+              docs.setMaxScore( ctx.docs.maxScore() );
               codec.writeSolrDocumentList( docs );
               
-              int sz = ids.size();
-              
-              if(searcher == null) searcher = solrQueryRequest.getSearcher();
-              if(schema == null) schema = solrQueryRequest.getSchema(); 
-              DocIterator iterator = ids.iterator();
-              for (int i = 0; i < sz; i++) {
-                int id = iterator.nextDoc();
-                Document doc = searcher.doc(id, returnFields);
-                SolrDocument sdoc = getDoc(doc);
-                if (includeScore && ids.hasScores()) {
-                  sdoc.addField("score", iterator.score());
-                }
-                callback.streamSolrDocument( sdoc );
-              }
+              // This will transform
+              writeResultsBody( ctx, codec );
             }
           };
           
@@ -194,7 +184,7 @@ public class EmbeddedSolrServer extends 
           new JavaBinCodec(resolver) {
 
             @Override
-            public void writeSolrDocument(SolrDocument doc, Set<String> fields) throws IOException {
+            public void writeSolrDocument(SolrDocument doc) throws IOException {
               callback.streamSolrDocument( doc );
               //super.writeSolrDocument( doc, fields );
             }

Modified: lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java Mon Mar 28 10:50:28 2011
@@ -18,13 +18,17 @@
 package org.apache.solr.servlet;
 
 import java.io.IOException;
+import java.io.Writer;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.io.OutputStreamWriter;
 import java.io.ByteArrayInputStream;
+import java.nio.charset.Charset;
 import java.util.Map;
 import java.util.WeakHashMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -39,6 +43,8 @@ import org.apache.solr.common.SolrExcept
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.params.CommonParams;
+import org.apache.solr.common.util.FastWriter;
+import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.core.*;
 import org.apache.solr.request.*;
 import org.apache.solr.response.BinaryQueryResponseWriter;
@@ -62,10 +68,12 @@ public class SolrDispatchFilter implemen
   protected String solrConfigFilename = null;
   protected final Map<SolrConfig, SolrRequestParsers> parsers = new WeakHashMap<SolrConfig, SolrRequestParsers>();
   protected final SolrRequestParsers adminRequestParser;
+  
+  private static final Charset UTF8 = Charset.forName("UTF-8");
 
   public SolrDispatchFilter() {
     try {
-      adminRequestParser = new SolrRequestParsers(new Config(null,"solr",new ByteArrayInputStream("<root/>".getBytes("UTF-8")),"") );
+      adminRequestParser = new SolrRequestParsers(new Config(null,"solr",new InputSource(new ByteArrayInputStream("<root/>".getBytes("UTF-8"))),"") );
     } catch (Exception e) {
       //unlikely
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,e);
@@ -318,14 +326,19 @@ public class SolrDispatchFilter implemen
       final String ct = responseWriter.getContentType(solrReq, solrRsp);
       // don't call setContentType on null
       if (null != ct) response.setContentType(ct); 
+
       if (Method.HEAD != reqMethod) {
         if (responseWriter instanceof BinaryQueryResponseWriter) {
           BinaryQueryResponseWriter binWriter = (BinaryQueryResponseWriter) responseWriter;
           binWriter.write(response.getOutputStream(), solrReq, solrRsp);
         } else {
-          PrintWriter out = response.getWriter();
+          String charset = ContentStreamBase.getCharsetFromContentType(ct);
+          Writer out = (charset == null || charset.equalsIgnoreCase("UTF-8"))
+            ? new OutputStreamWriter(response.getOutputStream(), UTF8)
+            : new OutputStreamWriter(response.getOutputStream(), charset);
+          out = new FastWriter(out);
           responseWriter.write(out, solrReq, solrRsp);
-
+          out.flush();
         }
       }
       //else http HEAD request, nothing to write out, waited this long just to get ContentType

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.jsp Mon Mar 28 10:50:28 2011
@@ -156,10 +156,10 @@
       TermToBytesRefAttribute bytesAtt = tstream.getAttribute(TermToBytesRefAttribute.class);
       tstream.reset();
       matches = new HashSet<BytesRef>();
+      final BytesRef bytes = bytesAtt.getBytesRef();
       while (tstream.incrementToken()) {
-        final BytesRef bytes = new BytesRef();
-        bytesAtt.toBytesRef(bytes);
-        matches.add(bytes);
+        bytesAtt.fillBytesRef();
+        matches.add(new BytesRef(bytes));
       }
     }
 
@@ -273,14 +273,17 @@
   }
   
   private static class Tok {
-    final BytesRef bytes = new BytesRef();
+    final BytesRef bytes;
     final String rawText, text;
     final int pos;
     final List<ReflectItem> reflected = new ArrayList<ReflectItem>();
     
     Tok(AttributeSource token, int pos, FieldType ft) {
       this.pos = pos;
-      token.getAttribute(TermToBytesRefAttribute.class).toBytesRef(bytes);
+      TermToBytesRefAttribute termAtt = token.getAttribute(TermToBytesRefAttribute.class);
+      BytesRef spare = termAtt.getBytesRef();
+	  termAtt.fillBytesRef();
+	  bytes = new BytesRef(spare);
       rawText = (token.hasAttribute(CharTermAttribute.class)) ?
         token.getAttribute(CharTermAttribute.class).toString() : null;
       final CharArr textBuf = new CharArr(bytes.length);

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/analysis.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
     method="html"
     indent="yes"
     encoding="utf-8"
-    media-type="text/html; charset=UTF-8"
+    media-type="text/html"
     doctype-public="-//W3C//DTD HTML 4.01//EN"
     doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
 

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/meta.xsl Mon Mar 28 10:50:28 2011
@@ -21,7 +21,7 @@
   <xsl:output
     method="html"
     encoding="utf-8"
-    media-type="text/html; charset=UTF-8"
+    media-type="text/html"
     indent="yes"
     doctype-public="-//W3C//DTD HTML 4.01//EN"
     doctype-system="http://www.w3.org/TR/html4/strict.dtd" />

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/registry.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
   <xsl:output
     method="html"
     encoding="utf-8"
-    media-type="text/html; charset=UTF-8"
+    media-type="text/html"
     indent="yes"
     doctype-public="-//W3C//DTD HTML 4.01//EN"
     doctype-system="http://www.w3.org/TR/html4/strict.dtd" />

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/stats.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
   <xsl:output
     method="html"
     encoding="utf-8"
-    media-type="text/html; charset=UTF-8"
+    media-type="text/html"
     indent="yes"
     doctype-public="-//W3C//DTD HTML 4.01//EN"
     doctype-system="http://www.w3.org/TR/html4/strict.dtd" />

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/tabular.xsl Mon Mar 28 10:50:28 2011
@@ -27,7 +27,7 @@
   <xsl:output
     method="html"
     encoding="utf-8"
-    media-type="text/html; charset=UTF-8"
+    media-type="text/html"
     indent="yes"
     doctype-public="-//W3C//DTD HTML 4.01//EN"
     doctype-system="http://www.w3.org/TR/html4/strict.dtd" />

Modified: lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl?rev=1086181&r1=1086180&r2=1086181&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl (original)
+++ lucene/dev/branches/docvalues/solr/src/webapp/web/admin/threaddump.xsl Mon Mar 28 10:50:28 2011
@@ -26,7 +26,7 @@
     method="html"
     indent="yes"
     encoding="utf-8"
-    media-type="text/html; charset=UTF-8"
+    media-type="text/html"
     doctype-public="-//W3C//DTD HTML 4.01//EN"
     doctype-system="http://www.w3.org/TR/html4/strict.dtd" />