You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2015/10/15 12:25:42 UTC

svn commit: r1708778 [7/8] - in /lucene/dev/branches/lucene6825: ./ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/hunspell/ lucene/analysis/common/src/test/org/apache/lucene/analysis/core/ l...

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java Thu Oct 15 10:25:39 2015
@@ -60,7 +60,7 @@ public class FSTLookupFactory extends Lo
     ? Boolean.valueOf(params.get(EXACT_MATCH_FIRST).toString())
     : true;
 
-    return new FSTCompletionLookup(buckets, exactMatchFirst);
+    return new FSTCompletionLookup(getTempDir(), "suggester", buckets, exactMatchFirst);
   }
 
   @Override

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java Thu Oct 15 10:25:39 2015
@@ -134,7 +134,7 @@ public class FuzzyLookupFactory extends
     ? Boolean.valueOf(params.get(UNICODE_AWARE).toString())
     : FuzzySuggester.DEFAULT_UNICODE_AWARE;
     
-    return new FuzzySuggester(indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm,
+    return new FuzzySuggester(getTempDir(), "suggester", indexAnalyzer, queryAnalyzer, options, maxSurfaceFormsPerAnalyzedForm,
         maxGraphExpansions, preservePositionIncrements, maxEdits, transpositions, nonFuzzyPrefix,
         minFuzzyLength, unicodeAware);
   }

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java Thu Oct 15 10:25:39 2015
@@ -17,8 +17,6 @@ package org.apache.solr.spelling.suggest
  * limitations under the License.
  */
 
-import java.io.File;
-
 import org.apache.lucene.search.suggest.Lookup;
 import org.apache.lucene.search.suggest.fst.*;
 import org.apache.solr.common.util.NamedList;
@@ -48,7 +46,7 @@ public class WFSTLookupFactory extends L
     ? Boolean.valueOf(params.get(EXACT_MATCH_FIRST).toString())
     : true;
 
-    return new WFSTCompletionLookup(exactMatchFirst);
+    return new WFSTCompletionLookup(getTempDir(), "suggester", exactMatchFirst);
   }
 
   @Override

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java Thu Oct 15 10:25:39 2015
@@ -31,7 +31,7 @@ public class TSTLookupFactory extends Lo
 
   @Override
   public Lookup create(NamedList params, SolrCore core) {
-    return new TSTLookup();
+    return new TSTLookup(getTempDir(), "suggester");
   }
 
   @Override

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java Thu Oct 15 10:25:39 2015
@@ -37,7 +37,7 @@ public class CachedIndexOutput extends R
   
   public CachedIndexOutput(BlockDirectory directory, IndexOutput dest,
       int blockSize, String name, Cache cache, int bufferSize) {
-    super("dest=" + dest + " name=" + name, bufferSize);
+    super("dest=" + dest + " name=" + name, name, bufferSize);
     this.directory = directory;
     this.dest = dest;
     this.blockSize = blockSize;

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java Thu Oct 15 10:25:39 2015
@@ -43,12 +43,12 @@ public abstract class ReusedBufferedInde
   
   private final Store store;
   
-  public ReusedBufferedIndexOutput(String resourceDescription) {
-    this(resourceDescription, BUFFER_SIZE);
+  public ReusedBufferedIndexOutput(String resourceDescription, String name) {
+    this(resourceDescription, name, BUFFER_SIZE);
   }
   
-  public ReusedBufferedIndexOutput(String resourceDescription, int bufferSize) {
-    super(resourceDescription);
+  public ReusedBufferedIndexOutput(String resourceDescription, String name, int bufferSize) {
+    super(resourceDescription, name);
     checkBufferSize(bufferSize);
     this.bufferSize = bufferSize;
     store = BufferStore.instance(bufferSize);

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java Thu Oct 15 10:25:39 2015
@@ -29,7 +29,8 @@ import org.apache.hadoop.fs.FileContext;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.ipc.RemoteException;
+import org.apache.hadoop.hdfs.DistributedFileSystem;
+import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction;
 import org.apache.lucene.store.BaseDirectory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
@@ -63,36 +64,29 @@ public class HdfsDirectory extends BaseD
     fileSystem = FileSystem.get(hdfsDirPath.toUri(), configuration);
     fileContext = FileContext.getFileContext(hdfsDirPath.toUri(), configuration);
     
-    while (true) {
-      try {
-        if (!fileSystem.exists(hdfsDirPath)) {
-          boolean success = fileSystem.mkdirs(hdfsDirPath);
-          if (!success) {
-            throw new RuntimeException("Could not create directory: " + hdfsDirPath);
-          }
-        } else {
-          fileSystem.mkdirs(hdfsDirPath); // check for safe mode
+    if (fileSystem instanceof DistributedFileSystem) {
+      // Make sure dfs is not in safe mode
+      while (((DistributedFileSystem) fileSystem).setSafeMode(SafeModeAction.SAFEMODE_GET, true)) {
+        LOG.warn("The NameNode is in SafeMode - Solr will wait 5 seconds and try again.");
+        try {
+          Thread.sleep(5000);
+        } catch (InterruptedException e) {
+          Thread.interrupted();
+          // continue
         }
-        
-        break;
-      } catch (RemoteException e) {
-        if (e.getClassName().equals("org.apache.hadoop.hdfs.server.namenode.SafeModeException")) {
-          LOG.warn("The NameNode is in SafeMode - Solr will wait 5 seconds and try again.");
-          try {
-            Thread.sleep(5000);
-          } catch (InterruptedException e1) {
-            Thread.interrupted();
-          }
-          continue;
+      }
+    }
+    
+    try {
+      if (!fileSystem.exists(hdfsDirPath)) {
+        boolean success = fileSystem.mkdirs(hdfsDirPath);
+        if (!success) {
+          throw new RuntimeException("Could not create directory: " + hdfsDirPath);
         }
-        org.apache.solr.common.util.IOUtils.closeQuietly(fileSystem);
-        throw new RuntimeException(
-            "Problem creating directory: " + hdfsDirPath, e);
-      } catch (Exception e) {
-        org.apache.solr.common.util.IOUtils.closeQuietly(fileSystem);
-        throw new RuntimeException(
-            "Problem creating directory: " + hdfsDirPath, e);
       }
+    } catch (Exception e) {
+      org.apache.solr.common.util.IOUtils.closeQuietly(fileSystem);
+      throw new RuntimeException("Problem creating directory: " + hdfsDirPath, e);
     }
   }
   
@@ -113,7 +107,12 @@ public class HdfsDirectory extends BaseD
   
   @Override
   public IndexOutput createOutput(String name, IOContext context) throws IOException {
-    return new HdfsFileWriter(getFileSystem(), new Path(hdfsDirPath, name));
+    return new HdfsFileWriter(getFileSystem(), new Path(hdfsDirPath, name), name);
+  }
+
+  @Override
+  public IndexOutput createTempOutput(String prefix, String suffix, IOContext context) throws IOException {
+    throw new UnsupportedOperationException();
   }
   
   private String[] getNormalNames(List<String> files) {

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java Thu Oct 15 10:25:39 2015
@@ -37,8 +37,8 @@ public class HdfsFileWriter extends Outp
   public static final String HDFS_SYNC_BLOCK = "solr.hdfs.sync.block";
   public static final int BUFFER_SIZE = 16384;
   
-  public HdfsFileWriter(FileSystem fileSystem, Path path) throws IOException {
-    super("fileSystem=" + fileSystem + " path=" + path, getOutputStream(fileSystem, path), BUFFER_SIZE);
+  public HdfsFileWriter(FileSystem fileSystem, Path path, String name) throws IOException {
+    super("fileSystem=" + fileSystem + " path=" + path, name, getOutputStream(fileSystem, path), BUFFER_SIZE);
   }
   
   private static final OutputStream getOutputStream(FileSystem fileSystem, Path path) throws IOException {

Modified: lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java Thu Oct 15 10:25:39 2015
@@ -47,6 +47,7 @@ import java.util.Set;
 
 import static org.apache.solr.common.SolrException.ErrorCode.BAD_REQUEST;
 import static org.apache.solr.common.SolrException.ErrorCode.SERVER_ERROR;
+import static org.apache.solr.core.ConfigSetProperties.IMMUTABLE_CONFIGSET_ARG;
 
 
 /**
@@ -290,6 +291,9 @@ public class AddSchemaFieldsUpdateProces
           // nothing to do - no fields will be added - exit from the retry loop
           log.debug("No fields to add to the schema.");
           break;
+        } else if ( isImmutableConfigSet(core) ) {
+          final String message = "This ConfigSet is immutable.";
+          throw new SolrException(BAD_REQUEST, message);
         }
         if (log.isDebugEnabled()) {
           StringBuilder builder = new StringBuilder();
@@ -399,5 +403,11 @@ public class AddSchemaFieldsUpdateProces
       }
       return selector;
     }
+
+    private boolean isImmutableConfigSet(SolrCore core) {
+      NamedList args = core.getConfigSetProperties();
+      Object immutable = args != null ? args.get(IMMUTABLE_CONFIGSET_ARG) : null;
+      return immutable != null ? Boolean.parseBoolean(immutable.toString()) : false;
+    }
   }
 }

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java Thu Oct 15 10:25:39 2015
@@ -161,6 +161,13 @@ public class ChaosMonkeySafeLeaderTest e
     Thread.sleep(2000);
 
     waitForThingsToLevelOut(180000);
+    
+    // even if things were leveled out, a jetty may have just been stopped or something
+    // we wait again and wait to level out again to make sure the system is not still in flux
+    
+    Thread.sleep(3000);
+
+    waitForThingsToLevelOut(180000);
 
     checkShardConsistency(batchSize == 1, true);
     

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java Thu Oct 15 10:25:39 2015
@@ -23,6 +23,8 @@ import java.util.Map;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.impl.XMLResponseParser;
+import org.apache.solr.common.util.NamedList;
 import org.apache.solr.util.RestTestBase;
 import org.junit.After;
 import org.junit.Before;
@@ -48,9 +50,8 @@ public class TestConfigSetImmutable exte
     FileUtils.write(new File(tmpConfDir, "configsetprops.json"), new StringBuilder("{\"immutable\":\"true\"}"));
 
     System.setProperty("managed.schema.mutable", "true");
-    System.setProperty("enable.update.log", "false");
 
-    createJettyAndHarness(tmpSolrHome.getAbsolutePath(), "solrconfig-managed-schema.xml", "schema-rest.xml",
+    createJettyAndHarness(tmpSolrHome.getAbsolutePath(), "solrconfig-schemaless.xml", "schema-rest.xml",
         "/solr", true, null);
   }
 
@@ -95,4 +96,24 @@ public class TestConfigSetImmutable exte
     assertNotNull(map.get("errors"));
     assertTrue(map.get("errors").toString().contains("immutable"));
   }
+
+  @Test
+  public void testAddSchemaFieldsImmutable() throws Exception {
+    final String error = "error";
+
+    // check writing an existing field is okay
+    String updateXMLSafe = "<add><doc><field name=\"id\">\"testdoc\"</field></doc></add>";
+    String response = restTestHarness.update(updateXMLSafe);
+    XMLResponseParser parser = new XMLResponseParser();
+    NamedList<Object> listResponse = parser.processResponse(new StringReader(response));
+    assertNull(listResponse.get(error));
+
+    // check writing a new field is not okay
+    String updateXMLNotSafe = "<add><doc><field name=\"id\">\"testdoc\"</field>" +
+        "<field name=\"newField67\">\"foobar\"</field></doc></add>";
+    response = restTestHarness.update(updateXMLNotSafe);
+    listResponse = parser.processResponse(new StringReader(response));
+    assertNotNull(listResponse.get(error));
+    assertTrue(listResponse.get(error).toString().contains("immutable"));
+  }
 }

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java Thu Oct 15 10:25:39 2015
@@ -28,14 +28,7 @@ import com.facebook.presto.sql.tree.Stat
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.stream.ExceptionStream;
 import org.apache.solr.client.solrj.io.stream.SolrStream;
-import org.apache.solr.client.solrj.io.stream.StatsStream;
 import org.apache.solr.client.solrj.io.stream.TupleStream;
-import org.apache.solr.client.solrj.io.stream.metrics.CountMetric;
-import org.apache.solr.client.solrj.io.stream.metrics.MaxMetric;
-import org.apache.solr.client.solrj.io.stream.metrics.MeanMetric;
-import org.apache.solr.client.solrj.io.stream.metrics.Metric;
-import org.apache.solr.client.solrj.io.stream.metrics.MinMetric;
-import org.apache.solr.client.solrj.io.stream.metrics.SumMetric;
 import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
 import org.apache.solr.common.params.CommonParams;
 import org.junit.After;
@@ -95,13 +88,17 @@ public class TestSQLHandler extends Abst
     waitForRecoveriesToFinish(false);
     testPredicate();
     testBasicSelect();
+    testMixedCaseFields();
     testBasicGrouping();
     testBasicGroupingFacets();
+    testSelectDistinct();
+    testSelectDistinctFacets();
     testAggregatesWithoutGrouping();
     testSQLException();
     testTimeSeriesGrouping();
     testTimeSeriesGroupingFacet();
     testParallelBasicGrouping();
+    testParallelSelectDistinct();
     testParallelTimeSeriesGrouping();
   }
 
@@ -124,6 +121,15 @@ public class TestSQLHandler extends Abst
 
     assert(sqlVistor.query.equals("(c:\"d\")"));
 
+
+    //Upper case
+    parser = new SqlParser();
+    sql = "select a from b where ('CcC' = 'D')";
+    statement = parser.createStatement(sql);
+    sqlVistor = new SQLHandler.SQLVisitor(new StringBuilder());
+    sqlVistor.process(statement, new Integer(0));
+    assert(sqlVistor.query.equals("(CcC:\"D\")"));
+
     //Phrase
     parser = new SqlParser();
     sql = "select a from b where (c = 'd d')";
@@ -200,11 +206,11 @@ public class TestSQLHandler extends Abst
 
     // Complex Lucene/Solr Query
     parser = new SqlParser();
-    sql = "select a from b where ((c = '[0 TO 100]') OR ((l = '(z*)') AND (m = '(j OR (k NOT s))')))";
+    sql = "select a from b where (('c' = '[0 TO 100]') OR ((l = '(z*)') AND ('M' = '(j OR (k NOT s))')))";
     statement = parser.createStatement(sql);
     sqlVistor = new SQLHandler.SQLVisitor(new StringBuilder());
     sqlVistor.process(statement, new Integer(0));
-    assert(sqlVistor.query.equals("((c:[0 TO 100]) OR ((l:(z*)) AND (m:(j OR (k NOT s)))))"));
+    assert(sqlVistor.query.equals("((c:[0 TO 100]) OR ((l:(z*)) AND (M:(j OR (k NOT s)))))"));
   }
 
   private void testBasicSelect() throws Exception {
@@ -216,18 +222,18 @@ public class TestSQLHandler extends Abst
 
       commit();
 
-      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7");
-      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8");
-      indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
-      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11");
-      indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
-      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40");
-      indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
-      indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
+      indexDoc(sdoc("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7"));
+      indexDoc(sdoc("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8"));
+      indexDoc(sdoc("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20"));
+      indexDoc(sdoc("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11"));
+      indexDoc(sdoc("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30"));
+      indexDoc(sdoc("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40"));
+      indexDoc(sdoc("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50"));
+      indexDoc(sdoc("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60"));
       commit();
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select id, field_i, str_s from collection1 where text='XXXX' order by field_i desc");
+      params.put("stmt", "select 'id', field_i, str_s from collection1 where 'text'='XXXX' order by field_i desc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
@@ -278,7 +284,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select id, field_i, str_s from collection1 where text='XXXX' order by field_i desc limit 1");
+      params.put("stmt", "select id, field_i, str_s from collection1 where text='XXXX' order by field_i desc limit 1");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -292,7 +298,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select id, field_i, str_s from collection1 where text='XXXX' AND id='(1 2 3)' order by field_i desc");
+      params.put("stmt", "select id, field_i, str_s from collection1 where text='XXXX' AND id='(1 2 3)' order by field_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -319,6 +325,116 @@ public class TestSQLHandler extends Abst
     }
   }
 
+
+  private void testMixedCaseFields() throws Exception {
+    try {
+
+      CloudJettyRunner jetty = this.cloudJettys.get(0);
+
+      del("*:*");
+
+      commit();
+
+      indexDoc(sdoc("id", "1", "Text_t", "XXXX XXXX", "Str_s", "a", "Field_i", "7"));
+      indexDoc(sdoc("id", "2", "Text_t", "XXXX XXXX", "Str_s", "b", "Field_i", "8"));
+      indexDoc(sdoc("id", "3", "Text_t", "XXXX XXXX", "Str_s", "a", "Field_i", "20"));
+      indexDoc(sdoc("id", "4", "Text_t", "XXXX XXXX", "Str_s", "b", "Field_i", "11"));
+      indexDoc(sdoc("id", "5", "Text_t", "XXXX XXXX", "Str_s", "c", "Field_i", "30"));
+      indexDoc(sdoc("id", "6", "Text_t", "XXXX XXXX", "Str_s", "c", "Field_i", "40"));
+      indexDoc(sdoc("id", "7", "Text_t", "XXXX XXXX", "Str_s", "c", "Field_i", "50"));
+      indexDoc(sdoc("id", "8", "Text_t", "XXXX XXXX", "Str_s", "c", "Field_i", "60"));
+      commit();
+      Map params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select id, Field_i, Str_s from Collection1 where Text_t='XXXX' order by Field_i desc");
+
+      SolrStream solrStream = new SolrStream(jetty.url, params);
+      List<Tuple> tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 8);
+
+      Tuple tuple = null;
+
+      tuple = tuples.get(0);
+      assert(tuple.getLong("id") == 8);
+      assert(tuple.getLong("Field_i") == 60);
+      assert(tuple.get("Str_s").equals("c"));
+
+      tuple = tuples.get(1);
+      assert(tuple.getLong("id") == 7);
+      assert(tuple.getLong("Field_i") == 50);
+      assert(tuple.get("Str_s").equals("c"));
+
+      tuple = tuples.get(2);
+      assert(tuple.getLong("id") == 6);
+      assert(tuple.getLong("Field_i") == 40);
+      assert(tuple.get("Str_s").equals("c"));
+
+      tuple = tuples.get(3);
+      assert(tuple.getLong("id") == 5);
+      assert(tuple.getLong("Field_i") == 30);
+      assert(tuple.get("Str_s").equals("c"));
+
+      tuple = tuples.get(4);
+      assert(tuple.getLong("id") == 3);
+      assert(tuple.getLong("Field_i") == 20);
+      assert(tuple.get("Str_s").equals("a"));
+
+      tuple = tuples.get(5);
+      assert(tuple.getLong("id") == 4);
+      assert(tuple.getLong("Field_i") == 11);
+      assert(tuple.get("Str_s").equals("b"));
+
+      tuple = tuples.get(6);
+      assert(tuple.getLong("id") == 2);
+      assert(tuple.getLong("Field_i") == 8);
+      assert(tuple.get("Str_s").equals("b"));
+
+      tuple = tuples.get(7);
+      assert(tuple.getLong("id") == 1);
+      assert(tuple.getLong("Field_i") == 7);
+      assert(tuple.get("Str_s").equals("a"));
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select Str_s, sum(Field_i) from Collection1 where 'id'='(1 8)' group by Str_s having (sum(Field_i) = 7 OR 'sum(Field_i)' = 60) order by 'sum(Field_i)' desc");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("Str_s").equals("c"));
+      assert(tuple.getDouble("sum(Field_i)") == 60);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("Str_s").equals("a"));
+      assert(tuple.getDouble("sum(Field_i)") == 7);
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select Str_s, sum(Field_i) from Collection1 where 'id'='(1 8)' group by 'Str_s' having (sum(Field_i) = 7 OR 'sum(Field_i)' = 60) order by 'sum(Field_i)' desc");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("Str_s").equals("c"));
+      assert(tuple.getDouble("sum(Field_i)") == 60);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("Str_s").equals("a"));
+      assert(tuple.getDouble("sum(Field_i)") == 7);
+
+
+    } finally {
+      delete();
+    }
+  }
+
   private void testSQLException() throws Exception {
     try {
 
@@ -328,19 +444,19 @@ public class TestSQLHandler extends Abst
 
       commit();
 
-      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7");
-      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8");
-      indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
-      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11");
-      indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
-      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40");
-      indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
-      indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
+      indexDoc(sdoc("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7"));
+      indexDoc(sdoc("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8"));
+      indexDoc(sdoc("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20"));
+      indexDoc(sdoc("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11"));
+      indexDoc(sdoc("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30"));
+      indexDoc(sdoc("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40"));
+      indexDoc(sdoc("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50"));
+      indexDoc(sdoc("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60"));
       commit();
 
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select id, field_i, str_s from collection1 where text='XXXX' order by field_iff desc");
+      params.put("stmt", "select id, field_i, str_s from collection1 where text='XXXX' order by field_iff desc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       Tuple tuple = getTuple(new ExceptionStream(solrStream));
@@ -351,7 +467,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select id, field_iff, str_s from collection1 where text='XXXX' order by field_iff desc");
+      params.put("stmt", "select id, field_iff, str_s from collection1 where text='XXXX' order by field_iff desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuple = getTuple(new ExceptionStream(solrStream));
@@ -362,7 +478,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), sum(field_iff), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_iff) = 19) AND (min(field_i) = 8))");
+      params.put("stmt", "select str_s, count(*), sum(field_iff), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_iff) = 19) AND (min(field_i) = 8))");
 
       solrStream = new SolrStream(jetty.url, params);
       tuple = getTuple(new ExceptionStream(solrStream));
@@ -373,7 +489,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), blah(field_iff), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_iff) = 19) AND (min(field_i) = 8))");
+      params.put("stmt", "select str_s, count(*), blah(field_iff), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_iff) = 19) AND (min(field_i) = 8))");
 
       solrStream = new SolrStream(jetty.url, params);
       tuple = getTuple(new ExceptionStream(solrStream));
@@ -384,7 +500,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s from collection1 where text='XXXX' group by str_s");
+      params.put("stmt", "select str_s from collection1 where text='XXXX' group by str_s");
 
       solrStream = new SolrStream(jetty.url, params);
       tuple = getTuple(new ExceptionStream(solrStream));
@@ -417,7 +533,7 @@ public class TestSQLHandler extends Abst
       commit();
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s order by sum(field_i) asc limit 2");
+      params.put("stmt", "select str_s, 'count(*)', sum('field_i'), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by 'str_s' order by 'sum(field_i)' asc limit 2");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
@@ -445,7 +561,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where (text='XXXX' AND NOT text='XXXX XXX') group by str_s order by str_s desc");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where (text='XXXX' AND NOT text='XXXX XXX') group by str_s order by str_s desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -482,7 +598,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having sum(field_i) = 19");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having sum(field_i) = 19");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -499,7 +615,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -517,7 +633,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 100))");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 100))");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -530,7 +646,8 @@ public class TestSQLHandler extends Abst
     }
   }
 
-  private void testBasicGroupingFacets() throws Exception {
+
+  private void testSelectDistinctFacets() throws Exception {
     try {
 
       CloudJettyRunner jetty = this.cloudJettys.get(0);
@@ -539,128 +656,166 @@ public class TestSQLHandler extends Abst
 
       commit();
 
-      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7");
-      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8");
+      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "1");
+      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "2");
       indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
-      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11");
+      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "2");
       indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
-      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40");
+      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
       indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
       indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
       commit();
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s order by sum(field_i) asc limit 2");
+      params.put("stmt", "select distinct 'str_s', 'field_i' from collection1 order by 'str_s' asc, 'field_i' asc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
 
-      //Only two results because of the limit.
-      assert(tuples.size() == 2);
+      assert(tuples.size() == 6);
 
       Tuple tuple = null;
 
       tuple = tuples.get(0);
-      assert(tuple.get("str_s").equals("b"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 19);
-      assert(tuple.getDouble("min(field_i)") == 8);
-      assert(tuple.getDouble("max(field_i)") == 11);
-      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
 
       tuple = tuples.get(1);
       assert(tuple.get("str_s").equals("a"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 27);
-      assert(tuple.getDouble("min(field_i)") == 7);
-      assert(tuple.getDouble("max(field_i)") == 20);
-      assert(tuple.getDouble("avg(field_i)") == 13.5D);
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
 
+      //reverse the sort
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where (text='XXXX' AND NOT text='XXXX XXX') group by str_s order by str_s desc");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
 
-      //The sort by and order by match and no limit is applied. All the Tuples should be returned in
-      //this scenario.
-
-      assert(tuples.size() == 3);
+      assert(tuples.size() == 6);
 
       tuple = tuples.get(0);
       assert(tuple.get("str_s").equals("c"));
-      assert(tuple.getDouble("count(*)") == 4);
-      assert(tuple.getDouble("sum(field_i)") == 180);
-      assert(tuple.getDouble("min(field_i)") == 30);
-      assert(tuple.getDouble("max(field_i)") == 60);
-      assert(tuple.getDouble("avg(field_i)") == 45);
+      assert(tuple.getLong("field_i") == 60);
 
       tuple = tuples.get(1);
-      assert(tuple.get("str_s").equals("b"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 19);
-      assert(tuple.getDouble("min(field_i)") == 8);
-      assert(tuple.getDouble("max(field_i)") == 11);
-      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
 
       tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+
+      tuple = tuples.get(4);
       assert(tuple.get("str_s").equals("a"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 27);
-      assert(tuple.getDouble("min(field_i)") == 7);
-      assert(tuple.getDouble("max(field_i)") == 20);
-      assert(tuple.getDouble("avg(field_i)") == 13.5D);
+      assert(tuple.getLong("field_i") == 20);
 
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
 
+
+      //test with limit
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having sum(field_i) = 19");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
 
-      assert(tuples.size() == 1);
+      assert(tuples.size() == 2);
 
       tuple = tuples.get(0);
-      assert(tuple.get("str_s").equals("b"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 19);
-      assert(tuple.getDouble("min(field_i)") == 8);
-      assert(tuple.getDouble("max(field_i)") == 11);
-      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
 
-      params = new HashMap();
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+
+      // Test without a sort. Sort should be asc by default.
+
+      new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
+      params.put("stmt", "select distinct str_s, field_i from collection1");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
 
-      //Only two results because of the limit.
-      assert(tuples.size() == 1);
+      assert(tuples.size() == 6);
 
       tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(2);
       assert(tuple.get("str_s").equals("b"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 19);
-      assert(tuple.getDouble("min(field_i)") == 8);
-      assert(tuple.getDouble("max(field_i)") == 11);
-      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+      assert(tuple.getLong("field_i") == 2);
 
-      params = new HashMap();
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+
+      // Test with a predicate.
+
+      new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 100))");
+      params.put("stmt", "select distinct str_s, field_i from collection1 where str_s = 'a'");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
 
-      assert(tuples.size() == 0);
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert (tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
 
 
     } finally {
@@ -669,10 +824,7 @@ public class TestSQLHandler extends Abst
   }
 
 
-
-
-
-  private void testParallelBasicGrouping() throws Exception {
+  private void testSelectDistinct() throws Exception {
     try {
 
       CloudJettyRunner jetty = this.cloudJettys.get(0);
@@ -681,48 +833,537 @@ public class TestSQLHandler extends Abst
 
       commit();
 
-      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7");
-      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8");
+      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "1");
+      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "2");
       indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
-      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11");
+      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "2");
       indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
-      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40");
+      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
       indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
       indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
       commit();
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("numWorkers", "2");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s order by sum(field_i) asc limit 2");
+      params.put("stmt", "select distinct 'str_s', 'field_i' from collection1 order by 'str_s' asc, 'field_i' asc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
 
-      //Only two results because of the limit.
-      assert(tuples.size() == 2);
+      assert(tuples.size() == 6);
 
       Tuple tuple = null;
 
       tuple = tuples.get(0);
-      assert(tuple.get("str_s").equals("b"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 19);
-      assert(tuple.getDouble("min(field_i)") == 8);
-      assert(tuple.getDouble("max(field_i)") == 11);
-      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
 
       tuple = tuples.get(1);
       assert(tuple.get("str_s").equals("a"));
-      assert(tuple.getDouble("count(*)") == 2);
-      assert(tuple.getDouble("sum(field_i)") == 27);
-      assert(tuple.getDouble("min(field_i)") == 7);
-      assert(tuple.getDouble("max(field_i)") == 20);
-      assert(tuple.getDouble("avg(field_i)") == 13.5D);
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+
+      //reverse the sort
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 6);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+
+      //test with limit
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+
+      // Test without a sort. Sort should be asc by default.
+
+      new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select distinct str_s, field_i from collection1");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 6);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+      // Test with a predicate.
+
+      new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("stmt", "select distinct str_s, field_i from collection1 where str_s = 'a'");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+
+    } finally {
+      delete();
+    }
+  }
+
+  private void testParallelSelectDistinct() throws Exception {
+    try {
+
+      CloudJettyRunner jetty = this.cloudJettys.get(0);
+
+      del("*:*");
+
+      commit();
+
+      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "1");
+      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "2");
+      indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
+      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "2");
+      indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
+      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
+      indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
+      indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
+      commit();
+      Map params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("numWorkers", "2");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
+
+      SolrStream solrStream = new SolrStream(jetty.url, params);
+      List<Tuple> tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 6);
+
+      Tuple tuple = null;
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+
+      //reverse the sort
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("numWorkers", "2");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 6);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+
+      //test with limit
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("numWorkers", "2");
+      params.put("stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+
+      // Test without a sort. Sort should be asc by default.
+
+      new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("numWorkers", "2");
+      params.put("stmt", "select distinct str_s, field_i from collection1");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 6);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getLong("field_i") == 2);
+
+      tuple = tuples.get(3);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 30);
+
+      tuple = tuples.get(4);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 50);
+
+      tuple = tuples.get(5);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getLong("field_i") == 60);
+
+      // Test with a predicate.
+
+      new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("numWorkers", "2");
+      params.put("stmt", "select distinct str_s, field_i from collection1 where str_s = 'a'");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 2);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 1);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getLong("field_i") == 20);
+
+    } finally {
+      delete();
+    }
+  }
+
+
+
+  private void testBasicGroupingFacets() throws Exception {
+    try {
+
+      CloudJettyRunner jetty = this.cloudJettys.get(0);
+
+      del("*:*");
+
+      commit();
+
+      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7");
+      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8");
+      indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
+      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11");
+      indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
+      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40");
+      indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
+      indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
+      commit();
+      Map params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("aggregationMode", "facet");
+      params.put("stmt", "select 'str_s', 'count(*)', sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by 'str_s' order by 'sum(field_i)' asc limit 2");
+
+      SolrStream solrStream = new SolrStream(jetty.url, params);
+      List<Tuple> tuples = getTuples(solrStream);
+
+      //Only two results because of the limit.
+      assert(tuples.size() == 2);
+
+      Tuple tuple = null;
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 19);
+      assert(tuple.getDouble("min(field_i)") == 8);
+      assert(tuple.getDouble("max(field_i)") == 11);
+      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 27);
+      assert(tuple.getDouble("min(field_i)") == 7);
+      assert(tuple.getDouble("max(field_i)") == 20);
+      assert(tuple.getDouble("avg(field_i)") == 13.5D);
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("aggregationMode", "facet");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where (text='XXXX' AND NOT text='XXXX XXX') group by str_s order by str_s desc");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      //The sort by and order by match and no limit is applied. All the Tuples should be returned in
+      //this scenario.
+
+      assert(tuples.size() == 3);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("c"));
+      assert(tuple.getDouble("count(*)") == 4);
+      assert(tuple.getDouble("sum(field_i)") == 180);
+      assert(tuple.getDouble("min(field_i)") == 30);
+      assert(tuple.getDouble("max(field_i)") == 60);
+      assert(tuple.getDouble("avg(field_i)") == 45);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 19);
+      assert(tuple.getDouble("min(field_i)") == 8);
+      assert(tuple.getDouble("max(field_i)") == 11);
+      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+
+      tuple = tuples.get(2);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 27);
+      assert(tuple.getDouble("min(field_i)") == 7);
+      assert(tuple.getDouble("max(field_i)") == 20);
+      assert(tuple.getDouble("avg(field_i)") == 13.5D);
+
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("aggregationMode", "facet");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having 'sum(field_i)' = 19");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 1);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 19);
+      assert(tuple.getDouble("min(field_i)") == 8);
+      assert(tuple.getDouble("max(field_i)") == 11);
+      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("aggregationMode", "facet");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having (('sum(field_i)' = 19) AND (min(field_i) = 8))");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      //Only two results because of the limit.
+      assert(tuples.size() == 1);
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 19);
+      assert(tuple.getDouble("min(field_i)") == 8);
+      assert(tuple.getDouble("max(field_i)") == 11);
+      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+
+      params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("aggregationMode", "facet");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 100))");
+
+      solrStream = new SolrStream(jetty.url, params);
+      tuples = getTuples(solrStream);
+
+      assert(tuples.size() == 0);
+
+
+    } finally {
+      delete();
+    }
+  }
+
+
+
+
+
+  private void testParallelBasicGrouping() throws Exception {
+    try {
+
+      CloudJettyRunner jetty = this.cloudJettys.get(0);
+
+      del("*:*");
+
+      commit();
+
+      indexr("id", "1", "text", "XXXX XXXX", "str_s", "a", "field_i", "7");
+      indexr("id", "2", "text", "XXXX XXXX", "str_s", "b", "field_i", "8");
+      indexr("id", "3", "text", "XXXX XXXX", "str_s", "a", "field_i", "20");
+      indexr("id", "4", "text", "XXXX XXXX", "str_s", "b", "field_i", "11");
+      indexr("id", "5", "text", "XXXX XXXX", "str_s", "c", "field_i", "30");
+      indexr("id", "6", "text", "XXXX XXXX", "str_s", "c", "field_i", "40");
+      indexr("id", "7", "text", "XXXX XXXX", "str_s", "c", "field_i", "50");
+      indexr("id", "8", "text", "XXXX XXXX", "str_s", "c", "field_i", "60");
+      commit();
+      Map params = new HashMap();
+      params.put(CommonParams.QT, "/sql");
+      params.put("numWorkers", "2");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s order by sum(field_i) asc limit 2");
+
+      SolrStream solrStream = new SolrStream(jetty.url, params);
+      List<Tuple> tuples = getTuples(solrStream);
+
+      //Only two results because of the limit.
+      assert(tuples.size() == 2);
+
+      Tuple tuple = null;
+
+      tuple = tuples.get(0);
+      assert(tuple.get("str_s").equals("b"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 19);
+      assert(tuple.getDouble("min(field_i)") == 8);
+      assert(tuple.getDouble("max(field_i)") == 11);
+      assert(tuple.getDouble("avg(field_i)") == 9.5D);
+
+      tuple = tuples.get(1);
+      assert(tuple.get("str_s").equals("a"));
+      assert(tuple.getDouble("count(*)") == 2);
+      assert(tuple.getDouble("sum(field_i)") == 27);
+      assert(tuple.getDouble("min(field_i)") == 7);
+      assert(tuple.getDouble("max(field_i)") == 20);
+      assert(tuple.getDouble("avg(field_i)") == 13.5D);
+
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", "2");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s order by str_s desc");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s order by str_s desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -759,7 +1400,7 @@ public class TestSQLHandler extends Abst
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", "2");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having sum(field_i) = 19");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having sum(field_i) = 19");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -786,7 +1427,7 @@ public class TestSQLHandler extends Abst
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", "2");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -805,7 +1446,7 @@ public class TestSQLHandler extends Abst
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", "2");
-      params.put("sql", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 100))");
+      params.put("stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), avg(field_i) from collection1 where text='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 100))");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -841,7 +1482,7 @@ public class TestSQLHandler extends Abst
 
     Map params = new HashMap();
     params.put(CommonParams.QT, "/sql");
-    params.put("sql", "select count(*), sum(a_i), min(a_i), max(a_i), avg(a_i), sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1");
+    params.put("stmt", "select count(*), sum(a_i), min(a_i), max(a_i), avg(a_i), sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1");
 
     SolrStream solrStream = new SolrStream(jetty.url, params);
 
@@ -879,7 +1520,7 @@ public class TestSQLHandler extends Abst
 
     params = new HashMap();
     params.put(CommonParams.QT, "/sql");
-    params.put("sql", "select count(*), sum(a_i), min(a_i), max(a_i), avg(a_i), sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1 where id = 2");
+    params.put("stmt", "select count(*), sum(a_i), min(a_i), max(a_i), avg(a_i), sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1 where id = 2");
 
     solrStream = new SolrStream(jetty.url, params);
 
@@ -914,7 +1555,7 @@ public class TestSQLHandler extends Abst
 
     params = new HashMap();
     params.put(CommonParams.QT, "/sql");
-    params.put("sql", "select count(*), sum(a_i), min(a_i), max(a_i), avg(a_i), sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1 where a_s = 'blah'");
+    params.put("stmt", "select count(*), sum(a_i), min(a_i), max(a_i), avg(a_i), sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1 where a_s = 'blah'");
 
     solrStream = new SolrStream(jetty.url, params);
 
@@ -972,7 +1613,7 @@ public class TestSQLHandler extends Abst
       commit();
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
+      params.put("stmt", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
@@ -990,7 +1631,7 @@ public class TestSQLHandler extends Abst
       assert(tuple.getLong("year_i") == 2014);
       assert(tuple.getDouble("sum(item_i)") == 7);
 
-      params.put("sql", "select year_i, month_i, sum(item_i) from collection1 group by year_i, month_i order by year_i desc, month_i desc");
+      params.put("stmt", "select year_i, month_i, sum(item_i) from collection1 group by year_i, month_i order by year_i desc, month_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -1017,7 +1658,7 @@ public class TestSQLHandler extends Abst
 
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", "select year_i, month_i, day_i, sum(item_i) from collection1 group by year_i, month_i, day_i order by year_i desc, month_i desc, day_i desc");
+      params.put("stmt", "select year_i, month_i, day_i, sum(item_i) from collection1 group by year_i, month_i, day_i order by year_i desc, month_i desc, day_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -1091,7 +1732,7 @@ public class TestSQLHandler extends Abst
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
+      params.put("stmt", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
@@ -1113,7 +1754,7 @@ public class TestSQLHandler extends Abst
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select year_i, month_i, sum(item_i) from collection1 group by year_i, month_i order by year_i desc, month_i desc");
+      params.put("stmt", "select year_i, month_i, sum(item_i) from collection1 group by year_i, month_i order by year_i desc, month_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -1140,7 +1781,7 @@ public class TestSQLHandler extends Abst
       params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("aggregationMode", "facet");
-      params.put("sql", "select year_i, month_i, day_i, sum(item_i) from collection1 group by year_i, month_i, day_i order by year_i desc, month_i desc, day_i desc");
+      params.put("stmt", "select year_i, month_i, day_i, sum(item_i) from collection1 group by year_i, month_i, day_i order by year_i desc, month_i desc, day_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -1210,7 +1851,7 @@ public class TestSQLHandler extends Abst
       Map params = new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", 2);
-      params.put("sql", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
+      params.put("stmt", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
 
       SolrStream solrStream = new SolrStream(jetty.url, params);
       List<Tuple> tuples = getTuples(solrStream);
@@ -1231,7 +1872,7 @@ public class TestSQLHandler extends Abst
       new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", 2);
-      params.put("sql", "select year_i, month_i, sum(item_i) from collection1 group by year_i, month_i order by year_i desc, month_i desc");
+      params.put("stmt", "select year_i, month_i, sum(item_i) from collection1 group by year_i, month_i order by year_i desc, month_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);
@@ -1260,7 +1901,7 @@ public class TestSQLHandler extends Abst
       new HashMap();
       params.put(CommonParams.QT, "/sql");
       params.put("numWorkers", 2);
-      params.put("sql", "select year_i, month_i, day_i, sum(item_i) from collection1 group by year_i, month_i, day_i order by year_i desc, month_i desc, day_i desc");
+      params.put("stmt", "select year_i, month_i, day_i, sum(item_i) from collection1 group by year_i, month_i, day_i order by year_i desc, month_i desc, day_i desc");
 
       solrStream = new SolrStream(jetty.url, params);
       tuples = getTuples(solrStream);

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/handler/component/SuggestComponentTest.java Thu Oct 15 10:25:39 2015
@@ -522,20 +522,4 @@ public class SuggestComponentTest extend
         );
   }
 
-  private void waitForWarming() throws InterruptedException {
-    RefCounted<SolrIndexSearcher> registeredSearcher = h.getCore().getRegisteredSearcher();
-    RefCounted<SolrIndexSearcher> newestSearcher = h.getCore().getNewestSearcher(false);;
-    while (registeredSearcher == null || registeredSearcher.get() != newestSearcher.get()) {
-      if (registeredSearcher != null) {
-        registeredSearcher.decref();
-      }
-      newestSearcher.decref();
-      Thread.sleep(50);
-      registeredSearcher = h.getCore().getRegisteredSearcher();
-      newestSearcher = h.getCore().getNewestSearcher(false);
-    }
-    registeredSearcher.decref();
-    newestSearcher.decref();
-  }
-  
 }

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java Thu Oct 15 10:25:39 2015
@@ -412,6 +412,42 @@ public class QueryEqualityTest extends S
         "{!child of=foo_s:parent}dude");
   }
 
+  public void testGraphQuery() throws Exception {
+    SolrQueryRequest req = req("from", "node_s",
+        "to","edge_s",
+        "traversalFilter","foo",
+        "returnOnlyLeaf","true",
+        "returnRoot","false",
+        "maxDepth","2",
+        "useAutn","false"
+        );
+    // make sure all param subsitution works for all args to graph query.
+    assertQueryEquals("graph", req, 
+        "{!graph from=node_s to=edge_s}*:*",
+        "{!graph from=$from to=$to}*:*");
+    
+    assertQueryEquals("graph", req,
+        "{!graph from=node_s to=edge_s traversalFilter=foo}*:*",
+        "{!graph from=$from to=$to traversalFilter=$traversalFilter}*:*");
+    
+    assertQueryEquals("graph", req,
+        "{!graph from=node_s to=edge_s traversalFilter=foo returnOnlyLeaf=true}*:*",
+        "{!graph from=$from to=$to traversalFilter=$traversalFilter returnOnlyLeaf=$returnOnlyLeaf}*:*");
+    
+    assertQueryEquals("graph", req,
+        "{!graph from=node_s to=edge_s traversalFilter=foo returnOnlyLeaf=true returnRoot=false}*:*",
+        "{!graph from=$from to=$to traversalFilter=$traversalFilter returnOnlyLeaf=$returnOnlyLeaf returnRoot=$returnRoot}*:*");
+    
+    assertQueryEquals("graph", req,
+        "{!graph from=node_s to=edge_s traversalFilter=foo returnOnlyLeaf=true returnRoot=false maxDepth=2}*:*",
+        "{!graph from=$from to=$to traversalFilter=$traversalFilter returnOnlyLeaf=$returnOnlyLeaf returnRoot=$returnRoot maxDepth=$maxDepth}*:*");
+    
+    assertQueryEquals("graph", req,
+        "{!graph from=node_s to=edge_s traversalFilter=foo returnOnlyLeaf=true returnRoot=false maxDepth=2 useAutn=false}*:*",
+        "{!graph from=$from to=$to traversalFilter=$traversalFilter returnOnlyLeaf=$returnOnlyLeaf returnRoot=$returnRoot maxDepth=$maxDepth useAutn=$useAutn}*:*");
+    
+  }
+
   public void testQuerySurround() throws Exception {
     assertQueryEquals("surround", "{!surround}and(apache,solr)", 
                       "and(apache,solr)", "apache AND solr");

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestDocSet.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestDocSet.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestDocSet.java Thu Oct 15 10:25:39 2015
@@ -38,7 +38,6 @@ import org.apache.lucene.index.SortedSet
 import org.apache.lucene.index.StoredFieldVisitor;
 import org.apache.lucene.search.DocIdSet;
 import org.apache.lucene.search.DocIdSetIterator;
-import org.apache.lucene.search.Filter;
 import org.apache.lucene.util.BitSetIterator;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.FixedBitSet;

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java Thu Oct 15 10:25:39 2015
@@ -517,13 +517,13 @@ public class TestExtendedDismaxParser ex
         "//str[@name='parsedquery_toString'][.='+id:42']");
     
     assertQ(req("defType","edismax", "debugQuery","true", "rows","0", "uf","*^5.0", "q","id:42"),
-        "//str[@name='parsedquery_toString'][.='+id:42^5.0']");
+        "//str[@name='parsedquery_toString'][.='+(id:42)^5.0']");
     
     assertQ(req("defType","edismax", "debugQuery","true", "rows","0", "uf","*^2.0 id^5.0 -xyz", "q","name:foo"),
-        "//str[@name='parsedquery_toString'][.='+name:foo^2.0']");
+        "//str[@name='parsedquery_toString'][.='+(name:foo)^2.0']");
     
     assertQ(req("defType","edismax", "debugQuery","true", "rows","0", "uf","i*^5.0", "q","id:42"),
-        "//str[@name='parsedquery_toString'][.='+id:42^5.0']");
+        "//str[@name='parsedquery_toString'][.='+(id:42)^5.0']");
     
     
     assertQ(req("defType","edismax", "uf","-*", "q","cannons"),
@@ -754,19 +754,19 @@ public class TestExtendedDismaxParser ex
             "ps", "3",
             "defType", "edismax",
             "debugQuery", "true"),
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx cccc vvvv\"~1^10.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx cccc vvvv\"~2^20.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx cccc vvvv\"~3^30.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx\"~2^22.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"xxxx cccc\"~2^22.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"cccc vvvv\"~2^22.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx\"~3^33.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"xxxx cccc\"~3^33.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"cccc vvvv\"~3^33.0')]",        
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx cccc\"~2^222.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"xxxx cccc vvvv\"~2^222.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx cccc\"~3^333.0')]",
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"xxxx cccc vvvv\"~3^333.0')]"
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx cccc vvvv\"~1)^10.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx cccc vvvv\"~2)^20.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx cccc vvvv\"~3)^30.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx\"~2)^22.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"xxxx cccc\"~2)^22.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"cccc vvvv\"~2)^22.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx\"~3)^33.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"xxxx cccc\"~3)^33.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"cccc vvvv\"~3)^33.0')]",        
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx cccc\"~2)^222.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"xxxx cccc vvvv\"~2)^222.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx cccc\"~3)^333.0')]",
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"xxxx cccc vvvv\"~3)^333.0')]"
      );
 
     assertQ(
@@ -806,7 +806,7 @@ public class TestExtendedDismaxParser ex
             "ps2", "4",
             "defType", "edismax",
             "debugQuery", "true"),
-        "//str[@name='parsedquery'][contains(.,'phrase_sw:\"zzzz xxxx\"~2^22.0')]"
+        "//str[@name='parsedquery'][contains(.,'(phrase_sw:\"zzzz xxxx\"~2)^22.0')]"
      );
 
     assertQ("phrase field queries spanning multiple fields should be within their own dismax queries",

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java Thu Oct 15 10:25:39 2015
@@ -155,14 +155,14 @@ public class TestSolrQueryParser extends
     assertJQ(req("fq","id:1", "fl","id,score", "q", subqq+"^3", "qq","text:x^2"
         , "debug","query"
     )
-        ,"/debug/parsedquery_toString=='(text:x^2.0)^3.0'"
+        ,"/debug/parsedquery_toString=='((text:x)^2.0)^3.0'"
     );
 
     // boost should multiply
     assertJQ(req("fq","id:1", "fl","id,score", "q", "  {!v=$qq}^3", "qq","text:x^2"
         , "debug","query"
     )
-        ,"/debug/parsedquery_toString=='(text:x^2.0)^3.0'"
+        ,"/debug/parsedquery_toString=='((text:x)^2.0)^3.0'"
     );
 
   }

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSort.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSort.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/search/TestSort.java Thu Oct 15 10:25:39 2015
@@ -34,15 +34,12 @@ import org.apache.lucene.index.Directory
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.search.BitsFilteredDocIdSet;
 import org.apache.lucene.search.Collector;
 import org.apache.lucene.search.DocIdSet;
-import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.FilterCollector;
 import org.apache.lucene.search.FilterLeafCollector;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.LeafCollector;
-import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.ScoreDoc;
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.SortField;

Modified: lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java (original)
+++ lucene/dev/branches/lucene6825/solr/core/src/test/org/apache/solr/update/AddBlockUpdateTest.java Thu Oct 15 10:25:39 2015
@@ -39,7 +39,6 @@ import javax.xml.stream.XMLStreamReader;
 
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.QueryWrapperFilter;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.search.TermRangeQuery;
 import org.apache.lucene.search.TopDocs;
@@ -53,6 +52,7 @@ import org.apache.solr.common.SolrInputD
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.JavaBinCodec;
 import org.apache.solr.handler.loader.XMLLoader;
+import org.apache.solr.search.QueryWrapperFilter;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.apache.solr.util.RefCounted;
@@ -562,8 +562,8 @@ public class AddBlockUpdateTest extends
   
   protected ToParentBlockJoinQuery join(final String childTerm) {
     return new ToParentBlockJoinQuery(
-        new TermQuery(new Term(child, childTerm)), new QueryBitSetProducer(new QueryWrapperFilter(
-            new TermRangeQuery(parent, null, null, false, false))), ScoreMode.None);
+        new TermQuery(new Term(child, childTerm)), new QueryBitSetProducer(
+            new TermRangeQuery(parent, null, null, false, false)), ScoreMode.None);
   }
   
   private Collection<? extends Callable<Void>> callables(List<Document> blocks) {

Modified: lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/Tuple.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/Tuple.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/Tuple.java (original)
+++ lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/Tuple.java Thu Oct 15 10:25:39 2015
@@ -63,6 +63,10 @@ public class Tuple implements Cloneable
     this.fields.put(key, value);
   }
 
+  public void remove(Object key) {
+    this.fields.remove(key);
+  }
+
   public String getString(Object key) {
     return this.fields.get(key).toString();
   }

Modified: lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java?rev=1708778&r1=1708777&r2=1708778&view=diff
==============================================================================
--- lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java (original)
+++ lucene/dev/branches/lucene6825/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java Thu Oct 15 10:25:39 2015
@@ -99,7 +99,7 @@ class StatementImpl implements Statement
       Collections.shuffle(shuffler, new Random());
 
       params.put(CommonParams.QT, "/sql");
-      params.put("sql", sql);
+      params.put("stmt", sql);
       params.putAll(properties);
 
       Replica rep = shuffler.get(0);