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 2017/09/12 17:16:28 UTC
calcite git commit: [CALCITE-1982] NPE simplifying range expressions
when literal value is null
Repository: calcite
Updated Branches:
refs/heads/master 67071b6b0 -> d633402c4
[CALCITE-1982] NPE simplifying range expressions when literal value is null
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/d633402c
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/d633402c
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/d633402c
Branch: refs/heads/master
Commit: d633402c41158da3fc00eebcf0e75b0c7da71450
Parents: 67071b6
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Tue Sep 12 10:13:17 2017 -0700
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Tue Sep 12 10:13:17 2017 -0700
----------------------------------------------------------------------
.../main/java/org/apache/calcite/rex/RexSimplify.java | 11 ++++++++---
.../java/org/apache/calcite/test/RexProgramTest.java | 3 +++
2 files changed, 11 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/d633402c/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 52c4795..286a697 100644
--- a/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
+++ b/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
@@ -613,13 +613,18 @@ public class RexSimplify {
RexCall rightCast = (RexCall) right;
comparedOperands.add(rightCast.getOperands().get(0).toString());
}
- // Check for equality on different constants. If the same ref or CAST(ref)
- // is equal to different constants, this condition cannot be satisfied,
- // and hence it can be evaluated to FALSE
final boolean leftRef = RexUtil.isReferenceOrAccess(left, true);
final boolean rightRef = RexUtil.isReferenceOrAccess(right, true);
final boolean leftConstant = left.isA(SqlKind.LITERAL);
final boolean rightConstant = right.isA(SqlKind.LITERAL);
+ // Check for comparison with null values
+ if (leftConstant && ((RexLiteral) left).getValue() == null
+ || rightConstant && ((RexLiteral) right).getValue() == null) {
+ return rexBuilder.makeLiteral(false);
+ }
+ // Check for equality on different constants. If the same ref or CAST(ref)
+ // is equal to different constants, this condition cannot be satisfied,
+ // and hence it can be evaluated to FALSE
if (term.getKind() == SqlKind.EQUALS) {
if (leftRef && rightConstant) {
final String literal = right.toString();
http://git-wip-us.apache.org/repos/asf/calcite/blob/d633402c/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 f82a265..b0467d6 100644
--- a/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
@@ -1311,6 +1311,9 @@ public class RexProgramTest {
checkSimplifyFilter(
case_(aRef, trueLiteral, bRef, trueLiteral, cRef, falseLiteral, dRef, falseLiteral,
unknownLiteral), "CAST(OR(?0.a, ?0.b)):BOOLEAN");
+
+ // condition with null value for range
+ checkSimplifyFilter(and(gt(aRef, unknownLiteral), ge(bRef, literal1)), "false");
}
/** Unit test for
Re: calcite git commit: [CALCITE-1982] NPE simplifying range
expressions when literal value is null
Posted by Julian Hyde <jh...@apache.org>.
We're supposed to be stabilizing for release 1.14. No more commits to
master please.
Julian
On Tue, Sep 12, 2017 at 10:16 AM, <jc...@apache.org> wrote:
> Repository: calcite
> Updated Branches:
> refs/heads/master 67071b6b0 -> d633402c4
>
>
> [CALCITE-1982] NPE simplifying range expressions when literal value is null
>
>
> Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
> Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/d633402c
> Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/d633402c
> Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/d633402c
>
> Branch: refs/heads/master
> Commit: d633402c41158da3fc00eebcf0e75b0c7da71450
> Parents: 67071b6
> Author: Jesus Camacho Rodriguez <jc...@apache.org>
> Authored: Tue Sep 12 10:13:17 2017 -0700
> Committer: Jesus Camacho Rodriguez <jc...@apache.org>
> Committed: Tue Sep 12 10:13:17 2017 -0700
>
> ----------------------------------------------------------------------
> .../main/java/org/apache/calcite/rex/RexSimplify.java | 11 ++++++++---
> .../java/org/apache/calcite/test/RexProgramTest.java | 3 +++
> 2 files changed, 11 insertions(+), 3 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/calcite/blob/d633402c/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 52c4795..286a697 100644
> --- a/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
> +++ b/core/src/main/java/org/apache/calcite/rex/RexSimplify.java
> @@ -613,13 +613,18 @@ public class RexSimplify {
> RexCall rightCast = (RexCall) right;
> comparedOperands.add(rightCast.getOperands().get(0).toString());
> }
> - // Check for equality on different constants. If the same ref or CAST(ref)
> - // is equal to different constants, this condition cannot be satisfied,
> - // and hence it can be evaluated to FALSE
> final boolean leftRef = RexUtil.isReferenceOrAccess(left, true);
> final boolean rightRef = RexUtil.isReferenceOrAccess(right, true);
> final boolean leftConstant = left.isA(SqlKind.LITERAL);
> final boolean rightConstant = right.isA(SqlKind.LITERAL);
> + // Check for comparison with null values
> + if (leftConstant && ((RexLiteral) left).getValue() == null
> + || rightConstant && ((RexLiteral) right).getValue() == null) {
> + return rexBuilder.makeLiteral(false);
> + }
> + // Check for equality on different constants. If the same ref or CAST(ref)
> + // is equal to different constants, this condition cannot be satisfied,
> + // and hence it can be evaluated to FALSE
> if (term.getKind() == SqlKind.EQUALS) {
> if (leftRef && rightConstant) {
> final String literal = right.toString();
>
> http://git-wip-us.apache.org/repos/asf/calcite/blob/d633402c/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 f82a265..b0467d6 100644
> --- a/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
> +++ b/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
> @@ -1311,6 +1311,9 @@ public class RexProgramTest {
> checkSimplifyFilter(
> case_(aRef, trueLiteral, bRef, trueLiteral, cRef, falseLiteral, dRef, falseLiteral,
> unknownLiteral), "CAST(OR(?0.a, ?0.b)):BOOLEAN");
> +
> + // condition with null value for range
> + checkSimplifyFilter(and(gt(aRef, unknownLiteral), ge(bRef, literal1)), "false");
> }
>
> /** Unit test for
>