You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kr...@apache.org on 2017/03/05 01:22:53 UTC

lucene-solr:master: SOLR-10171: Add Constant Reduction Rules to Calcite Planner

Repository: lucene-solr
Updated Branches:
  refs/heads/master b2dcb47ef -> 686fbd3ba


SOLR-10171: Add Constant Reduction Rules to Calcite Planner


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/686fbd3b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/686fbd3b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/686fbd3b

Branch: refs/heads/master
Commit: 686fbd3ba294e7a71f08b2821b5c3ce50235c78b
Parents: b2dcb47
Author: Kevin Risden <kr...@apache.org>
Authored: Sun Feb 19 21:34:40 2017 -0600
Committer: Kevin Risden <kr...@apache.org>
Committed: Sat Mar 4 19:22:34 2017 -0600

----------------------------------------------------------------------
 solr/CHANGES.txt                                 |  2 ++
 .../org/apache/solr/handler/sql/SolrRules.java   | 14 ++++++++++++++
 .../apache/solr/handler/sql/SolrTableScan.java   |  4 ++++
 .../org/apache/solr/handler/TestSQLHandler.java  |  8 ++++++++
 .../solr/client/solrj/io/sql/JdbcTest.java       | 19 +++++++++++++++++++
 5 files changed, 47 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/686fbd3b/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index bb5a784..5b7eac5 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -285,6 +285,8 @@ Other Changes
 * SOLR-10155: For numeric types facet.contains= and facet.prefix= are now rejected.
   (Gus Heck, Christine Poerschke)
 
+* SOLR-10171 Add Constant Reduction Rules to Calcite Planner (Kevin Risden)
+
 ==================  6.4.2 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/686fbd3b/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
index 4cbadda..bbc4eb7 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
@@ -26,6 +26,9 @@ import org.apache.calcite.rel.logical.LogicalAggregate;
 import org.apache.calcite.rel.logical.LogicalFilter;
 import org.apache.calcite.rel.logical.LogicalProject;
 import org.apache.calcite.rel.logical.LogicalSort;
+import org.apache.calcite.rel.rules.AggregateValuesRule;
+import org.apache.calcite.rel.rules.ReduceExpressionsRule;
+import org.apache.calcite.rel.rules.ValuesReduceRule;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexInputRef;
@@ -52,6 +55,17 @@ class SolrRules {
       SolrAggregateRule.AGGREGATE_RULE,
   };
 
+  static final RelOptRule[] CONSTANT_REDUCTION_RULES = {
+      ReduceExpressionsRule.PROJECT_INSTANCE,
+      ReduceExpressionsRule.FILTER_INSTANCE,
+      ReduceExpressionsRule.CALC_INSTANCE,
+      ReduceExpressionsRule.JOIN_INSTANCE,
+      ValuesReduceRule.FILTER_INSTANCE,
+      ValuesReduceRule.PROJECT_FILTER_INSTANCE,
+      ValuesReduceRule.PROJECT_INSTANCE,
+      AggregateValuesRule.INSTANCE
+  };
+
   static List<String> solrFieldNames(final RelDataType rowType) {
     return SqlValidatorUtil.uniquify(
         new AbstractList<String>() {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/686fbd3b/solr/core/src/java/org/apache/solr/handler/sql/SolrTableScan.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrTableScan.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrTableScan.java
index 88c53ac..5363d59 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrTableScan.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrTableScan.java
@@ -72,6 +72,10 @@ class SolrTableScan extends TableScan implements SolrRel {
     for (RelOptRule rule : SolrRules.RULES) {
       planner.addRule(rule);
     }
+
+    for (RelOptRule rule : SolrRules.CONSTANT_REDUCTION_RULES) {
+      planner.addRule(rule);
+    }
   }
 
   public void implement(Implementor implementor) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/686fbd3b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
index 35f7ad0..d724fbd 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestSQLHandler.java
@@ -317,6 +317,14 @@ public class TestSQLHandler extends AbstractFullDistribZkTestBase {
       assert(tuple.getLong("myInt") == 7);
       assert(tuple.get("myString").equals("a"));
 
+      // SOLR-8845 - Test to make sure that 1 = 0 works for things like Spark SQL
+      sParams = mapParams(CommonParams.QT, "/sql",
+          "stmt", "select id, field_i, str_s from collection1 where 1 = 0");
+
+      solrStream = new SolrStream(jetty.url, sParams);
+      tuples = getTuples(solrStream);
+
+      assertEquals(0, tuples.size());
     } finally {
       delete();
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/686fbd3b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
index 927856a..ce14907 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
@@ -450,6 +450,25 @@ public class JdbcTest extends SolrCloudTestCase {
   }
 
   @Test
+  public void testOneEqualZeroMetadata() throws Exception {
+    // SOLR-8845 - Make sure that 1 = 1 (literal comparison literal) works
+    try (Connection con = DriverManager.getConnection("jdbc:solr://" + zkHost +
+        "?collection=" + COLLECTIONORALIAS)) {
+
+      try (Statement stmt = con.createStatement()) {
+        try (ResultSet rs = stmt.executeQuery("select a_s from " + COLLECTIONORALIAS + " where 1 = 0")) {
+          assertFalse(rs.next());
+
+          ResultSetMetaData resultSetMetaData = rs.getMetaData();
+          assertNotNull(resultSetMetaData);
+          assertEquals(1, resultSetMetaData.getColumnCount());
+          assertEquals("a_s", resultSetMetaData.getColumnName(1));
+        }
+      }
+    }
+  }
+
+  @Test
   public void testDriverMetadata() throws Exception {
     String collection = COLLECTIONORALIAS;