diff --git a/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java b/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java index 2a0144f1bf702..6395ff46befb6 100644 --- a/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java +++ b/presto-common/src/main/java/com/facebook/presto/common/type/TypeUtils.java @@ -13,7 +13,7 @@ */ package com.facebook.presto.common.type; -import com.facebook.presto.common.NotSupportedException; +import com.facebook.presto.common.InvalidFunctionArgumentException; import com.facebook.presto.common.block.Block; import com.facebook.presto.common.block.BlockBuilder; import io.airlift.slice.Slice; @@ -189,7 +189,7 @@ public static boolean isFloatingPointNaN(Type type, Object value) static void checkElementNotNull(boolean isNull, String errorMsg) { if (isNull) { - throw new NotSupportedException(errorMsg); + throw new InvalidFunctionArgumentException(errorMsg); } } diff --git a/presto-main/src/main/java/com/facebook/presto/type/TypeUtils.java b/presto-main/src/main/java/com/facebook/presto/type/TypeUtils.java index 72b3c7f3c4d3c..76aff971f2362 100644 --- a/presto-main/src/main/java/com/facebook/presto/type/TypeUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/type/TypeUtils.java @@ -34,6 +34,7 @@ import java.util.List; import static com.facebook.presto.common.type.BigintType.BIGINT; +import static com.facebook.presto.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT; import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Throwables.throwIfUnchecked; @@ -174,7 +175,7 @@ public static Page getHashPage(Page page, List types, List row(TRUE, ARRAY [1, 2], MAP(ARRAY[1, 3], ARRAY[2.0E0, 4.0E0]))", SemanticErrorCode.TYPE_MISMATCH, "line 1:64: '>' cannot be applied to row(boolean,array(integer),map(integer,double)), row(boolean,array(integer),map(integer,double))"); - assertInvalidFunction("row(1, CAST(NULL AS INTEGER)) < row(1, 2)", StandardErrorCode.NOT_SUPPORTED); + assertInvalidFunction("row(1, CAST(NULL AS INTEGER)) < row(1, 2)", StandardErrorCode.INVALID_FUNCTION_ARGUMENT); assertComparisonCombination("row(1.0E0, ARRAY [1,2,3], row(2, 2.0E0))", "row(1.0E0, ARRAY [1,3,3], row(2, 2.0E0))"); assertComparisonCombination("row(TRUE, ARRAY [1])", "row(TRUE, ARRAY [1, 2])"); diff --git a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java index 080c530875095..f303dd07651b3 100644 --- a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java +++ b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java @@ -3234,6 +3234,36 @@ public void testTry() // test try with null assertQuery("SELECT TRY(1 / x) FROM (SELECT NULL as x)", "SELECT NULL"); + + // Test try with map method and value parameter is optional and argument is an array with null, + // the error should be suppressed and just return null. + assertQuery("SELECT\n" + + " TRY(map_keys_by_top_n_values(c0, BIGINT '6455219767830808341'))\n" + + "FROM (\n" + + " VALUES\n" + + " MAP(\n" + + " ARRAY[1, 2], ARRAY[\n" + + " ARRAY[1, null],\n" + + " ARRAY[1, null]\n" + + " ]\n" + + " )\n" + + ") t(c0)", "SELECT NULL"); + + assertQuery("SELECT\n" + + " TRY(map_keys_by_top_n_values(c0, BIGINT '6455219767830808341'))\n" + + "FROM (\n" + + " VALUES\n" + + " MAP(\n" + + " ARRAY[1, 2], ARRAY[\n" + + " ARRAY[null, null],\n" + + " ARRAY[1, 2]\n" + + " ]\n" + + " )\n" + + ") t(c0)", "SELECT NULL"); + + // Test try with array method with an input array containing null values. + // the error should be suppressed and just return null. + assertQuery("SELECT TRY(ARRAY_MAX(ARRAY [ARRAY[1, NULL], ARRAY[1, 2]]))", "SELECT NULL"); } @Test