You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2022/02/22 14:04:48 UTC

[solr] 08/10: SOLR-16031: Enable spotless on sql module

This is an automated email from the ASF dual-hosted git repository.

krisden pushed a commit to branch branch_9_0
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 4ac3c6c4b3eae82e9c35cae4afdd73a5b64d72f3
Author: Kevin Risden <kr...@apache.org>
AuthorDate: Sat Feb 19 15:02:08 2022 -0500

    SOLR-16031: Enable spotless on sql module
---
 gradle/validation/spotless.gradle                  |    4 -
 .../apache/solr/handler/sql/CalciteJDBCStream.java |   51 +-
 .../apache/solr/handler/sql/CalciteSolrDriver.java |   16 +-
 .../org/apache/solr/handler/sql/LimitStream.java   |   15 +-
 .../org/apache/solr/handler/sql/SQLHandler.java    |   38 +-
 .../org/apache/solr/handler/sql/SolrAggregate.java |   67 +-
 .../apache/solr/handler/sql/SolrEnumerator.java    |   36 +-
 .../org/apache/solr/handler/sql/SolrFilter.java    |  124 +-
 .../org/apache/solr/handler/sql/SolrMethod.java    |   30 +-
 .../org/apache/solr/handler/sql/SolrProject.java   |   24 +-
 .../java/org/apache/solr/handler/sql/SolrRel.java  |   25 +-
 .../org/apache/solr/handler/sql/SolrRules.java     |   72 +-
 .../org/apache/solr/handler/sql/SolrSchema.java    |   51 +-
 .../java/org/apache/solr/handler/sql/SolrSort.java |   24 +-
 .../org/apache/solr/handler/sql/SolrTable.java     |  576 +++++----
 .../org/apache/solr/handler/sql/SolrTableScan.java |   33 +-
 .../handler/sql/SolrToEnumerableConverter.java     |   87 +-
 .../handler/sql/SolrToEnumerableConverterRule.java |    9 +-
 .../org/apache/solr/handler/sql/package-info.java  |    3 +-
 .../solr/handler/sql/SQLWithAuthzEnabledTest.java  |   81 +-
 .../apache/solr/handler/sql/TestSQLHandler.java    | 1276 +++++++++++++++-----
 .../solr/handler/sql/TestSQLHandlerNonCloud.java   |    3 +-
 22 files changed, 1738 insertions(+), 907 deletions(-)

diff --git a/gradle/validation/spotless.gradle b/gradle/validation/spotless.gradle
index 2793743..1fd073b 100644
--- a/gradle/validation/spotless.gradle
+++ b/gradle/validation/spotless.gradle
@@ -44,20 +44,16 @@ configure(project(":solr").subprojects) { prj ->
 
         // Exclude certain files (generated ones, mostly).
         switch (project.path) {
-          case ":solr:modules:sql":
           case ":solr:core":
           case ":solr:solrj":
           case ":solr:test-framework":
             targetExclude "src/**/*.java"
             break
-<<<<<<< HEAD
           case ":solr:modules:ltr":
             targetExclude "src/test/**/*.java"
-=======
           case ":solr:modules:hdfs":
             // Exclude Hadoop copied files to make upgrades easier
             targetExclude "src/**/org/apache/hadoop/**"
->>>>>>> 2b6e490cafa (SOLR-16025: Enable spotless on hdfs module)
             break
         }
       }
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteJDBCStream.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteJDBCStream.java
index 4fa6db8..b88ce58 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteJDBCStream.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteJDBCStream.java
@@ -22,21 +22,25 @@ import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.util.Properties;
-
 import org.apache.solr.client.solrj.io.comp.StreamComparator;
 import org.apache.solr.client.solrj.io.stream.JDBCStream;
 
 /**
  * Used with o.a.s.Handler.SQLHandler.
- * 
+ *
  * @lucene.internal
  * @since 7.0.0
  */
 public class CalciteJDBCStream extends JDBCStream {
   private static final long serialVersionUID = 1L;
 
-  public CalciteJDBCStream(String connectionUrl, String sqlQuery, StreamComparator definedSort,
-      Properties connectionProperties, String driverClassName) throws IOException {
+  public CalciteJDBCStream(
+      String connectionUrl,
+      String sqlQuery,
+      StreamComparator definedSort,
+      Properties connectionProperties,
+      String driverClassName)
+      throws IOException {
     super(connectionUrl, sqlQuery, definedSort, connectionProperties, driverClassName);
   }
 
@@ -49,26 +53,27 @@ public class CalciteJDBCStream extends JDBCStream {
       final String columnName = metadata.getColumnLabel(columnNumber);
       final String className = metadata.getColumnClassName(columnNumber);
       if (Array.class.getName().equals(className)) {
-        valueSelector = new ResultSetValueSelector() {
-          @Override
-          public Object selectValue(ResultSet resultSet) throws SQLException {
-            Object o = resultSet.getObject(columnNumber);
-            if (resultSet.wasNull()) {
-              return null;
-            }
-            if (o instanceof Array) {
-              Array array = (Array) o;
-              return array.getArray();
-            } else {
-              return o;
-            }
-          }
+        valueSelector =
+            new ResultSetValueSelector() {
+              @Override
+              public Object selectValue(ResultSet resultSet) throws SQLException {
+                Object o = resultSet.getObject(columnNumber);
+                if (resultSet.wasNull()) {
+                  return null;
+                }
+                if (o instanceof Array) {
+                  Array array = (Array) o;
+                  return array.getArray();
+                } else {
+                  return o;
+                }
+              }
 
-          @Override
-          public String getColumnName() {
-            return columnName;
-          }
-        };
+              @Override
+              public String getColumnName() {
+                return columnName;
+              }
+            };
       }
     }
     return valueSelector;
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteSolrDriver.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteSolrDriver.java
index d734d51..a3e9462 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteSolrDriver.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/CalciteSolrDriver.java
@@ -16,6 +16,9 @@
  */
 package org.apache.solr.handler.sql;
 
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Properties;
 import org.apache.calcite.jdbc.CalciteConnection;
 import org.apache.calcite.jdbc.Driver;
 import org.apache.calcite.runtime.Hook;
@@ -24,23 +27,18 @@ import org.apache.calcite.sql2rel.SqlToRelConverter;
 import org.apache.calcite.util.Holder;
 import org.apache.solr.client.solrj.io.SolrClientCache;
 
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Properties;
-
 /**
  * JDBC driver for Calcite Solr.
  *
- * <p>It accepts connect strings that start with "jdbc:calcitesolr:".</p>
+ * <p>It accepts connect strings that start with "jdbc:calcitesolr:".
  */
 public class CalciteSolrDriver extends Driver {
-  public final static String CONNECT_STRING_PREFIX = "jdbc:calcitesolr:";
+  public static final String CONNECT_STRING_PREFIX = "jdbc:calcitesolr:";
 
   public static CalciteSolrDriver INSTANCE = new CalciteSolrDriver();
 
   private SolrClientCache solrClientCache;
 
-
   private CalciteSolrDriver() {
     super();
   }
@@ -60,7 +58,7 @@ public class CalciteSolrDriver extends Driver {
 
   @Override
   public Connection connect(String url, Properties info) throws SQLException {
-    if(!this.acceptsURL(url)) {
+    if (!this.acceptsURL(url)) {
       return null;
     }
 
@@ -74,7 +72,7 @@ public class CalciteSolrDriver extends Driver {
     final SchemaPlus rootSchema = calciteConnection.getRootSchema();
 
     String schemaName = info.getProperty("zk");
-    if(schemaName == null) {
+    if (schemaName == null) {
       throw new SQLException("zk must be set");
     }
     final SolrSchema solrSchema = new SolrSchema(info, solrClientCache);
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/LimitStream.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/LimitStream.java
index 5bdf3e7..1ff4362 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/LimitStream.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/LimitStream.java
@@ -16,6 +16,9 @@
  */
 package org.apache.solr.handler.sql;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.comp.StreamComparator;
 import org.apache.solr.client.solrj.io.stream.StreamContext;
@@ -24,10 +27,6 @@ import org.apache.solr.client.solrj.io.stream.expr.Explanation;
 import org.apache.solr.client.solrj.io.stream.expr.StreamExplanation;
 import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
 class LimitStream extends TupleStream {
 
   private final TupleStream stream;
@@ -60,7 +59,7 @@ class LimitStream extends TupleStream {
     return children;
   }
 
-  public StreamComparator getStreamSort(){
+  public StreamComparator getStreamSort() {
     return stream.getStreamSort();
   }
 
@@ -72,9 +71,7 @@ class LimitStream extends TupleStream {
   public Explanation toExplanation(StreamFactory factory) throws IOException {
 
     return new StreamExplanation(getStreamNodeId().toString())
-        .withChildren(new Explanation[]{
-            stream.toExplanation(factory)
-        })
+        .withChildren(new Explanation[] {stream.toExplanation(factory)})
         .withFunctionName("SQL LIMIT")
         .withExpression("--non-expressible--")
         .withImplementingClass(this.getClass().getName())
@@ -101,4 +98,4 @@ class LimitStream extends TupleStream {
 
     return stream.read();
   }
-}
\ No newline at end of file
+}
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SQLHandler.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SQLHandler.java
index 1cd785b..4f7533f 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SQLHandler.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SQLHandler.java
@@ -26,7 +26,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-
 import org.apache.calcite.config.Lex;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.comp.StreamComparator;
@@ -48,7 +47,8 @@ import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, PermissionNameProvider {
+public class SQLHandler extends RequestHandlerBase
+    implements SolrCoreAware, PermissionNameProvider {
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -62,7 +62,7 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
   public void inform(SolrCore core) {
     CoreContainer coreContainer = core.getCoreContainer();
 
-    if(coreContainer.isZooKeeperAware()) {
+    if (coreContainer.isZooKeeperAware()) {
       defaultZkhost = coreContainer.getZkController().getZkServerAddress();
       defaultWorkerCollection = core.getCoreDescriptor().getCollectionName();
       isCloud = true;
@@ -91,11 +91,11 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
     TupleStream tupleStream = null;
     try {
 
-      if(!isCloud) {
+      if (!isCloud) {
         throw new IllegalStateException(sqlNonCloudErrorMsg);
       }
 
-      if(sql == null) {
+      if (sql == null) {
         throw new Exception("stmt parameter cannot be null");
       }
 
@@ -104,7 +104,7 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
       Properties properties = new Properties();
       // Add all query parameters
       Iterator<String> parameterNamesIterator = params.getParameterNamesIterator();
-      while(parameterNamesIterator.hasNext()) {
+      while (parameterNamesIterator.hasNext()) {
         String param = parameterNamesIterator.next();
         properties.setProperty(param, params.get(param));
       }
@@ -115,16 +115,17 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
 
       String driverClass = CalciteSolrDriver.class.getCanonicalName();
 
-      // JDBC driver requires metadata from the SQLHandler. Default to false since this adds a new Metadata stream.
+      // JDBC driver requires metadata from the SQLHandler. Default to false since this adds a new
+      // Metadata stream.
       boolean includeMetadata = params.getBool("includeMetadata", false);
       tupleStream = new SqlHandlerStream(url, sql, null, properties, driverClass, includeMetadata);
 
       tupleStream = new StreamHandler.TimerStream(new ExceptionStream(tupleStream));
 
       rsp.add("result-set", tupleStream);
-    } catch(Exception e) {
-      //Catch the SQL parsing and query transformation exceptions.
-      if(tupleStream != null) {
+    } catch (Exception e) {
+      // Catch the SQL parsing and query transformation exceptions.
+      if (tupleStream != null) {
         tupleStream.close();
       }
       SolrException.log(log, e);
@@ -149,8 +150,13 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
     List<String> metadataFields = new ArrayList<>();
     Map<String, String> metadataAliases = new HashMap<>();
 
-    SqlHandlerStream(String connectionUrl, String sqlQuery, StreamComparator definedSort,
-                     Properties connectionProperties, String driverClassName, boolean includeMetadata)
+    SqlHandlerStream(
+        String connectionUrl,
+        String sqlQuery,
+        StreamComparator definedSort,
+        Properties connectionProperties,
+        String driverClassName,
+        boolean includeMetadata)
         throws IOException {
       super(connectionUrl, sqlQuery, definedSort, connectionProperties, driverClassName);
 
@@ -160,7 +166,7 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
     @Override
     public Tuple read() throws IOException {
       // Return a metadata tuple as the first tuple and then pass through to the JDBCStream.
-      if(firstTuple) {
+      if (firstTuple) {
         try {
           Tuple tuple = new Tuple();
 
@@ -168,14 +174,14 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
 
           ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
 
-          for(int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
             String columnName = resultSetMetaData.getColumnName(i);
             String columnLabel = resultSetMetaData.getColumnLabel(i);
             metadataFields.add(columnName);
             metadataAliases.put(columnName, columnLabel);
           }
 
-          if(includeMetadata) {
+          if (includeMetadata) {
             tuple.put("isMetadata", true);
             tuple.put("fields", metadataFields);
             tuple.put("aliases", metadataAliases);
@@ -187,7 +193,7 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware, Per
       }
 
       Tuple tuple = super.read();
-      if(!tuple.EOF) {
+      if (!tuple.EOF) {
         tuple.setFieldNames(metadataFields);
         tuple.setFieldLabels(metadataAliases);
       }
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java
index e1c6a6f..7c29ddc 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrAggregate.java
@@ -16,10 +16,12 @@
  */
 package org.apache.solr.handler.sql;
 
+import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.APPROX_COUNT_DISTINCT;
+import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.COUNT_DISTINCT;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
-
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelNode;
@@ -31,26 +33,25 @@ import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.util.ImmutableBitSet;
 import org.apache.calcite.util.Pair;
 
-import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.APPROX_COUNT_DISTINCT;
-import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.COUNT_DISTINCT;
-
 /**
  * Implementation of {@link org.apache.calcite.rel.core.Aggregate} relational expression in Solr.
  */
 class SolrAggregate extends Aggregate implements SolrRel {
-  private static final List<SqlAggFunction> SUPPORTED_AGGREGATIONS = Arrays.asList(
-      SqlStdOperatorTable.COUNT,
-      SqlStdOperatorTable.SUM,
-      SqlStdOperatorTable.SUM0,
-      SqlStdOperatorTable.MIN,
-      SqlStdOperatorTable.MAX,
-      SqlStdOperatorTable.AVG
-  );
+  private static final List<SqlAggFunction> SUPPORTED_AGGREGATIONS =
+      Arrays.asList(
+          SqlStdOperatorTable.COUNT,
+          SqlStdOperatorTable.SUM,
+          SqlStdOperatorTable.SUM0,
+          SqlStdOperatorTable.MIN,
+          SqlStdOperatorTable.MAX,
+          SqlStdOperatorTable.AVG);
 
   // Returns the Solr agg metric identifier (includes column) for the SQL metric
   static String solrAggMetricId(String metric, String column) {
-    // CountDistinctMetric's getIdentifer returns "countDist" but all others return a lowercased value
-    String funcName = COUNT_DISTINCT.equals(metric) ? COUNT_DISTINCT : metric.toLowerCase(Locale.ROOT);
+    // CountDistinctMetric's getIdentifer returns "countDist" but all others return a lowercased
+    // value
+    String funcName =
+        COUNT_DISTINCT.equals(metric) ? COUNT_DISTINCT : metric.toLowerCase(Locale.ROOT);
     return String.format(Locale.ROOT, "%s(%s)", funcName, column);
   }
 
@@ -68,15 +69,23 @@ class SolrAggregate extends Aggregate implements SolrRel {
   }
 
   @Override
-  public Aggregate copy(RelTraitSet traitSet, RelNode input, ImmutableBitSet groupSet, List<ImmutableBitSet> groupSets,
+  public Aggregate copy(
+      RelTraitSet traitSet,
+      RelNode input,
+      ImmutableBitSet groupSet,
+      List<ImmutableBitSet> groupSets,
       List<AggregateCall> aggCalls) {
-    return new SolrAggregate(getCluster(), traitSet, hints,input, groupSet, groupSets, aggCalls);
+    return new SolrAggregate(getCluster(), traitSet, hints, input, groupSet, groupSets, aggCalls);
   }
 
   @Override
-  public Aggregate copy(RelTraitSet traitSet, RelNode input,
-                        boolean indicator, ImmutableBitSet groupSet,
-                        List<ImmutableBitSet> groupSets, List<AggregateCall> aggCalls) {
+  public Aggregate copy(
+      RelTraitSet traitSet,
+      RelNode input,
+      boolean indicator,
+      ImmutableBitSet groupSet,
+      List<ImmutableBitSet> groupSets,
+      List<AggregateCall> aggCalls) {
     return new SolrAggregate(getCluster(), traitSet, hints, input, groupSet, groupSets, aggCalls);
   }
 
@@ -89,10 +98,16 @@ class SolrAggregate extends Aggregate implements SolrRel {
       AggregateCall aggCall = namedAggCall.getKey();
       Pair<String, String> metric = toSolrMetric(implementor, aggCall, inNames);
 
-      boolean isDistinct = SqlStdOperatorTable.COUNT.equals(aggCall.getAggregation()) && aggCall.isDistinct();
-      // map the SQL COUNT to either countDist or hll for distinct ops, otherwise, the metric names map over directly
-      String metricKey = isDistinct ? (aggCall.isApproximate() ? APPROX_COUNT_DISTINCT : COUNT_DISTINCT) : metric.getKey();
-      implementor.addReverseAggMapping(namedAggCall.getValue(), solrAggMetricId(metricKey, metric.getValue()));
+      boolean isDistinct =
+          SqlStdOperatorTable.COUNT.equals(aggCall.getAggregation()) && aggCall.isDistinct();
+      // map the SQL COUNT to either countDist or hll for distinct ops, otherwise, the metric names
+      // map over directly
+      String metricKey =
+          isDistinct
+              ? (aggCall.isApproximate() ? APPROX_COUNT_DISTINCT : COUNT_DISTINCT)
+              : metric.getKey();
+      implementor.addReverseAggMapping(
+          namedAggCall.getValue(), solrAggMetricId(metricKey, metric.getValue()));
       implementor.addMetricPair(namedAggCall.getValue(), metricKey, metric.getValue());
     }
 
@@ -103,7 +118,8 @@ class SolrAggregate extends Aggregate implements SolrRel {
   }
 
   @SuppressWarnings({"fallthrough"})
-  private Pair<String, String> toSolrMetric(Implementor implementor, AggregateCall aggCall, List<String> inNames) {
+  private Pair<String, String> toSolrMetric(
+      Implementor implementor, AggregateCall aggCall, List<String> inNames) {
     SqlAggFunction aggregation = aggCall.getAggregation();
     List<Integer> args = aggCall.getArgList();
     switch (args.size()) {
@@ -118,7 +134,8 @@ class SolrAggregate extends Aggregate implements SolrRel {
           return new Pair<>(aggregation.getName(), name);
         }
       default:
-        throw new AssertionError("Invalid aggregation " + aggregation + " with args " + args + " with names" + inNames);
+        throw new AssertionError(
+            "Invalid aggregation " + aggregation + " with args " + args + " with names" + inNames);
     }
   }
 }
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrEnumerator.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrEnumerator.java
index e450755..8bf3f82 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrEnumerator.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrEnumerator.java
@@ -16,17 +16,16 @@
  */
 package org.apache.solr.handler.sql;
 
-import org.apache.calcite.linq4j.Enumerator;
-import org.apache.solr.client.solrj.io.Tuple;
-import org.apache.solr.client.solrj.io.stream.TupleStream;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import org.apache.calcite.linq4j.Enumerator;
+import org.apache.solr.client.solrj.io.Tuple;
+import org.apache.solr.client.solrj.io.stream.TupleStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Enumerator that reads from a Solr collection. */
 class SolrEnumerator implements Enumerator<Object> {
@@ -36,7 +35,8 @@ class SolrEnumerator implements Enumerator<Object> {
   private final List<Map.Entry<String, Class<?>>> fields;
   private Tuple current;
 
-  /** Creates a SolrEnumerator.
+  /**
+   * Creates a SolrEnumerator.
    *
    * @param tupleStream Solr TupleStream
    * @param fields Fields to get from each Tuple
@@ -53,7 +53,8 @@ class SolrEnumerator implements Enumerator<Object> {
     this.current = null;
   }
 
-  /** Produce the next row from the results
+  /**
+   * Produce the next row from the results
    *
    * @return A new row from the results
    */
@@ -74,20 +75,21 @@ class SolrEnumerator implements Enumerator<Object> {
   private Object getter(Tuple tuple, Map.Entry<String, Class<?>> field) {
     Object val = tuple.get(field.getKey());
 
-    if(val == null) {
+    if (val == null) {
       return null;
     }
 
     Class<?> clazz = field.getValue();
-    if(clazz.equals(Long.class)) {
-      if(val instanceof Double) {
+    if (clazz.equals(Long.class)) {
+      if (val instanceof Double) {
         return this.getRealVal(val);
       }
       return val;
     }
 
     if (clazz.equals(Date.class)) {
-      // make sure the val returned is a Date as Avatica cannot deal with string values for Timestamp fields
+      // make sure the val returned is a Date as Avatica cannot deal with string values for
+      // Timestamp fields
       val = tuple.getDate(field.getKey());
     }
 
@@ -96,11 +98,11 @@ class SolrEnumerator implements Enumerator<Object> {
 
   private Object getRealVal(Object val) {
     // Check if Double is really a Long
-    if(val instanceof Double) {
+    if (val instanceof Double) {
       double doubleVal = (double) val;
-      //make sure that double has no decimals and fits within Long
-      if(doubleVal % 1 == 0 && doubleVal >= Long.MIN_VALUE && doubleVal <= Long.MAX_VALUE) {
-        return (long)doubleVal;
+      // make sure that double has no decimals and fits within Long
+      if (doubleVal % 1 == 0 && doubleVal >= Long.MIN_VALUE && doubleVal <= Long.MAX_VALUE) {
+        return (long) doubleVal;
       }
       return doubleVal;
     }
@@ -129,7 +131,7 @@ class SolrEnumerator implements Enumerator<Object> {
   }
 
   public void close() {
-    if(this.tupleStream != null) {
+    if (this.tupleStream != null) {
       try {
         this.tupleStream.close();
       } catch (IOException e) {
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java
index f33bdba..34454da 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrFilter.java
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
-
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -46,21 +45,16 @@ import org.apache.solr.common.SolrException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- * Implementation of a {@link org.apache.calcite.rel.core.Filter} relational expression in Solr.
- */
+/** Implementation of a {@link org.apache.calcite.rel.core.Filter} relational expression in Solr. */
 class SolrFilter extends Filter implements SolrRel {
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  private static final Pattern CALCITE_TIMESTAMP_REGEX = Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$");
+  private static final Pattern CALCITE_TIMESTAMP_REGEX =
+      Pattern.compile("^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$");
   private final RexBuilder builder;
 
-  SolrFilter(
-      RelOptCluster cluster,
-      RelTraitSet traitSet,
-      RelNode child,
-      RexNode condition) {
+  SolrFilter(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, RexNode condition) {
     super(cluster, traitSet, child, condition);
     assert getConvention() == SolrRel.CONVENTION;
     assert getConvention() == child.getConvention();
@@ -79,7 +73,9 @@ class SolrFilter extends Filter implements SolrRel {
   public void implement(Implementor implementor) {
     implementor.visitChild(0, getInput());
     if (getInput() instanceof SolrAggregate) {
-      HavingTranslator translator = new HavingTranslator(SolrRules.solrFieldNames(getRowType()), implementor.reverseAggMappings, builder);
+      HavingTranslator translator =
+          new HavingTranslator(
+              SolrRules.solrFieldNames(getRowType()), implementor.reverseAggMappings, builder);
       String havingPredicate = translator.translateMatch(condition);
       implementor.setHavingPredicate(havingPredicate);
     } else {
@@ -102,7 +98,8 @@ class SolrFilter extends Filter implements SolrRel {
 
     protected String translateMatch(RexNode condition) {
       if (log.isDebugEnabled()) {
-        log.debug("translateMatch condition={} {}", condition.getKind(), condition.getClass().getName());
+        log.debug(
+            "translateMatch condition={} {}", condition.getKind(), condition.getClass().getName());
       }
 
       final SqlKind kind = condition.getKind();
@@ -125,17 +122,21 @@ class SolrFilter extends Filter implements SolrRel {
     }
 
     protected String translateAndOrBetween(RexNode condition) {
-      // see if this is a translated range query of greater than or equals and less than or equal on same field
-      // if so, then collapse into a single range criteria, e.g. field:[gte TO lte] instead of two ranges AND'd together
+      // see if this is a translated range query of greater than or equals and less than or equal on
+      // same field
+      // if so, then collapse into a single range criteria, e.g. field:[gte TO lte] instead of two
+      // ranges AND'd together
       RexCall call = (RexCall) condition;
       List<RexNode> operands = call.getOperands();
       String query = null;
       if (operands.size() == 2) {
         RexNode lhs = operands.get(0);
         RexNode rhs = operands.get(1);
-        if (lhs.getKind() == SqlKind.GREATER_THAN_OR_EQUAL && rhs.getKind() == SqlKind.LESS_THAN_OR_EQUAL) {
+        if (lhs.getKind() == SqlKind.GREATER_THAN_OR_EQUAL
+            && rhs.getKind() == SqlKind.LESS_THAN_OR_EQUAL) {
           query = translateBetween(lhs, rhs);
-        } else if (lhs.getKind() == SqlKind.LESS_THAN_OR_EQUAL && rhs.getKind() == SqlKind.GREATER_THAN_OR_EQUAL) {
+        } else if (lhs.getKind() == SqlKind.LESS_THAN_OR_EQUAL
+            && rhs.getKind() == SqlKind.GREATER_THAN_OR_EQUAL) {
           // just swap the nodes
           query = translateBetween(rhs, lhs);
         }
@@ -153,7 +154,13 @@ class SolrFilter extends Filter implements SolrRel {
       String fieldName = gte.getKey();
       String query = null;
       if (fieldName.equals(lte.getKey()) && compareRexLiteral(gte.right, lte.right) < 0) {
-        query = fieldName + ":[" + toSolrLiteral(gte.getValue()) + " TO " + toSolrLiteral(lte.getValue()) + "]";
+        query =
+            fieldName
+                + ":["
+                + toSolrLiteral(gte.getValue())
+                + " TO "
+                + toSolrLiteral(lte.getValue())
+                + "]";
       }
 
       return query;
@@ -189,7 +196,7 @@ class SolrFilter extends Filter implements SolrRel {
       for (RexNode node : RelOptUtil.disjunctions(condition)) {
         String orQuery = translateMatch(node);
         if (orQuery.startsWith("-")) {
-          orQuery = "(*:* "+orQuery+")";
+          orQuery = "(*:* " + orQuery + ")";
         }
         ors.add(orQuery);
       }
@@ -204,11 +211,10 @@ class SolrFilter extends Filter implements SolrRel {
       List<RexNode> nots = new ArrayList<>();
       RelOptUtil.decomposeConjunction(node0, ands, nots);
 
-
       for (RexNode node : ands) {
         String andQuery = translateMatch(node);
         if (andQuery.startsWith("-")) {
-          andQuery = "(*:* "+andQuery+")";
+          andQuery = "(*:* " + andQuery + ")";
         }
         andStrings.add(andQuery);
       }
@@ -233,7 +239,10 @@ class SolrFilter extends Filter implements SolrRel {
       boolean wrappedQuotes = false;
       if (!terms.startsWith("(") && !terms.startsWith("[") && !terms.startsWith("{")) {
         // restore the * and ? after escaping
-        terms = "\"" + ClientUtils.escapeQueryChars(terms).replace("\\*", "*").replace("\\?", "?") + "\"";
+        terms =
+            "\""
+                + ClientUtils.escapeQueryChars(terms).replace("\\*", "*").replace("\\?", "?")
+                + "\"";
         wrappedQuotes = true;
       }
 
@@ -245,7 +254,10 @@ class SolrFilter extends Filter implements SolrRel {
       final SqlKind kind = node.getKind();
       if (kind == SqlKind.NOT) {
         RexNode negated = ((RexCall) node).getOperands().get(0);
-        return "-" + (negated.getKind() == SqlKind.LIKE ? translateLike(negated) : translateMatch(negated));
+        return "-"
+            + (negated.getKind() == SqlKind.LIKE
+                ? translateLike(negated)
+                : translateMatch(negated));
       }
 
       Pair<String, RexLiteral> binaryTranslated = getFieldValuePair(node);
@@ -298,7 +310,9 @@ class SolrFilter extends Filter implements SolrRel {
       Object value2 = literal.getValue2();
       SqlTypeName typeName = literal.getTypeName();
       final String solrLiteral;
-      if (value2 instanceof Long && (typeName == SqlTypeName.TIMESTAMP || typeName == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)) {
+      if (value2 instanceof Long
+          && (typeName == SqlTypeName.TIMESTAMP
+              || typeName == SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)) {
         // return as an ISO-8601 timestamp
         solrLiteral = Instant.ofEpochMilli((Long) value2).toString();
       } else {
@@ -312,8 +326,11 @@ class SolrFilter extends Filter implements SolrRel {
     private String toSolrLiteralForEquals(RexLiteral literal, SqlTypeName fieldTypeName) {
       Object value2 = literal.getValue2();
       final String solrLiteral;
-      // oddly, for = criteria with a timestamp field, Calcite passes us a String instead of a Long as it does with other operators like >
-      if (value2 instanceof String && fieldTypeName == SqlTypeName.TIMESTAMP && CALCITE_TIMESTAMP_REGEX.matcher((String) value2).matches()) {
+      // oddly, for = criteria with a timestamp field, Calcite passes us a String instead of a Long
+      // as it does with other operators like >
+      if (value2 instanceof String
+          && fieldTypeName == SqlTypeName.TIMESTAMP
+          && CALCITE_TIMESTAMP_REGEX.matcher((String) value2).matches()) {
         String timestamp = ((String) value2).replace(' ', 'T').replace("'", "");
         if (Character.isDigit(timestamp.charAt(timestamp.length() - 1))) {
           timestamp += "Z";
@@ -331,7 +348,8 @@ class SolrFilter extends Filter implements SolrRel {
       }
 
       RexCall call = (RexCall) node;
-      Pair<String, RexLiteral> binaryTranslated = call.getOperands().size() == 2 ? translateBinary(call) : null;
+      Pair<String, RexLiteral> binaryTranslated =
+          call.getOperands().size() == 2 ? translateBinary(call) : null;
       if (binaryTranslated == null) {
         throw new AssertionError("unsupported predicate expression: " + node);
       }
@@ -339,9 +357,7 @@ class SolrFilter extends Filter implements SolrRel {
       return binaryTranslated;
     }
 
-    /**
-     * Translates a call to a binary operator, reversing arguments if necessary.
-     */
+    /** Translates a call to a binary operator, reversing arguments if necessary. */
     protected Pair<String, RexLiteral> translateBinary(RexCall call) {
       List<RexNode> operands = call.getOperands();
       if (operands.size() != 2) {
@@ -363,7 +379,8 @@ class SolrFilter extends Filter implements SolrRel {
       }
 
       if (left.getKind() == SqlKind.CAST && right.getKind() == SqlKind.CAST) {
-        return translateBinary2(((RexCall) left).operands.get(0), ((RexCall) right).operands.get(0));
+        return translateBinary2(
+            ((RexCall) left).operands.get(0), ((RexCall) right).operands.get(0));
       }
 
       // for WHERE clause like: pdatex >= '2021-07-13T15:12:10.037Z'
@@ -377,9 +394,7 @@ class SolrFilter extends Filter implements SolrRel {
       throw new AssertionError("cannot translate call " + call);
     }
 
-    /**
-     * Translates a call to a binary operator. Returns whether successful.
-     */
+    /** Translates a call to a binary operator. Returns whether successful. */
     protected Pair<String, RexLiteral> translateBinary2(RexNode left, RexNode right) {
       if (log.isDebugEnabled()) {
         log.debug("translateBinary2 left={} right={}", left, right);
@@ -399,19 +414,17 @@ class SolrFilter extends Filter implements SolrRel {
           return new Pair<>(name, rightLiteral);
         case CAST:
           return translateBinary2(((RexCall) left).operands.get(0), right);
-//        case OTHER_FUNCTION:
-//          String itemName = SolrRules.isItem((RexCall) left);
-//          if (itemName != null) {
-//            return translateOp2(op, itemName, rightLiteral);
-//          }
+          //        case OTHER_FUNCTION:
+          //          String itemName = SolrRules.isItem((RexCall) left);
+          //          if (itemName != null) {
+          //            return translateOp2(op, itemName, rightLiteral);
+          //          }
         default:
           return null;
       }
     }
 
-    /**
-     * A search node can be an IN or NOT IN clause or a BETWEEN
-     */
+    /** A search node can be an IN or NOT IN clause or a BETWEEN */
     protected String translateSearch(RexNode condition) {
       final String fieldName = getSolrFieldName(condition);
 
@@ -440,15 +453,20 @@ class SolrFilter extends Filter implements SolrRel {
       }
 
       // don't know how to handle this search!
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unsupported search filter: " + condition);
+      throw new SolrException(
+          SolrException.ErrorCode.SERVER_ERROR, "Unsupported search filter: " + condition);
     }
 
     protected String toOrSetOnSameField(RexCall search) {
-      String orClause = search.operands.stream().map(n -> {
-        RexCall next = (RexCall) n;
-        RexLiteral lit = (RexLiteral) next.getOperands().get(1);
-        return "\"" + toSolrLiteral(lit) + "\"";
-      }).collect(Collectors.joining(" OR "));
+      String orClause =
+          search.operands.stream()
+              .map(
+                  n -> {
+                    RexCall next = (RexCall) n;
+                    RexLiteral lit = (RexLiteral) next.getOperands().get(1);
+                    return "\"" + toSolrLiteral(lit) + "\"";
+                  })
+              .collect(Collectors.joining(" OR "));
       return "(" + orClause + ")";
     }
 
@@ -458,7 +476,9 @@ class SolrFilter extends Filter implements SolrRel {
       if (left instanceof RexInputRef) {
         return fieldNames.get(((RexInputRef) left).getIndex());
       }
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Expected Solr field name for " + call.getKind() + " but found " + left);
+      throw new SolrException(
+          SolrException.ErrorCode.SERVER_ERROR,
+          "Expected Solr field name for " + call.getKind() + " but found " + left);
     }
   }
 
@@ -466,7 +486,8 @@ class SolrFilter extends Filter implements SolrRel {
 
     private final Map<String, String> reverseAggMappings;
 
-    HavingTranslator(List<String> fieldNames, Map<String, String> reverseAggMappings, RexBuilder builder) {
+    HavingTranslator(
+        List<String> fieldNames, Map<String, String> reverseAggMappings, RexBuilder builder) {
       super(fieldNames, builder);
       this.reverseAggMappings = reverseAggMappings;
     }
@@ -530,7 +551,6 @@ class SolrFilter extends Filter implements SolrRel {
       }
       builder.append(")");
 
-
       if (!nots.isEmpty()) {
         for (RexNode node : nots) {
           notStrings.add(translateMatch(node));
@@ -552,9 +572,7 @@ class SolrFilter extends Filter implements SolrRel {
       }
     }
 
-    /**
-     * Translates a call to a binary operator, reversing arguments if necessary.
-     */
+    /** Translates a call to a binary operator, reversing arguments if necessary. */
     @Override
     protected Pair<String, RexLiteral> translateBinary(RexCall call) {
       List<RexNode> operands = call.getOperands();
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrMethod.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrMethod.java
index 6604822..0450ef9 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrMethod.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrMethod.java
@@ -16,26 +16,24 @@
  */
 package org.apache.solr.handler.sql;
 
-import org.apache.calcite.linq4j.tree.Types;
-
 import java.lang.reflect.Method;
 import java.util.List;
+import org.apache.calcite.linq4j.tree.Types;
 
-/**
- * Builtin methods in the Solr adapter.
- */
+/** Builtin methods in the Solr adapter. */
 enum SolrMethod {
-  SOLR_QUERYABLE_QUERY(SolrTable.SolrQueryable.class,
-                       "query",
-                       List.class,
-                       String.class,
-                       List.class,
-                       List.class,
-                       List.class,
-                       String.class,
-                       String.class,
-                       String.class,
-                       String.class);
+  SOLR_QUERYABLE_QUERY(
+      SolrTable.SolrQueryable.class,
+      "query",
+      List.class,
+      String.class,
+      List.class,
+      List.class,
+      List.class,
+      String.class,
+      String.class,
+      String.class,
+      String.class);
 
   public final Method method;
 
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java
index bd36ba8..23edfeb 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrProject.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.handler.sql;
 
+import java.util.List;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
@@ -28,21 +29,22 @@ import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.util.Pair;
 
-import java.util.List;
-
-/**
- * Implementation of {@link org.apache.calcite.rel.core.Project} relational expression in Solr.
- */
+/** Implementation of {@link org.apache.calcite.rel.core.Project} relational expression in Solr. */
 class SolrProject extends Project implements SolrRel {
-  SolrProject(RelOptCluster cluster, RelTraitSet traitSet,
-              RelNode input, List<? extends RexNode> projects, RelDataType rowType) {
+  SolrProject(
+      RelOptCluster cluster,
+      RelTraitSet traitSet,
+      RelNode input,
+      List<? extends RexNode> projects,
+      RelDataType rowType) {
     super(cluster, traitSet, input, projects, rowType);
     assert getConvention() == SolrRel.CONVENTION;
     assert getConvention() == input.getConvention();
   }
 
   @Override
-  public Project copy(RelTraitSet traitSet, RelNode input, List<RexNode> projects, RelDataType rowType) {
+  public Project copy(
+      RelTraitSet traitSet, RelNode input, List<RexNode> projects, RelDataType rowType) {
     return new SolrProject(getCluster(), traitSet, input, projects, rowType);
   }
 
@@ -53,8 +55,10 @@ class SolrProject extends Project implements SolrRel {
 
   public void implement(Implementor implementor) {
     implementor.visitChild(0, getInput());
-    final SolrRules.RexToSolrTranslator translator = new SolrRules.RexToSolrTranslator(
-        (JavaTypeFactory) getCluster().getTypeFactory(), SolrRules.solrFieldNames(getInput().getRowType()));
+    final SolrRules.RexToSolrTranslator translator =
+        new SolrRules.RexToSolrTranslator(
+            (JavaTypeFactory) getCluster().getTypeFactory(),
+            SolrRules.solrFieldNames(getInput().getRowType()));
     for (Pair<RexNode, String> pair : getNamedProjects()) {
       final String name = pair.right;
       final String expr = pair.left.accept(translator);
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRel.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRel.java
index db34c43..23e19f3 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRel.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRel.java
@@ -16,25 +16,25 @@
  */
 package org.apache.solr.handler.sql;
 
+import static org.apache.solr.handler.sql.SolrAggregate.solrAggMetricId;
+
+import java.util.*;
 import org.apache.calcite.plan.Convention;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.util.Pair;
 
-import java.util.*;
-
-import static org.apache.solr.handler.sql.SolrAggregate.solrAggMetricId;
-
-/**
- * Relational expression that uses Solr calling convention.
- */
+/** Relational expression that uses Solr calling convention. */
 interface SolrRel extends RelNode {
   void implement(Implementor implementor);
 
   /** Calling convention for relational operations that occur in Solr. */
   Convention CONVENTION = new Convention.Impl("Solr", SolrRel.class);
 
-  /** Callback for the implementation process that converts a tree of {@link SolrRel} nodes into a Solr query. */
+  /**
+   * Callback for the implementation process that converts a tree of {@link SolrRel} nodes into a
+   * Solr query.
+   */
   class Implementor {
     final Map<String, String> fieldMappings = new HashMap<>();
     final Map<String, String> reverseAggMappings = new HashMap<>();
@@ -51,15 +51,15 @@ interface SolrRel extends RelNode {
     SolrTable solrTable;
 
     void addFieldMapping(String key, String val, boolean overwrite) {
-      if(key != null) {
-        if(overwrite || !fieldMappings.containsKey(key)) {
+      if (key != null) {
+        if (overwrite || !fieldMappings.containsKey(key)) {
           this.fieldMappings.put(key, val);
         }
       }
     }
 
     void addReverseAggMapping(String key, String val) {
-      if(key != null && !reverseAggMappings.containsKey(key)) {
+      if (key != null && !reverseAggMappings.containsKey(key)) {
         this.reverseAggMappings.put(key, val);
       }
     }
@@ -86,7 +86,7 @@ interface SolrRel extends RelNode {
       column = this.fieldMappings.getOrDefault(column, column);
       this.metricPairs.add(new Pair<>(metric, column));
 
-      if(outName != null) {
+      if (outName != null) {
         this.addFieldMapping(outName, solrAggMetricId(metric, column), true);
       }
     }
@@ -95,7 +95,6 @@ interface SolrRel extends RelNode {
       this.havingPredicate = havingPredicate;
     }
 
-
     void setLimit(String limit) {
       limitValue = limit;
     }
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRules.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRules.java
index 8b65184..3358afb 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRules.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrRules.java
@@ -16,6 +16,10 @@
  */
 package org.apache.solr.handler.sql;
 
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.plan.*;
 import org.apache.calcite.rel.RelCollations;
@@ -34,22 +38,13 @@ import org.apache.calcite.rex.RexVisitorImpl;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.validate.SqlValidatorUtil;
 
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Predicate;
-
-/**
- * Rules and relational operators for
- * {@link SolrRel#CONVENTION}
- * calling convention.
- */
+/** Rules and relational operators for {@link SolrRel#CONVENTION} calling convention. */
 class SolrRules {
   static final RelOptRule[] RULES = {
-      SolrSortRule.SORT_RULE,
-      SolrFilterRule.FILTER_RULE,
-      SolrProjectRule.PROJECT_RULE,
-      SolrAggregateRule.AGGREGATE_RULE,
+    SolrSortRule.SORT_RULE,
+    SolrFilterRule.FILTER_RULE,
+    SolrProjectRule.PROJECT_RULE,
+    SolrAggregateRule.AGGREGATE_RULE,
   };
 
   static List<String> solrFieldNames(final RelDataType rowType) {
@@ -64,7 +59,8 @@ class SolrRules {
           public int size() {
             return rowType.getFieldCount();
           }
-        }, true);
+        },
+        true);
   }
 
   /** Translator from {@link RexNode} to strings in Solr's expression language. */
@@ -102,7 +98,9 @@ class SolrRules {
     }
   }
 
-  /** Base class for planner rules that convert a relational expression to Solr calling convention. */
+  /**
+   * Base class for planner rules that convert a relational expression to Solr calling convention.
+   */
   abstract static class SolrConverterRule extends ConverterRule {
     final Convention out = SolrRel.CONVENTION;
 
@@ -110,14 +108,13 @@ class SolrRules {
       this(clazz, relNode -> true, description);
     }
 
-    <R extends RelNode> SolrConverterRule(Class<R> clazz, Predicate<RelNode> predicate, String description) {
+    <R extends RelNode> SolrConverterRule(
+        Class<R> clazz, Predicate<RelNode> predicate, String description) {
       super(clazz, Convention.NONE, SolrRel.CONVENTION, description);
     }
   }
 
-  /**
-   * Rule to convert a {@link LogicalFilter} to a {@link SolrFilter}.
-   */
+  /** Rule to convert a {@link LogicalFilter} to a {@link SolrFilter}. */
   private static class SolrFilterRule extends SolrConverterRule {
     private static boolean isNotFilterByExpr(List<RexNode> rexNodes, List<String> fieldNames) {
 
@@ -128,14 +125,16 @@ class SolrRules {
         if (rexNode instanceof RexCall) {
           result = result && isNotFilterByExpr(((RexCall) rexNode).getOperands(), fieldNames);
         } else if (rexNode instanceof RexInputRef) {
-          result = result && !fieldNames.get(((RexInputRef) rexNode).getIndex()).startsWith("EXPR$");
+          result =
+              result && !fieldNames.get(((RexInputRef) rexNode).getIndex()).startsWith("EXPR$");
         }
       }
       return result;
     }
 
     private static boolean filter(RelNode relNode) {
-      List<RexNode> filterOperands = ((RexCall) ((LogicalFilter) relNode).getCondition()).getOperands();
+      List<RexNode> filterOperands =
+          ((RexCall) ((LogicalFilter) relNode).getCondition()).getOperands();
       return isNotFilterByExpr(filterOperands, SolrRules.solrFieldNames(relNode.getRowType()));
     }
 
@@ -149,16 +148,11 @@ class SolrRules {
       final LogicalFilter filter = (LogicalFilter) rel;
       final RelTraitSet traitSet = filter.getTraitSet().replace(out);
       return new SolrFilter(
-          rel.getCluster(),
-          traitSet,
-          convert(filter.getInput(), out),
-          filter.getCondition());
+          rel.getCluster(), traitSet, convert(filter.getInput(), out), filter.getCondition());
     }
   }
 
-  /**
-   * Rule to convert a {@link LogicalProject} to a {@link SolrProject}.
-   */
+  /** Rule to convert a {@link LogicalProject} to a {@link SolrProject}. */
   private static class SolrProjectRule extends SolrConverterRule {
     private static final SolrProjectRule PROJECT_RULE = new SolrProjectRule();
 
@@ -171,17 +165,11 @@ class SolrRules {
       final RelNode converted = convert(project.getInput(), out);
       final RelTraitSet traitSet = project.getTraitSet().replace(out);
       return new SolrProject(
-          rel.getCluster(),
-          traitSet,
-          converted,
-          project.getProjects(),
-          project.getRowType());
+          rel.getCluster(), traitSet, converted, project.getProjects(), project.getRowType());
     }
   }
 
-  /**
-   * Rule to convert a {@link LogicalSort} to a {@link SolrSort}.
-   */
+  /** Rule to convert a {@link LogicalSort} to a {@link SolrSort}. */
   private static class SolrSortRule extends SolrConverterRule {
     static final SolrSortRule SORT_RULE = new SolrSortRule(LogicalSort.class, "SolrSortRule");
 
@@ -203,13 +191,11 @@ class SolrRules {
     }
   }
 
-  /**
-   * Rule to convert an {@link LogicalAggregate} to an {@link SolrAggregate}.
-   */
+  /** Rule to convert an {@link LogicalAggregate} to an {@link SolrAggregate}. */
   private static class SolrAggregateRule extends SolrConverterRule {
-//    private static final Predicate<RelNode> AGGREGATE_PREDICTE = relNode ->
-//        Aggregate.IS_SIMPLE.apply(((LogicalAggregate)relNode));// &&
-//        !((LogicalAggregate)relNode).containsDistinctCall();
+    //    private static final Predicate<RelNode> AGGREGATE_PREDICTE = relNode ->
+    //        Aggregate.IS_SIMPLE.apply(((LogicalAggregate)relNode));// &&
+    //        !((LogicalAggregate)relNode).containsDistinctCall();
 
     private static final RelOptRule AGGREGATE_RULE = new SolrAggregateRule();
 
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSchema.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSchema.java
index 36f1222..f354f8d 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSchema.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSchema.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.handler.sql;
 
+import com.google.common.collect.ImmutableMap;
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.Date;
@@ -28,8 +29,6 @@ import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-
-import com.google.common.collect.ImmutableMap;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rel.type.RelDataTypeImpl;
@@ -139,9 +138,13 @@ class SolrSchema extends AbstractSchema implements Closeable {
   }
 
   private boolean isStoredIndexedOrDocValues(final EnumSet<FieldFlag> flags) {
-    // if a field is not stored but indexed, then we should still include it in the table schema so that users
+    // if a field is not stored but indexed, then we should still include it in the table schema so
+    // that users
     // can filter on it, they just won't be able to return it as a field
-    return flags != null && (flags.contains(FieldFlag.DOC_VALUES) || flags.contains(FieldFlag.STORED) || flags.contains(FieldFlag.INDEXED));
+    return flags != null
+        && (flags.contains(FieldFlag.DOC_VALUES)
+            || flags.contains(FieldFlag.STORED)
+            || flags.contains(FieldFlag.INDEXED));
   }
 
   private EnumSet<FieldFlag> getFieldFlags(final LukeResponse.FieldInfo luceneFieldInfo) {
@@ -169,20 +172,31 @@ class SolrSchema extends AbstractSchema implements Closeable {
     // proto-type will be copied into a real type factory.
     final RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
     final RelDataTypeFactory.Builder fieldInfo = typeFactory.builder();
-    
+
     // Get fields that have data, including dynamic field instances
     Map<String, LukeResponse.FieldInfo> fieldsInUseMap = getFieldInfo(collection);
 
     LukeResponse schema = getSchema(collection);
-    Map<String, LukeResponse.FieldInfo> storedFields = schema.getFieldInfo().entrySet().stream()
+    Map<String, LukeResponse.FieldInfo> storedFields =
+        schema.getFieldInfo().entrySet().stream()
             .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
-    // merge the actual fields in use returned by Luke with the declared fields in the schema that are empty
-    Map<String, LukeResponse.FieldInfo> combinedFields = Stream.of(fieldsInUseMap, storedFields)
+    // merge the actual fields in use returned by Luke with the declared fields in the schema that
+    // are empty
+    Map<String, LukeResponse.FieldInfo> combinedFields =
+        Stream.of(fieldsInUseMap, storedFields)
             .flatMap(map -> map.entrySet().stream())
-            .filter(e -> isStoredIndexedOrDocValues(getFieldFlags(e.getValue()))) // Only want fields that are stored, indexed, or have docValues enabled
-            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, TreeMap::new));
+            .filter(
+                e ->
+                    isStoredIndexedOrDocValues(
+                        getFieldFlags(
+                            e.getValue()))) // Only want fields that are stored, indexed, or have
+            // docValues enabled
+            .collect(
+                Collectors.toMap(
+                    Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, TreeMap::new));
 
-    Map<String, Class<?>> javaClassForTypeMap = new HashMap<>(); // local cache for custom field types we've already resolved
+    Map<String, Class<?>> javaClassForTypeMap =
+        new HashMap<>(); // local cache for custom field types we've already resolved
 
     for (Map.Entry<String, LukeResponse.FieldInfo> entry : combinedFields.entrySet()) {
       LukeResponse.FieldInfo luceneFieldInfo = entry.getValue();
@@ -198,7 +212,8 @@ class SolrSchema extends AbstractSchema implements Closeable {
       // We have to pass multi-valued fields through Calcite as SQL Type ANY
       // Array doesn't work for aggregations! Calcite doesn't like GROUP BY on an ARRAY field
       // but Solr happily computes aggs on a multi-valued field, so we have a paradigm mis-match and
-      // ANY is the best way to retain use of operators on multi-valued fields while still being able
+      // ANY is the best way to retain use of operators on multi-valued fields while still being
+      // able
       // to GROUP BY and project the multi-valued fields in results
       EnumSet<FieldFlag> flags = getFieldFlags(luceneFieldInfo);
       if (flags != null && flags.contains(FieldFlag.MULTI_VALUED)) {
@@ -230,7 +245,8 @@ class SolrSchema extends AbstractSchema implements Closeable {
           default:
             Class<?> javaClass = javaClassForTypeMap.get(luceneFieldType);
             if (javaClass == null) {
-              javaClass = guessJavaClassForFieldType(schema.getFieldTypeInfo().get(luceneFieldType));
+              javaClass =
+                  guessJavaClassForFieldType(schema.getFieldTypeInfo().get(luceneFieldType));
               javaClassForTypeMap.put(luceneFieldType, javaClass);
             }
             type = typeFactory.createJavaType(javaClass);
@@ -248,11 +264,14 @@ class SolrSchema extends AbstractSchema implements Closeable {
     Class<?> typeClass = null;
     if (typeInfo != null && !typeInfo.isTokenized() && typeInfo.getClassName() != null) {
       try {
-        final Class<?> fieldTypeClass = getClass().getClassLoader().loadClass(typeInfo.getClassName());
+        final Class<?> fieldTypeClass =
+            getClass().getClassLoader().loadClass(typeInfo.getClassName());
         // a numeric type ... narrow down
-        if (IntValueFieldType.class.isAssignableFrom(fieldTypeClass) || LongValueFieldType.class.isAssignableFrom(fieldTypeClass)) {
+        if (IntValueFieldType.class.isAssignableFrom(fieldTypeClass)
+            || LongValueFieldType.class.isAssignableFrom(fieldTypeClass)) {
           typeClass = Long.class;
-        } else if (FloatValueFieldType.class.isAssignableFrom(fieldTypeClass) || DoubleValueFieldType.class.isAssignableFrom(fieldTypeClass)) {
+        } else if (FloatValueFieldType.class.isAssignableFrom(fieldTypeClass)
+            || DoubleValueFieldType.class.isAssignableFrom(fieldTypeClass)) {
           typeClass = Double.class;
         } else if (DateValueFieldType.class.isAssignableFrom(fieldTypeClass)) {
           typeClass = Date.class;
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java
index ca161ce..42ada8e 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrSort.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.handler.sql;
 
+import java.util.List;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -29,15 +30,16 @@ import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexNode;
 
-import java.util.List;
-
-/**
- * Implementation of {@link org.apache.calcite.rel.core.Sort} relational expression in Solr.
- */
+/** Implementation of {@link org.apache.calcite.rel.core.Sort} relational expression in Solr. */
 class SolrSort extends Sort implements SolrRel {
 
-  SolrSort(RelOptCluster cluster, RelTraitSet traitSet, RelNode child, RelCollation collation, RexNode offset,
-           RexNode fetch) {
+  SolrSort(
+      RelOptCluster cluster,
+      RelTraitSet traitSet,
+      RelNode child,
+      RelCollation collation,
+      RexNode offset,
+      RexNode fetch) {
     super(cluster, traitSet, child, collation, offset, fetch);
 
     assert getConvention() == SolrRel.CONVENTION;
@@ -50,7 +52,12 @@ class SolrSort extends Sort implements SolrRel {
   }
 
   @Override
-  public Sort copy(RelTraitSet traitSet, RelNode input, RelCollation newCollation, RexNode offset, RexNode fetch) {
+  public Sort copy(
+      RelTraitSet traitSet,
+      RelNode input,
+      RelCollation newCollation,
+      RexNode offset,
+      RexNode fetch) {
     return new SolrSort(getCluster(), traitSet, input, collation, offset, fetch);
   }
 
@@ -71,7 +78,6 @@ class SolrSort extends Sort implements SolrRel {
       }
     }
 
-
     if (fetch != null) {
       implementor.setLimit(((RexLiteral) fetch).getValue().toString());
     }
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTable.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTable.java
index 00d01b3..f376951 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTable.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTable.java
@@ -16,6 +16,13 @@
  */
 package org.apache.solr.handler.sql;
 
+import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.APPROX_COUNT_DISTINCT;
+import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.COUNT_DISTINCT;
+import static org.apache.solr.common.params.CommonParams.SORT;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
 import org.apache.calcite.adapter.java.AbstractQueryableTable;
 import org.apache.calcite.linq4j.*;
 import org.apache.calcite.plan.RelOptCluster;
@@ -36,7 +43,6 @@ import org.apache.solr.client.solrj.io.eq.FieldEqualitor;
 import org.apache.solr.client.solrj.io.eq.MultipleFieldEqualitor;
 import org.apache.solr.client.solrj.io.eq.StreamEqualitor;
 import org.apache.solr.client.solrj.io.eval.AndEvaluator;
-import org.apache.solr.client.solrj.io.eval.RecursiveBooleanEvaluator;
 import org.apache.solr.client.solrj.io.eval.EqualToEvaluator;
 import org.apache.solr.client.solrj.io.eval.GreaterThanEqualToEvaluator;
 import org.apache.solr.client.solrj.io.eval.GreaterThanEvaluator;
@@ -45,6 +51,7 @@ import org.apache.solr.client.solrj.io.eval.LessThanEvaluator;
 import org.apache.solr.client.solrj.io.eval.NotEvaluator;
 import org.apache.solr.client.solrj.io.eval.OrEvaluator;
 import org.apache.solr.client.solrj.io.eval.RawValueEvaluator;
+import org.apache.solr.client.solrj.io.eval.RecursiveBooleanEvaluator;
 import org.apache.solr.client.solrj.io.stream.*;
 import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionParser;
 import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
@@ -52,17 +59,7 @@ import org.apache.solr.client.solrj.io.stream.metrics.*;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 
-import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.APPROX_COUNT_DISTINCT;
-import static org.apache.solr.client.solrj.io.stream.metrics.CountDistinctMetric.COUNT_DISTINCT;
-import static org.apache.solr.common.params.CommonParams.SORT;
-
-/**
- * Table based on a Solr collection
- */
+/** Table based on a Solr collection */
 class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   private static final String DEFAULT_QUERY = "*:*";
 
@@ -86,29 +83,40 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     }
     return protoRowType.apply(typeFactory);
   }
-  
-  private Enumerable<Object> query(final Properties properties) {
-    return query(properties, Collections.emptyList(), null, Collections.emptyList(), Collections.emptyList(),
-        Collections.emptyList(), null, null, null, null);
-  }
 
-  /** Executes a Solr query on the underlying table.
+  private Enumerable<Object> query(final Properties properties) {
+    return query(
+        properties,
+        Collections.emptyList(),
+        null,
+        Collections.emptyList(),
+        Collections.emptyList(),
+        Collections.emptyList(),
+        null,
+        null,
+        null,
+        null);
+  }
+
+  /**
+   * Executes a Solr query on the underlying table.
    *
    * @param properties Connections properties
    * @param fields List of fields to project
    * @param query A string for the query
    * @return Enumerator of results
    */
-  private Enumerable<Object> query(final Properties properties,
-                                   final List<Map.Entry<String, Class<?>>> fields,
-                                   final String query,
-                                   final List<Pair<String, String>> orders,
-                                   final List<String> buckets,
-                                   final List<Pair<String, String>> metricPairs,
-                                   final String limit,
-                                   final String negativeQuery,
-                                   final String havingPredicate,
-                                   final String offset) {
+  private Enumerable<Object> query(
+      final Properties properties,
+      final List<Map.Entry<String, Class<?>>> fields,
+      final String query,
+      final List<Pair<String, String>> orders,
+      final List<String> buckets,
+      final List<Pair<String, String>> metricPairs,
+      final String limit,
+      final String negativeQuery,
+      final String havingPredicate,
+      final String offset) {
     // SolrParams should be a ModifiableParams instead of a map
     boolean mapReduce = "map_reduce".equals(properties.getProperty("aggregationMode"));
     boolean negative = Boolean.parseBoolean(negativeQuery);
@@ -118,7 +126,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     if (query == null) {
       q = DEFAULT_QUERY;
     } else {
-      if(negative) {
+      if (negative) {
         q = DEFAULT_QUERY + " AND " + query;
       } else {
         q = query;
@@ -131,30 +139,34 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       if (metricPairs.isEmpty() && buckets.isEmpty()) {
         tupleStream = handleSelect(zk, collection, q, fields, orders, limit, offset);
       } else {
-        if(buckets.isEmpty()) {
+        if (buckets.isEmpty()) {
           tupleStream = handleStats(zk, collection, q, metricPairs, fields);
         } else {
-          if(mapReduce) {
-            tupleStream = handleGroupByMapReduce(zk,
-                                                 collection,
-                                                 properties,
-                                                 fields,
-                                                 q,
-                                                 orders,
-                                                 buckets,
-                                                 metricPairs,
-                                                 limit,
-                                                 havingPredicate);
+          if (mapReduce) {
+            tupleStream =
+                handleGroupByMapReduce(
+                    zk,
+                    collection,
+                    properties,
+                    fields,
+                    q,
+                    orders,
+                    buckets,
+                    metricPairs,
+                    limit,
+                    havingPredicate);
           } else {
-            tupleStream = handleGroupByFacet(zk,
-                                             collection,
-                                             fields,
-                                             q,
-                                             orders,
-                                             buckets,
-                                             metricPairs,
-                                             limit,
-                                             havingPredicate);
+            tupleStream =
+                handleGroupByFacet(
+                    zk,
+                    collection,
+                    fields,
+                    q,
+                    orders,
+                    buckets,
+                    metricPairs,
+                    limit,
+                    havingPredicate);
           }
         }
       }
@@ -176,15 +188,16 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     };
   }
 
-  private static StreamComparator bucketSortComp(List<Bucket> buckets, Map<String,String> dirs) {
+  private static StreamComparator bucketSortComp(List<Bucket> buckets, Map<String, String> dirs) {
     FieldComparator[] comps = new FieldComparator[buckets.size()];
-    for(int i=0; i<buckets.size(); i++) {
-      ComparatorOrder comparatorOrder = ComparatorOrder.fromString(dirs.get(buckets.get(i).toString()));
+    for (int i = 0; i < buckets.size(); i++) {
+      ComparatorOrder comparatorOrder =
+          ComparatorOrder.fromString(dirs.get(buckets.get(i).toString()));
       String sortKey = buckets.get(i).toString();
       comps[i] = new FieldComparator(sortKey, comparatorOrder);
     }
 
-    if(comps.length == 1) {
+    if (comps.length == 1) {
       return comps[0];
     } else {
       return new MultipleFieldComparator(comps);
@@ -193,13 +206,13 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
   private static StreamComparator bucketSortComp(Bucket[] buckets, String dir) {
     FieldComparator[] comps = new FieldComparator[buckets.length];
-    for(int i=0; i<buckets.length; i++) {
+    for (int i = 0; i < buckets.length; i++) {
       ComparatorOrder comparatorOrder = ascDescComp(dir);
       String sortKey = buckets[i].toString();
       comps[i] = new FieldComparator(sortKey, comparatorOrder);
     }
 
-    if(comps.length == 1) {
+    if (comps.length == 1) {
       return comps[0];
     } else {
       return new MultipleFieldComparator(comps);
@@ -213,7 +226,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
   private StreamComparator getComp(List<? extends Map.Entry<String, String>> orders) {
     FieldComparator[] comps = new FieldComparator[orders.size()];
-    for(int i = 0; i < orders.size(); i++) {
+    for (int i = 0; i < orders.size(); i++) {
       Map.Entry<String, String> order = orders.get(i);
       String direction = getSortDirection(order);
       ComparatorOrder comparatorOrder = ComparatorOrder.fromString(direction);
@@ -221,7 +234,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       comps[i] = new FieldComparator(sortKey, comparatorOrder);
     }
 
-    if(comps.length == 1) {
+    if (comps.length == 1) {
       return comps[0];
     } else {
       return new MultipleFieldComparator(comps);
@@ -231,7 +244,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   private List<Metric> buildMetrics(List<Pair<String, String>> metricPairs, boolean ifEmptyCount) {
     List<Metric> metrics = new ArrayList<>(metricPairs.size());
     metrics.addAll(metricPairs.stream().map(this::getMetric).collect(Collectors.toList()));
-    if(metrics.size() == 0 && ifEmptyCount) {
+    if (metrics.size() == 0 && ifEmptyCount) {
       metrics.add(new CountMetric());
     }
     return metrics;
@@ -259,25 +272,27 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     }
   }
 
-  private TupleStream handleSelect(String zk,
-                                   String collection,
-                                   String query,
-                                   List<Map.Entry<String, Class<?>>> fields,
-                                   List<Pair<String, String>> orders,
-                                   String limit,
-                                   String offset) throws IOException {
+  private TupleStream handleSelect(
+      String zk,
+      String collection,
+      String query,
+      List<Map.Entry<String, Class<?>>> fields,
+      List<Pair<String, String>> orders,
+      String limit,
+      String offset)
+      throws IOException {
 
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.add(CommonParams.Q, query);
 
-    //Validate the fields
-    for(Map.Entry<String, Class<?>> entry : fields) {
+    // Validate the fields
+    for (Map.Entry<String, Class<?>> entry : fields) {
       String fname = entry.getKey();
-      if(limit == null && "score".equals(fname)) {
+      if (limit == null && "score".equals(fname)) {
         throw new IOException("score is not a valid field for unlimited queries.");
       }
 
-      if(fname.contains("*")) {
+      if (fname.contains("*")) {
         throw new IOException("* is not supported for column selection.");
       }
     }
@@ -289,7 +304,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     } else {
       if (limit == null) {
         params.add(SORT, "_version_ desc");
-        fl = fl+",_version_";
+        fl = fl + ",_version_";
       } else {
         params.add(SORT, "score desc");
         if (!fl.contains("score")) {
@@ -299,14 +314,16 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     }
 
     params.add(CommonParams.FL, fl);
-    
+
     if (offset != null && limit == null) {
-      throw new IOException("OFFSET without LIMIT not supported by Solr! Specify desired limit using 'FETCH NEXT <LIMIT> ROWS ONLY'");
+      throw new IOException(
+          "OFFSET without LIMIT not supported by Solr! Specify desired limit using 'FETCH NEXT <LIMIT> ROWS ONLY'");
     }
-    
+
     if (limit != null) {
       int limitInt = Integer.parseInt(limit);
-      // if there's an offset, then we need to fetch offset + limit rows from each shard and then sort accordingly
+      // if there's an offset, then we need to fetch offset + limit rows from each shard and then
+      // sort accordingly
       LimitStream limitStream;
       if (offset != null) {
         int offsetInt = Integer.parseInt(offset);
@@ -315,7 +332,11 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
         params.add(CommonParams.ROWS, String.valueOf(rows));
         // re-sort all the streams back from the shards
         StreamComparator streamSorter = new MultipleFieldComparator(getComps(orders));
-        limitStream = new LimitStream(new SortStream(new CloudSolrStream(zk, collection, params), streamSorter), limitInt, offsetInt);
+        limitStream =
+            new LimitStream(
+                new SortStream(new CloudSolrStream(zk, collection, params), streamSorter),
+                limitInt,
+                offsetInt);
       } else {
         params.add(CommonParams.ROWS, limit);
         limitStream = new LimitStream(new CloudSolrStream(zk, collection, params), limitInt);
@@ -329,8 +350,8 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
   private String getSort(List<Pair<String, String>> orders) {
     StringBuilder buf = new StringBuilder();
-    for(Pair<String, String> pair : orders) {
-      if(buf.length() > 0) {
+    for (Pair<String, String> pair : orders) {
+      if (buf.length() > 0) {
         buf.append(",");
       }
       buf.append(pair.getKey()).append(" ").append(pair.getValue());
@@ -347,9 +368,9 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
   private String getFields(List<Map.Entry<String, Class<?>>> fields) {
     StringBuilder buf = new StringBuilder();
-    for(Map.Entry<String, Class<?>> field : fields) {
+    for (Map.Entry<String, Class<?>> field : fields) {
 
-      if(buf.length() > 0) {
+      if (buf.length() > 0) {
         buf.append(",");
       }
 
@@ -361,30 +382,28 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
   private String getFields(Set<String> fieldSet) {
     StringBuilder buf = new StringBuilder();
-    for(String field : fieldSet) {
+    for (String field : fieldSet) {
 
-      if(buf.length() > 0) {
+      if (buf.length() > 0) {
         buf.append(",");
       }
 
-
       buf.append(field);
     }
 
     return buf.toString();
   }
 
-
   private Set<String> getFieldSet(Metric[] metrics, List<Map.Entry<String, Class<?>>> fields) {
     HashSet<String> set = new HashSet<>();
-    for(Metric metric : metrics) {
-      for(String column : metric.getColumns()) {
+    for (Metric metric : metrics) {
+      for (String column : metric.getColumns()) {
         set.add(column);
       }
     }
 
-    for(Map.Entry<String, Class<?>> field : fields) {
-      if(field.getKey().indexOf('(') == -1) {
+    for (Map.Entry<String, Class<?>> field : fields) {
+      if (field.getKey().indexOf('(') == -1) {
         set.add(field.getKey());
       }
     }
@@ -393,8 +412,8 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   }
 
   private static String getSortDirection(List<Pair<String, String>> orders) {
-    if(orders != null && orders.size() > 0) {
-      for(Pair<String,String> item : orders) {
+    if (orders != null && orders.size() > 0) {
+      for (Pair<String, String> item : orders) {
         return item.getValue();
       }
     }
@@ -405,8 +424,8 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   private static String bucketSort(Bucket[] buckets, String dir) {
     StringBuilder buf = new StringBuilder();
     boolean comma = false;
-    for(Bucket bucket : buckets) {
-      if(comma) {
+    for (Bucket bucket : buckets) {
+      if (comma) {
         buf.append(",");
       }
       buf.append(bucket.toString()).append(" ").append(dir);
@@ -419,8 +438,8 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   private static String getPartitionKeys(Bucket[] buckets) {
     StringBuilder buf = new StringBuilder();
     boolean comma = false;
-    for(Bucket bucket : buckets) {
-      if(comma) {
+    for (Bucket bucket : buckets) {
+      if (comma) {
         buf.append(",");
       }
       buf.append(bucket.toString());
@@ -429,20 +448,21 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     return buf.toString();
   }
 
-  private static boolean sortsEqual(Bucket[] buckets, String direction, List<Pair<String, String>> orders) {
+  private static boolean sortsEqual(
+      Bucket[] buckets, String direction, List<Pair<String, String>> orders) {
 
-    if(buckets.length != orders.size()) {
+    if (buckets.length != orders.size()) {
       return false;
     }
 
-    for(int i=0; i< buckets.length; i++) {
+    for (int i = 0; i < buckets.length; i++) {
       Bucket bucket = buckets[i];
       Pair<String, String> order = orders.get(i);
-      if(!bucket.toString().equals(order.getKey())) {
+      if (!bucket.toString().equals(order.getKey())) {
         return false;
       }
 
-      if(!order.getValue().toLowerCase(Locale.ROOT).contains(direction.toLowerCase(Locale.ROOT))) {
+      if (!order.getValue().toLowerCase(Locale.ROOT).contains(direction.toLowerCase(Locale.ROOT))) {
         return false;
       }
     }
@@ -450,19 +470,21 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     return true;
   }
 
-  private TupleStream handleGroupByMapReduce(String zk,
-                                             String collection,
-                                             Properties properties,
-                                             final List<Map.Entry<String, Class<?>>> fields,
-                                             final String query,
-                                             final List<Pair<String, String>> orders,
-                                             final List<String> _buckets,
-                                             final List<Pair<String, String>> metricPairs,
-                                             final String limit,
-                                             final String havingPredicate) throws IOException {
+  private TupleStream handleGroupByMapReduce(
+      String zk,
+      String collection,
+      Properties properties,
+      final List<Map.Entry<String, Class<?>>> fields,
+      final String query,
+      final List<Pair<String, String>> orders,
+      final List<String> _buckets,
+      final List<Pair<String, String>> metricPairs,
+      final String limit,
+      final String havingPredicate)
+      throws IOException {
 
     Map<String, Class<?>> fmap = new HashMap<>();
-    for(Map.Entry<String, Class<?>> entry : fields) {
+    for (Map.Entry<String, Class<?>> entry : fields) {
       fmap.put(entry.getKey(), entry.getValue());
     }
 
@@ -471,12 +493,13 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     Bucket[] buckets = buildBuckets(_buckets, fields);
     Metric[] metrics = buildMetrics(metricPairs, false).toArray(new Metric[0]);
 
-    if(metrics.length == 0) {
-      return handleSelectDistinctMapReduce(zk, collection, properties, fields, query, orders, buckets, limit);
+    if (metrics.length == 0) {
+      return handleSelectDistinctMapReduce(
+          zk, collection, properties, fields, query, orders, buckets, limit);
     } else {
-      for(Metric metric : metrics) {
+      for (Metric metric : metrics) {
         Class<?> c = fmap.get(metric.getIdentifier());
-        if(Long.class.equals(c)) {
+        if (Long.class.equals(c)) {
           metric.outputLong = true;
         }
       }
@@ -484,7 +507,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
     Set<String> fieldSet = getFieldSet(metrics, fields);
 
-    if(metrics.length == 0) {
+    if (metrics.length == 0) {
       throw new IOException("Group by queries must include atleast one aggregate function.");
     }
 
@@ -497,10 +520,11 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     params.set(CommonParams.FL, fl);
     params.set(CommonParams.Q, query);
     params.set(CommonParams.WT, CommonParams.JAVABIN);
-    //Always use the /export handler for Group By Queries because it requires exporting full result sets.
+    // Always use the /export handler for Group By Queries because it requires exporting full result
+    // sets.
     params.set(CommonParams.QT, "/export");
 
-    if(numWorkers > 1) {
+    if (numWorkers > 1) {
       params.set("partitionKeys", getPartitionKeys(buckets));
     }
 
@@ -511,64 +535,68 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     CloudSolrStream cstream = new CloudSolrStream(zk, collection, params);
     tupleStream = new RollupStream(cstream, buckets, metrics);
 
-    StreamFactory factory = new StreamFactory()
-        .withFunctionName("search", CloudSolrStream.class)
-        .withFunctionName("parallel", ParallelStream.class)
-        .withFunctionName("rollup", RollupStream.class)
-        .withFunctionName("sum", SumMetric.class)
-        .withFunctionName("min", MinMetric.class)
-        .withFunctionName("max", MaxMetric.class)
-        .withFunctionName("avg", MeanMetric.class)
-        .withFunctionName("count", CountMetric.class)
-        .withFunctionName("and", AndEvaluator.class)
-        .withFunctionName("or", OrEvaluator.class)
-        .withFunctionName("not", NotEvaluator.class)
-        .withFunctionName("eq", EqualToEvaluator.class)
-        .withFunctionName("gt", GreaterThanEvaluator.class)
-        .withFunctionName("lt", LessThanEvaluator.class)
-        .withFunctionName("val", RawValueEvaluator.class)
-        .withFunctionName("lteq", LessThanEqualToEvaluator.class)
-        .withFunctionName("having", HavingStream.class)
-        .withFunctionName("gteq", GreaterThanEqualToEvaluator.class);
-
-    if(havingPredicate != null) {
-      RecursiveBooleanEvaluator booleanOperation = (RecursiveBooleanEvaluator)factory.constructEvaluator(StreamExpressionParser.parse(havingPredicate));
+    StreamFactory factory =
+        new StreamFactory()
+            .withFunctionName("search", CloudSolrStream.class)
+            .withFunctionName("parallel", ParallelStream.class)
+            .withFunctionName("rollup", RollupStream.class)
+            .withFunctionName("sum", SumMetric.class)
+            .withFunctionName("min", MinMetric.class)
+            .withFunctionName("max", MaxMetric.class)
+            .withFunctionName("avg", MeanMetric.class)
+            .withFunctionName("count", CountMetric.class)
+            .withFunctionName("and", AndEvaluator.class)
+            .withFunctionName("or", OrEvaluator.class)
+            .withFunctionName("not", NotEvaluator.class)
+            .withFunctionName("eq", EqualToEvaluator.class)
+            .withFunctionName("gt", GreaterThanEvaluator.class)
+            .withFunctionName("lt", LessThanEvaluator.class)
+            .withFunctionName("val", RawValueEvaluator.class)
+            .withFunctionName("lteq", LessThanEqualToEvaluator.class)
+            .withFunctionName("having", HavingStream.class)
+            .withFunctionName("gteq", GreaterThanEqualToEvaluator.class);
+
+    if (havingPredicate != null) {
+      RecursiveBooleanEvaluator booleanOperation =
+          (RecursiveBooleanEvaluator)
+              factory.constructEvaluator(StreamExpressionParser.parse(havingPredicate));
       tupleStream = new HavingStream(tupleStream, booleanOperation);
     }
 
-    if(numWorkers > 1) {
+    if (numWorkers > 1) {
       // Do the rollups in parallel
       // Maintain the sort of the Tuples coming from the workers.
       StreamComparator comp = bucketSortComp(buckets, sortDirection);
       @SuppressWarnings("resource")
-      final ParallelStream parallelStream = new ParallelStream(zk, collection, tupleStream, numWorkers, comp);
-
+      final ParallelStream parallelStream =
+          new ParallelStream(zk, collection, tupleStream, numWorkers, comp);
 
       parallelStream.setStreamFactory(factory);
       tupleStream = parallelStream;
     }
 
-    //TODO: Currently we are not pushing down the having clause.
-    //      We need to push down the having clause to ensure that LIMIT does not cut off records prior to the having filter.
+    // TODO: Currently we are not pushing down the having clause.
+    //      We need to push down the having clause to ensure that LIMIT does not cut off records
+    // prior to the having filter.
 
-    if(orders != null && orders.size() > 0) {
-      if(!sortsEqual(buckets, sortDirection, orders)) {
+    if (orders != null && orders.size() > 0) {
+      if (!sortsEqual(buckets, sortDirection, orders)) {
         int lim = (limit == null) ? 100 : Integer.parseInt(limit);
         StreamComparator comp = getComp(orders);
-        //Rank the Tuples
-        //If parallel stream is used ALL the Rolled up tuples from the workers will be ranked
-        //Providing a true Top or Bottom.
+        // Rank the Tuples
+        // If parallel stream is used ALL the Rolled up tuples from the workers will be ranked
+        // Providing a true Top or Bottom.
         tupleStream = new RankStream(tupleStream, lim, comp);
       } else {
         // Sort is the same as the same as the underlying stream
         // Only need to limit the result, not Rank the result
-        if(limit != null) {
+        if (limit != null) {
           tupleStream = new LimitStream(tupleStream, Integer.parseInt(limit));
         }
       }
     } else {
-      //No order by, check for limit
-      if(limit != null) {
+      // No order by, check for limit
+      if (limit != null) {
         tupleStream = new LimitStream(tupleStream, Integer.parseInt(limit));
       }
     }
@@ -579,10 +607,10 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   private Bucket[] buildBuckets(List<String> buckets, List<Map.Entry<String, Class<?>>> fields) {
     Bucket[] bucketsArray = new Bucket[buckets.size()];
 
-    int i=0;
-    for(Map.Entry<String,Class<?>> field : fields) {
+    int i = 0;
+    for (Map.Entry<String, Class<?>> field : fields) {
       String fieldName = field.getKey();
-      if(buckets.contains(fieldName)) {
+      if (buckets.contains(fieldName)) {
         bucketsArray[i++] = new Bucket(fieldName);
       }
     }
@@ -590,19 +618,20 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     return bucketsArray;
   }
 
-  private TupleStream handleGroupByFacet(String zkHost,
-                                         String collection,
-                                         final List<Map.Entry<String, Class<?>>> fields,
-                                         final String query,
-                                         final List<Pair<String, String>> orders,
-                                         final List<String> bucketFields,
-                                         final List<Pair<String, String>> metricPairs,
-                                         final String lim,
-                                         final String havingPredicate) throws IOException {
-
+  private TupleStream handleGroupByFacet(
+      String zkHost,
+      String collection,
+      final List<Map.Entry<String, Class<?>>> fields,
+      final String query,
+      final List<Pair<String, String>> orders,
+      final List<String> bucketFields,
+      final List<Pair<String, String>> metricPairs,
+      final String lim,
+      final String havingPredicate)
+      throws IOException {
 
     Map<String, Class<?>> fmap = new HashMap<>();
-    for(Map.Entry<String, Class<?>> f : fields) {
+    for (Map.Entry<String, Class<?>> f : fields) {
       fmap.put(f.getKey(), f.getValue());
     }
 
@@ -611,11 +640,11 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
     Bucket[] buckets = buildBuckets(bucketFields, fields);
     Metric[] metrics = buildMetrics(metricPairs, true).toArray(new Metric[0]);
-    if(metrics.length == 0) {
+    if (metrics.length == 0) {
       metrics = new Metric[1];
       metrics[0] = new CountMetric();
     } else {
-      for(Metric metric : metrics) {
+      for (Metric metric : metrics) {
         Class<?> c = fmap.get(metric.getIdentifier());
         if (!metric.outputLong && Long.class.equals(c)) {
           metric.outputLong = true;
@@ -627,67 +656,64 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
     FieldComparator[] sorts = null;
 
-    if(orders == null || orders.size() == 0) {
+    if (orders == null || orders.size() == 0) {
       sorts = new FieldComparator[buckets.length];
-      for(int i=0; i<sorts.length; i++) {
+      for (int i = 0; i < sorts.length; i++) {
         sorts[i] = new FieldComparator("index", ComparatorOrder.ASCENDING);
       }
     } else {
       sorts = getComps(orders);
     }
 
-    int overfetch = (int)(limit * 1.25);
-
-    TupleStream tupleStream = new FacetStream(zkHost,
-                                              collection,
-                                              solrParams,
-                                              buckets,
-                                              metrics,
-                                              sorts,
-                                              overfetch);
-
-
-
-    StreamFactory factory = new StreamFactory()
-        .withFunctionName("search", CloudSolrStream.class)
-        .withFunctionName("parallel", ParallelStream.class)
-        .withFunctionName("rollup", RollupStream.class)
-        .withFunctionName("sum", SumMetric.class)
-        .withFunctionName("min", MinMetric.class)
-        .withFunctionName("max", MaxMetric.class)
-        .withFunctionName("avg", MeanMetric.class)
-        .withFunctionName("count", CountMetric.class)
-        .withFunctionName("and", AndEvaluator.class)
-        .withFunctionName("or", OrEvaluator.class)
-        .withFunctionName("not", NotEvaluator.class)
-        .withFunctionName("eq", EqualToEvaluator.class)
-        .withFunctionName("val", RawValueEvaluator.class)
-        .withFunctionName("gt", GreaterThanEvaluator.class)
-        .withFunctionName("lt", LessThanEvaluator.class)
-        .withFunctionName("lteq", LessThanEqualToEvaluator.class)
-        .withFunctionName("gteq", GreaterThanEqualToEvaluator.class);
-
-    if(havingPredicate != null) {
-      RecursiveBooleanEvaluator booleanOperation = (RecursiveBooleanEvaluator)factory.constructEvaluator(StreamExpressionParser.parse(havingPredicate));
+    int overfetch = (int) (limit * 1.25);
+
+    TupleStream tupleStream =
+        new FacetStream(zkHost, collection, solrParams, buckets, metrics, sorts, overfetch);
+
+    StreamFactory factory =
+        new StreamFactory()
+            .withFunctionName("search", CloudSolrStream.class)
+            .withFunctionName("parallel", ParallelStream.class)
+            .withFunctionName("rollup", RollupStream.class)
+            .withFunctionName("sum", SumMetric.class)
+            .withFunctionName("min", MinMetric.class)
+            .withFunctionName("max", MaxMetric.class)
+            .withFunctionName("avg", MeanMetric.class)
+            .withFunctionName("count", CountMetric.class)
+            .withFunctionName("and", AndEvaluator.class)
+            .withFunctionName("or", OrEvaluator.class)
+            .withFunctionName("not", NotEvaluator.class)
+            .withFunctionName("eq", EqualToEvaluator.class)
+            .withFunctionName("val", RawValueEvaluator.class)
+            .withFunctionName("gt", GreaterThanEvaluator.class)
+            .withFunctionName("lt", LessThanEvaluator.class)
+            .withFunctionName("lteq", LessThanEqualToEvaluator.class)
+            .withFunctionName("gteq", GreaterThanEqualToEvaluator.class);
+
+    if (havingPredicate != null) {
+      RecursiveBooleanEvaluator booleanOperation =
+          (RecursiveBooleanEvaluator)
+              factory.constructEvaluator(StreamExpressionParser.parse(havingPredicate));
       tupleStream = new HavingStream(tupleStream, booleanOperation);
     }
 
-    if(lim != null)
-    {
+    if (lim != null) {
       tupleStream = new LimitStream(tupleStream, limit);
     }
 
     return tupleStream;
   }
 
-  private TupleStream handleSelectDistinctMapReduce(final String zkHost,
-                                                    final String collection,
-                                                    final Properties properties,
-                                                    final List<Map.Entry<String, Class<?>>> fields,
-                                                    final String query,
-                                                    final List<Pair<String, String>> orders,
-                                                    final Bucket[] buckets,
-                                                    final String limit) throws IOException{
+  private TupleStream handleSelectDistinctMapReduce(
+      final String zkHost,
+      final String collection,
+      final Properties properties,
+      final List<Map.Entry<String, Class<?>>> fields,
+      final String query,
+      final List<Pair<String, String>> orders,
+      final Bucket[] buckets,
+      final String limit)
+      throws IOException {
 
     int numWorkers = Integer.parseInt(properties.getProperty("numWorkers", "1"));
 
@@ -697,24 +723,26 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     StreamEqualitor ecomp = null;
     StreamComparator comp = null;
 
-    if(orders != null && orders.size() > 0) {
+    if (orders != null && orders.size() > 0) {
       StreamComparator[] adjustedSorts = adjustSorts(orders, buckets);
       // Because of the way adjustSorts works we know that each FieldComparator has a single
       // field name. For this reason we can just look at the leftFieldName
       FieldEqualitor[] fieldEqualitors = new FieldEqualitor[adjustedSorts.length];
       StringBuilder buf = new StringBuilder();
-      for(int i=0; i<adjustedSorts.length; i++) {
-        FieldComparator fieldComparator = (FieldComparator)adjustedSorts[i];
+      for (int i = 0; i < adjustedSorts.length; i++) {
+        FieldComparator fieldComparator = (FieldComparator) adjustedSorts[i];
         fieldEqualitors[i] = new FieldEqualitor(fieldComparator.getLeftFieldName());
-        if(i>0) {
+        if (i > 0) {
           buf.append(",");
         }
-        buf.append(fieldComparator.getLeftFieldName()).append(" ").append(fieldComparator.getOrder().toString());
+        buf.append(fieldComparator.getLeftFieldName())
+            .append(" ")
+            .append(fieldComparator.getOrder().toString());
       }
 
       sort = buf.toString();
 
-      if(adjustedSorts.length == 1) {
+      if (adjustedSorts.length == 1) {
         ecomp = fieldEqualitors[0];
         comp = adjustedSorts[0];
       } else {
@@ -725,10 +753,11 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       StringBuilder sortBuf = new StringBuilder();
       FieldEqualitor[] equalitors = new FieldEqualitor[buckets.length];
       StreamComparator[] streamComparators = new StreamComparator[buckets.length];
-      for(int i=0; i<buckets.length; i++) {
+      for (int i = 0; i < buckets.length; i++) {
         equalitors[i] = new FieldEqualitor(buckets[i].toString());
-        streamComparators[i] = new FieldComparator(buckets[i].toString(), ComparatorOrder.ASCENDING);
-        if(i>0) {
+        streamComparators[i] =
+            new FieldComparator(buckets[i].toString(), ComparatorOrder.ASCENDING);
+        if (i > 0) {
           sortBuf.append(',');
         }
         sortBuf.append(buckets[i].toString()).append(" asc");
@@ -736,7 +765,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
 
       sort = sortBuf.toString();
 
-      if(equalitors.length == 1) {
+      if (equalitors.length == 1) {
         ecomp = equalitors[0];
         comp = streamComparators[0];
       } else {
@@ -750,10 +779,11 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     params.set(CommonParams.FL, fl);
     params.set(CommonParams.Q, query);
     params.set(CommonParams.WT, CommonParams.JAVABIN);
-    //Always use the /export handler for Distinct Queries because it requires exporting full result sets.
+    // Always use the /export handler for Distinct Queries because it requires exporting full result
+    // sets.
     params.set(CommonParams.QT, "/export");
 
-    if(numWorkers > 1) {
+    if (numWorkers > 1) {
       params.set("partitionKeys", getPartitionKeys(buckets));
     }
 
@@ -764,56 +794,58 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     CloudSolrStream cstream = new CloudSolrStream(zkHost, collection, params);
     tupleStream = new UniqueStream(cstream, ecomp);
 
-    if(numWorkers > 1) {
+    if (numWorkers > 1) {
       // Do the unique in parallel
       // Maintain the sort of the Tuples coming from the workers.
       @SuppressWarnings("resource")
-      final ParallelStream parallelStream = new ParallelStream(zkHost, collection, tupleStream, numWorkers, comp);
+      final ParallelStream parallelStream =
+          new ParallelStream(zkHost, collection, tupleStream, numWorkers, comp);
 
-      StreamFactory factory = new StreamFactory()
-          .withFunctionName("search", CloudSolrStream.class)
-          .withFunctionName("parallel", ParallelStream.class)
-          .withFunctionName("unique", UniqueStream.class);
+      StreamFactory factory =
+          new StreamFactory()
+              .withFunctionName("search", CloudSolrStream.class)
+              .withFunctionName("parallel", ParallelStream.class)
+              .withFunctionName("unique", UniqueStream.class);
 
       parallelStream.setStreamFactory(factory);
       tupleStream = parallelStream;
     }
 
-    if(limit != null) {
+    if (limit != null) {
       tupleStream = new LimitStream(tupleStream, Integer.parseInt(limit));
     }
 
     return tupleStream;
   }
 
-
-  private StreamComparator[] adjustSorts(List<Pair<String, String>> orders, Bucket[] buckets) throws IOException {
+  private StreamComparator[] adjustSorts(List<Pair<String, String>> orders, Bucket[] buckets)
+      throws IOException {
     List<FieldComparator> adjustedSorts = new ArrayList<>();
     Set<String> bucketFields = new HashSet<>();
     Set<String> sortFields = new HashSet<>();
 
     ComparatorOrder comparatorOrder = ComparatorOrder.ASCENDING;
-    for(Pair<String, String> order : orders) {
+    for (Pair<String, String> order : orders) {
       sortFields.add(order.getKey());
       adjustedSorts.add(new FieldComparator(order.getKey(), ascDescComp(order.getValue())));
       comparatorOrder = ascDescComp(order.getValue());
     }
 
-    for(Bucket bucket : buckets) {
+    for (Bucket bucket : buckets) {
       bucketFields.add(bucket.toString());
     }
 
-    for(String sf : sortFields) {
-      if(!bucketFields.contains(sf)) {
+    for (String sf : sortFields) {
+      if (!bucketFields.contains(sf)) {
         throw new IOException("All sort fields must be in the field list.");
       }
     }
 
-    //Add sort fields if needed
-    if(sortFields.size() < buckets.length) {
-      for(Bucket bucket : buckets) {
+    // Add sort fields if needed
+    if (sortFields.size() < buckets.length) {
+      for (Bucket bucket : buckets) {
         String b = bucket.toString();
-        if(!sortFields.contains(b)) {
+        if (!sortFields.contains(b)) {
           adjustedSorts.add(new FieldComparator(bucket.toString(), comparatorOrder));
         }
       }
@@ -822,15 +854,16 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     return adjustedSorts.toArray(new FieldComparator[adjustedSorts.size()]);
   }
 
-  private TupleStream handleStats(String zk,
-                                  String collection,
-                                  String query,
-                                  List<Pair<String, String>> metricPairs,
-                                  List<Map.Entry<String, Class<?>>> fields) throws IOException {
-
+  private TupleStream handleStats(
+      String zk,
+      String collection,
+      String query,
+      List<Pair<String, String>> metricPairs,
+      List<Map.Entry<String, Class<?>>> fields)
+      throws IOException {
 
     Map<String, Class<?>> fmap = new HashMap<>();
-    for(Map.Entry<String, Class<?>> entry : fields) {
+    for (Map.Entry<String, Class<?>> entry : fields) {
       fmap.put(entry.getKey(), entry.getValue());
     }
 
@@ -838,7 +871,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     solrParams.add(CommonParams.Q, query);
     Metric[] metrics = buildMetrics(metricPairs, false).toArray(new Metric[0]);
 
-    for(Metric metric : metrics) {
+    for (Metric metric : metrics) {
       Class<?> c = fmap.get(metric.getIdentifier());
       if (!metric.outputLong && Long.class.equals(c)) {
         metric.outputLong = true;
@@ -848,18 +881,21 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
     return new StatsStream(zk, collection, solrParams, metrics);
   }
 
-  public <T> Queryable<T> asQueryable(QueryProvider queryProvider, SchemaPlus schema, String tableName) {
+  public <T> Queryable<T> asQueryable(
+      QueryProvider queryProvider, SchemaPlus schema, String tableName) {
     return new SolrQueryable<>(queryProvider, schema, this, tableName);
   }
 
   public RelNode toRel(RelOptTable.ToRelContext context, RelOptTable relOptTable) {
     final RelOptCluster cluster = context.getCluster();
-    return new SolrTableScan(cluster, cluster.traitSetOf(SolrRel.CONVENTION), relOptTable, this, null);
+    return new SolrTableScan(
+        cluster, cluster.traitSetOf(SolrRel.CONVENTION), relOptTable, this, null);
   }
 
   @SuppressWarnings("WeakerAccess")
   public static class SolrQueryable<T> extends AbstractTableQueryable<T> {
-    SolrQueryable(QueryProvider queryProvider, SchemaPlus schema, SolrTable table, String tableName) {
+    SolrQueryable(
+        QueryProvider queryProvider, SchemaPlus schema, SolrTable table, String tableName) {
       super(queryProvider, schema, table, tableName);
     }
 
@@ -877,21 +913,41 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
       return schema.unwrap(SolrSchema.class).properties;
     }
 
-    /** Called via code-generation.
+    /**
+     * Called via code-generation.
      *
      * @see SolrMethod#SOLR_QUERYABLE_QUERY
      */
     @SuppressWarnings({"UnusedDeclaration"})
-    public Enumerable<Object> query(List<Map.Entry<String, Class<?>>> fields, String query, List<Pair<String, String>> order,
-                                    List<String> buckets, List<Pair<String, String>> metricPairs, String limit, String negativeQuery, String havingPredicate, String offset) {
-      return getTable().query(getProperties(), fields, query, order, buckets, metricPairs, limit, negativeQuery, havingPredicate, offset);
+    public Enumerable<Object> query(
+        List<Map.Entry<String, Class<?>>> fields,
+        String query,
+        List<Pair<String, String>> order,
+        List<String> buckets,
+        List<Pair<String, String>> metricPairs,
+        String limit,
+        String negativeQuery,
+        String havingPredicate,
+        String offset) {
+      return getTable()
+          .query(
+              getProperties(),
+              fields,
+              query,
+              order,
+              buckets,
+              metricPairs,
+              limit,
+              negativeQuery,
+              havingPredicate,
+              offset);
     }
   }
 
   private static FieldComparator[] getComps(List<Pair<String, String>> orders) {
     FieldComparator[] comps = new FieldComparator[orders.size()];
-    for(int i=0; i<orders.size(); i++) {
-      Pair<String,String> sortItem = orders.get(i);
+    for (int i = 0; i < orders.size(); i++) {
+      Pair<String, String> sortItem = orders.get(i);
       String ordering = sortItem.getValue();
       ComparatorOrder comparatorOrder = ascDescComp(ordering);
       String sortKey = sortItem.getKey();
@@ -902,7 +958,7 @@ class SolrTable extends AbstractQueryableTable implements TranslatableTable {
   }
 
   private static ComparatorOrder ascDescComp(String s) {
-    if(s.toLowerCase(Locale.ROOT).contains("desc")) {
+    if (s.toLowerCase(Locale.ROOT).contains("desc")) {
       return ComparatorOrder.DESCENDING;
     } else {
       return ComparatorOrder.ASCENDING;
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java
index d0e6194..ed264fd 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrTableScan.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.handler.sql;
 
+import java.util.List;
 import org.apache.calcite.adapter.enumerable.EnumerableRules;
 import org.apache.calcite.plan.*;
 import org.apache.calcite.rel.RelNode;
@@ -24,11 +25,7 @@ import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rel.rules.CoreRules;
 import org.apache.calcite.rel.type.RelDataType;
 
-import java.util.List;
-
-/**
- * Relational expression representing a scan of a Solr collection.
- */
+/** Relational expression representing a scan of a Solr collection. */
 class SolrTableScan extends TableScan implements SolrRel {
   private final SolrTable solrTable;
   private final RelDataType projectRowType;
@@ -36,14 +33,18 @@ class SolrTableScan extends TableScan implements SolrRel {
   /**
    * Creates a SolrTableScan.
    *
-   * @param cluster        Cluster
-   * @param traitSet       Traits
-   * @param table          Table
-   * @param solrTable      Solr table
+   * @param cluster Cluster
+   * @param traitSet Traits
+   * @param table Table
+   * @param solrTable Solr table
    * @param projectRowType Fields and types to project; null to project raw row
    */
-  SolrTableScan(RelOptCluster cluster, RelTraitSet traitSet, RelOptTable table, SolrTable solrTable,
-                RelDataType projectRowType) {
+  SolrTableScan(
+      RelOptCluster cluster,
+      RelTraitSet traitSet,
+      RelOptTable table,
+      SolrTable solrTable,
+      RelDataType projectRowType) {
     super(cluster, traitSet, table);
     this.solrTable = solrTable;
     this.projectRowType = projectRowType;
@@ -52,7 +53,8 @@ class SolrTableScan extends TableScan implements SolrRel {
     assert getConvention() == SolrRel.CONVENTION;
   }
 
-  @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
+  @Override
+  public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
     final float f = projectRowType == null ? 1f : (float) projectRowType.getFieldCount() / 100f;
     return super.computeSelfCost(planner, mq).multiplyBy(.1 * f);
   }
@@ -75,9 +77,12 @@ class SolrTableScan extends TableScan implements SolrRel {
       planner.addRule(rule);
     }
 
-    // Solr's impl only supports LogicalAggregate, so don't let Calcite convert LogicalAggregate's to Enumerable (SOLR-15974)
+    // Solr's impl only supports LogicalAggregate, so don't let Calcite convert LogicalAggregate's
+    // to Enumerable (SOLR-15974)
     planner.removeRule(EnumerableRules.ENUMERABLE_AGGREGATE_RULE);
-    planner.removeRule(CoreRules.FILTER_REDUCE_EXPRESSIONS); // prevent AND NOT from being reduced away, see SOLR-15461
+    planner.removeRule(
+        CoreRules
+            .FILTER_REDUCE_EXPRESSIONS); // prevent AND NOT from being reduced away, see SOLR-15461
   }
 
   public void implement(Implementor implementor) {
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverter.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverter.java
index acea8bd..82dfb4b 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverter.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverter.java
@@ -17,6 +17,10 @@
 package org.apache.solr.handler.sql;
 
 import com.google.common.collect.Lists;
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import org.apache.calcite.adapter.enumerable.*;
 import org.apache.calcite.linq4j.tree.BlockBuilder;
 import org.apache.calcite.linq4j.tree.Expression;
@@ -31,14 +35,7 @@ import org.apache.calcite.runtime.Hook;
 import org.apache.calcite.util.BuiltInMethod;
 import org.apache.calcite.util.Pair;
 
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Relational expression representing a scan of a table in Solr
- */
+/** Relational expression representing a scan of a table in Solr */
 class SolrToEnumerableConverter extends ConverterImpl implements EnumerableRel {
   SolrToEnumerableConverter(RelOptCluster cluster, RelTraitSet traits, RelNode input) {
     super(cluster, ConventionTraitDef.INSTANCE, traits, input);
@@ -60,12 +57,17 @@ class SolrToEnumerableConverter extends ConverterImpl implements EnumerableRel {
     final SolrRel.Implementor solrImplementor = new SolrRel.Implementor();
     solrImplementor.visitChild(0, getInput());
     final RelDataType rowType = getRowType();
-    final PhysType physType = PhysTypeImpl.of(implementor.getTypeFactory(), rowType, pref.prefer(JavaRowFormat.ARRAY));
-    final Expression table = list.append("table", solrImplementor.table.getExpression(SolrTable.SolrQueryable.class));
+    final PhysType physType =
+        PhysTypeImpl.of(implementor.getTypeFactory(), rowType, pref.prefer(JavaRowFormat.ARRAY));
+    final Expression table =
+        list.append("table", solrImplementor.table.getExpression(SolrTable.SolrQueryable.class));
     final Expression fields =
-        list.append("fields",
+        list.append(
+            "fields",
             constantArrayList(
-                Pair.zip(generateFields(SolrRules.solrFieldNames(rowType), solrImplementor.fieldMappings),
+                Pair.zip(
+                    generateFields(
+                        SolrRules.solrFieldNames(rowType), solrImplementor.fieldMappings),
                     new AbstractList<Class<?>>() {
                       @Override
                       public Class<?> get(int index) {
@@ -78,16 +80,39 @@ class SolrToEnumerableConverter extends ConverterImpl implements EnumerableRel {
                       }
                     }),
                 Pair.class));
-    final Expression query = list.append("query", Expressions.constant(solrImplementor.query, String.class));
-    final Expression orders = list.append("orders", constantArrayList(solrImplementor.orders, Pair.class));
-    final Expression buckets = list.append("buckets", constantArrayList(solrImplementor.buckets, String.class));
-    final Expression metricPairs = list.append("metricPairs", constantArrayList(solrImplementor.metricPairs, Pair.class));
+    final Expression query =
+        list.append("query", Expressions.constant(solrImplementor.query, String.class));
+    final Expression orders =
+        list.append("orders", constantArrayList(solrImplementor.orders, Pair.class));
+    final Expression buckets =
+        list.append("buckets", constantArrayList(solrImplementor.buckets, String.class));
+    final Expression metricPairs =
+        list.append("metricPairs", constantArrayList(solrImplementor.metricPairs, Pair.class));
     final Expression limit = list.append("limit", Expressions.constant(solrImplementor.limitValue));
-    final Expression negativeQuery = list.append("negativeQuery", Expressions.constant(Boolean.toString(solrImplementor.negativeQuery), String.class));
-    final Expression havingPredicate = list.append("havingTest", Expressions.constant(solrImplementor.havingPredicate, String.class));
-    final Expression offset = list.append("offset", Expressions.constant(solrImplementor.offsetValue));
-    Expression enumerable = list.append("enumerable", Expressions.call(table, SolrMethod.SOLR_QUERYABLE_QUERY.method,
-        fields, query, orders, buckets, metricPairs, limit, negativeQuery, havingPredicate, offset));
+    final Expression negativeQuery =
+        list.append(
+            "negativeQuery",
+            Expressions.constant(Boolean.toString(solrImplementor.negativeQuery), String.class));
+    final Expression havingPredicate =
+        list.append(
+            "havingTest", Expressions.constant(solrImplementor.havingPredicate, String.class));
+    final Expression offset =
+        list.append("offset", Expressions.constant(solrImplementor.offsetValue));
+    Expression enumerable =
+        list.append(
+            "enumerable",
+            Expressions.call(
+                table,
+                SolrMethod.SOLR_QUERYABLE_QUERY.method,
+                fields,
+                query,
+                orders,
+                buckets,
+                metricPairs,
+                limit,
+                negativeQuery,
+                havingPredicate,
+                offset));
     Hook.QUERY_PLAN.run(query);
     list.add(Expressions.return_(null, enumerable));
     return implementor.result(physType, list.toBlock());
@@ -95,11 +120,11 @@ class SolrToEnumerableConverter extends ConverterImpl implements EnumerableRel {
 
   private List<String> generateFields(List<String> queryFields, Map<String, String> fieldMappings) {
 
-    if(fieldMappings.isEmpty()) {
+    if (fieldMappings.isEmpty()) {
       return queryFields;
     } else {
       List<String> fields = new ArrayList<>();
-      for(String field : queryFields) {
+      for (String field : queryFields) {
         fields.add(getField(fieldMappings, field));
       }
       return fields;
@@ -108,9 +133,9 @@ class SolrToEnumerableConverter extends ConverterImpl implements EnumerableRel {
 
   private String getField(Map<String, String> fieldMappings, String field) {
     String retField = field;
-    while(fieldMappings.containsKey(field)) {
+    while (fieldMappings.containsKey(field)) {
       field = fieldMappings.getOrDefault(field, retField);
-      if(retField.equals(field)) {
+      if (retField.equals(field)) {
         break;
       } else {
         retField = field;
@@ -119,17 +144,15 @@ class SolrToEnumerableConverter extends ConverterImpl implements EnumerableRel {
     return retField;
   }
 
-  /**
-   * E.g. {@code constantArrayList("x", "y")} returns
-   * "Arrays.asList('x', 'y')".
-   */
+  /** E.g. {@code constantArrayList("x", "y")} returns "Arrays.asList('x', 'y')". */
   private static <T> MethodCallExpression constantArrayList(List<T> values, Class<?> clazz) {
-    return Expressions.call(BuiltInMethod.ARRAYS_AS_LIST.method,
-        Expressions.newArrayInit(clazz, constantList(values)));
+    return Expressions.call(
+        BuiltInMethod.ARRAYS_AS_LIST.method, Expressions.newArrayInit(clazz, constantList(values)));
   }
 
   /**
-   * E.g. {@code constantList("x", "y")} returns "{ConstantExpression("x"), ConstantExpression("y")}".
+   * E.g. {@code constantList("x", "y")} returns "{ConstantExpression("x"),
+   * ConstantExpression("y")}".
    */
   private static <T> List<Expression> constantList(List<T> values) {
     return Lists.transform(values, Expressions::constant);
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverterRule.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverterRule.java
index 80365ca..ff9ac21 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverterRule.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/SolrToEnumerableConverterRule.java
@@ -22,13 +22,18 @@ import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.convert.ConverterRule;
 
 /**
- * Rule to convert a relational expression from {@link SolrRel#CONVENTION} to {@link EnumerableConvention}.
+ * Rule to convert a relational expression from {@link SolrRel#CONVENTION} to {@link
+ * EnumerableConvention}.
  */
 class SolrToEnumerableConverterRule extends ConverterRule {
   static final ConverterRule INSTANCE = new SolrToEnumerableConverterRule();
 
   private SolrToEnumerableConverterRule() {
-    super(RelNode.class, SolrRel.CONVENTION, EnumerableConvention.INSTANCE, "SolrToEnumerableConverterRule");
+    super(
+        RelNode.class,
+        SolrRel.CONVENTION,
+        EnumerableConvention.INSTANCE,
+        "SolrToEnumerableConverterRule");
   }
 
   @Override
diff --git a/solr/modules/sql/src/java/org/apache/solr/handler/sql/package-info.java b/solr/modules/sql/src/java/org/apache/solr/handler/sql/package-info.java
index e4ce787..d7e1d51 100644
--- a/solr/modules/sql/src/java/org/apache/solr/handler/sql/package-info.java
+++ b/solr/modules/sql/src/java/org/apache/solr/handler/sql/package-info.java
@@ -16,6 +16,7 @@
  */
 
 /**
- * Classes related to Apache Calcite implementation in {@link org.apache.solr.handler.sql.SQLHandler}
+ * Classes related to Apache Calcite implementation in {@link
+ * org.apache.solr.handler.sql.SQLHandler}
  */
 package org.apache.solr.handler.sql;
diff --git a/solr/modules/sql/src/test/org/apache/solr/handler/sql/SQLWithAuthzEnabledTest.java b/solr/modules/sql/src/test/org/apache/solr/handler/sql/SQLWithAuthzEnabledTest.java
index 3205988..22aeb97 100644
--- a/solr/modules/sql/src/test/org/apache/solr/handler/sql/SQLWithAuthzEnabledTest.java
+++ b/solr/modules/sql/src/test/org/apache/solr/handler/sql/SQLWithAuthzEnabledTest.java
@@ -17,10 +17,11 @@
 
 package org.apache.solr.handler.sql;
 
+import static org.apache.solr.security.Sha256AuthenticationProvider.getSaltedHashedValue;
+
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Map;
-
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.io.Tuple;
@@ -37,8 +38,6 @@ import org.apache.solr.security.RuleBasedAuthorizationPlugin;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static org.apache.solr.security.Sha256AuthenticationProvider.getSaltedHashedValue;
-
 public class SQLWithAuthzEnabledTest extends SolrCloudTestCase {
 
   private static final String ADMIN_USER = "solr";
@@ -49,22 +48,32 @@ public class SQLWithAuthzEnabledTest extends SolrCloudTestCase {
 
   @BeforeClass
   public static void setupClusterWithSecurityEnabled() throws Exception {
-    final String SECURITY_JSON = Utils.toJSONString
-        (Map.of("authorization",
-            Map.of("class", RuleBasedAuthorizationPlugin.class.getName(),
-                "user-role", Map.of(SQL_USER, "sql", ADMIN_USER, "admin", SAD_USER, "sad"),
-                "permissions", Arrays.asList(
-                    Map.of("name", "sql", "role", "sql", "path", "/sql", "collection", "*"),
-                    Map.of("name", "export", "role", "sql", "path", "/export", "collection", "*"),
-                    Map.of("name", "all", "role", "admin"))
-            ),
-            "authentication",
-            Map.of("class", BasicAuthPlugin.class.getName(),
-                "blockUnknown", true,
-                "credentials", Map.of(
-                    SAD_USER, getSaltedHashedValue(PASS),
-                    SQL_USER, getSaltedHashedValue(PASS),
-                    ADMIN_USER, getSaltedHashedValue(PASS)))));
+    final String SECURITY_JSON =
+        Utils.toJSONString(
+            Map.of(
+                "authorization",
+                Map.of(
+                    "class",
+                    RuleBasedAuthorizationPlugin.class.getName(),
+                    "user-role",
+                    Map.of(SQL_USER, "sql", ADMIN_USER, "admin", SAD_USER, "sad"),
+                    "permissions",
+                    Arrays.asList(
+                        Map.of("name", "sql", "role", "sql", "path", "/sql", "collection", "*"),
+                        Map.of(
+                            "name", "export", "role", "sql", "path", "/export", "collection", "*"),
+                        Map.of("name", "all", "role", "admin"))),
+                "authentication",
+                Map.of(
+                    "class",
+                    BasicAuthPlugin.class.getName(),
+                    "blockUnknown",
+                    true,
+                    "credentials",
+                    Map.of(
+                        SAD_USER, getSaltedHashedValue(PASS),
+                        SQL_USER, getSaltedHashedValue(PASS),
+                        ADMIN_USER, getSaltedHashedValue(PASS)))));
 
     configureCluster(2)
         .addConfig("conf", configset("sql"))
@@ -79,23 +88,30 @@ public class SQLWithAuthzEnabledTest extends SolrCloudTestCase {
 
   @Test
   public void testSqlAuthz() throws Exception {
-    doAsAdmin(CollectionAdminRequest.createCollection(collectionName, "conf", 1, 2, 0, 0)).process(cluster.getSolrClient());
-    waitForState("Expected collection to be created with 1 shards and 2 replicas", collectionName, clusterShape(1, 2));
+    doAsAdmin(CollectionAdminRequest.createCollection(collectionName, "conf", 1, 2, 0, 0))
+        .process(cluster.getSolrClient());
+    waitForState(
+        "Expected collection to be created with 1 shards and 2 replicas",
+        collectionName,
+        clusterShape(1, 2));
 
-    doAsAdmin(new UpdateRequest()
-        .add("id", "1")
-        .add("id", "2")
-        .add("id", "3")
-        .add("id", "4")
-        .add("id", "5")
-        .add("id", "6")
-        .add("id", "7")
-        .add("id", "8")).commit(cluster.getSolrClient(), collectionName);
+    doAsAdmin(
+            new UpdateRequest()
+                .add("id", "1")
+                .add("id", "2")
+                .add("id", "3")
+                .add("id", "4")
+                .add("id", "5")
+                .add("id", "6")
+                .add("id", "7")
+                .add("id", "8"))
+        .commit(cluster.getSolrClient(), collectionName);
 
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set(CommonParams.QT, "/sql");
     params.set("stmt", "select id from " + collectionName);
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + collectionName;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + collectionName;
     SolrStream solrStream = new SolrStream(baseUrl, params);
     solrStream.setCredentials(SAD_USER, PASS);
 
@@ -112,8 +128,7 @@ public class SQLWithAuthzEnabledTest extends SolrCloudTestCase {
     int count = 0;
     try (tupleStream) {
       tupleStream.open();
-      for (Tuple t = tupleStream.read(); !t.EOF; t = tupleStream.read())
-        count++;
+      for (Tuple t = tupleStream.read(); !t.EOF; t = tupleStream.read()) count++;
     }
     return count;
   }
diff --git a/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandler.java b/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandler.java
index 4fcd6d6..a3f35b5 100644
--- a/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandler.java
+++ b/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandler.java
@@ -26,7 +26,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.stream.Collectors;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.LuceneTestCase.Slow;
@@ -59,9 +58,7 @@ public class TestSQLHandler extends SolrCloudTestCase {
 
   @BeforeClass
   public static void setupCluster() throws Exception {
-    configureCluster(4)
-        .addConfig("conf", configset("sql"))
-        .configure();
+    configureCluster(4).addConfig("conf", configset("sql")).configure();
 
     String collection;
     useAlias = random().nextBoolean();
@@ -76,37 +73,151 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .process(cluster.getSolrClient());
     cluster.waitForActiveCollection(collection, 2, 2);
     if (useAlias) {
-      CollectionAdminRequest.createAlias(COLLECTIONORALIAS, collection).process(cluster.getSolrClient());
+      CollectionAdminRequest.createAlias(COLLECTIONORALIAS, collection)
+          .process(cluster.getSolrClient());
     }
   }
 
   @Before
   public void cleanIndex() throws Exception {
-    new UpdateRequest()
-        .deleteByQuery("*:*")
-        .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
+    new UpdateRequest().deleteByQuery("*:*").commit(cluster.getSolrClient(), COLLECTIONORALIAS);
   }
 
   @Test
   public void testBasicSelect() throws Exception {
 
-
     new UpdateRequest()
-        .add("id", "1", "text_t", "XXXX XXXX", "str_s", "a", "field_i", "7", "field_f", "7.5", "field_d", "7.5", "field_l", "7")
-        .add("id", "2", "text_t", "XXXX XXXX", "str_s", "b", "field_i", "8", "field_f", "8.5", "field_d", "8.5", "field_l", "8")
-        .add("id", "3", "text_t", "XXXX XXXX", "str_s", "a", "field_i", "20", "field_f", "20.5", "field_d", "20.5", "field_l", "20")
-        .add("id", "4", "text_t", "XXXX XXXX", "str_s", "b", "field_i", "11", "field_f", "11.5", "field_d", "11.5", "field_l", "11")
-        .add("id", "5", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "30", "field_f", "30.5", "field_d", "30.5", "field_l", "30")
-        .add("id", "6", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "40", "field_f", "40.5", "field_d", "40.5", "field_l", "40")
-        .add("id", "7", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "50", "field_f", "50.5", "field_d", "50.5", "field_l", "50")
-        .add("id", "8", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "60", "field_f", "60.5", "field_d", "60.5", "field_l", "60")
+        .add(
+            "id",
+            "1",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "a",
+            "field_i",
+            "7",
+            "field_f",
+            "7.5",
+            "field_d",
+            "7.5",
+            "field_l",
+            "7")
+        .add(
+            "id",
+            "2",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "b",
+            "field_i",
+            "8",
+            "field_f",
+            "8.5",
+            "field_d",
+            "8.5",
+            "field_l",
+            "8")
+        .add(
+            "id",
+            "3",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "a",
+            "field_i",
+            "20",
+            "field_f",
+            "20.5",
+            "field_d",
+            "20.5",
+            "field_l",
+            "20")
+        .add(
+            "id",
+            "4",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "b",
+            "field_i",
+            "11",
+            "field_f",
+            "11.5",
+            "field_d",
+            "11.5",
+            "field_l",
+            "11")
+        .add(
+            "id",
+            "5",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "30",
+            "field_f",
+            "30.5",
+            "field_d",
+            "30.5",
+            "field_l",
+            "30")
+        .add(
+            "id",
+            "6",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "40",
+            "field_f",
+            "40.5",
+            "field_d",
+            "40.5",
+            "field_l",
+            "40")
+        .add(
+            "id",
+            "7",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "50",
+            "field_f",
+            "50.5",
+            "field_d",
+            "50.5",
+            "field_l",
+            "50")
+        .add(
+            "id",
+            "8",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "60",
+            "field_f",
+            "60.5",
+            "field_d",
+            "60.5",
+            "field_l",
+            "60")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    SolrParams sParams = params(CommonParams.QT, "/sql",
-        "stmt",
-        "select id, field_i, str_s, field_f, field_d, field_l from collection1 where (text_t='(XXXX)' OR text_t='XXXX') AND text_t='XXXX' order by field_i desc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id, field_i, str_s, field_f, field_d, field_l from collection1 where (text_t='(XXXX)' OR text_t='XXXX') AND text_t='XXXX' order by field_i desc");
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
     assert (tuples.size() == 8);
@@ -185,11 +296,15 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertEquals(tuple.getLong("field_l").longValue(), 7);
 
     // Assert field order
-    //assertResponseContains(clients.get(0), sParams, "{\"docs\":[{\"id\":\"8\",\"field_i\":60,\"str_s\":\"c\",\"field_i\":60,\"field_f\":60.5,\"field_d\":60.5,\"field_l\":60}");
+    // assertResponseContains(clients.get(0), sParams,
+    // "{\"docs\":[{\"id\":\"8\",\"field_i\":60,\"str_s\":\"c\",\"field_i\":60,\"field_f\":60.5,\"field_d\":60.5,\"field_l\":60}");
 
-
-    sParams = params(CommonParams.QT, "/sql", "stmt",
-        "select id, field_i, str_s from collection1 where text_t='XXXX' order by id desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id, field_i, str_s from collection1 where text_t='XXXX' order by id desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -235,8 +350,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 7);
     assert (tuple.get("str_s").equals("a"));
 
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id, field_i, str_s from collection1 where text_t='XXXX' order by field_i desc limit 1");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id, field_i, str_s from collection1 where text_t='XXXX' order by field_i desc limit 1");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -247,8 +366,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
     assert (tuple.get("str_s").equals("c"));
 
-    sParams = params(CommonParams.QT, "/sql", "stmt",
-        "select id, field_i, str_s from collection1 where text_t='XXXX' AND id='(1 2 3)' order by field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id, field_i, str_s from collection1 where text_t='XXXX' AND id='(1 2 3)' order by field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -269,9 +392,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 7);
     assert (tuple.get("str_s").equals("a"));
 
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt",
-        "select id as myId, field_i as myInt, str_s as myString from collection1 where text_t='XXXX' AND id='(1 2 3)' order by myInt desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id as myId, field_i as myInt, str_s as myString from collection1 where text_t='XXXX' AND id='(1 2 3)' order by myInt desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -292,9 +418,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("myInt") == 7);
     assert (tuple.get("myString").equals("a"));
 
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt",
-        "select id as myId, field_i as myInt, str_s as myString from collection1 where text_t='XXXX' AND id='(1 2 3)' order by field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id as myId, field_i as myInt, str_s as myString from collection1 where text_t='XXXX' AND id='(1 2 3)' order by field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -316,13 +445,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.get("myString").equals("a"));
 
     // SOLR-8845 - Test to make sure that 1 = 0 works for things like Spark SQL
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id, field_i, str_s from collection1 where 1 = 0");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id, field_i, str_s from collection1 where 1 = 0");
 
     tuples = getTuples(sParams, baseUrl);
 
     assertEquals(0, tuples.size());
-
   }
 
   @Test
@@ -333,17 +465,62 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "2", "text_t", "XXXX XXXX", "str_s", "b", "field_i", "8")
         .add("id", "3", "text_t", "XXXX XXXX", "str_s", "a", "field_i", "20")
         .add("id", "4", "text_t", "XXXX XXXX", "str_s", "b", "field_i", "11")
-        .add("id", "5", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "30", "specialchars_s", "witha|pipe")
-        .add("id", "6", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "40", "specialchars_s", "witha\\slash")
-        .add("id", "7", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "50", "specialchars_s", "witha!bang")
-        .add("id", "8", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "60", "specialchars_s", "witha\"quote")
+        .add(
+            "id",
+            "5",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "30",
+            "specialchars_s",
+            "witha|pipe")
+        .add(
+            "id",
+            "6",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "40",
+            "specialchars_s",
+            "witha\\slash")
+        .add(
+            "id",
+            "7",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "50",
+            "specialchars_s",
+            "witha!bang")
+        .add(
+            "id",
+            "8",
+            "text_t",
+            "XXXX XXXX",
+            "str_s",
+            "c",
+            "field_i",
+            "60",
+            "specialchars_s",
+            "witha\"quote")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
     // Equals
-    SolrParams sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id from collection1 where id = 1 order by id asc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where id = 1 order by id asc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -353,8 +530,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertEquals("1", tuple.get("id"));
 
     // Not Equals <>
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id from collection1 where id <> 1 order by id asc limit 10");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where id <> 1 order by id asc limit 10");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -400,8 +581,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     // assertEquals(8L, tuple.get("id"));
 
     // Less than
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id from collection1 where id < 2 order by id asc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where id < 2 order by id asc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -411,8 +596,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertEquals("1", tuple.get("id"));
 
     // Less than equal
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id from collection1 where id <= 2 order by id asc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where id <= 2 order by id asc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -424,8 +613,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertEquals("2", tuple.get("id"));
 
     // Greater than
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id from collection1 where id > 7 order by id asc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where id > 7 order by id asc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -435,8 +628,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertEquals("8", tuple.get("id"));
 
     // Greater than equal
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id from collection1 where id >= 7 order by id asc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where id >= 7 order by id asc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -471,10 +668,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "8", "Text_t", "XXXX XXXX", "Str_s", "c", "Field_i", "60")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select id, Field_i, Str_s from collection1 where Text_t='XXXX' order by Field_i desc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select id, Field_i, Str_s from collection1 where Text_t='XXXX' order by Field_i desc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -523,13 +727,15 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.get("Str_s").equals("a"));
 
     // TODO get sum(Field_i) as named one
-    sParams = params(CommonParams.QT, "/sql",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
-
     assertEquals(tuples.toString(), 2, tuples.size());
 
     tuple = tuples.get(0);
@@ -540,9 +746,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.get("Str_s").equals("a"));
     assert (tuple.getDouble("EXPR$1") == 7);
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -555,7 +766,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     tuple = tuples.get(1);
     assert (tuple.get("Str_s").equals("a"));
     assert (tuple.getDouble("EXPR$1") == 7);
-
   }
 
   @Test
@@ -572,12 +782,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "8", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "60")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
-
-
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -611,8 +826,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
 
     // reverse the sort
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -643,8 +864,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 1);
 
     // reverse the sort
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select distinct str_s as myString, field_i as myInt from collection1 order by str_s desc, myInt desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select distinct str_s as myString, field_i as myInt from collection1 order by str_s desc, myInt desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -675,8 +902,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("myInt") == 1);
 
     // test with limit
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -691,8 +924,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 50);
 
     // Test without a sort. Sort should be asc by default.
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select distinct str_s, field_i from collection1");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select distinct str_s, field_i from collection1");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -728,8 +967,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
 
     // Test with a predicate.
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select distinct str_s, field_i from collection1 where str_s = 'a'");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select distinct str_s, field_i from collection1 where str_s = 'a'");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -742,7 +987,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     tuple = tuples.get(1);
     assert (tuple.get("str_s").equals("a"));
     assert (tuple.getLong("field_i") == 20);
-
   }
 
   @Test
@@ -759,10 +1003,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "8", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "60")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -792,8 +1043,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
 
     // reverse the sort
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -823,8 +1080,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.get("str_s").equals("a"));
     assert (tuple.getLong("field_i") == 1);
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s as myString, field_i from collection1 order by myString desc, field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s as myString, field_i from collection1 order by myString desc, field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -855,8 +1118,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 1);
 
     // test with limit
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -871,8 +1140,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 50);
 
     // Test without a sort. Sort should be asc by default.
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -903,11 +1178,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
 
     // Test with a predicate.
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 where str_s = 'a'");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 where str_s = 'a'");
 
     tuples = getTuples(sParams, baseUrl);
-    Assert.assertEquals (tuples.toString(), 2, tuples.size());
+    Assert.assertEquals(tuples.toString(), 2, tuples.size());
 
     tuple = tuples.get(0);
     assert (tuple.get("str_s").equals("a"));
@@ -916,7 +1197,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     tuple = tuples.get(1);
     assert (tuple.get("str_s").equals("a"));
     assert (tuple.getLong("field_i") == 20);
-
   }
 
   @Test
@@ -933,9 +1213,18 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "8", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "60")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
-    SolrParams sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s asc, field_i asc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -968,8 +1257,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
 
     // reverse the sort
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1000,8 +1297,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 1);
 
     // reverse the sort
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s as myString, field_i from collection1 order by myString desc, field_i desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s as myString, field_i from collection1 order by myString desc, field_i desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1032,8 +1337,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 1);
 
     // test with limit
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 order by str_s desc, field_i desc limit 2");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1048,8 +1361,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 50);
 
     // Test without a sort. Sort should be asc by default.
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1080,8 +1401,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("field_i") == 60);
 
     // Test with a predicate.
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select distinct str_s, field_i from collection1 where str_s = 'a'");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select distinct str_s, field_i from collection1 where str_s = 'a'");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1094,7 +1423,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     tuple = tuples.get(1);
     assert (tuple.get("str_s").equals("a"));
     assert (tuple.getLong("field_i") == 20);
-
   }
 
   @Test
@@ -1112,12 +1440,19 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "9", "text_t", "XXXX XXXY", "str_s", "d", "field_i", "70")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), " +
-            "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s " +
-            "order by sum(field_i) asc limit 2");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s "
+                + "order by sum(field_i) asc limit 2");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -1142,10 +1477,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 20); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 13.5D); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), " +
-            "avg(field_i) from collection1 where text_t='XXXX' group by str_s " +
-            "order by sum(field_i) asc limit 2");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
+                + "avg(field_i) from collection1 where text_t='XXXX' group by str_s "
+                + "order by sum(field_i) asc limit 2");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1168,10 +1509,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 20); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 14); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
-            + "cast(avg(1.0 * field_i) as float) from collection1 where (text_t='XXXX' AND NOT (text_t='XXXY')) "
-            + "group by str_s order by str_s desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where (text_t='XXXX' AND NOT (text_t='XXXY')) "
+                + "group by str_s order by str_s desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1204,10 +1551,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 20); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 13.5D); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s as myString, count(*), sum(field_i) as mySum, min(field_i), max(field_i), "
-            + "cast(avg(1.0 * field_i) as float) from collection1 where (text_t='XXXX' AND NOT (text_t='XXXY')) "
-            + "group by str_s order by myString desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s as myString, count(*), sum(field_i) as mySum, min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where (text_t='XXXX' AND NOT (text_t='XXXY')) "
+                + "group by str_s order by myString desc");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1240,9 +1593,15 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 20); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 13.5D); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), " +
-            "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s having sum(field_i) = 19");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s having sum(field_i) = 19");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1256,10 +1615,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 11); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 9.5D); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), " +
-            "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s " +
-            "having ((sum(field_i) = 19) AND (min(field_i) = 8))");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s "
+                + "having ((sum(field_i) = 19) AND (min(field_i) = 8))");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1273,10 +1638,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 11); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 9.5D); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i) as mySum, min(field_i), max(field_i), " +
-            "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s " +
-            "having ((sum(field_i) = 19) AND (min(field_i) = 8))");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i) as mySum, min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s "
+                + "having ((sum(field_i) = 19) AND (min(field_i) = 8))");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1290,15 +1661,20 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getDouble("EXPR$4") == 11); // max(field_i)
     assert (tuple.getDouble("EXPR$5") == 9.5D); // avg(field_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select str_s, count(*), sum(field_i), min(field_i), max(field_i), " +
-            "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s " +
-            "having ((sum(field_i) = 19) AND (min(field_i) = 100))");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select str_s, count(*), sum(field_i), min(field_i), max(field_i), "
+                + "cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s "
+                + "having ((sum(field_i) = 19) AND (min(field_i) = 100))");
 
     tuples = getTuples(sParams, baseUrl);
 
     assert (tuples.size() == 0);
-
   }
 
   @Test
@@ -1317,12 +1693,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add(id, "9", "a_s", "hello0", "a_i", "14", "a_f", "10")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
-
-    SolrParams sParams = params(CommonParams.QT, "/sql", "stmt",
-        "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), " +
-            "min(a_f), max(a_f), avg(a_f) from collection1");
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), "
+                + "min(a_f), max(a_f), avg(a_f) from collection1");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -1352,10 +1732,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertTrue(maxf == 10.0D);
     assertTrue(avgf == 5.5D);
 
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select count(*) as myCount, sum(a_i) as mySum, min(a_i) as myMin, max(a_i) as myMax, " +
-            "cast(avg(1.0 * a_i) as float) as myAvg, sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1");
-
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select count(*) as myCount, sum(a_i) as mySum, min(a_i) as myMin, max(a_i) as myMax, "
+                + "cast(avg(1.0 * a_i) as float) as myAvg, sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1386,10 +1769,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertTrue(avgf == 5.5D);
 
     // Test without cast on average int field
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select count(*) as myCount, sum(a_i) as mySum, min(a_i) as myMin, max(a_i) as myMax, " +
-            "avg(a_i) as myAvg, sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1");
-
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select count(*) as myCount, sum(a_i) as mySum, min(a_i) as myMin, max(a_i) as myMax, "
+                + "avg(a_i) as myAvg, sum(a_f), min(a_f), max(a_f), avg(a_f) from collection1");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1421,10 +1807,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertTrue(avgf == 5.5D);
 
     // Test where clause hits
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), " +
-            "min(a_f), max(a_f), avg(a_f) from collection1 where id = 2");
-
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), "
+                + "min(a_f), max(a_f), avg(a_f) from collection1 where id = 2");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1453,9 +1842,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertTrue(avgf == 2.0);
 
     // Test zero hits
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), " +
-            "min(a_f), max(a_f), avg(a_f) from collection1 where a_s = 'blah'");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), "
+                + "min(a_f), max(a_f), avg(a_f) from collection1 where a_s = 'blah'");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1484,10 +1877,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertTrue(avgf == null);
 
     // test bunch of where predicates
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), " +
-            "min(a_f), max(a_f), avg(a_f) from collection1 where id = 2 AND a_s='hello0' AND a_i=2 AND a_f=2");
-
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select count(*), sum(a_i), min(a_i), max(a_i), cast(avg(1.0 * a_i) as float), sum(a_f), "
+                + "min(a_f), max(a_f), avg(a_f) from collection1 where id = 2 AND a_s='hello0' AND a_i=2 AND a_f=2");
 
     tuples = getTuples(sParams, baseUrl);
     assert (tuples.size() == 1);
@@ -1496,7 +1892,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
   @Test
   public void testTimeSeriesGrouping() throws Exception {
 
-
     new UpdateRequest()
         .add(id, "1", "year_i", "2015", "month_i", "11", "day_i", "7", "item_i", "5")
         .add(id, "2", "year_i", "2015", "month_i", "11", "day_i", "7", "item_i", "10")
@@ -1506,13 +1901,19 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add(id, "6", "year_i", "2015", "month_i", "10", "day_i", "3", "item_i", "5")
         .add(id, "7", "year_i", "2014", "month_i", "4", "day_i", "4", "item_i", "6")
         .add(id, "8", "year_i", "2014", "month_i", "4", "day_i", "2", "item_i", "1")
-
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -1528,9 +1929,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("year_i") == 2014);
     assert (tuple.getDouble("EXPR$1") == 7); // sum(item_i)
 
-    sParams = params(CommonParams.QT, "/sql",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1551,9 +1956,13 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("month_i") == 4);
     assert (tuple.getDouble("EXPR$2") == 7); // sum(item_i)
 
-    sParams = params(CommonParams.QT, "/sql",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1594,7 +2003,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("month_i") == 4);
     assert (tuple.getLong("day_i") == 2);
     assert (tuple.getDouble("EXPR$3") == 1); // sum(item_i)
-
   }
 
   @Test
@@ -1609,13 +2017,19 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add(id, "6", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "40")
         .add(id, "7", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "50")
         .add(id, "8", "text_t", "XXXX XXXX", "str_s", "c", "field_i", "60")
-
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt", "select id, str_s from collection1 where text_t='XXXX' order by field_iff desc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select id, str_s from collection1 where text_t='XXXX' order by field_iff desc");
 
     SolrStream solrStream = new SolrStream(baseUrl, sParams);
     Tuple tuple = getTuple(new ExceptionStream(solrStream));
@@ -1623,8 +2037,12 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.EXCEPTION);
     assert (tuple.getException().contains("Column 'field_iff' not found in any table"));
 
-    sParams = params(CommonParams.QT, "/sql",
-        "stmt", "select id, field_iff, str_s from collection1 where text_t='XXXX' order by field_iff desc");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id, field_iff, str_s from collection1 where text_t='XXXX' order by field_iff desc");
 
     solrStream = new SolrStream(baseUrl, sParams);
     tuple = getTuple(new ExceptionStream(solrStream));
@@ -1633,9 +2051,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
 
     assert (tuple.getException().contains("Column 'field_iff' not found in any table"));
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt",
-        "select str_s, count(*), sum(field_iff), min(field_i), max(field_i), cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s having ((sum(field_iff) = 19) AND (min(field_i) = 8))");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select str_s, count(*), sum(field_iff), min(field_i), max(field_i), cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s having ((sum(field_iff) = 19) AND (min(field_i) = 8))");
 
     solrStream = new SolrStream(baseUrl, sParams);
     tuple = getTuple(new ExceptionStream(solrStream));
@@ -1643,9 +2066,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.EXCEPTION);
     assert (tuple.getException().contains("Column 'field_iff' not found in any table"));
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt",
-        "select str_s, count(*), blah(field_i), min(field_i), max(field_i), cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select str_s, count(*), blah(field_i), min(field_i), max(field_i), cast(avg(1.0 * field_i) as float) from collection1 where text_t='XXXX' group by str_s having ((sum(field_i) = 19) AND (min(field_i) = 8))");
 
     solrStream = new SolrStream(baseUrl, sParams);
     tuple = getTuple(new ExceptionStream(solrStream));
@@ -1654,9 +2082,14 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getException().contains("No match found for function signature blah"));
 
     // verify exception message formatting with wildcard query
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "map_reduce",
-        "stmt",
-        "select str_s from collection1 where not_a_field LIKE 'foo%'");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select str_s from collection1 where not_a_field LIKE 'foo%'");
 
     solrStream = new SolrStream(baseUrl, sParams);
     tuple = getTuple(new ExceptionStream(solrStream));
@@ -1677,13 +2110,19 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add(id, "6", "year_i", "2015", "month_i", "10", "day_i", "3", "item_i", "5")
         .add(id, "7", "year_i", "2014", "month_i", "4", "day_i", "4", "item_i", "6")
         .add(id, "8", "year_i", "2014", "month_i", "4", "day_i", "2", "item_i", "1")
-
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "stmt", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "stmt",
+            "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -1699,9 +2138,15 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("year_i") == 2014);
     assert (tuple.getDouble("EXPR$1") == 7); // sum(item_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1722,9 +2167,15 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("month_i") == 4);
     assert (tuple.getDouble("EXPR$2") == 7); // sum(item_i)
 
-    sParams = params(CommonParams.QT, "/sql", "aggregationMode", "facet",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "aggregationMode",
+            "facet",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1765,7 +2216,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("month_i") == 4);
     assert (tuple.getLong("day_i") == 2);
     assert (tuple.getDouble("EXPR$3") == 1); // sum(item_i)
-
   }
 
   @Test
@@ -1780,13 +2230,21 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add(id, "6", "year_i", "2015", "month_i", "10", "day_i", "3", "item_i", "5")
         .add(id, "7", "year_i", "2014", "month_i", "4", "day_i", "4", "item_i", "6")
         .add(id, "8", "year_i", "2014", "month_i", "4", "day_i", "2", "item_i", "1")
-
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
 
-    SolrParams sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "stmt", "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "stmt",
+            "select year_i, sum(item_i) from collection1 group by year_i order by year_i desc");
 
     List<Tuple> tuples = getTuples(sParams, baseUrl);
 
@@ -1796,7 +2254,8 @@ public class TestSQLHandler extends SolrCloudTestCase {
 
     tuple = tuples.get(0);
     assert (tuple.getLong("year_i") == 2015);
-    assert (tuple.get("year_i") instanceof Long); // SOLR-8601, This tests that the bucket is actually a Long and not
+    assert (tuple.get("year_i")
+        instanceof Long); // SOLR-8601, This tests that the bucket is actually a Long and not
     // parsed from a String.
     assert (tuple.getDouble("EXPR$1") == 66); // sum(item_i)
 
@@ -1804,9 +2263,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("year_i") == 2014);
     assert (tuple.getDouble("EXPR$1") == 7); // sum(item_i)
 
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1829,9 +2296,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("month_i") == 4);
     assert (tuple.getDouble("EXPR$2") == 7); // sum(item_i)
 
-    sParams = params(CommonParams.QT, "/sql", "numWorkers", "2", "aggregationMode", "map_reduce",
-        "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");
+    sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "numWorkers",
+            "2",
+            "aggregationMode",
+            "map_reduce",
+            "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");
 
     tuples = getTuples(sParams, baseUrl);
 
@@ -1872,7 +2347,6 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assert (tuple.getLong("month_i") == 4);
     assert (tuple.getLong("day_i") == 2);
     assert (tuple.getDouble("EXPR$3") == 1); // sum(item_i)
-
   }
 
   protected List<Tuple> getTuples(final SolrParams params, String baseUrl) throws IOException {
@@ -1907,11 +2381,15 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "4", "text_t", "foobaz", "str_s", "d")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    SolrParams sParams = params(CommonParams.QT, "/sql",
-        "stmt",
-        "select id from collection1 where str_s IN ('a','b','c')");
+    SolrParams sParams =
+        params(
+            CommonParams.QT,
+            "/sql",
+            "stmt",
+            "select id from collection1 where str_s IN ('a','b','c')");
 
-    String baseUrl = cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
+    String baseUrl =
+        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + COLLECTIONORALIAS;
     List<Tuple> tuples = getTuples(sParams, baseUrl);
     assertEquals(3, tuples.size());
   }
@@ -2005,14 +2483,16 @@ public class TestSQLHandler extends SolrCloudTestCase {
     expectResults("SELECT id FROM $ALIAS WHERE b_is >= 2 AND b_is <= 4", 3);
     expectResults("SELECT id FROM $ALIAS WHERE b_is <= 4 AND b_is >= 2", 3);
     expectResults("SELECT id FROM $ALIAS WHERE b_is <= 2 OR b_is >= 8", 4);
-    // tricky ~ with Solr, this should return 2 docs, but Calcite short-circuits this query and returns 0
+    // tricky ~ with Solr, this should return 2 docs, but Calcite short-circuits this query and
+    // returns 0
     // Calcite sees the predicate as disjoint from a single-valued field perspective ...
     expectResults("SELECT id FROM $ALIAS WHERE b_is >= 5 AND b_is <= 2", 0);
     // hacky work-around the aforementioned problem ^^
     expectResults("SELECT id FROM $ALIAS WHERE b_is = '(+[5 TO *] +[* TO 2])'", 2);
   }
 
-  private SolrInputDocument withMultiValuedField(String mvField, List<Object> values, String... fields) {
+  private SolrInputDocument withMultiValuedField(
+      String mvField, List<Object> values, String... fields) {
     SolrInputDocument doc = new SolrInputDocument(fields);
     doc.addField(mvField, values);
     return doc;
@@ -2031,11 +2511,17 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "8", "a_s", "world-8", "b_s", "bar", "a_i", "5", "d_s", "c")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    List<Tuple> tuples = expectResults("SELECT a_s FROM $ALIAS WHERE a_s LIKE 'world%' AND b_s IS NOT NULL AND c_s IS NULL AND a_i BETWEEN 2 AND 4 AND d_s IN ('a','b','c') ORDER BY id ASC LIMIT 10", 3);
+    List<Tuple> tuples =
+        expectResults(
+            "SELECT a_s FROM $ALIAS WHERE a_s LIKE 'world%' AND b_s IS NOT NULL AND c_s IS NULL AND a_i BETWEEN 2 AND 4 AND d_s IN ('a','b','c') ORDER BY id ASC LIMIT 10",
+            3);
     assertEquals("world-2", tuples.get(0).getString("a_s"));
     assertEquals("world-4", tuples.get(1).getString("a_s"));
     assertEquals("world-6", tuples.get(2).getString("a_s"));
-    tuples = expectResults("SELECT a_s FROM $ALIAS WHERE a_s NOT LIKE 'hello%' AND b_s IS NOT NULL AND c_s IS NULL AND a_i NOT BETWEEN 2 AND 4 AND d_s IN ('a','b','c') ORDER BY id ASC LIMIT 10", 1);
+    tuples =
+        expectResults(
+            "SELECT a_s FROM $ALIAS WHERE a_s NOT LIKE 'hello%' AND b_s IS NOT NULL AND c_s IS NULL AND a_i NOT BETWEEN 2 AND 4 AND d_s IN ('a','b','c') ORDER BY id ASC LIMIT 10",
+            1);
     assertEquals("world-8", tuples.get(0).getString("a_s"));
   }
 
@@ -2052,7 +2538,10 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "8", "a_s", "world-8", "b_s", "bar", "a_i", "5", "d_s", "c")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    List<Tuple> tuples = expectResults("SELECT COUNT(1) as `the_count` FROM $ALIAS as `alias` WHERE (`alias`.`b_s`='foo' AND `alias`.`a_s` LIKE 'hell%' AND `alias`.`c_s` IS NOT NULL) HAVING (COUNT(1) > 0)", 1);
+    List<Tuple> tuples =
+        expectResults(
+            "SELECT COUNT(1) as `the_count` FROM $ALIAS as `alias` WHERE (`alias`.`b_s`='foo' AND `alias`.`a_s` LIKE 'hell%' AND `alias`.`c_s` IS NOT NULL) HAVING (COUNT(1) > 0)",
+            1);
     assertEquals(4L, (long) tuples.get(0).getLong("the_count"));
   }
 
@@ -2075,8 +2564,10 @@ public class TestSQLHandler extends SolrCloudTestCase {
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex <= '2021-06-01'", 1);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex > '2021-06-04 04:00:00'", 1);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex = '2021-06-04 04:00:00'", 1);
-    expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex = CAST('2021-06-04 04:04:00' as TIMESTAMP)", 1);
-    expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex BETWEEN '2021-06-03' AND '2021-06-05'", 4);
+    expectResults(
+        "SELECT id, pdatex FROM $ALIAS WHERE pdatex = CAST('2021-06-04 04:04:00' as TIMESTAMP)", 1);
+    expectResults(
+        "SELECT id, pdatex FROM $ALIAS WHERE pdatex BETWEEN '2021-06-03' AND '2021-06-05'", 4);
   }
 
   @Test
@@ -2087,28 +2578,127 @@ public class TestSQLHandler extends SolrCloudTestCase {
         .add("id", "3", "pdatex", "2021-07-13T15:12:11.037Z")
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex >= CAST('2021-07-13 15:12:10.037' as TIMESTAMP)", 2);
+    expectResults(
+        "SELECT id, pdatex FROM $ALIAS WHERE pdatex >= CAST('2021-07-13 15:12:10.037' as TIMESTAMP)",
+        2);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex >= '2021-07-13T15:12:10.037Z'", 2);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex < '2021-07-13T15:12:10.037Z'", 1);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex = '2021-07-13T15:12:10.037Z'", 1);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex <> '2021-07-13T15:12:10.037Z'", 2);
-    expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex BETWEEN '2021-07-13T15:12:09.037Z' AND '2021-07-13T15:12:10.037Z' ORDER BY pdatex ASC", 2);
+    expectResults(
+        "SELECT id, pdatex FROM $ALIAS WHERE pdatex BETWEEN '2021-07-13T15:12:09.037Z' AND '2021-07-13T15:12:10.037Z' ORDER BY pdatex ASC",
+        2);
     expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex >= '2021-07-13T15:12:10.037Z'", 2);
-    expectResults("SELECT id, pdatex FROM $ALIAS WHERE pdatex >= '2021-07-13T15:12:10.037Z' ORDER BY pdatex ASC LIMIT 10", 2);
+    expectResults(
+        "SELECT id, pdatex FROM $ALIAS WHERE pdatex >= '2021-07-13T15:12:10.037Z' ORDER BY pdatex ASC LIMIT 10",
+        2);
   }
 
   @Test
   public void testAggsOnCustomFieldType() throws Exception {
     new UpdateRequest()
-        .add(withMultiValuedField("pintxs", Arrays.asList(1,5),"id", "1", "tintx", "1", "pintx", "2", "tfloatx", "3.33", "pfloatx", "3.33", "tlongx", "1623875868000", "plongx", "1623875868000", "tdoublex", "3.14159265359", "pdoublex", "3.14159265359", "stringx", "A", "textx", "aaa", "pdatex", "2021-06-17T00:00:00Z"))
-        .add(withMultiValuedField("pintxs", Arrays.asList(2,6),"id", "2", "tintx", "2", "pintx", "4", "tfloatx", "4.44", "pfloatx", "4.44", "tlongx", "1723875868000", "plongx", "1723875868000", "tdoublex", "6.14159265359", "pdoublex", "6.14159265359", "stringx", "B", "textx", "bbb", "pdatex", "2021-06-18T00:00:00Z"))
-        .add(withMultiValuedField("pintxs", Arrays.asList(3,7),"id", "3", "tintx", "3", "pintx", "6", "tfloatx", "5.55", "pfloatx", "5.55", "tlongx", "1823875868000", "plongx", "1823875868000", "tdoublex", "9.14159265359", "pdoublex", "9.14159265359", "stringx", "C", "textx", "ccc", "pdatex", "2021-06-19T00:00:00Z"))
+        .add(
+            withMultiValuedField(
+                "pintxs",
+                Arrays.asList(1, 5),
+                "id",
+                "1",
+                "tintx",
+                "1",
+                "pintx",
+                "2",
+                "tfloatx",
+                "3.33",
+                "pfloatx",
+                "3.33",
+                "tlongx",
+                "1623875868000",
+                "plongx",
+                "1623875868000",
+                "tdoublex",
+                "3.14159265359",
+                "pdoublex",
+                "3.14159265359",
+                "stringx",
+                "A",
+                "textx",
+                "aaa",
+                "pdatex",
+                "2021-06-17T00:00:00Z"))
+        .add(
+            withMultiValuedField(
+                "pintxs",
+                Arrays.asList(2, 6),
+                "id",
+                "2",
+                "tintx",
+                "2",
+                "pintx",
+                "4",
+                "tfloatx",
+                "4.44",
+                "pfloatx",
+                "4.44",
+                "tlongx",
+                "1723875868000",
+                "plongx",
+                "1723875868000",
+                "tdoublex",
+                "6.14159265359",
+                "pdoublex",
+                "6.14159265359",
+                "stringx",
+                "B",
+                "textx",
+                "bbb",
+                "pdatex",
+                "2021-06-18T00:00:00Z"))
+        .add(
+            withMultiValuedField(
+                "pintxs",
+                Arrays.asList(3, 7),
+                "id",
+                "3",
+                "tintx",
+                "3",
+                "pintx",
+                "6",
+                "tfloatx",
+                "5.55",
+                "pfloatx",
+                "5.55",
+                "tlongx",
+                "1823875868000",
+                "plongx",
+                "1823875868000",
+                "tdoublex",
+                "9.14159265359",
+                "pdoublex",
+                "9.14159265359",
+                "stringx",
+                "C",
+                "textx",
+                "ccc",
+                "pdatex",
+                "2021-06-19T00:00:00Z"))
         .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
     String dateStatsSql = "min(pdatex) as min_pdatex, max(pdatex) as max_pdatex";
     String numTypeStatsSql = toStatsSql(Arrays.asList("intx", "floatx", "longx", "doublex"));
-    String sql = "SELECT min(pintxs) as min_pintxs, max(pintxs) as max_pintxs, "+
-        min("stringx")+", "+max("stringx")+", "+min("textx")+", "+max("textx")+", "+numTypeStatsSql+", "+dateStatsSql+" FROM $ALIAS";
+    String sql =
+        "SELECT min(pintxs) as min_pintxs, max(pintxs) as max_pintxs, "
+            + min("stringx")
+            + ", "
+            + max("stringx")
+            + ", "
+            + min("textx")
+            + ", "
+            + max("textx")
+            + ", "
+            + numTypeStatsSql
+            + ", "
+            + dateStatsSql
+            + " FROM $ALIAS";
 
     List<Tuple> tuples = expectResults(sql, 1);
     Tuple stats = tuples.get(0);
@@ -2145,8 +2735,8 @@ public class TestSQLHandler extends SolrCloudTestCase {
       if (sb.length() > 0) {
         sb.append(", ");
       }
-      sb.append(min("t"+type)).append(", ").append(min("p"+type));
-      sb.append(", ").append(max("t"+type)).append(", ").append(max("p"+type));
+      sb.append(min("t" + type)).append(", ").append(min("p" + type));
+      sb.append(", ").append(max("t" + type)).append(", ").append(max("p" + type));
     }
     return sb.toString();
   }
@@ -2177,7 +2767,8 @@ public class TestSQLHandler extends SolrCloudTestCase {
 
     final int numDocs = 11;
 
-    List<Tuple> results = expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 0 FETCH NEXT 5 ROWS ONLY", 5);
+    List<Tuple> results =
+        expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 0 FETCH NEXT 5 ROWS ONLY", 5);
     assertEquals("11", results.get(0).getString("id"));
     assertEquals("10", results.get(1).getString("id"));
     assertEquals("09", results.get(2).getString("id"));
@@ -2192,30 +2783,37 @@ public class TestSQLHandler extends SolrCloudTestCase {
     assertEquals("08", results.get(3).getString("id"));
     assertEquals("07", results.get(4).getString("id"));
 
-    results = expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 5 FETCH NEXT 5 ROWS ONLY", 5);
+    results =
+        expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 5 FETCH NEXT 5 ROWS ONLY", 5);
     assertEquals("06", results.get(0).getString("id"));
     assertEquals("05", results.get(1).getString("id"));
     assertEquals("04", results.get(2).getString("id"));
     assertEquals("03", results.get(3).getString("id"));
     assertEquals("02", results.get(4).getString("id"));
 
-    results = expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 10 FETCH NEXT 5 ROWS ONLY", 1);
+    results =
+        expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 10 FETCH NEXT 5 ROWS ONLY", 1);
     assertEquals("01", results.get(0).getString("id"));
 
-    expectResults("SELECT id FROM $ALIAS ORDER BY id DESC LIMIT "+numDocs, numDocs);
+    expectResults("SELECT id FROM $ALIAS ORDER BY id DESC LIMIT " + numDocs, numDocs);
 
-    for (int i=0; i < numDocs; i++) {
-      results = expectResults("SELECT id FROM $ALIAS ORDER BY id ASC OFFSET "+i+" FETCH NEXT 1 ROW ONLY", 1);
+    for (int i = 0; i < numDocs; i++) {
+      results =
+          expectResults(
+              "SELECT id FROM $ALIAS ORDER BY id ASC OFFSET " + i + " FETCH NEXT 1 ROW ONLY", 1);
       String id = results.get(0).getString("id");
       if (id.startsWith("0")) id = id.substring(1);
-      assertEquals(i+1, Integer.parseInt(id));
+      assertEquals(i + 1, Integer.parseInt(id));
     }
 
     // just past the end of the results
-    expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET "+numDocs+" FETCH NEXT 5 ROWS ONLY", 0);
+    expectResults(
+        "SELECT id FROM $ALIAS ORDER BY id DESC OFFSET " + numDocs + " FETCH NEXT 5 ROWS ONLY", 0);
 
     // Solr doesn't support OFFSET w/o LIMIT
-    expectThrows(IOException.class, () -> expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 5", 5));
+    expectThrows(
+        IOException.class,
+        () -> expectResults("SELECT id FROM $ALIAS ORDER BY id DESC OFFSET 5", 5));
   }
 
   @Test
@@ -2229,7 +2827,10 @@ public class TestSQLHandler extends SolrCloudTestCase {
     }
     updateRequest.commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-    List<Tuple> tuples = expectResults("SELECT COUNT(1) AS total_rows, COUNT(distinct str_s) AS distinct_str, MIN(str_s) AS min_str, MAX(str_s) AS max_str FROM $ALIAS", 1);
+    List<Tuple> tuples =
+        expectResults(
+            "SELECT COUNT(1) AS total_rows, COUNT(distinct str_s) AS distinct_str, MIN(str_s) AS min_str, MAX(str_s) AS max_str FROM $ALIAS",
+            1);
     Tuple firstRow = tuples.get(0);
     assertEquals(maxDocs, (long) firstRow.getLong("total_rows"));
     assertEquals(cardinality, (long) firstRow.getLong("distinct_str"));
@@ -2244,18 +2845,29 @@ public class TestSQLHandler extends SolrCloudTestCase {
       assertEquals(String.format(Locale.ROOT, padFmt, t), tuples.get(t).getString("str_s"));
     }
 
-    tuples = expectResults("SELECT APPROX_COUNT_DISTINCT(distinct str_s) AS approx_distinct FROM $ALIAS", 1);
+    tuples =
+        expectResults(
+            "SELECT APPROX_COUNT_DISTINCT(distinct str_s) AS approx_distinct FROM $ALIAS", 1);
     firstRow = tuples.get(0);
     assertEquals(cardinality, (long) firstRow.getLong("approx_distinct"));
 
-    tuples = expectResults("SELECT country_s, COUNT(*) AS count_per_bucket FROM $ALIAS GROUP BY country_s", 2);
-    assertEquals(maxDocs/2L, (long)tuples.get(0).getLong("count_per_bucket"));
-    assertEquals(maxDocs/2L, (long)tuples.get(1).getLong("count_per_bucket"));
+    tuples =
+        expectResults(
+            "SELECT country_s, COUNT(*) AS count_per_bucket FROM $ALIAS GROUP BY country_s", 2);
+    assertEquals(maxDocs / 2L, (long) tuples.get(0).getLong("count_per_bucket"));
+    assertEquals(maxDocs / 2L, (long) tuples.get(1).getLong("count_per_bucket"));
   }
 
-  private UpdateRequest addDocForDistinctTests(int id, UpdateRequest updateRequest, int cardinality, String padFmt) {
+  private UpdateRequest addDocForDistinctTests(
+      int id, UpdateRequest updateRequest, int cardinality, String padFmt) {
     String country = id % 2 == 0 ? "US" : "CA";
-    return updateRequest.add("id", String.valueOf(id), "str_s", String.format(Locale.ROOT, padFmt, id % cardinality), "country_s", country);
+    return updateRequest.add(
+        "id",
+        String.valueOf(id),
+        "str_s",
+        String.format(Locale.ROOT, padFmt, id % cardinality),
+        "country_s",
+        country);
   }
 
   @Test
@@ -2289,15 +2901,25 @@ public class TestSQLHandler extends SolrCloudTestCase {
     expectResults("SELECT id, stringx, dvonly FROM $ALIAS LIMIT 10", 5);
 
     // notafield_i matches a dynamic field pattern but has no docs, so don't allow this
-    expectThrows(IOException.class, () -> expectResults("SELECT id, stringx, notafield_i FROM $ALIAS", 5));
-    expectThrows(IOException.class, () -> expectResults("SELECT id, stringx, notstored FROM $ALIAS", 5));
+    expectThrows(
+        IOException.class, () -> expectResults("SELECT id, stringx, notafield_i FROM $ALIAS", 5));
+    expectThrows(
+        IOException.class, () -> expectResults("SELECT id, stringx, notstored FROM $ALIAS", 5));
   }
 
   @Test
   public void testMultiValuedFieldHandling() throws Exception {
-    List<String> textmv = Arrays.asList("just some text here", "across multiple values", "the quick brown fox jumped over the lazy dog");
-    List<String> listOfTimestamps = Arrays.asList("2021-08-06T15:37:52Z", "2021-08-06T15:37:53Z", "2021-08-06T15:37:54Z");
-    List<Date> dates = listOfTimestamps.stream().map(ts -> new Date(Instant.parse(ts).toEpochMilli())).collect(Collectors.toList());
+    List<String> textmv =
+        Arrays.asList(
+            "just some text here",
+            "across multiple values",
+            "the quick brown fox jumped over the lazy dog");
+    List<String> listOfTimestamps =
+        Arrays.asList("2021-08-06T15:37:52Z", "2021-08-06T15:37:53Z", "2021-08-06T15:37:54Z");
+    List<Date> dates =
+        listOfTimestamps.stream()
+            .map(ts -> new Date(Instant.parse(ts).toEpochMilli()))
+            .collect(Collectors.toList());
     List<String> stringxmv = Arrays.asList("a", "b", "c");
     List<String> stringsx = Arrays.asList("d", "e", "f");
     List<Double> pdoublesx = Arrays.asList(1d, 2d, 3d);
@@ -2329,13 +2951,21 @@ public class TestSQLHandler extends SolrCloudTestCase {
     update.commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
     expectResults("SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv > 'a'", 10);
-    expectResults("SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv NOT IN ('a')", 1);
-    expectResults("SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv > 'a' LIMIT 10", 10);
-    expectResults("SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv NOT IN ('a') LIMIT 10", 1);
+    expectResults(
+        "SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv NOT IN ('a')", 1);
+    expectResults(
+        "SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv > 'a' LIMIT 10", 10);
+    expectResults(
+        "SELECT stringxmv, stringsx, booleans FROM $ALIAS WHERE stringxmv NOT IN ('a') LIMIT 10",
+        1);
 
     // can't sort by a mv field
-    expectThrows(IOException.class,
-        () -> expectResults("SELECT stringxmv FROM $ALIAS WHERE stringxmv IS NOT NULL ORDER BY stringxmv ASC", 0));
+    expectThrows(
+        IOException.class,
+        () ->
+            expectResults(
+                "SELECT stringxmv FROM $ALIAS WHERE stringxmv IS NOT NULL ORDER BY stringxmv ASC",
+                0));
 
     // even id's have these fields, odd's are null ...
     expectListInResults("0", "stringsx", stringsx, -1, 5);
@@ -2367,7 +2997,8 @@ public class TestSQLHandler extends SolrCloudTestCase {
     expectAggCount("longs", 6);
   }
 
-  private void expectListInResults(String id, String mvField, List<?> expected, int limit, int expCount) throws Exception {
+  private void expectListInResults(
+      String id, String mvField, List<?> expected, int limit, int expCount) throws Exception {
     String projection = limit > 0 ? "*" : "id," + mvField;
     String sql = "SELECT " + projection + " FROM $ALIAS WHERE id='" + id + "'";
     if (limit > 0) sql += " LIMIT " + limit;
@@ -2386,7 +3017,8 @@ public class TestSQLHandler extends SolrCloudTestCase {
 
       // test "IN" operator but skip for text analyzed fields
       if (!"textmv".equals(mvField)) {
-        String inClause = expected.stream().map(o -> "'" + o + "'").collect(Collectors.joining(","));
+        String inClause =
+            expected.stream().map(o -> "'" + o + "'").collect(Collectors.joining(","));
         sql = "SELECT " + projection + " FROM $ALIAS WHERE " + mvField + " IN (" + inClause + ")";
         if (limit > 0) sql += " LIMIT " + limit;
         expectResults(sql, expCount);
@@ -2403,7 +3035,7 @@ public class TestSQLHandler extends SolrCloudTestCase {
     int maxSize = 1000;
     int width = 4;
     List<String> bigList = new ArrayList<>(maxSize);
-    for (int i=0; i < maxSize; i++) {
+    for (int i = 0; i < maxSize; i++) {
       bigList.add(StringUtils.leftPad(String.valueOf(i), width, "0"));
     }
 
@@ -2416,11 +3048,11 @@ public class TestSQLHandler extends SolrCloudTestCase {
     }
     update.add("id", String.valueOf(maxDocs)); // no stringxmv
 
-    SolrInputDocument doc = new SolrInputDocument("id", String.valueOf(maxDocs+1));
+    SolrInputDocument doc = new SolrInputDocument("id", String.valueOf(maxDocs + 1));
     doc.setField("stringxmv", Arrays.asList("a", "b", "c"));
     update.add(doc);
 
-    doc = new SolrInputDocument("id", String.valueOf(maxDocs+2));
+    doc = new SolrInputDocument("id", String.valueOf(maxDocs + 2));
     doc.setField("stringxmv", Arrays.asList("d", "e", "f"));
     update.add(doc);
 
@@ -2429,15 +3061,23 @@ public class TestSQLHandler extends SolrCloudTestCase {
     int numIn = 200;
     List<String> bigInList = new ArrayList<>(bigList);
     Collections.shuffle(bigInList, random());
-    bigInList = bigInList.subList(0, numIn).stream().map(s -> "'"+s+"'").collect(Collectors.toList());
+    bigInList =
+        bigInList.subList(0, numIn).stream().map(s -> "'" + s + "'").collect(Collectors.toList());
     String inClause = String.join(",", bigInList);
-    String sql = "SELECT id FROM $ALIAS WHERE stringxmv IN ("+inClause+") ORDER BY id ASC";
+    String sql = "SELECT id FROM $ALIAS WHERE stringxmv IN (" + inClause + ") ORDER BY id ASC";
     expectResults(sql, maxDocs);
-    sql = "SELECT * FROM $ALIAS WHERE stringxmv IN ("+inClause+") ORDER BY id ASC LIMIT "+maxDocs;
+    sql =
+        "SELECT * FROM $ALIAS WHERE stringxmv IN ("
+            + inClause
+            + ") ORDER BY id ASC LIMIT "
+            + maxDocs;
     expectResults(sql, maxDocs);
-    sql = "SELECT id FROM $ALIAS WHERE stringxmv NOT IN ("+inClause+") ORDER BY id ASC";
+    sql = "SELECT id FROM $ALIAS WHERE stringxmv NOT IN (" + inClause + ") ORDER BY id ASC";
     expectResults(sql, 3);
-    sql = "SELECT id FROM $ALIAS WHERE stringxmv IS NOT NULL AND stringxmv NOT IN ("+inClause+") ORDER BY id ASC";
+    sql =
+        "SELECT id FROM $ALIAS WHERE stringxmv IS NOT NULL AND stringxmv NOT IN ("
+            + inClause
+            + ") ORDER BY id ASC";
     expectResults(sql, 2);
     sql = "SELECT * FROM $ALIAS WHERE stringxmv IN ('a','d') ORDER BY id ASC LIMIT 10";
     expectResults(sql, 2);
@@ -2459,35 +3099,61 @@ public class TestSQLHandler extends SolrCloudTestCase {
     expectResults("SELECT id FROM $ALIAS WHERE a_i IS NULL ORDER BY id ASC LIMIT 10", 2);
     expectResults("SELECT id FROM $ALIAS WHERE c_s IS NOT NULL ORDER BY id ASC LIMIT 10", 2);
 
-    expectResults("SELECT * FROM $ALIAS WHERE a_s='hello-1' AND d_s='x' ORDER BY id ASC LIMIT 10", 1);
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE a_s='hello-1' AND d_s='x' ORDER BY id ASC LIMIT 10", 1);
     expectResults("SELECT id FROM $ALIAS WHERE a_s='hello-1' AND d_s='x'", 1);
 
-    expectResults("SELECT * FROM $ALIAS WHERE a_s <> 'hello-1' AND d_s <> 'x' ORDER BY id ASC LIMIT 10", 2);
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE a_s <> 'hello-1' AND d_s <> 'x' ORDER BY id ASC LIMIT 10", 2);
     expectResults("SELECT id FROM $ALIAS WHERE a_s <> 'hello-1' AND d_s <> 'x'", 2);
 
     expectResults("SELECT * FROM $ALIAS WHERE d_s <> 'x' ORDER BY id ASC LIMIT 10", 2);
     expectResults("SELECT id FROM $ALIAS WHERE d_s <> 'x'", 2);
 
-    expectResults("SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s <> 'x' ORDER BY id ASC LIMIT 10", 0);
-    expectResults("SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s <> 'x'", 0);
-
-    expectResults("SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('x') ORDER BY id ASC LIMIT 10", 0);
-    expectResults("SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('x')", 0);
-    expectResults("SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('a') ORDER BY id ASC LIMIT 10", 2);
-    expectResults("SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('a')", 2);
-
-    expectResults("SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'x' ORDER BY id ASC LIMIT 10", 0);
-    expectResults("SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'x'", 0);
-    expectResults("SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'b' ORDER BY id ASC LIMIT 10", 2);
-    expectResults("SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'b'", 2);
-    expectResults("SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s LIKE 'x' ORDER BY id ASC LIMIT 10", 2);
-    expectResults("SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s LIKE 'x'", 2);
-
-    expectResults("SELECT * FROM $ALIAS WHERE a_s <> 'hello-1' AND b_s='foo' AND d_s IS NOT NULL AND a_i IS NULL AND c_s IN ('bar') ORDER BY id ASC LIMIT 10", 1);
-    expectResults("SELECT id FROM $ALIAS WHERE a_s <> 'hello-1' AND b_s='foo' AND d_s IS NOT NULL AND a_i IS NULL AND c_s IN ('bar')", 1);
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s <> 'x' ORDER BY id ASC LIMIT 10",
+        0);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s <> 'x'", 0);
+
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('x') ORDER BY id ASC LIMIT 10",
+        0);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('x')", 0);
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('a') ORDER BY id ASC LIMIT 10",
+        2);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT IN ('a')", 2);
+
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'x' ORDER BY id ASC LIMIT 10",
+        0);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'x'", 0);
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'b' ORDER BY id ASC LIMIT 10",
+        2);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s NOT LIKE 'b'", 2);
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s LIKE 'x' ORDER BY id ASC LIMIT 10",
+        2);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE (a_s = 'hello-1' OR a_s = 'hello-3') AND d_s LIKE 'x'", 2);
+
+    expectResults(
+        "SELECT * FROM $ALIAS WHERE a_s <> 'hello-1' AND b_s='foo' AND d_s IS NOT NULL AND a_i IS NULL AND c_s IN ('bar') ORDER BY id ASC LIMIT 10",
+        1);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE a_s <> 'hello-1' AND b_s='foo' AND d_s IS NOT NULL AND a_i IS NULL AND c_s IN ('bar')",
+        1);
 
     // just a bunch of OR's that end up matching all docs
-    expectResults("SELECT id FROM $ALIAS WHERE a_s <> 'hello-1' OR a_i <> 2 OR d_s <> 'x' ORDER BY id ASC LIMIT 10", 4);
+    expectResults(
+        "SELECT id FROM $ALIAS WHERE a_s <> 'hello-1' OR a_i <> 2 OR d_s <> 'x' ORDER BY id ASC LIMIT 10",
+        4);
   }
 
   @Test
@@ -2501,10 +3167,20 @@ public class TestSQLHandler extends SolrCloudTestCase {
 
     expectResults("SELECT COUNT(*) as QUERY_COUNT FROM $ALIAS WHERE (id='1')", 1);
     expectResults("SELECT COUNT(*) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1')", 1);
-    expectResults("SELECT COUNT(*) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo')", 1);
-    expectResults("SELECT COUNT(1) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo')", 1);
-    expectResults("SELECT COUNT(1) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo') AND (a_s='hello-1')", 1);
-    expectResults("SELECT COUNT(*) as QUERY_COUNT, max(id) as max_id FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo')", 1);
-    expectResults("SELECT COUNT(*) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo') HAVING COUNT(*) > 0", 1);
+    expectResults(
+        "SELECT COUNT(*) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo')",
+        1);
+    expectResults(
+        "SELECT COUNT(1) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo')",
+        1);
+    expectResults(
+        "SELECT COUNT(1) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo') AND (a_s='hello-1')",
+        1);
+    expectResults(
+        "SELECT COUNT(*) as QUERY_COUNT, max(id) as max_id FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo')",
+        1);
+    expectResults(
+        "SELECT COUNT(*) as QUERY_COUNT FROM $ALIAS WHERE (d_s='x') AND (id='1') AND (b_s='foo') HAVING COUNT(*) > 0",
+        1);
   }
 }
diff --git a/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandlerNonCloud.java b/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandlerNonCloud.java
index b0e5b3f..a0af911 100644
--- a/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandlerNonCloud.java
+++ b/solr/modules/sql/src/test/org/apache/solr/handler/sql/TestSQLHandlerNonCloud.java
@@ -20,7 +20,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.apache.solr.SolrJettyTestBase;
 import org.apache.solr.client.solrj.io.Tuple;
 import org.apache.solr.client.solrj.io.stream.SolrStream;
@@ -53,7 +52,7 @@ public class TestSQLHandlerNonCloud extends SolrJettyTestBase {
     String url = jetty.getBaseUrl() + "/" + DEFAULT_TEST_COLLECTION_NAME;
 
     SolrStream solrStream = new SolrStream(url, sParams);
-    IOException ex = expectThrows(IOException.class,  () -> getTuples(solrStream));
+    IOException ex = expectThrows(IOException.class, () -> getTuples(solrStream));
     assertTrue(ex.getMessage().contains(SQLHandler.sqlNonCloudErrorMsg));
   }