mirror of https://github.com/apache/lucene.git
SOLR-10171: Add Constant Reduction Rules to Calcite Planner
This commit is contained in:
parent
b2dcb47ef4
commit
686fbd3ba2
|
@ -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.
|
||||
|
|
|
@ -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>() {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -449,6 +449,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;
|
||||
|
|
Loading…
Reference in New Issue