diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/relational/FunctionResolution.java b/presto-main-base/src/main/java/com/facebook/presto/sql/relational/FunctionResolution.java index ab5c23071e58d..bdde9065df34b 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/relational/FunctionResolution.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/relational/FunctionResolution.java @@ -148,6 +148,12 @@ public boolean isCastFunction(FunctionHandle functionHandle) return functionAndTypeResolver.getFunctionMetadata(functionHandle).getOperatorType().equals(Optional.of(OperatorType.CAST)); } + @Override + public FunctionHandle lookupCast(String castType, Type fromType, Type toType) + { + return functionAndTypeResolver.lookupCast(castType, fromType, toType); + } + public boolean isTryCastFunction(FunctionHandle functionHandle) { return functionAndTypeResolver.getFunctionMetadata(functionHandle).getName().equals(QualifiedObjectName.valueOf(JAVA_BUILTIN_NAMESPACE, "TRY_CAST")); diff --git a/presto-main-base/src/test/java/com/facebook/presto/sql/relational/TestFunctionResolution.java b/presto-main-base/src/test/java/com/facebook/presto/sql/relational/TestFunctionResolution.java index ef66067c6d939..1074f7ecbca82 100644 --- a/presto-main-base/src/test/java/com/facebook/presto/sql/relational/TestFunctionResolution.java +++ b/presto-main-base/src/test/java/com/facebook/presto/sql/relational/TestFunctionResolution.java @@ -37,6 +37,7 @@ import static com.facebook.presto.common.type.BooleanType.BOOLEAN; import static com.facebook.presto.common.type.DoubleType.DOUBLE; import static com.facebook.presto.common.type.TypeSignature.parseTypeSignature; +import static com.facebook.presto.common.type.VarcharType.VARCHAR; import static com.facebook.presto.metadata.FunctionAndTypeManager.createTestFunctionAndTypeManager; import static com.facebook.presto.spi.function.FunctionImplementationType.THRIFT; import static com.facebook.presto.spi.function.FunctionVersion.notVersioned; @@ -96,6 +97,9 @@ public void testStandardFunctionResolution() // full qualified name assertEquals(standardFunctionResolution.notFunction(), standardFunctionResolution.lookupFunction("presto", "default", "not", ImmutableList.of(BOOLEAN))); assertEquals(standardFunctionResolution.countFunction(), standardFunctionResolution.lookupFunction("presto", "default", "count", ImmutableList.of())); + + // lookup cast + assertTrue(standardFunctionResolution.isCastFunction(standardFunctionResolution.lookupCast("CAST", BIGINT, VARCHAR))); } @Test diff --git a/presto-spi/src/main/java/com/facebook/presto/spi/function/StandardFunctionResolution.java b/presto-spi/src/main/java/com/facebook/presto/spi/function/StandardFunctionResolution.java index 3c7b06394069b..f9a78e2cd1ab8 100644 --- a/presto-spi/src/main/java/com/facebook/presto/spi/function/StandardFunctionResolution.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/function/StandardFunctionResolution.java @@ -60,6 +60,8 @@ public interface StandardFunctionResolution boolean isCastFunction(FunctionHandle functionHandle); + FunctionHandle lookupCast(String castType, Type fromType, Type toType); + boolean isCountFunction(FunctionHandle functionHandle); boolean isCountIfFunction(FunctionHandle functionHandle);