Description
function gatherConstraint in class ReduceExpressionsRule throw NullPointerException when both left RexNode and right RexNode are NULL RexLiteral.
ReduceExpressionsRule.java
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())
Attachments
Attachments
Issue Links
- duplicates
-
CALCITE-1860 Duplicate null predicates cause NullPointerException in RexUtil
- Closed