You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2016/01/12 11:12:24 UTC
calcite git commit: [CALCITE-996] Predicate should be simplified when
we create a Filter operator
Repository: calcite
Updated Branches:
refs/heads/master ebcba3b5c -> 9f6f23de0
[CALCITE-996] Predicate should be simplified when we create a Filter operator
Close apache/calcite#171
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/9f6f23de
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/9f6f23de
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/9f6f23de
Branch: refs/heads/master
Commit: 9f6f23de06791a3d2de1672b55bfdf7d6396bc78
Parents: ebcba3b
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Mon Jan 11 21:12:30 2016 +0100
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Tue Jan 12 11:10:42 2016 +0100
----------------------------------------------------------------------
.../org/apache/calcite/tools/RelBuilder.java | 6 +++---
.../org/apache/calcite/test/RelBuilderTest.java | 22 ++++++++++++++++++++
2 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/9f6f23de/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index 916f0dd..00ce6d1 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -692,9 +692,9 @@ public class RelBuilder {
* and optimized in a similar way to the {@link #and} method.
* If the result is TRUE no filter is created. */
public RelBuilder filter(Iterable<? extends RexNode> predicates) {
- final RexNode x = RexUtil.composeConjunction(cluster.getRexBuilder(),
- predicates, true);
- if (x != null) {
+ final RexNode x = RexUtil.simplify(cluster.getRexBuilder(),
+ RexUtil.composeConjunction(cluster.getRexBuilder(), predicates, false));
+ if (!x.isAlwaysTrue()) {
final Frame frame = Stacks.pop(stack);
final RelNode filter = filterFactory.createFilter(frame.rel, x);
Stacks.push(stack, new Frame(filter, frame.right));
http://git-wip-us.apache.org/repos/asf/calcite/blob/9f6f23de/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
index bb53728..0b232f4 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -202,6 +202,28 @@ public class RelBuilderTest {
+ " LogicalTableScan(table=[[scott, EMP]])\n"));
}
+ @Test public void testScanFilterOr2() {
+ // Equivalent SQL:
+ // SELECT *
+ // FROM emp
+ // WHERE deptno = 20 OR deptno = 20
+ final RelBuilder builder = RelBuilder.create(config().build());
+ RelNode root =
+ builder.scan("EMP")
+ .filter(
+ builder.call(SqlStdOperatorTable.OR,
+ builder.call(SqlStdOperatorTable.GREATER_THAN,
+ builder.field("DEPTNO"),
+ builder.literal(20)),
+ builder.call(SqlStdOperatorTable.GREATER_THAN,
+ builder.field("DEPTNO"),
+ builder.literal(20))))
+ .build();
+ assertThat(str(root),
+ is("LogicalFilter(condition=[>($7, 20)])\n"
+ + " LogicalTableScan(table=[[scott, EMP]])\n"));
+ }
+
@Test public void testBadFieldName() {
final RelBuilder builder = RelBuilder.create(config().build());
try {