cristianpop commented on code in PR #18729:
URL: https://github.com/apache/pinot/pull/18729#discussion_r3440813556


##########
pinot-query-planner/src/main/java/org/apache/pinot/query/planner/logical/RexExpressionUtils.java:
##########
@@ -348,26 +349,33 @@ private static RexExpression handleSearch(RexCall 
rexCall) {
     assert sarg != null;
     if (sarg.isPoints()) {
       if (leftOperand instanceof RexLiteral) {
-        return evaluateLiteralIn((RexLiteral) leftOperand, 
sarg.rangeSet.asRanges());
+        return evaluateLiteralIn((RexLiteral) leftOperand, 
sarg.rangeSet.asRanges(), sarg.nullAs);
       }
-      return new RexExpression.FunctionCall(ColumnDataType.BOOLEAN, 
SqlKind.IN.name(),
+      RexExpression inExpr = new 
RexExpression.FunctionCall(ColumnDataType.BOOLEAN, SqlKind.IN.name(),
           toSearchFunctionOperands(leftOperand, sarg.rangeSet.asRanges(), 
dataType));
+      return addNullCheckIfRequired(leftOperand, sarg.nullAs, inExpr);
     } else if (sarg.isComplementedPoints()) {
       if (leftOperand instanceof RexLiteral) {
-        return evaluateLiteralNotIn((RexLiteral) leftOperand, 
sarg.rangeSet.complement().asRanges());
+        return evaluateLiteralNotIn((RexLiteral) leftOperand, 
sarg.rangeSet.complement().asRanges(), sarg.nullAs);
       }
-      return new RexExpression.FunctionCall(ColumnDataType.BOOLEAN, 
SqlKind.NOT_IN.name(),
+      RexExpression notInExpr = new 
RexExpression.FunctionCall(ColumnDataType.BOOLEAN, SqlKind.NOT_IN.name(),
           toSearchFunctionOperands(leftOperand, 
sarg.rangeSet.complement().asRanges(), dataType));
+      return addNullCheckIfRequired(leftOperand, sarg.nullAs, notInExpr);
     } else {
       if (leftOperand instanceof RexLiteral) {
-        return evaluateLiteralOrRanges((RexLiteral) leftOperand, 
sarg.rangeSet.asRanges());
+        return evaluateLiteralOrRanges((RexLiteral) leftOperand, 
sarg.rangeSet.asRanges(), sarg.nullAs);
       }
-      Set<Range> ranges = sarg.rangeSet.asRanges();
-      return convertRangesToOr(dataType, leftOperand, ranges);
+      RexExpression orExpr = convertRangesToOr(dataType, leftOperand, 
sarg.rangeSet.asRanges());
+      return addNullCheckIfRequired(leftOperand, sarg.nullAs, orExpr);
     }
   }
 
-  private static RexExpression evaluateLiteralIn(RexLiteral leftOperand, 
Set<Range> ranges) {
+  private static RexExpression evaluateLiteralIn(RexLiteral leftOperand, 
Set<Range> ranges, RexUnknownAs nullAs) {
+    // Fall back to evaluating the expression in case of a null literal with 
nullAs as Unknown since we cannot determine

Review Comment:
   Sure, I agree it's hard to understand without the context of how it worked 
before. I'm going to update it.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to