fix greatest/least function non-vectorized processing to ignore null argument types (#16649)

This commit is contained in:
Clint Wylie 2024-06-26 12:59:42 -07:00 committed by GitHub
parent ab76d851ad
commit d4f2636325
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 9 additions and 8 deletions

View File

@ -622,11 +622,10 @@ public interface Function extends NamedFunction
ExprEval<?> exprEval = expr.eval(bindings);
ExpressionType exprType = exprEval.type();
if (isValidType(exprType)) {
outputType = ExpressionTypeConversion.function(outputType, exprType);
}
if (exprEval.value() != null) {
if (isValidType(exprType)) {
outputType = ExpressionTypeConversion.function(outputType, exprType);
}
evals.add(exprEval);
}
}

View File

@ -677,6 +677,7 @@ public class FunctionTest extends InitializedNullHandlingTest
assertExpr("greatest()", null);
assertExpr("greatest(null, null)", null);
assertExpr("greatest(1, null, 'A')", "A");
assertExpr("greatest(1.0, 1, null)", 1.0);
}
@Test
@ -703,6 +704,7 @@ public class FunctionTest extends InitializedNullHandlingTest
assertExpr("least()", null);
assertExpr("least(null, null)", null);
assertExpr("least(1, null, 'A')", "1");
assertExpr("least(1.0, 1, null)", 1.0);
}
@Test

View File

@ -214,7 +214,7 @@ public class GreatestExpressionTest extends CalciteTestBase
}
@Test
public void testDecimalWithNullShouldReturnString()
public void testDecimalWithNullShouldNotReturnString()
{
testExpression(
Arrays.asList(
@ -227,7 +227,7 @@ public class GreatestExpressionTest extends CalciteTestBase
null,
3.4
),
"3.4"
3.4
);
}
@Test

View File

@ -214,7 +214,7 @@ public class LeastExpressionTest extends CalciteTestBase
}
@Test
public void testDecimalWithNullShouldReturnString()
public void testDecimalWithNullShouldNotReturnString()
{
testExpression(
Arrays.asList(
@ -227,7 +227,7 @@ public class LeastExpressionTest extends CalciteTestBase
3.4,
null
),
"1.2"
1.2
);
}