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 2014/08/27 23:53:02 UTC
[1/2] git commit: Temporary fix for [OPTIQ-390] Transitive inference
(RelMdPredicates) doesn't handle semi-join
Repository: incubator-optiq
Updated Branches:
refs/heads/master aa8a98ffd -> 582be2a29
Temporary fix for [OPTIQ-390] Transitive inference (RelMdPredicates) doesn't handle semi-join
Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/c2ff8f81
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/c2ff8f81
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/c2ff8f81
Branch: refs/heads/master
Commit: c2ff8f81988ce52d7c1c737075548e7d108d9fee
Parents: aa8a98f
Author: Julian Hyde <jh...@apache.org>
Authored: Wed Aug 27 12:26:35 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Aug 27 12:27:28 2014 -0700
----------------------------------------------------------------------
.../java/org/eigenbase/rel/metadata/RelMdPredicates.java | 9 +++++++++
1 file changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/c2ff8f81/core/src/main/java/org/eigenbase/rel/metadata/RelMdPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/metadata/RelMdPredicates.java b/core/src/main/java/org/eigenbase/rel/metadata/RelMdPredicates.java
index bb9ef32..937f160 100644
--- a/core/src/main/java/org/eigenbase/rel/metadata/RelMdPredicates.java
+++ b/core/src/main/java/org/eigenbase/rel/metadata/RelMdPredicates.java
@@ -36,6 +36,7 @@ import org.eigenbase.rel.RelNode;
import org.eigenbase.rel.SortRel;
import org.eigenbase.rel.TableAccessRelBase;
import org.eigenbase.rel.UnionRelBase;
+import org.eigenbase.rel.rules.SemiJoinRel;
import org.eigenbase.relopt.RelOptPredicateList;
import org.eigenbase.relopt.RelOptUtil;
import org.eigenbase.rex.RexBuilder;
@@ -190,6 +191,14 @@ public class RelMdPredicates {
RelOptUtil.conjunctions(filter.getCondition())));
}
+ /** Infers predicates for a {@link SemiJoinRel}. */
+ public RelOptPredicateList getPredicates(SemiJoinRel semiJoin) {
+ // Workaround, pending
+ // [OPTIQ-390] Transitive Inference(RelMdPredicate) doesn't handle SemiJoin
+ return RelOptPredicateList.EMPTY;
+ }
+
+ /** Infers predicates for a {@link JoinRelBase}. */
public RelOptPredicateList getPredicates(JoinRelBase join) {
RexBuilder rB = join.getCluster().getRexBuilder();
RelNode left = join.getInput(0);
[2/2] git commit: [OPTIQ-389] MergeFilterRule should flatten AND
condition
Posted by jh...@apache.org.
[OPTIQ-389] MergeFilterRule should flatten AND condition
Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/582be2a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/582be2a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/582be2a2
Branch: refs/heads/master
Commit: 582be2a291fd618730c8071b6931d7a8a1da4b30
Parents: c2ff8f8
Author: John Pullokkaran <jp...@hortonworks.com>
Authored: Wed Aug 27 14:15:52 2014 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Aug 27 14:15:52 2014 -0700
----------------------------------------------------------------------
.../eigenbase/rel/rules/MergeFilterRule.java | 2 +-
.../main/java/org/eigenbase/rex/RexUtil.java | 17 ++++++++++-
core/src/test/resources/sql/misc.oq | 30 ++++++++++++++++++++
3 files changed, 47 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/582be2a2/core/src/main/java/org/eigenbase/rel/rules/MergeFilterRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rel/rules/MergeFilterRule.java b/core/src/main/java/org/eigenbase/rel/rules/MergeFilterRule.java
index f7c6a54..b059bc0 100644
--- a/core/src/main/java/org/eigenbase/rel/rules/MergeFilterRule.java
+++ b/core/src/main/java/org/eigenbase/rel/rules/MergeFilterRule.java
@@ -68,7 +68,7 @@ public class MergeFilterRule extends RelOptRule {
FilterRelBase newFilterRel =
(FilterRelBase) filterFactory.createFilter(
bottomFilter.getChild(),
- newCondition);
+ RexUtil.flatten(rexBuilder, newCondition));
call.transformTo(newFilterRel);
}
http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/582be2a2/core/src/main/java/org/eigenbase/rex/RexUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/eigenbase/rex/RexUtil.java b/core/src/main/java/org/eigenbase/rex/RexUtil.java
index 248adf7..2550da0 100644
--- a/core/src/main/java/org/eigenbase/rex/RexUtil.java
+++ b/core/src/main/java/org/eigenbase/rex/RexUtil.java
@@ -322,7 +322,7 @@ public class RexUtil {
}
}
}
- return recurse && requiresDecimalExpansion(call.operands, recurse);
+ return recurse && requiresDecimalExpansion(call.operands, true);
}
/**
@@ -803,6 +803,21 @@ public class RexUtil {
}
}
+ /** Flattens an expression.
+ *
+ * <p>Returns the same expression if it is already flat. */
+ public static RexNode flatten(RexBuilder rexBuilder, RexNode node) {
+ if (node instanceof RexCall) {
+ RexCall call = (RexCall) node;
+ final SqlOperator op = call.getOperator();
+ final List<RexNode> flattenedOperands = flatten(call.getOperands(), op);
+ if (!isFlat(call.getOperands(), op)) {
+ return rexBuilder.makeCall(call.getType(), op, flattenedOperands);
+ }
+ }
+ return node;
+ }
+
/**
* Converts a list of operands into a list that is flat with respect to
* the given operator. The operands are assumed to be flat already.
http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/582be2a2/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 cc37141..91d63fc 100644
--- a/core/src/test/resources/sql/misc.oq
+++ b/core/src/test/resources/sql/misc.oq
@@ -294,6 +294,36 @@ EnumerableCalcRel(expr#0..7=[{inputs}], expr#8=[IS NOT NULL($t5)], expr#9=[NOT($
EnumerableTableAccessRel(table=[[hr, depts]])
!plan
+# Filter combined with an OR filter.
+select * from (
+ select * from "hr"."emps" as e
+ where e."deptno" < 30) as e
+where e."deptno" > 10 or e."name" = 'Sebastian';
++-------+--------+-----------+--------+------------+
+| empid | deptno | name | salary | commission |
++-------+--------+-----------+--------+------------+
+| 150 | 10 | Sebastian | 7000.0 | |
+| 200 | 20 | Eric | 8000.0 | 500 |
++-------+--------+-----------+--------+------------+
+(2 rows)
+
+!ok
+
+# Filter combined with an AND filter. Test case for
+# [OPTIQ-389] MergeFilterRule should flatten AND condition
+select * from (
+ select * from "hr"."emps" as e
+ where e."deptno" < 30) as e
+where e."deptno" >= 10 and e."name" = 'Sebastian';
++-------+--------+-----------+--------+------------+
+| empid | deptno | name | salary | commission |
++-------+--------+-----------+--------+------------+
+| 150 | 10 | Sebastian | 7000.0 | |
++-------+--------+-----------+--------+------------+
+(1 row)
+
+!ok
+
# [OPTIQ-345] AssertionError in RexToLixTranslator comparing to date literal
!use catchall
select count(*) as c from "everyTypes" where "sqlDate" = DATE '1970-01-01';