[
https://issues.apache.org/jira/browse/CALCITE-1294?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
chunwei updated CALCITE-1294:
-----------------------------
Description:
function gatherConstraint in class ReduceExpressionsRule throw
NullPointerException when both left RexNode and right RexNode are NULL
RexLiteral.
{code:title=ReduceExpressionsRule.java |borderStyle=solid}
private static <C extends RexNode> void gatherConstraint(Class<C> clazz,
RexNode left, RexNode right, Map<RexNode, C> map, Set<RexNode> excludeSet,
RexBuilder rexBuilder) {
......
else {
if (existedValue instanceof RexLiteral
&& constant instanceof RexLiteral
&& !((RexLiteral) existedValue).getValue()
.equals(((RexLiteral) constant).getValue())) {
// we found conflicting values, e.g. left = 10 and left = 20
map.remove(left);
excludeSet.add(left);
}
},
}
{code}
when existedValue and constant are NULL RexLiteral, getValue() returns null and
null.equals(null) will throw NullPointerException.
It is better and safer to use
ObjectUtils.equals(((RexLiteral) existedValue).getValue(), ((RexLiteral)
constant).getValue())
than
((RexLiteral) existedValue).getValue().equals(((RexLiteral)
constant).getValue()).
was:
function gatherConstraint in class ReduceExpressionRule throw
NullPointerException when both left RexNode and right RexNode are NULL
RexLiteral.
```
private static <C extends RexNode> void gatherConstraint(Class<C> clazz,
RexNode left, RexNode right, Map<RexNode, C> map, Set<RexNode> excludeSet,
RexBuilder rexBuilder) {
......
else {
if (existedValue instanceof RexLiteral
&& constant instanceof RexLiteral
&& !((RexLiteral) existedValue).getValue()
.equals(((RexLiteral) constant).getValue())) {
// we found conflicting values, e.g. left = 10 and left = 20
map.remove(left);
excludeSet.add(left);
}
},
}
```
when existedValue and constant are NULL RexLiteral, getValue() returns null and
null.equals(null) will throw NullPointerException.
It is better and safer to use
ObjectUtils.equals(((RexLiteral) existedValue).getValue(), ((RexLiteral)
constant).getValue())
than
((RexLiteral) existedValue).getValue().equals(((RexLiteral)
constant).getValue()).
> function gatherConstraint in class ReduceExpressionsRule throws
> NullPointerException when both left RexNode and right RexNode are NULL
> RexLiteral
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CALCITE-1294
> URL: https://issues.apache.org/jira/browse/CALCITE-1294
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: chunwei
> Assignee: Julian Hyde
> Attachments: CALCITE-1294.patch
>
>
> function gatherConstraint in class ReduceExpressionsRule throw
> NullPointerException when both left RexNode and right RexNode are NULL
> RexLiteral.
> {code:title=ReduceExpressionsRule.java |borderStyle=solid}
> private static <C extends RexNode> void gatherConstraint(Class<C> clazz,
> RexNode left, RexNode right, Map<RexNode, C> map, Set<RexNode>
> excludeSet,
> RexBuilder rexBuilder) {
> ......
> else {
> if (existedValue instanceof RexLiteral
> && constant instanceof RexLiteral
> && !((RexLiteral) existedValue).getValue()
> .equals(((RexLiteral) constant).getValue())) {
> // we found conflicting values, e.g. left = 10 and left = 20
> map.remove(left);
> excludeSet.add(left);
> }
> },
> }
> {code}
> when existedValue and constant are NULL RexLiteral, getValue() returns null
> and null.equals(null) will throw NullPointerException.
> It is better and safer to use
> ObjectUtils.equals(((RexLiteral) existedValue).getValue(), ((RexLiteral)
> constant).getValue())
> than
> ((RexLiteral) existedValue).getValue().equals(((RexLiteral)
> constant).getValue()).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)