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