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/08/01 00:43:18 UTC
[41/50] [abbrv] incubator-calcite git commit: [CALCITE-729]
IndexOutOfBoundsException in ROLLUP query on JDBC data source
[CALCITE-729] IndexOutOfBoundsException in ROLLUP query on JDBC data source
Add "jdbc_scott" Quidem data source
Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/bf423761
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/bf423761
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/bf423761
Branch: refs/heads/branch-release
Commit: bf423761a7abb58015587b53c4b06162cbbfad0f
Parents: ee68f83
Author: Julian Hyde <jh...@apache.org>
Authored: Sat May 16 18:08:45 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Sat May 16 18:23:41 2015 -0700
----------------------------------------------------------------------
.../apache/calcite/adapter/jdbc/JdbcRules.java | 19 +++++++++-----
.../org/apache/calcite/test/CalciteAssert.java | 12 +++++++--
.../java/org/apache/calcite/test/JdbcTest.java | 5 ++++
core/src/test/resources/sql/agg.oq | 27 ++++++++++++++++++++
4 files changed, 55 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf423761/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
index 307434f..c75bcd4 100644
--- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
+++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
@@ -199,7 +199,7 @@ public class JdbcRules {
@Override public RelNode convert(RelNode rel) {
LogicalJoin join = (LogicalJoin) rel;
- List<RelNode> newInputs = new ArrayList<RelNode>();
+ final List<RelNode> newInputs = new ArrayList<>();
for (RelNode input : join.getInputs()) {
if (!(input.getConvention() == getOutTrait())) {
input =
@@ -509,7 +509,7 @@ public class JdbcRules {
JdbcImplementor.Clause.WHERE)
: x.builder(this, JdbcImplementor.Clause.FROM);
if (!isStar(program)) {
- final List<SqlNode> selectList = new ArrayList<SqlNode>();
+ final List<SqlNode> selectList = new ArrayList<>();
for (RexLocalRef ref : program.getProjectList()) {
SqlNode sqlExpr = builder.context.toSql(program, ref);
addSelect(selectList, sqlExpr, getRowType());
@@ -586,7 +586,7 @@ public class JdbcRules {
}
final JdbcImplementor.Builder builder =
x.builder(this, JdbcImplementor.Clause.SELECT);
- final List<SqlNode> selectList = new ArrayList<SqlNode>();
+ final List<SqlNode> selectList = new ArrayList<>();
for (RexNode ref : exps) {
SqlNode sqlExpr = builder.context.toSql(null, ref);
addSelect(selectList, sqlExpr, getRowType());
@@ -654,6 +654,11 @@ public class JdbcRules {
public RelNode convert(RelNode rel) {
final LogicalAggregate agg = (LogicalAggregate) rel;
+ if (agg.getGroupSets().size() != 1) {
+ // GROUPING SETS not supported; see
+ // [CALCITE-734] Push GROUPING SETS to underlying SQL via JDBC adapter
+ return null;
+ }
final RelTraitSet traitSet =
agg.getTraitSet().replace(out);
try {
@@ -680,6 +685,8 @@ public class JdbcRules {
throws InvalidRelException {
super(cluster, traitSet, input, indicator, groupSet, groupSets, aggCalls);
assert getConvention() instanceof JdbcConvention;
+ assert this.groupSets.size() == 1 : "Grouping sets not supported";
+ assert !this.indicator;
for (AggregateCall aggCall : aggCalls) {
if (!canImplement(aggCall.getAggregation())) {
throw new InvalidRelException("cannot implement aggregate function "
@@ -717,7 +724,7 @@ public class JdbcRules {
final JdbcImplementor.Builder builder =
x.builder(this, JdbcImplementor.Clause.GROUP_BY);
List<SqlNode> groupByList = Expressions.list();
- final List<SqlNode> selectList = new ArrayList<SqlNode>();
+ final List<SqlNode> selectList = new ArrayList<>();
for (int group : groupSet) {
final SqlNode field = builder.context.field(group);
addSelect(selectList, field, getRowType());
@@ -1047,9 +1054,9 @@ public class JdbcRules {
final JdbcImplementor.Context context =
implementor.new AliasContext(
Collections.<Pair<String, RelDataType>>emptyList(), false);
- final List<SqlSelect> selects = new ArrayList<SqlSelect>();
+ final List<SqlSelect> selects = new ArrayList<>();
for (List<RexLiteral> tuple : tuples) {
- final List<SqlNode> selectList = new ArrayList<SqlNode>();
+ final List<SqlNode> selectList = new ArrayList<>();
for (Pair<RexLiteral, String> literal : Pair.zip(tuple, fields)) {
selectList.add(
SqlStdOperatorTable.AS.createCall(
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf423761/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/CalciteAssert.java b/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
index 8160c71..7a64672 100644
--- a/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
+++ b/core/src/test/java/org/apache/calcite/test/CalciteAssert.java
@@ -639,8 +639,8 @@ public class CalciteAssert {
cs = DatabaseInstance.HSQLDB.scott;
dataSource = JdbcSchema.dataSource(cs.url, cs.driver, cs.username,
cs.password);
- return rootSchema.add("jdbc_scott",
- JdbcSchema.create(rootSchema, "jdbc_scott", dataSource, null, null));
+ return rootSchema.add("JDBC_SCOTT",
+ JdbcSchema.create(rootSchema, "JDBC_SCOTT", dataSource, null, null));
case JDBC_FOODMART:
cs = DB.foodmart;
dataSource =
@@ -784,6 +784,8 @@ public class CalciteAssert {
return with(SchemaSpec.CLONE_FOODMART);
case JDBC_FOODMART_WITH_LATTICE:
return with(SchemaSpec.JDBC_FOODMART_WITH_LATTICE);
+ case JDBC_SCOTT:
+ return with(SchemaSpec.JDBC_SCOTT);
case SCOTT:
return with(SchemaSpec.SCOTT);
default:
@@ -1406,6 +1408,12 @@ public class CalciteAssert {
*/
JDBC_FOODMART,
+ /**
+ * Configuration that creates a connection to hsqldb containing the
+ * Scott schema via the JDBC adapter.
+ */
+ JDBC_SCOTT,
+
/** Configuration that contains an in-memory clone of the FoodMart
* database. */
FOODMART_CLONE,
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf423761/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 0b1ecbf..164af78 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -4607,6 +4607,11 @@ public class JdbcTest {
.with(CalciteAssert.Config.SCOTT)
.connect();
}
+ if (name.equals("jdbc_scott")) {
+ return CalciteAssert.that()
+ .with(CalciteAssert.Config.JDBC_SCOTT)
+ .connect();
+ }
if (name.equals("post")) {
return CalciteAssert.that()
.with(CalciteAssert.Config.REGULAR)
http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf423761/core/src/test/resources/sql/agg.oq
----------------------------------------------------------------------
diff --git a/core/src/test/resources/sql/agg.oq b/core/src/test/resources/sql/agg.oq
index 501b945..0cb2dba 100644
--- a/core/src/test/resources/sql/agg.oq
+++ b/core/src/test/resources/sql/agg.oq
@@ -691,4 +691,31 @@ group by deptno;
!ok
+# [CALCITE-729] IndexOutOfBoundsException in ROLLUP query on JDBC data source
+!use jdbc_scott
+select deptno, job, count(*) as c
+from jdbc_scott.emp
+group by rollup (deptno, job)
+order by 1, 2;
++--------+-----------+----+
+| DEPTNO | JOB | C |
++--------+-----------+----+
+| 10 | CLERK | 1 |
+| 10 | MANAGER | 1 |
+| 10 | PRESIDENT | 1 |
+| 10 | | 3 |
+| 20 | ANALYST | 2 |
+| 20 | CLERK | 2 |
+| 20 | MANAGER | 1 |
+| 20 | | 5 |
+| 30 | CLERK | 1 |
+| 30 | MANAGER | 1 |
+| 30 | SALESMAN | 4 |
+| 30 | | 6 |
+| | | 14 |
++--------+-----------+----+
+(13 rows)
+
+!ok
+
# End agg.oq