You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/04/16 18:16:45 UTC
[5/5] incubator-calcite git commit: [CALCITE-675] Enable
AggregateProjectMergeRule in standard rule set
[CALCITE-675] Enable AggregateProjectMergeRule in standard rule set
Fix various bugs involving field mix-ups in Aggregates
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/8276f258
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/8276f258
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/8276f258
Branch: refs/heads/master
Commit: 8276f2580ed427d02cee7f3695f182e77a7ae978
Parents: a42b88d
Author: Julian Hyde <jh...@apache.org>
Authored: Thu Apr 9 18:45:04 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Tue Apr 14 18:27:47 2015 -0700
----------------------------------------------------------------------
.../adapter/enumerable/PhysTypeImpl.java | 10 +--
.../calcite/plan/volcano/VolcanoPlanner.java | 2 +
.../rel/rules/AggregateProjectMergeRule.java | 3 +-
.../rel/rules/AggregateReduceFunctionsRule.java | 7 +-
.../calcite/rel/rules/AggregateRemoveRule.java | 28 +++++---
.../test/JdbcFrontJdbcBackLinqMiddleTest.java | 2 +-
.../java/org/apache/calcite/test/JdbcTest.java | 75 +++++++++-----------
.../org/apache/calcite/test/LatticeTest.java | 17 +++--
.../enumerable/EnumerableCorrelateTest.java | 9 ++-
core/src/test/resources/sql/join.oq | 19 +++--
core/src/test/resources/sql/misc.oq | 54 +++++++-------
core/src/test/resources/sql/subquery.oq | 11 ++-
12 files changed, 117 insertions(+), 120 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/main/java/org/apache/calcite/adapter/enumerable/PhysTypeImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/PhysTypeImpl.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/PhysTypeImpl.java
index 6d51b97..1cc6628 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/PhysTypeImpl.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/PhysTypeImpl.java
@@ -17,6 +17,7 @@
package org.apache.calcite.adapter.enumerable;
import org.apache.calcite.adapter.java.JavaTypeFactory;
+import org.apache.calcite.linq4j.Ord;
import org.apache.calcite.linq4j.function.Function1;
import org.apache.calcite.linq4j.tree.BlockBuilder;
import org.apache.calcite.linq4j.tree.Expression;
@@ -55,7 +56,7 @@ public class PhysTypeImpl implements PhysType {
private final JavaTypeFactory typeFactory;
private final RelDataType rowType;
private final Type javaRowClass;
- private final List<Class> fieldClasses = new ArrayList<Class>();
+ private final List<Class> fieldClasses = new ArrayList<>();
final JavaRowFormat format;
/** Creates a PhysTypeImpl. */
@@ -171,12 +172,13 @@ public class PhysTypeImpl implements PhysType {
final PhysType targetPhysType =
project(fields, true, targetFormat);
final List<Expression> expressions = Lists.newArrayList();
- for (Integer field : fields) {
+ for (Ord<Integer> ord : Ord.zip(fields)) {
+ final Integer field = ord.e;
if (usedFields.contains(field)) {
expressions.add(fieldReference(parameter, field));
} else {
final Primitive primitive =
- Primitive.of(targetPhysType.fieldClass(field));
+ Primitive.of(targetPhysType.fieldClass(ord.i));
expressions.add(
Expressions.constant(
primitive != null ? primitive.defaultValue : null));
@@ -213,7 +215,7 @@ public class PhysTypeImpl implements PhysType {
}
public List<Expression> accessors(Expression v1, List<Integer> argList) {
- final List<Expression> expressions = new ArrayList<Expression>();
+ final List<Expression> expressions = new ArrayList<>();
for (int field : argList) {
expressions.add(
Types.castIfNecessary(
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
index 42d1b56..dbaf7cc 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
@@ -51,6 +51,7 @@ import org.apache.calcite.rel.core.TableScan;
import org.apache.calcite.rel.metadata.RelMetadataProvider;
import org.apache.calcite.rel.metadata.RelMetadataQuery;
import org.apache.calcite.rel.rules.AggregateJoinTransposeRule;
+import org.apache.calcite.rel.rules.AggregateProjectMergeRule;
import org.apache.calcite.rel.rules.AggregateRemoveRule;
import org.apache.calcite.rel.rules.CalcRemoveRule;
import org.apache.calcite.rel.rules.FilterJoinRule;
@@ -1070,6 +1071,7 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
addRule(UnionToDistinctRule.INSTANCE);
addRule(ProjectRemoveRule.INSTANCE);
addRule(AggregateJoinTransposeRule.INSTANCE);
+ addRule(AggregateProjectMergeRule.INSTANCE);
addRule(CalcRemoveRule.INSTANCE);
addRule(SortRemoveRule.INSTANCE);
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java
index 0f611da..91e33f2 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateProjectMergeRule.java
@@ -114,8 +114,7 @@ public class AggregateProjectMergeRule extends RelOptRule {
// Add a project if the group set is not in the same order or
// contains duplicates.
RelNode rel = newAggregate;
- //noinspection EqualsBetweenInconvertibleTypes
- if (!newGroupSet.toList().equals(newKeys)) {
+ if (!newKeys.equals(newGroupSet.asList())) {
final List<Integer> posList = Lists.newArrayList();
for (int newKey : newKeys) {
posList.add(newGroupSet.indexOf(newKey));
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
index ead7cd5..95ca9c8 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateReduceFunctionsRule.java
@@ -153,7 +153,7 @@ public class AggregateReduceFunctionsRule extends RelOptRule {
// will add an expression to the end, and we will create an extra
// project.
RelNode input = oldAggRel.getInput();
- List<RexNode> inputExprs = new ArrayList<RexNode>();
+ final List<RexNode> inputExprs = new ArrayList<>();
for (RelDataTypeField field : input.getRowType().getFieldList()) {
inputExprs.add(
rexBuilder.makeInputRef(
@@ -249,8 +249,9 @@ public class AggregateReduceFunctionsRule extends RelOptRule {
// anything else: preserve original call
RexBuilder rexBuilder = oldAggRel.getCluster().getRexBuilder();
final int nGroups = oldAggRel.getGroupCount();
- List<RelDataType> oldArgTypes = SqlTypeUtil
- .projectTypes(oldAggRel.getRowType(), oldCall.getArgList());
+ List<RelDataType> oldArgTypes =
+ SqlTypeUtil.projectTypes(
+ oldAggRel.getInput().getRowType(), oldCall.getArgList());
return rexBuilder.addAggCall(oldCall,
nGroups,
oldAggRel.indicator,
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
index 5c11012..6031717 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateRemoveRule.java
@@ -18,6 +18,7 @@ package org.apache.calcite.rel.rules;
import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelOptUtil;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.logical.LogicalAggregate;
@@ -52,20 +53,29 @@ public class AggregateRemoveRule extends RelOptRule {
//~ Methods ----------------------------------------------------------------
public void onMatch(RelOptRuleCall call) {
- LogicalAggregate distinct = call.rel(0);
- RelNode child = call.rel(1);
- if (!distinct.getAggCallList().isEmpty()
- || !child.isKey(distinct.getGroupSet())) {
+ final LogicalAggregate aggregate = call.rel(0);
+ final RelNode input = call.rel(1);
+ if (!aggregate.getAggCallList().isEmpty()
+ || aggregate.indicator
+ || !input.isKey(aggregate.getGroupSet())) {
return;
}
// Distinct is "GROUP BY c1, c2" (where c1, c2 are a set of columns on
// which the input is unique, i.e. contain a key) and has no aggregate
// functions. It can be removed.
- child = call.getPlanner().register(child, distinct);
- call.transformTo(
- convert(
- child,
- distinct.getTraitSet()));
+ final RelNode newInput = convert(input, aggregate.getTraitSet());
+
+ // If aggregate was projecting a subset of columns, add a project for the
+ // same effect.
+ RelNode rel;
+ if (newInput.getRowType().getFieldCount()
+ > aggregate.getRowType().getFieldCount()) {
+ rel = RelOptUtil.createProject(newInput,
+ aggregate.getGroupSet().toList());
+ } else {
+ rel = newInput;
+ }
+ call.transformTo(rel);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/java/org/apache/calcite/test/JdbcFrontJdbcBackLinqMiddleTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcFrontJdbcBackLinqMiddleTest.java b/core/src/test/java/org/apache/calcite/test/JdbcFrontJdbcBackLinqMiddleTest.java
index 3100a86..e6235de 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcFrontJdbcBackLinqMiddleTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcFrontJdbcBackLinqMiddleTest.java
@@ -270,7 +270,7 @@ public class JdbcFrontJdbcBackLinqMiddleTest {
.query(
"select \"store\".\"store_country\" as \"c0\", sum(\"inventory_fact_1997\".\"supply_time\") as \"m0\" from \"store\" as \"store\", \"inventory_fact_1997\" as \"inventory_fact_1997\" where \"inventory_fact_1997\".\"store_id\" = \"store\".\"store_id\" group by \"store\".\"store_country\"")
.planContains(
- " final org.apache.calcite.linq4j.Enumerable _inputEnumerable1 = left.join(right, new org.apache.calcite.linq4j.function.Function1() {\n");
+ " return left.join(right, new org.apache.calcite.linq4j.function.Function1() {\n");
}
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/java/org/apache/calcite/test/JdbcTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
index 0f0e162..c5a75ca 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -125,6 +125,7 @@ import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Properties;
+import java.util.Set;
import java.util.TimeZone;
import java.util.regex.Pattern;
import javax.sql.DataSource;
@@ -863,7 +864,7 @@ public class JdbcTest {
java.sql.Driver driver = DriverManager.getDriver("jdbc:calcite:");
final DriverPropertyInfo[] propertyInfo =
driver.getPropertyInfo("jdbc:calcite:", new Properties());
- final HashSet<String> names = new HashSet<String>();
+ final Set<String> names = new HashSet<>();
for (DriverPropertyInfo info : propertyInfo) {
names.add(info.name);
}
@@ -1801,8 +1802,7 @@ public class JdbcTest {
/** Returns a list of (query, expected) pairs. The expected result is
* sometimes null. */
private static List<Pair<String, String>> querify(String[] queries1) {
- final List<Pair<String, String>> list =
- new ArrayList<Pair<String, String>>();
+ final List<Pair<String, String>> list = new ArrayList<>();
for (int i = 0; i < queries1.length; i++) {
String query = queries1[i];
String expected = null;
@@ -2477,11 +2477,12 @@ public class JdbcTest {
.query("select empno, desc from sales.emps,\n"
+ " (SELECT * FROM (VALUES (10, 'SameName')) AS t (id, desc)) as sn\n"
+ "where emps.deptno = sn.id and sn.desc = 'SameName' group by empno, desc")
- .explainContains("EnumerableAggregate(group=[{0, 1}])\n"
- + " EnumerableCalc(expr#0..3=[{inputs}], expr#4=[CAST($t3):INTEGER NOT NULL], expr#5=[=($t4, $t0)], expr#6=['SameName'], expr#7=[=($t1, $t6)], expr#8=[AND($t5, $t7)], EMPNO=[$t2], DESC=[$t1], $condition=[$t8])\n"
- + " EnumerableJoin(condition=[true], joinType=[inner])\n"
- + " EnumerableValues(tuples=[[{ 10, 'SameName' }]])\n"
- + " EnumerableTableScan(table=[[SALES, EMPS]])\n")
+ .explainContains("EnumerableCalc(expr#0..1=[{inputs}], EMPNO=[$t1], DESC=[$t0])\n"
+ + " EnumerableAggregate(group=[{1, 2}])\n"
+ + " EnumerableCalc(expr#0..3=[{inputs}], expr#4=[CAST($t3):INTEGER NOT NULL], expr#5=[=($t4, $t0)], expr#6=['SameName'], expr#7=[=($t1, $t6)], expr#8=[AND($t5, $t7)], proj#0..3=[{exprs}], $condition=[$t8])\n"
+ + " EnumerableJoin(condition=[true], joinType=[inner])\n"
+ + " EnumerableValues(tuples=[[{ 10, 'SameName' }]])\n"
+ + " EnumerableTableScan(table=[[SALES, EMPS]])\n")
.returns("EMPNO=1; DESC=SameName\n");
}
@@ -2525,9 +2526,8 @@ public class JdbcTest {
.with(CalciteAssert.Config.FOODMART_CLONE)
.query(s)
.explainContains("EnumerableAggregate(group=[{}], m0=[COUNT($0)])\n"
- + " EnumerableAggregate(group=[{0}])\n"
- + " EnumerableCalc(expr#0..7=[{inputs}], unit_sales=[$t7])\n"
- + " EnumerableTableScan(table=[[foodmart2, sales_fact_1997]])")
+ + " EnumerableAggregate(group=[{7}])\n"
+ + " EnumerableTableScan(table=[[foodmart2, sales_fact_1997]])")
.returns("m0=6\n");
}
@@ -2541,10 +2541,9 @@ public class JdbcTest {
.query(s)
.explainContains(""
+ "EnumerableCalc(expr#0..1=[{inputs}], expr#2=[CAST($t0):INTEGER NOT NULL], u=[$t2], m0=[$t1])\n"
- + " EnumerableAggregate(group=[{0}], m0=[COUNT($1)])\n"
- + " EnumerableAggregate(group=[{0, 1}])\n"
- + " EnumerableCalc(expr#0..7=[{inputs}], unit_sales=[$t7], customer_id=[$t2])\n"
- + " EnumerableTableScan(table=[[foodmart2, sales_fact_1997]])")
+ + " EnumerableAggregate(group=[{1}], m0=[COUNT($0)])\n"
+ + " EnumerableAggregate(group=[{2, 7}])\n"
+ + " EnumerableTableScan(table=[[foodmart2, sales_fact_1997]])")
.returnsUnordered(
"u=1; m0=523",
"u=5; m0=1059",
@@ -2567,13 +2566,12 @@ public class JdbcTest {
.query(s)
.explainContains(""
+ "EnumerableAggregate(group=[{0}], m0=[COUNT($1)])\n"
- + " EnumerableAggregate(group=[{0, 1}])\n"
- + " EnumerableCalc(expr#0..3=[{inputs}], c0=[$t1], unit_sales=[$t3])\n"
- + " EnumerableJoin(condition=[=($0, $2)], joinType=[inner])\n"
- + " EnumerableCalc(expr#0..9=[{inputs}], expr#10=[CAST($t4):INTEGER], expr#11=[1997], expr#12=[=($t10, $t11)], time_id=[$t0], the_year=[$t4], $condition=[$t12])\n"
- + " EnumerableTableScan(table=[[foodmart2, time_by_day]])\n"
- + " EnumerableCalc(expr#0..7=[{inputs}], time_id=[$t1], unit_sales=[$t7])\n"
- + " EnumerableTableScan(table=[[foodmart2, sales_fact_1997]])")
+ + " EnumerableAggregate(group=[{1, 3}])\n"
+ + " EnumerableJoin(condition=[=($0, $2)], joinType=[inner])\n"
+ + " EnumerableCalc(expr#0..9=[{inputs}], expr#10=[CAST($t4):INTEGER], expr#11=[1997], expr#12=[=($t10, $t11)], time_id=[$t0], the_year=[$t4], $condition=[$t12])\n"
+ + " EnumerableTableScan(table=[[foodmart2, time_by_day]])\n"
+ + " EnumerableCalc(expr#0..7=[{inputs}], time_id=[$t1], unit_sales=[$t7])\n"
+ + " EnumerableTableScan(table=[[foodmart2, sales_fact_1997]])")
.returns("c0=1997; m0=6\n");
}
@@ -2610,10 +2608,10 @@ public class JdbcTest {
+ " EnumerableTableScan(table=[[hr, emps]])")
.explainContains(""
+ "EnumerableCalc(expr#0..4=[{inputs}], proj#0..3=[{exprs}])\n"
- + " EnumerableSemiJoin(condition=[=($4, $5)], joinType=[inner])\n"
+ + " EnumerableSemiJoin(condition=[=($4, $6)], joinType=[inner])\n"
+ " EnumerableCalc(expr#0..3=[{inputs}], proj#0..3=[{exprs}], $f4=[$t0])\n"
+ " EnumerableTableScan(table=[[hr, depts]])\n"
- + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[150], expr#6=[<($t0, $t5)], deptno=[$t1], $condition=[$t6])\n"
+ + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[150], expr#6=[<($t0, $t5)], proj#0..4=[{exprs}], $condition=[$t6])\n"
+ " EnumerableTableScan(table=[[hr, emps]])")
.returnsUnordered(
"deptno=10; name=Sales; employees=[Employee [empid: 100, deptno: 10, name: Bill], Employee [empid: 150, deptno: 10, name: Sebastian]]; location=Location [x: -122, y: 38]");
@@ -2919,12 +2917,11 @@ public class JdbcTest {
.returns("C=25\n")
.explainContains("JdbcToEnumerableConverter\n"
+ " JdbcAggregate(group=[{}], C=[COUNT()])\n"
- + " JdbcProject(DUMMY=[0])\n"
- + " JdbcJoin(condition=[=($0, $1)], joinType=[inner])\n"
- + " JdbcProject(store_id=[$0])\n"
- + " JdbcTableScan(table=[[foodmart, store]])\n"
- + " JdbcProject(store_id=[$0])\n"
- + " JdbcTableScan(table=[[foodmart, store]])\n");
+ + " JdbcJoin(condition=[=($0, $1)], joinType=[inner])\n"
+ + " JdbcProject(store_id=[$0])\n"
+ + " JdbcTableScan(table=[[foodmart, store]])\n"
+ + " JdbcProject(store_id=[$0])\n"
+ + " JdbcTableScan(table=[[foodmart, store]])\n");
}
/** Tests composite GROUP BY where one of the columns has NULL values. */
@@ -3136,8 +3133,8 @@ public class JdbcTest {
+ "where \"deptno\" < 0")
.explainContains(""
+ "PLAN=EnumerableCalc(expr#0..1=[{inputs}], expr#2=[0], expr#3=[=($t0, $t2)], expr#4=[null], expr#5=[CASE($t3, $t4, $t1)], expr#6=[/($t5, $t0)], expr#7=[CAST($t6):JavaType(class java.lang.Integer)], CS=[$t0], C=[$t0], S=[$t5], A=[$t7])\n"
- + " EnumerableAggregate(group=[{}], CS=[COUNT()], agg#1=[$SUM0($0)])\n"
- + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[0], expr#6=[<($t1, $t5)], deptno=[$t1], $condition=[$t6])\n"
+ + " EnumerableAggregate(group=[{}], CS=[COUNT()], agg#1=[$SUM0($1)])\n"
+ + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[0], expr#6=[<($t1, $t5)], proj#0..4=[{exprs}], $condition=[$t6])\n"
+ " EnumerableTableScan(table=[[hr, emps]])\n")
.returns("CS=0; C=0; S=null; A=null\n");
}
@@ -3153,7 +3150,7 @@ public class JdbcTest {
.explainContains(""
+ "PLAN=EnumerableCalc(expr#0=[{inputs}], CS=[$t0], CS2=[$t0])\n"
+ " EnumerableAggregate(group=[{}], CS=[COUNT()])\n"
- + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[0], expr#6=[<($t1, $t5)], deptno=[$t1], $condition=[$t6])\n"
+ + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[0], expr#6=[<($t1, $t5)], proj#0..4=[{exprs}], $condition=[$t6])\n"
+ " EnumerableTableScan(table=[[hr, emps]])\n")
.returns("CS=0; CS2=0\n");
}
@@ -4925,7 +4922,7 @@ public class JdbcTest {
/** Tests saving query results into temporary tables, per
* {@link org.apache.calcite.avatica.Handler.ResultSink}. */
@Test public void testAutomaticTemporaryTable() throws Exception {
- final List<Object> objects = new ArrayList<Object>();
+ final List<Object> objects = new ArrayList<>();
CalciteAssert.that()
.with(
new CalciteAssert.ConnectionFactory() {
@@ -5876,9 +5873,8 @@ public class JdbcTest {
case HSQLDB:
assertThat(Util.toLinux(sqls[0]),
equalTo("SELECT COUNT(*) AS \"C\"\n"
- + "FROM (SELECT 0 AS \"DUMMY\"\n"
+ "FROM \"foodmart\".\"employee\"\n"
- + "WHERE \"first_name\" = 'abcde' AND \"gender\" = 'F') AS \"t0\""));
+ + "WHERE \"first_name\" = 'abcde' AND \"gender\" = 'F'"));
break;
}
}
@@ -5891,7 +5887,7 @@ public class JdbcTest {
final SchemaPlus rootSchema = calciteConnection.getRootSchema();
// create schema "/a"
- final Map<String, Schema> aSubSchemaMap = new HashMap<String, Schema>();
+ final Map<String, Schema> aSubSchemaMap = new HashMap<>();
final SchemaPlus aSchema = rootSchema.add("a", new AbstractSchema() {
@Override protected Map<String, Schema> getSubSchemaMap() {
return aSubSchemaMap;
@@ -5933,7 +5929,7 @@ public class JdbcTest {
}
// create schema "/a2"
- final Map<String, Schema> a2SubSchemaMap = new HashMap<String, Schema>();
+ final Map<String, Schema> a2SubSchemaMap = new HashMap<>();
final boolean[] changed = {false};
final SchemaPlus a2Schema = rootSchema.add("a", new AbstractSchema() {
@Override protected Map<String, Schema> getSubSchemaMap() {
@@ -6437,8 +6433,7 @@ public class JdbcTest {
/** Mock driver that a given {@link Handler}. */
public static class HandlerDriver extends org.apache.calcite.jdbc.Driver {
- private static final ThreadLocal<Handler> HANDLERS =
- new ThreadLocal<Handler>();
+ private static final ThreadLocal<Handler> HANDLERS = new ThreadLocal<>();
public HandlerDriver() {
}
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/java/org/apache/calcite/test/LatticeTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/LatticeTest.java b/core/src/test/java/org/apache/calcite/test/LatticeTest.java
index 510cf8f..492b377 100644
--- a/core/src/test/java/org/apache/calcite/test/LatticeTest.java
+++ b/core/src/test/java/org/apache/calcite/test/LatticeTest.java
@@ -358,15 +358,14 @@ public class LatticeTest {
+ "GROUP BY \"s\".\"unit_sales\", \"p\".\"recyclable_package\", \"t\".\"the_day\", \"t\".\"the_year\", \"t\".\"quarter\", \"pc\".\"product_family\"")
.explainContains(
"JdbcToEnumerableConverter\n"
- + " JdbcAggregate(group=[{0, 1, 2, 3, 4, 5}], m0=[COUNT()], m1=[SUM($6)], m2=[SUM($0)])\n"
- + " JdbcProject(unit_sales=[$12], recyclable_package=[$21], the_day=[$30], the_year=[$32], quarter=[$36], product_family=[$4], store_sales=[$10])\n"
- + " JdbcJoin(condition=[=($13, $0)], joinType=[inner])\n"
- + " JdbcTableScan(table=[[foodmart, product_class]])\n"
- + " JdbcJoin(condition=[=($1, $23)], joinType=[inner])\n"
- + " JdbcJoin(condition=[=($0, $9)], joinType=[inner])\n"
- + " JdbcTableScan(table=[[foodmart, sales_fact_1997]])\n"
- + " JdbcTableScan(table=[[foodmart, product]])\n"
- + " JdbcTableScan(table=[[foodmart, time_by_day]])");
+ + " JdbcAggregate(group=[{7, 16, 25, 27, 31, 37}], m0=[COUNT()], m1=[SUM($5)], m2=[SUM($7)])\n"
+ + " JdbcJoin(condition=[=($8, $33)], joinType=[inner])\n"
+ + " JdbcJoin(condition=[=($1, $23)], joinType=[inner])\n"
+ + " JdbcJoin(condition=[=($0, $9)], joinType=[inner])\n"
+ + " JdbcTableScan(table=[[foodmart, sales_fact_1997]])\n"
+ + " JdbcTableScan(table=[[foodmart, product]])\n"
+ + " JdbcTableScan(table=[[foodmart, time_by_day]])\n"
+ + " JdbcTableScan(table=[[foodmart, product_class]])");
}
/** Tests a query that uses no columns from the fact table. */
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCorrelateTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCorrelateTest.java b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCorrelateTest.java
index 710d1c1..e4ae781 100644
--- a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCorrelateTest.java
+++ b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableCorrelateTest.java
@@ -33,13 +33,12 @@ public class EnumerableCorrelateTest {
"select empid, name from emps e where exists (select 1 from depts d where d.deptno=e.deptno)")
.explainContains(
"EnumerableCalc(expr#0..4=[{inputs}], empid=[$t0], name=[$t2])\n"
- + " EnumerableSemiJoin(condition=[=($1, $5)], joinType=[inner])\n"
+ + " EnumerableSemiJoin(condition=[=($1, $6)], joinType=[inner])\n"
+ " EnumerableTableScan(table=[[s, emps]])\n"
- + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], deptno0=[$t0], $f0=[$t5])\n"
+ + " EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], $f0=[$t5], deptno0=[$t0])\n"
+ " EnumerableJoin(condition=[=($0, $1)], joinType=[inner])\n"
- + " EnumerableAggregate(group=[{0}])\n"
- + " EnumerableCalc(expr#0..4=[{inputs}], deptno=[$t1])\n"
- + " EnumerableTableScan(table=[[s, emps]])\n"
+ + " EnumerableAggregate(group=[{1}])\n"
+ + " EnumerableTableScan(table=[[s, emps]])\n"
+ " EnumerableTableScan(table=[[s, depts]])")
.returnsUnordered(
"empid=100; name=Bill",
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/resources/sql/join.oq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/join.oq b/core/src/test/resources/sql/join.oq
index 08ea3f1..a840f19 100644
--- a/core/src/test/resources/sql/join.oq
+++ b/core/src/test/resources/sql/join.oq
@@ -127,11 +127,9 @@ from "scott".emp join "scott".dept using (deptno);
!ok
EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0])
- EnumerableTableScan(table=[[scott, DEPT]])
- EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..7=[{inputs}], DEPTNO=[$t7])
- EnumerableTableScan(table=[[scott, EMP]])
+ EnumerableTableScan(table=[[scott, DEPT]])
+ EnumerableAggregate(group=[{7}])
+ EnumerableTableScan(table=[[scott, EMP]])
!plan
select distinct dept.deptno
@@ -147,12 +145,11 @@ from "scott".emp join "scott".dept using (deptno);
!ok
EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..1=[{inputs}], DEPTNO=[$t0])
- EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
- EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0])
- EnumerableTableScan(table=[[scott, DEPT]])
- EnumerableCalc(expr#0..7=[{inputs}], DEPTNO=[$t7])
- EnumerableTableScan(table=[[scott, EMP]])
+ EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
+ EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0])
+ EnumerableTableScan(table=[[scott, DEPT]])
+ EnumerableCalc(expr#0..7=[{inputs}], DEPTNO=[$t7])
+ EnumerableTableScan(table=[[scott, EMP]])
!plan
# [CALCITE-676] AssertionError in GROUPING SETS query
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/resources/sql/misc.oq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/misc.oq b/core/src/test/resources/sql/misc.oq
index dbd1fbc..4d4bc80 100644
--- a/core/src/test/resources/sql/misc.oq
+++ b/core/src/test/resources/sql/misc.oq
@@ -244,9 +244,8 @@ EnumerableSemiJoin(condition=[=($1, $5)], joinType=[inner])
EnumerableTableScan(table=[[hr, emps]])
EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], deptno0=[$t0], $f0=[$t5])
EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
- EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..4=[{inputs}], deptno=[$t1])
- EnumerableTableScan(table=[[hr, emps]])
+ EnumerableAggregate(group=[{1}])
+ EnumerableTableScan(table=[[hr, emps]])
EnumerableTableScan(table=[[hr, depts]])
!plan
@@ -266,12 +265,11 @@ where not exists (
EnumerableCalc(expr#0..6=[{inputs}], expr#7=[IS NOT NULL($t6)], expr#8=[NOT($t7)], proj#0..4=[{exprs}], $condition=[$t8])
EnumerableJoin(condition=[=($1, $5)], joinType=[left])
EnumerableTableScan(table=[[hr, emps]])
- EnumerableAggregate(group=[{0}], agg#0=[MIN($1)])
- EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], deptno0=[$t0], $f0=[$t5])
+ EnumerableAggregate(group=[{1}], agg#0=[MIN($0)])
+ EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], $f0=[$t5], deptno0=[$t0])
EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
- EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..4=[{inputs}], deptno=[$t1])
- EnumerableTableScan(table=[[hr, emps]])
+ EnumerableAggregate(group=[{1}])
+ EnumerableTableScan(table=[[hr, emps]])
EnumerableTableScan(table=[[hr, depts]])
!plan
@@ -298,26 +296,23 @@ EnumerableCalc(expr#0..7=[{inputs}], expr#8=[IS NOT NULL($t5)], expr#9=[NOT($t8)
EnumerableCalc(expr#0..6=[{inputs}], proj#0..4=[{exprs}], $f0=[$t6])
EnumerableJoin(condition=[=($1, $5)], joinType=[left])
EnumerableTableScan(table=[[hr, emps]])
- EnumerableAggregate(group=[{0}], agg#0=[MIN($1)])
- EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], deptno0=[$t0], $f0=[$t5])
+ EnumerableAggregate(group=[{1}], agg#0=[MIN($0)])
+ EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], $f0=[$t5], deptno0=[$t0])
EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
- EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..4=[{inputs}], deptno=[$t1])
- EnumerableTableScan(table=[[hr, emps]])
+ EnumerableAggregate(group=[{1}])
+ EnumerableTableScan(table=[[hr, emps]])
EnumerableTableScan(table=[[hr, depts]])
- EnumerableAggregate(group=[{0}], agg#0=[MIN($1)])
- EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], expr#6=[90], expr#7=[+($t1, $t6)], expr#8=[CAST($t0):INTEGER NOT NULL], expr#9=[=($t7, $t8)], empid=[$t0], $f0=[$t5], $condition=[$t9])
+ EnumerableAggregate(group=[{1}], agg#0=[MIN($0)])
+ EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], expr#6=[90], expr#7=[+($t1, $t6)], expr#8=[CAST($t0):INTEGER NOT NULL], expr#9=[=($t7, $t8)], $f0=[$t5], empid=[$t0], $condition=[$t9])
EnumerableJoin(condition=[true], joinType=[inner])
EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..4=[{inputs}], empid=[$t0])
- EnumerableSemiJoin(condition=[=($1, $5)], joinType=[inner])
- EnumerableTableScan(table=[[hr, emps]])
- EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], deptno0=[$t0], $f0=[$t5])
- EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
- EnumerableAggregate(group=[{0}])
- EnumerableCalc(expr#0..4=[{inputs}], deptno=[$t1])
- EnumerableTableScan(table=[[hr, emps]])
- EnumerableTableScan(table=[[hr, depts]])
+ EnumerableSemiJoin(condition=[=($1, $6)], joinType=[inner])
+ EnumerableTableScan(table=[[hr, emps]])
+ EnumerableCalc(expr#0..4=[{inputs}], expr#5=[true], $f0=[$t5], deptno0=[$t0])
+ EnumerableJoin(condition=[=($0, $1)], joinType=[inner])
+ EnumerableAggregate(group=[{1}])
+ EnumerableTableScan(table=[[hr, emps]])
+ EnumerableTableScan(table=[[hr, depts]])
EnumerableTableScan(table=[[hr, depts]])
!plan
@@ -380,12 +375,11 @@ select count(*) as c from "hr"."emps", "hr"."depts";
!ok
EnumerableAggregate(group=[{}], C=[COUNT()])
- EnumerableCalc(expr#0..1=[{inputs}], expr#2=[0], DUMMY=[$t2])
- EnumerableJoin(condition=[true], joinType=[inner])
- EnumerableCalc(expr#0..3=[{inputs}], expr#4=[0], DUMMY=[$t4])
- EnumerableTableScan(table=[[hr, depts]])
- EnumerableCalc(expr#0..4=[{inputs}], expr#5=[0], DUMMY=[$t5])
- EnumerableTableScan(table=[[hr, emps]])
+ EnumerableJoin(condition=[true], joinType=[inner])
+ EnumerableCalc(expr#0..3=[{inputs}], expr#4=[0], DUMMY=[$t4])
+ EnumerableTableScan(table=[[hr, depts]])
+ EnumerableCalc(expr#0..4=[{inputs}], expr#5=[0], DUMMY=[$t5])
+ EnumerableTableScan(table=[[hr, emps]])
!plan
# [CALCITE-345] AssertionError in RexToLixTranslator comparing to date literal
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/8276f258/core/src/test/resources/sql/subquery.oq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/subquery.oq b/core/src/test/resources/sql/subquery.oq
index 409ca4e..db345a5 100644
--- a/core/src/test/resources/sql/subquery.oq
+++ b/core/src/test/resources/sql/subquery.oq
@@ -37,12 +37,11 @@ EnumerableCalc(expr#0..5=[{inputs}], expr#6=[0], expr#7=[=($t1, $t6)], expr#8=[f
EnumerableCalc(expr#0..2=[{inputs}], $f0=[$t2], $f1=[$t0], $f2=[$t1], $f3=[$t2])
EnumerableJoin(condition=[true], joinType=[inner])
EnumerableAggregate(group=[{}], agg#0=[COUNT()], agg#1=[COUNT($0)])
- EnumerableCalc(expr#0=[{inputs}], expr#1=[true], proj#0..1=[{exprs}])
- EnumerableUnion(all=[true])
- EnumerableCalc(expr#0=[{inputs}], expr#1=[1], EXPR$0=[$t1])
- EnumerableValues(tuples=[[{ 0 }]])
- EnumerableCalc(expr#0=[{inputs}], expr#1=[1], expr#2=[=($t1, $t1)], expr#3=[null], expr#4=[3], expr#5=[CASE($t2, $t3, $t4)], EXPR$0=[$t5])
- EnumerableValues(tuples=[[{ 0 }]])
+ EnumerableUnion(all=[true])
+ EnumerableCalc(expr#0=[{inputs}], expr#1=[1], EXPR$0=[$t1])
+ EnumerableValues(tuples=[[{ 0 }]])
+ EnumerableCalc(expr#0=[{inputs}], expr#1=[1], expr#2=[=($t1, $t1)], expr#3=[null], expr#4=[3], expr#5=[CASE($t2, $t3, $t4)], EXPR$0=[$t5])
+ EnumerableValues(tuples=[[{ 0 }]])
EnumerableUnion(all=[true])
EnumerableCalc(expr#0=[{inputs}], expr#1=[1], EXPR$0=[$t1])
EnumerableValues(tuples=[[{ 0 }]])