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;