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/05/17 02:14:25 UTC

[1/4] incubator-calcite git commit: [CALCITE-728] Test suite hangs on Windows

Repository: incubator-calcite
Updated Branches:
  refs/heads/master bc45a2c04 -> ee68f8335


[CALCITE-728] Test suite hangs on Windows


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/a27bb57a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/a27bb57a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/a27bb57a

Branch: refs/heads/master
Commit: a27bb57ab612fdb87d77cb073f9aaa93499ee775
Parents: bc45a2c
Author: Julian Hyde <jh...@apache.org>
Authored: Fri May 15 10:10:16 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri May 15 10:10:16 2015 -0700

----------------------------------------------------------------------
 core/src/test/java/org/apache/calcite/test/FoodmartTest.java    | 2 +-
 core/src/test/java/org/apache/calcite/test/JdbcTest.java        | 2 +-
 core/src/test/java/org/apache/calcite/tools/FrameworksTest.java | 2 +-
 pom.xml                                                         | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a27bb57a/core/src/test/java/org/apache/calcite/test/FoodmartTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/FoodmartTest.java b/core/src/test/java/org/apache/calcite/test/FoodmartTest.java
index 4a4a6a5..53c8dc9 100644
--- a/core/src/test/java/org/apache/calcite/test/FoodmartTest.java
+++ b/core/src/test/java/org/apache/calcite/test/FoodmartTest.java
@@ -109,7 +109,7 @@ public class FoodmartTest {
     if (!CalciteAssert.ENABLE_SLOW && idList == null) {
       // Avoid loading the query set in a regular test suite run. It burns too
       // much memory.
-      return ImmutableList.of(new Object[] {-1});
+      return ImmutableList.of();
     }
     final FoodMartQuerySet set = FoodMartQuerySet.instance();
     final List<Object[]> list = new ArrayList<Object[]>();

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a27bb57a/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 8f73fbd..874d21a 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -278,7 +278,7 @@ public class JdbcTest {
                         + "insert into \"adhoc\".V\n"
                         + "values ('Fred', 56, 123.4)");
                 assertThat(resultSet.next(), is(true));
-                assertThat(resultSet.getString(1),
+                assertThat(Util.toLinux(resultSet.getString(1)),
                     is(
                         "EnumerableTableModify(table=[[adhoc, MUTABLE_EMPLOYEES]], operation=[INSERT], updateColumnList=[[]], flattened=[false])\n"
                         + "  EnumerableCalc(expr#0..2=[{inputs}], expr#3=[CAST($t1):JavaType(int) NOT NULL], expr#4=[10], expr#5=[CAST($t0):JavaType(class java.lang.String)], expr#6=[CAST($t2):JavaType(float) NOT NULL], expr#7=[null], empid=[$t3], deptno=[$t4], name=[$t5], salary=[$t6], commission=[$t7])\n"

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a27bb57a/core/src/test/java/org/apache/calcite/tools/FrameworksTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/tools/FrameworksTest.java b/core/src/test/java/org/apache/calcite/tools/FrameworksTest.java
index 13cc03b..9a4756b 100644
--- a/core/src/test/java/org/apache/calcite/tools/FrameworksTest.java
+++ b/core/src/test/java/org/apache/calcite/tools/FrameworksTest.java
@@ -185,7 +185,7 @@ public class FrameworksTest {
     String expandedStr =
         "SELECT `emps`.`empid`, `emps`.`deptno`, `emps`.`name`, `emps`.`salary`, `emps`.`commission`\n"
             + "FROM `hr`.`emps` AS `emps`";
-    assertThat(valStr, equalTo(expandedStr));
+    assertThat(Util.toLinux(valStr), equalTo(expandedStr));
   }
 
   /** Dummy type system, similar to Hive's, accessed via an INSTANCE member. */

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/a27bb57a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c573a84..187321d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -200,7 +200,7 @@ limitations under the License.
       <dependency>
         <groupId>net.hydromatic</groupId>
         <artifactId>quidem</artifactId>
-        <version>0.4</version>
+        <version>0.5</version>
       </dependency>
       <dependency>
         <groupId>net.hydromatic</groupId>


[2/4] incubator-calcite git commit: [CALCITE-730] ClassCastException in table from CloneSchema

Posted by jh...@apache.org.
[CALCITE-730] ClassCastException in table from CloneSchema


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/bf86ef9d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/bf86ef9d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/bf86ef9d

Branch: refs/heads/master
Commit: bf86ef9d225df1fe1aa30b67239e5bb764ff35f3
Parents: a27bb57
Author: Julian Hyde <jh...@apache.org>
Authored: Fri May 15 21:37:35 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri May 15 21:38:57 2015 -0700

----------------------------------------------------------------------
 .../apache/calcite/avatica/ColumnMetaData.java  |  51 +++++++++
 .../apache/calcite/adapter/jdbc/JdbcTable.java  |  19 ++--
 .../apache/calcite/adapter/jdbc/JdbcUtils.java  |  16 +--
 .../java/org/apache/calcite/test/JdbcTest.java  | 111 +++++++++++++------
 4 files changed, 146 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf86ef9d/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java b/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
index e0a50b6..2d7821e 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
@@ -25,7 +25,9 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
 import java.lang.reflect.Type;
 import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
 import java.sql.Time;
 import java.sql.Timestamp;
 import java.sql.Types;
@@ -221,6 +223,55 @@ public class ColumnMetaData {
       final Rep rep = VALUE_MAP.get(clazz);
       return rep != null ? rep : OBJECT;
     }
+
+    /** Returns the value of a column of this type from a result set. */
+    public Object jdbcGet(ResultSet resultSet, int i) throws SQLException {
+      switch (this) {
+      case PRIMITIVE_BOOLEAN:
+        return resultSet.getBoolean(i);
+      case PRIMITIVE_BYTE:
+        return resultSet.getByte(i);
+      case PRIMITIVE_SHORT:
+        return resultSet.getShort(i);
+      case PRIMITIVE_INT:
+        return resultSet.getInt(i);
+      case PRIMITIVE_LONG:
+        return resultSet.getLong(i);
+      case PRIMITIVE_FLOAT:
+        return resultSet.getFloat(i);
+      case PRIMITIVE_DOUBLE:
+        return resultSet.getDouble(i);
+      case BOOLEAN:
+        final boolean aBoolean = resultSet.getBoolean(i);
+        return resultSet.wasNull() ? null : aBoolean;
+      case BYTE:
+        final byte aByte = resultSet.getByte(i);
+        return resultSet.wasNull() ? null : aByte;
+      case SHORT:
+        final short aShort = resultSet.getShort(i);
+        return resultSet.wasNull() ? null : aShort;
+      case INTEGER:
+        final int anInt = resultSet.getInt(i);
+        return resultSet.wasNull() ? null : anInt;
+      case LONG:
+        final long aLong = resultSet.getLong(i);
+        return resultSet.wasNull() ? null : aLong;
+      case FLOAT:
+        final float aFloat = resultSet.getFloat(i);
+        return resultSet.wasNull() ? null : aFloat;
+      case DOUBLE:
+        final double aDouble = resultSet.getDouble(i);
+        return resultSet.wasNull() ? null : aDouble;
+      case JAVA_SQL_DATE:
+        return resultSet.getDate(i);
+      case JAVA_SQL_TIME:
+        return resultSet.getTime(i);
+      case JAVA_SQL_TIMESTAMP:
+        return resultSet.getTimestamp(i);
+      default:
+        return resultSet.getObject(i);
+      }
+    }
   }
 
   /** Base class for a column type. */

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf86ef9d/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcTable.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcTable.java
index 976e311..fe6da60 100644
--- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcTable.java
+++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcTable.java
@@ -19,12 +19,12 @@ package org.apache.calcite.adapter.jdbc;
 import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.java.AbstractQueryableTable;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
+import org.apache.calcite.avatica.ColumnMetaData;
 import org.apache.calcite.jdbc.CalciteConnection;
 import org.apache.calcite.linq4j.Enumerable;
 import org.apache.calcite.linq4j.Enumerator;
 import org.apache.calcite.linq4j.QueryProvider;
 import org.apache.calcite.linq4j.Queryable;
-import org.apache.calcite.linq4j.tree.Primitive;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.type.RelDataType;
@@ -108,16 +108,19 @@ class JdbcTable extends AbstractQueryableTable
     return protoRowType.apply(typeFactory);
   }
 
-  private List<Pair<Primitive, Integer>> fieldClasses(
+  private List<Pair<ColumnMetaData.Rep, Integer>> fieldClasses(
       final JavaTypeFactory typeFactory) {
     final RelDataType rowType = protoRowType.apply(typeFactory);
     return Lists.transform(rowType.getFieldList(),
-        new Function<RelDataTypeField, Pair<Primitive, Integer>>() {
-          public Pair<Primitive, Integer> apply(RelDataTypeField field) {
-            RelDataType type = field.getType();
-            Class clazz = (Class) typeFactory.getJavaClass(type);
-            return Pair.of(Util.first(Primitive.of(clazz), Primitive.OTHER),
-                type.getSqlTypeName().getJdbcOrdinal());
+        new Function<RelDataTypeField, Pair<ColumnMetaData.Rep, Integer>>() {
+          public Pair<ColumnMetaData.Rep, Integer>
+          apply(RelDataTypeField field) {
+            final RelDataType type = field.getType();
+            final Class clazz = (Class) typeFactory.getJavaClass(type);
+            final ColumnMetaData.Rep rep =
+                Util.first(ColumnMetaData.Rep.of(clazz),
+                    ColumnMetaData.Rep.OBJECT);
+            return Pair.of(rep, type.getSqlTypeName().getJdbcOrdinal());
           }
         });
   }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf86ef9d/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcUtils.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcUtils.java
index d4643af..da5eef8 100644
--- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcUtils.java
+++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcUtils.java
@@ -16,10 +16,10 @@
  */
 package org.apache.calcite.adapter.jdbc;
 
+import org.apache.calcite.avatica.ColumnMetaData;
 import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.linq4j.function.Function0;
 import org.apache.calcite.linq4j.function.Function1;
-import org.apache.calcite.linq4j.tree.Primitive;
 import org.apache.calcite.sql.SqlDialect;
 import org.apache.calcite.util.ImmutableNullableList;
 import org.apache.calcite.util.IntList;
@@ -110,26 +110,26 @@ final class JdbcUtils {
   public static class ObjectArrayRowBuilder implements Function0<Object[]> {
     private final ResultSet resultSet;
     private final int columnCount;
-    private final Primitive[] primitives;
+    private final ColumnMetaData.Rep[] reps;
     private final int[] types;
 
-    public ObjectArrayRowBuilder(
-        ResultSet resultSet, Primitive[] primitives, int[] types)
+    public ObjectArrayRowBuilder(ResultSet resultSet, ColumnMetaData.Rep[] reps,
+        int[] types)
         throws SQLException {
       this.resultSet = resultSet;
-      this.primitives = primitives;
+      this.reps = reps;
       this.types = types;
       this.columnCount = resultSet.getMetaData().getColumnCount();
     }
 
     public static Function1<ResultSet, Function0<Object[]>> factory(
-        final List<Pair<Primitive, Integer>> list) {
+        final List<Pair<ColumnMetaData.Rep, Integer>> list) {
       return new Function1<ResultSet, Function0<Object[]>>() {
         public Function0<Object[]> apply(ResultSet resultSet) {
           try {
             return new ObjectArrayRowBuilder(
                 resultSet,
-                Pair.left(list).toArray(new Primitive[list.size()]),
+                Pair.left(list).toArray(new ColumnMetaData.Rep[list.size()]),
                 IntList.toArray(Pair.right(list)));
           } catch (SQLException e) {
             throw new RuntimeException(e);
@@ -167,7 +167,7 @@ final class JdbcUtils {
       case Types.DATE:
         return shift(resultSet.getDate(i + 1));
       }
-      return primitives[i].jdbcGet(resultSet, i + 1);
+      return reps[i].jdbcGet(resultSet, i + 1);
     }
 
     private static Timestamp shift(Timestamp v) {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/bf86ef9d/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 874d21a..0b1ecbf 100644
--- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
+++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
@@ -656,8 +656,8 @@ public class JdbcTest {
   /** Table macro that takes a MAP as a parameter.
    *
    * <p>Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-588">CALCITE-588</a>,
-   * "Allow TableMacro to consume Maps and Collections". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-588">[CALCITE-588]
+   * Allow TableMacro to consume Maps and Collections</a>. */
   @Test public void testTableMacroMap()
       throws SQLException, ClassNotFoundException {
     Connection connection =
@@ -1686,8 +1686,8 @@ public class JdbcTest {
   /** Tests 3-way AND.
    *
    * <p>With
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-127">[CALCITE-127],
-   * "EnumerableCalcRel can't support 3+ AND conditions"</a>, the last condition
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-127">[CALCITE-127]
+   * EnumerableCalcRel can't support 3+ AND conditions</a>, the last condition
    * is ignored and rows with deptno=10 are wrongly returned.</p>
    */
   @Test public void testAnd3() {
@@ -1723,8 +1723,8 @@ public class JdbcTest {
   }
 
   /** Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-281">CALCITE-281</a>,
-   * "SQL type of EXTRACT is BIGINT but it is implemented as int". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-281">[CALCITE-281]
+   * SQL type of EXTRACT is BIGINT but it is implemented as int</a>. */
   @Test public void testExtract() {
     CalciteAssert.that()
         .with(CalciteAssert.Config.JDBC_FOODMART)
@@ -1757,8 +1757,8 @@ public class JdbcTest {
   }
 
   /** Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-387">CALCITE-387</a>,
-   * "CompileException when cast TRUE to nullable boolean". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-387">[CALCITE-387]
+   * CompileException when cast TRUE to nullable boolean</a>. */
   @Test public void testTrue() {
     final CalciteAssert.AssertThat that = CalciteAssert.that();
     that.query("select case when deptno = 10 then null else true end as x\n"
@@ -1800,8 +1800,8 @@ public class JdbcTest {
   /** A join that has both equi and non-equi conditions.
    *
    * <p>Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-371">CALCITE-371</a>,
-   * "Cannot implement JOIN whose ON clause contains mixed equi and theta". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-371">[CALCITE-371]
+   * Cannot implement JOIN whose ON clause contains mixed equi and theta</a>. */
   @Test public void testEquiThetaJoin() {
     CalciteAssert.hr()
         .query("select e.\"empid\", d.\"name\", e.\"name\"\n"
@@ -1835,8 +1835,8 @@ public class JdbcTest {
   }
 
   /** Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-35">CALCITE-35</a>,
-   * "Support parenthesized sub-clause in JOIN". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-35">[CALCITE-35]
+   * Support parenthesized sub-clause in JOIN</a>. */
   @Ignore
   @Test public void testJoinJoin() {
     CalciteAssert.that()
@@ -2255,8 +2255,8 @@ public class JdbcTest {
    * plan.
    *
    * <p>Test case for (not yet fixed)
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-92">CALCITE-92</a>,
-   * "Project should be optimized away, not converted to EnumerableCalcRel".</p>
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-92">[CALCITE-92]
+   * Project should be optimized away, not converted to EnumerableCalcRel</a>.
    */
   @Ignore
   @Test public void testNoCalcBetweenJoins() throws IOException {
@@ -2368,8 +2368,8 @@ public class JdbcTest {
   }
 
   /** Test case for (not yet fixed)
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-99">CALCITE-99</a>,
-   * "Recognize semi-join that has high selectivity and push it down". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-99">[CALCITE-99]
+   * Recognize semi-join that has high selectivity and push it down</a>. */
   @Ignore
   @Test public void testExplainJoin4() throws IOException {
     withFoodMartQuery(5217)
@@ -2926,7 +2926,8 @@ public class JdbcTest {
   }
 
   /** Tests sorting by an expression not in the '*' select clause. Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-176">CALCITE-176</a>. */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-176">[CALCITE-176]
+   * ORDER BY expression doesn't work with SELECT *</a>. */
   @Test public void testOrderStarByExpr() {
     CalciteAssert.hr()
         .query("select * from \"hr\".\"emps\"\n"
@@ -3084,9 +3085,9 @@ public class JdbcTest {
   }
 
   /** Limit implemented using {@link Queryable#take}. Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-96">CALCITE-96</a>,
-   * "LIMIT against a table in a clone schema causes
-   * UnsupportedOperationException". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-96">[CALCITE-96]
+   * LIMIT against a table in a clone schema causes
+   * UnsupportedOperationException</a>. */
   @Test public void testLimitOnQueryableTable() {
     CalciteAssert.that()
         .with(CalciteAssert.Config.FOODMART_CLONE)
@@ -3097,8 +3098,8 @@ public class JdbcTest {
   }
 
   /** Limit implemented using {@link Queryable#take}. Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-70">CALCITE-70</a>,
-   * "Joins seem to be very expensive in memory". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-70">[CALCITE-70]
+   * Joins seem to be very expensive in memory</a>. */
   @Test public void testSelfJoinCount() {
     CalciteAssert.that()
         .with(CalciteAssert.Config.JDBC_FOODMART)
@@ -3228,9 +3229,9 @@ public class JdbcTest {
   }
 
   /** Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-403">CALCITE-403</a>,
-   * "Enumerable gives NullPointerException with NOT on nullable
-   * expression". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-403">[CALCITE-403]
+   * Enumerable gives NullPointerException with NOT on nullable
+   * expression</a>. */
   @Test public void testHavingNot() throws IOException {
     withFoodMartQuery(6597).runs();
   }
@@ -4088,8 +4089,8 @@ public class JdbcTest {
   /** Tests windowed aggregation with no ORDER BY clause.
    *
    * <p>Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-285">CALCITE-285</a>,
-   * "Window functions throw exception without ORDER BY".
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-285">[CALCITE-285]
+   * Window functions throw exception without ORDER BY</a>.
    *
    * <p>Note:</p>
    *
@@ -4376,8 +4377,8 @@ public class JdbcTest {
   }
 
   /** Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-313">CALCITE-313</a>,
-   * "Query decorrelation fails". */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-313">[CALCITE-313]
+   * Query decorrelation fails</a>. */
   @Test public void testJoinInCorrelatedSubquery() {
     CalciteAssert.hr()
         .query("select *\n"
@@ -4806,8 +4807,8 @@ public class JdbcTest {
    * allow Jackson's comments extension.
    *
    * <p>Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-160">CALCITE-160</a>,
-   * "Allow comments in schema definitions".</p> */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-160">[CALCITE-160]
+   * Allow comments in schema definitions</a>. */
   @Test public void testModelWithComment() {
     final String model =
         FOODMART_MODEL.replace("schemas:", "/* comment */ schemas:");
@@ -5146,8 +5147,9 @@ public class JdbcTest {
               public Object apply(CalciteConnection a0) {
                 try {
                   a0.createStatement()
-                      .executeQuery("select * from \"hr\".\"emps\" "
-                          + "where \"deptno\" = 10");
+                      .executeQuery(
+                          "select * from \"hr\".\"emps\" "
+                              + "where \"deptno\" = 10");
                   assertEquals(1, objects.size());
                   return null;
                 } catch (SQLException e) {
@@ -6051,8 +6053,8 @@ public class JdbcTest {
   /** Tests case-insensitive resolution of sub-query columns.
    *
    * <p>Test case for
-   * <a href="https://issues.apache.org/jira/browse/CALCITE-555">[CALCITE-555],
-   * "Case-insensitive matching of sub-query columns fails"</a>. */
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-555">[CALCITE-555]
+   * Case-insensitive matching of sub-query columns fails</a>. */
   @Test public void testLexCaseInsensitiveSubQueryField() {
     CalciteAssert.that()
         .with(Lex.MYSQL)
@@ -6374,6 +6376,45 @@ public class JdbcTest {
 
   }
 
+  /** Test case for
+   * <a href="https://issues.apache.org/jira/browse/CALCITE-730">[CALCITE-730]
+   * ClassCastException in table from CloneSchema</a>. */
+  @Test public void testNullableNumericColumnInCloneSchema() {
+    CalciteAssert.model("{\n"
+            + "  version: '1.0',\n"
+            + "  defaultSchema: 'SCOTT_CLONE',\n"
+            + "  schemas: [ {\n"
+            + "    name: 'SCOTT_CLONE',\n"
+            + "    type: 'custom',\n"
+            + "    factory: 'org.apache.calcite.adapter.clone.CloneSchema$Factory',\n"
+            + "    operand: {\n"
+            + "      jdbcDriver: '" + JdbcTest.SCOTT.driver + "',\n"
+            + "      jdbcUser: '" + JdbcTest.SCOTT.username + "',\n"
+            + "      jdbcPassword: '" + JdbcTest.SCOTT.password + "',\n"
+            + "      jdbcUrl: '" + JdbcTest.SCOTT.url + "',\n"
+            + "      jdbcSchema: 'SCOTT'\n"
+            + "   } } ]\n"
+            + "}")
+        .query("select * from emp")
+        .returns(
+            new Function<ResultSet, Void>() {
+              public Void apply(ResultSet input) {
+                final StringBuilder buf = new StringBuilder();
+                try {
+                  final int columnCount = input.getMetaData().getColumnCount();
+                  while (input.next()) {
+                    for (int i = 0; i < columnCount; i++) {
+                      buf.append(input.getObject(i + 1));
+                    }
+                  }
+                  return null;
+                } catch (SQLException e) {
+                  throw Throwables.propagate(e);
+                }
+              }
+            });
+  }
+
   // Disable checkstyle, so it doesn't complain about fields like "customer_id".
   //CHECKSTYLE: OFF
 


[3/4] incubator-calcite git commit: [CALCITE-733] Multiple distinct-COUNT query gives wrong results

Posted by jh...@apache.org.
[CALCITE-733] Multiple distinct-COUNT query gives wrong results


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/0e7de28f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/0e7de28f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/0e7de28f

Branch: refs/heads/master
Commit: 0e7de28f92caf5d2692603ea18b0776a35149686
Parents: bf86ef9
Author: Julian Hyde <jh...@apache.org>
Authored: Fri May 15 20:01:35 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri May 15 21:38:57 2015 -0700

----------------------------------------------------------------------
 .../AggregateExpandDistinctAggregatesRule.java     | 17 +++++++++++++++--
 core/src/test/resources/sql/agg.oq                 | 16 ++++++++++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0e7de28f/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
index e05c781..96a031a 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateExpandDistinctAggregatesRule.java
@@ -328,10 +328,23 @@ public final class AggregateExpandDistinctAggregatesRule extends RelOptRule {
       aggCallList.add(newAggCall);
     }
 
+    final Map<Integer, Integer> map = new HashMap<>();
+    for (Integer key : aggregate.getGroupSet()) {
+      map.put(key, map.size());
+    }
+    final ImmutableBitSet newGroupSet = aggregate.getGroupSet().permute(map);
+    assert newGroupSet
+        .equals(ImmutableBitSet.range(aggregate.getGroupSet().cardinality()));
+    ImmutableList<ImmutableBitSet> newGroupingSets = null;
+    if (aggregate.indicator) {
+      newGroupingSets =
+          ImmutableBitSet.ORDERING.immutableSortedCopy(
+              ImmutableBitSet.permute(aggregate.getGroupSets(), map));
+    }
+
     Aggregate distinctAgg =
         aggregate.copy(aggregate.getTraitSet(), distinct, aggregate.indicator,
-            ImmutableBitSet.range(aggregate.getGroupSet().cardinality()),
-            aggregate.getGroupSets(), aggCallList);
+            newGroupSet, newGroupingSets, aggCallList);
 
     // If there's no left child yet, no need to create the join
     if (left == null) {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/0e7de28f/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 c54655e..501b945 100644
--- a/core/src/test/resources/sql/agg.oq
+++ b/core/src/test/resources/sql/agg.oq
@@ -675,4 +675,20 @@ group by deptno;
 
 !ok
 
+# Multiple distinct count
+select deptno,
+ count(distinct job) as j, count(distinct mgr) as m
+from "scott".emp
+group by deptno;
++--------+---+---+
+| DEPTNO | J | M |
++--------+---+---+
+|     10 | 3 | 2 |
+|     20 | 3 | 4 |
+|     30 | 3 | 2 |
++--------+---+---+
+(3 rows)
+
+!ok
+
 # End agg.oq


[4/4] incubator-calcite git commit: Schema for [CALCITE-729] IndexOutOfBoundsException in ROLLUP query on JDBC data source

Posted by jh...@apache.org.
Schema for [CALCITE-729] IndexOutOfBoundsException in ROLLUP query on JDBC 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/ee68f833
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/ee68f833
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/ee68f833

Branch: refs/heads/master
Commit: ee68f83359f01194283c14dbe80c27c0694fbf29
Parents: 0e7de28
Author: Julian Hyde <jh...@apache.org>
Authored: Fri May 15 13:01:56 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri May 15 21:39:09 2015 -0700

----------------------------------------------------------------------
 core/src/test/resources/hsqldb-model.json | 55 ++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/ee68f833/core/src/test/resources/hsqldb-model.json
----------------------------------------------------------------------
diff --git a/core/src/test/resources/hsqldb-model.json b/core/src/test/resources/hsqldb-model.json
new file mode 100644
index 0000000..a53efef
--- /dev/null
+++ b/core/src/test/resources/hsqldb-model.json
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+{
+  version: '1.0',
+  defaultSchema: 'SCOTT',
+  schemas: [ {
+    type: 'jdbc',
+    name: 'FOODMART',
+    jdbcUser: 'FOODMART',
+    jdbcPassword: 'FOODMART',
+    jdbcUrl: 'jdbc:hsqldb:res:foodmart',
+    jdbcSchema: 'foodmart'
+  }, {
+    type: 'jdbc',
+    name: 'SCOTT',
+    jdbcUser: 'SA',
+    jdbcPassword: '',
+    jdbcUrl: 'jdbc:hsqldb:res:scott',
+    jdbcSchema: 'SCOTT'
+  }, {
+    type: 'custom',
+    name: 'FOODMART_CLONE',
+    factory: 'org.apache.calcite.adapter.clone.CloneSchema$Factory',
+    operand: {
+      jdbcUser: 'FOODMART',
+      jdbcPassword: 'FOODMART',
+      jdbcUrl: 'jdbc:hsqldb:res:foodmart',
+      jdbcSchema: 'foodmart'
+    }
+  }, {
+    type: 'custom',
+    name: 'SCOTT_CLONE',
+    factory: 'org.apache.calcite.adapter.clone.CloneSchema$Factory',
+    operand: {
+      jdbcUser: 'SA',
+      jdbcPassword: '',
+      jdbcUrl: 'jdbc:hsqldb:res:scott',
+      jdbcSchema: 'SCOTT'
+    }
+  } ]
+}