You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2018/09/24 20:54:52 UTC
calcite git commit: [CALCITE-2586] RexSimplify: case with repeated
branches results in assertion error (pengzhiwei)
Repository: calcite
Updated Branches:
refs/heads/master 9d6899c91 -> b78dd4a7e
[CALCITE-2586] RexSimplify: case with repeated branches results in assertion error (pengzhiwei)
closes #860
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/b78dd4a7
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/b78dd4a7
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/b78dd4a7
Branch: refs/heads/master
Commit: b78dd4a7e33607357ef530d0adb358e9741d9941
Parents: 9d6899c
Author: pengzhiwei <pe...@icloud.com>
Authored: Mon Sep 24 15:57:34 2018 +0800
Committer: Vladimir Sitnikov <si...@gmail.com>
Committed: Mon Sep 24 23:54:23 2018 +0300
----------------------------------------------------------------------
core/src/main/java/org/apache/calcite/rex/RexSimplify.java | 6 +++---
core/src/main/java/org/apache/calcite/rex/RexUtil.java | 4 +++-
core/src/test/java/org/apache/calcite/test/RexProgramTest.java | 6 ++++++
3 files changed, 12 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/b78dd4a7/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rex/RexSimplify.java b/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
index c905fb8..5358f7f 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
@@ -705,11 +705,11 @@ public class RexSimplify {
notTerms.add(pair.e.getKey());
}
}
- final RexNode disjunction = RexUtil.composeDisjunction(rexBuilder, terms);
+ RexNode disjunction = RexUtil.composeDisjunction(rexBuilder, terms);
if (!call.getType().equals(disjunction.getType())) {
- return rexBuilder.makeCast(call.getType(), disjunction);
+ disjunction = rexBuilder.makeCast(call.getType(), disjunction);
}
- return disjunction;
+ return simplify_(disjunction);
}
if (newOperands.equals(operands)) {
return call;
http://git-wip-us.apache.org/repos/asf/calcite/blob/b78dd4a7/core/src/main/java/org/apache/calcite/rex/RexUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rex/RexUtil.java b/core/src/main/java/org/apache/calcite/rex/RexUtil.java
index d509ecb..0e44c25 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexUtil.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexUtil.java
@@ -1872,7 +1872,9 @@ public class RexUtil {
RexCall call2 = (RexCall) e2;
if (call2.getOperands().get(0)
.equals(call.getOperands().get(0))
- && call2.getOperands().get(1) instanceof RexLiteral) {
+ && call2.getOperands().get(1) instanceof RexLiteral
+ && !call.getOperands().get(1)
+ .equals(call2.getOperands().get(1))) {
return false;
}
}
http://git-wip-us.apache.org/repos/asf/calcite/blob/b78dd4a7/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RexProgramTest.java b/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
index 00b20e4..4aa6a2c 100644
--- a/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
@@ -1120,6 +1120,12 @@ public class RexProgramTest extends RexProgramBuilderBase {
falseLiteral, trueLiteral),
"OR(?0.a, AND(?0.d, NOT(?0.b), NOT(?0.c)), AND(NOT(?0.b), NOT(?0.c), NOT(?0.e)))");
+ checkSimplify(
+ case_(eq(falseLiteral, falseLiteral), falseLiteral,
+ eq(falseLiteral, falseLiteral), trueLiteral,
+ trueLiteral
+ ), "false");
+
// is null, applied to not-null value
checkSimplify(rexBuilder.makeCall(SqlStdOperatorTable.IS_NULL, aRef),
"false");