From f128f4593c4a21776de34f3b8be6ef4adae703ce Mon Sep 17 00:00:00 2001 From: sunyerui Date: Thu, 24 Sep 2015 15:05:45 +0800 Subject: [PATCH] KYLIN-1039 Filter like (A or false) yields wrong result, update calcite to 1.4.0-incubating-SNAPSHOT --- .../main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java | 3 ++- jdbc/src/main/java/org/apache/kylin/jdbc/KylinMeta.java | 8 +++----- pom.xml | 2 +- .../main/java/org/apache/kylin/query/relnode/OLAPTableScan.java | 7 +++++++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java b/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java index 0893408..4eb6965 100644 --- a/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java +++ b/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java @@ -4067,7 +4067,8 @@ public class SqlToRelConverter { exprs.set(0, reinterpretCast ? rexBuilder.makeReinterpretCast(histogramType, exprs.get(0), rexBuilder.makeLiteral(false)) : rexBuilder.makeCast(histogramType, exprs.get(0))); } - RexCallBinding bind = new RexCallBinding(rexBuilder.getTypeFactory(), SqlStdOperatorTable.HISTOGRAM_AGG, exprs); + // FIXME: update to calcite-1.4.0-SNAPSHOT + RexCallBinding bind = new RexCallBinding(rexBuilder.getTypeFactory(), SqlStdOperatorTable.HISTOGRAM_AGG, exprs, new ArrayList()); RexNode over = rexBuilder.makeOver(SqlStdOperatorTable.HISTOGRAM_AGG.inferReturnType(bind), SqlStdOperatorTable.HISTOGRAM_AGG, exprs, partitionKeys, orderKeys, lowerBound, upperBound, window.isRows(), window.isAllowPartial(), false); diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMeta.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMeta.java index 49f58fd..cbd5377 100644 --- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMeta.java +++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinMeta.java @@ -50,7 +50,7 @@ public class KylinMeta extends MetaImpl { // insert/update/delete go this path, ignorable for Kylin @Override - public StatementHandle prepare(ConnectionHandle ch, String sql, int maxRowCount) { + public StatementHandle prepare(ConnectionHandle ch, String sql, long maxRowCount) { StatementHandle result = super.createStatement(ch); result.signature = connection().mockPreparedSignature(sql); return result; @@ -58,16 +58,14 @@ public class KylinMeta extends MetaImpl { // mimic from CalciteMetaImpl, real execution happens via callback in KylinResultSet.execute() @Override - public ExecuteResult prepareAndExecute(ConnectionHandle ch, String sql, int maxRowCount, PrepareCallback callback) { - final StatementHandle sh; + public ExecuteResult prepareAndExecute(StatementHandle sh, String sql, long maxRowCount, PrepareCallback callback) { try { synchronized (callback.getMonitor()) { callback.clear(); - sh = prepare(ch, sql, maxRowCount); callback.assign(sh.signature, null, -1); } callback.execute(); - final MetaResultSet metaResultSet = MetaResultSet.create(ch.id, sh.id, false, sh.signature, null); + final MetaResultSet metaResultSet = MetaResultSet.create(sh.connectionId, sh.id, false, sh.signature, null); return new ExecuteResult(ImmutableList.of(metaResultSet)); } catch (SQLException e) { throw new RuntimeException(e); diff --git a/pom.xml b/pom.xml index fe923ad..df3939d 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 3.1.2.RELEASE - 1.3.0-incubating + 1.4.0-incubating 2.6.0 diff --git a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java index b1d8d1a..62d6fae 100644 --- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java +++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java @@ -47,6 +47,7 @@ import org.apache.calcite.rel.rules.FilterJoinRule; import org.apache.calcite.rel.rules.FilterProjectTransposeRule; import org.apache.calcite.rel.rules.JoinCommuteRule; import org.apache.calcite.rel.rules.JoinPushThroughJoinRule; +import org.apache.calcite.rel.rules.ReduceExpressionsRule; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.rel.type.RelDataTypeField; @@ -123,6 +124,12 @@ public class OLAPTableScan extends TableScan implements OLAPRel, EnumerableRel { planner.addRule(OLAPLimitRule.INSTANCE); planner.addRule(OLAPSortRule.INSTANCE); + // register reduce expressions rules + planner.addRule(ReduceExpressionsRule.FILTER_INSTANCE); + planner.addRule(ReduceExpressionsRule.PROJECT_INSTANCE); + planner.addRule(ReduceExpressionsRule.JOIN_INSTANCE); + planner.addRule(ReduceExpressionsRule.CALC_INSTANCE); + // since join is the entry point, we can't push filter past join planner.removeRule(FilterJoinRule.FILTER_ON_JOIN); planner.removeRule(FilterJoinRule.JOIN); -- 2.3.2 (Apple Git-55)