Jackie-Jiang commented on code in PR #11444: URL: https://github.com/apache/pinot/pull/11444#discussion_r1306589151
########## pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/CaseTransformFunction.java: ########## @@ -128,16 +129,22 @@ private void constructStatementListLegacy(List<TransformFunction> arguments) { for (int i = numWhenStatements; i < numWhenStatements * 2; i++) { _thenStatements.add(arguments.get(i)); } - if (arguments.size() % 2 != 0) { + if (arguments.size() % 2 != 0 && isNotNullLiteralTransformation(arguments.get(arguments.size() - 1))) { _elseStatement = arguments.get(arguments.size() - 1); } } private TransformResultMetadata calculateResultMetadata() { - TransformResultMetadata elseStatementResultMetadata = _elseStatement.getResultMetadata(); - DataType dataType = elseStatementResultMetadata.getDataType(); - Preconditions.checkState(elseStatementResultMetadata.isSingleValue(), - "Unsupported multi-value expression in the ELSE clause"); + DataType dataType; Review Comment: Good catch ########## pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/CaseTransformFunction.java: ########## @@ -128,16 +129,22 @@ private void constructStatementListLegacy(List<TransformFunction> arguments) { for (int i = numWhenStatements; i < numWhenStatements * 2; i++) { _thenStatements.add(arguments.get(i)); } - if (arguments.size() % 2 != 0) { + if (arguments.size() % 2 != 0 && isNotNullLiteralTransformation(arguments.get(arguments.size() - 1))) { _elseStatement = arguments.get(arguments.size() - 1); } } private TransformResultMetadata calculateResultMetadata() { - TransformResultMetadata elseStatementResultMetadata = _elseStatement.getResultMetadata(); - DataType dataType = elseStatementResultMetadata.getDataType(); - Preconditions.checkState(elseStatementResultMetadata.isSingleValue(), - "Unsupported multi-value expression in the ELSE clause"); + DataType dataType; + if (_elseStatement == null) { + // only possible in case of Null Literal transformation. Review Comment: This comment is not accurate. I believe the existing code has a bug that can throw `NPE` when there is no else statement. Suggest just removing this comment ########## pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/CaseTransformFunction.java: ########## @@ -257,6 +264,14 @@ public TransformResultMetadata getResultMetadata() { return _resultMetadata; } + private boolean isNotNullLiteralTransformation(TransformFunction function) { + if (Objects.equals(function.getName(), LiteralTransformFunction.FUNCTION_NAME)) { Review Comment: ```suggestion if (function instanceof LiteralTransformFunction) { ``` ########## pinot-core/src/main/java/org/apache/pinot/core/operator/transform/function/CaseTransformFunction.java: ########## @@ -257,6 +264,14 @@ public TransformResultMetadata getResultMetadata() { return _resultMetadata; } + private boolean isNotNullLiteralTransformation(TransformFunction function) { + if (Objects.equals(function.getName(), LiteralTransformFunction.FUNCTION_NAME)) { + LiteralTransformFunction literalFUnction = (LiteralTransformFunction) function; Review Comment: (typo) ```suggestion LiteralTransformFunction literalFunction = (LiteralTransformFunction) function; ``` -- 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: commits-unsubscr...@pinot.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org