diff --git a/presto-main/src/main/java/com/facebook/presto/type/CharOperators.java b/presto-main/src/main/java/com/facebook/presto/type/CharOperators.java index 6bffa6987e27b..ad407a6dd0fe7 100644 --- a/presto-main/src/main/java/com/facebook/presto/type/CharOperators.java +++ b/presto-main/src/main/java/com/facebook/presto/type/CharOperators.java @@ -31,6 +31,7 @@ import static com.facebook.presto.spi.function.OperatorType.LESS_THAN; import static com.facebook.presto.spi.function.OperatorType.LESS_THAN_OR_EQUAL; import static com.facebook.presto.spi.function.OperatorType.NOT_EQUAL; +import static com.facebook.presto.spi.function.OperatorType.XX_HASH_64; import static com.facebook.presto.spi.type.Chars.compareChars; public final class CharOperators @@ -101,6 +102,14 @@ public static long hashCode(@SqlType("char(x)") Slice value) return XxHash64.hash(value); } + @LiteralParameters("x") + @ScalarOperator(XX_HASH_64) + @SqlType(StandardTypes.BIGINT) + public static long xxHash64(@SqlType("char(x)") Slice slice) + { + return XxHash64.hash(slice); + } + @LiteralParameters({"x"}) @ScalarOperator(IS_DISTINCT_FROM) @SqlType(StandardTypes.BOOLEAN) diff --git a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestAggregations.java b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestAggregations.java index 3e472fe94c7a4..0b591bbd304d0 100644 --- a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestAggregations.java +++ b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestAggregations.java @@ -720,6 +720,10 @@ public void testApproximateCountDistinct() assertQuery("SELECT approx_distinct(CAST(custkey AS VARCHAR)) FROM orders", "SELECT 1036"); assertQuery("SELECT approx_distinct(CAST(custkey AS VARCHAR), 0.023) FROM orders", "SELECT 1036"); + // test char + assertQuery("SELECT approx_distinct(CAST(CAST(custkey AS VARCHAR) AS CHAR(20))) FROM orders", "SELECT 1036"); + assertQuery("SELECT approx_distinct(CAST(CAST(custkey AS VARCHAR) AS CHAR(20)), 0.023) FROM orders", "SELECT 1036"); + // test varbinary assertQuery("SELECT approx_distinct(to_utf8(CAST(custkey AS VARCHAR))) FROM orders", "SELECT 1036"); assertQuery("SELECT approx_distinct(to_utf8(CAST(custkey AS VARCHAR)), 0.023) FROM orders", "SELECT 1036");