diff --git a/src/main/java/com/facebook/presto/bloomfilter/BloomFilterFromString.java b/src/main/java/com/facebook/presto/bloomfilter/BloomFilterFromString.java index f8cc7f2..a1304b5 100644 --- a/src/main/java/com/facebook/presto/bloomfilter/BloomFilterFromString.java +++ b/src/main/java/com/facebook/presto/bloomfilter/BloomFilterFromString.java @@ -36,4 +36,16 @@ public static void input( bf.putAll(BloomFilter.newInstance(slice.getBytes())); state.setBloomFilter(bf); } + + @InputFunction + public static void input( + BloomFilterState state, + @SqlType(VARCHAR) Slice slice, + @SqlType(StandardTypes.BIGINT) long expectedInsertions, + @SqlType(StandardTypes.DOUBLE) double falsePositivePercentage) + { + BloomFilter bf = getOrCreateBloomFilter(state, (int) expectedInsertions, falsePositivePercentage); + bf.putAll(BloomFilter.newInstance(slice.getBytes())); + state.setBloomFilter(bf); + } } diff --git a/src/test/java/com/facebook/presto/bloomfilter/TestBloomFilterQueries.java b/src/test/java/com/facebook/presto/bloomfilter/TestBloomFilterQueries.java index 627dd4e..cc5d2bd 100644 --- a/src/test/java/com/facebook/presto/bloomfilter/TestBloomFilterQueries.java +++ b/src/test/java/com/facebook/presto/bloomfilter/TestBloomFilterQueries.java @@ -90,6 +90,9 @@ public void testBloomFiltersTypeConversions() // Test construction assertQuery("WITH a AS (SELECT 'robin' AS uuid), b AS (SELECT bloom_filter(a.uuid) AS bf FROM a), c AS (SELECT to_string(b.bf) AS j FROM b), d AS (SELECT bloom_filter_from_string(c.j) AS bf2 FROM c) SELECT bloom_filter_contains(d.bf2, 'robin'), bloom_filter_contains(d.bf2, 'john') FROM d", "SELECT true, false"); + + // Test construction from string with precision + assertQuery("WITH a AS (SELECT 'robin' AS uuid), b AS (SELECT bloom_filter(a.uuid, 10, 0.05) AS bf FROM a), c AS (SELECT to_string(b.bf) AS j FROM b), d AS (SELECT bloom_filter_from_string(c.j, 10, 0.05) AS bf2 FROM c) SELECT bloom_filter_contains(d.bf2, 'robin'), bloom_filter_contains(d.bf2, 'john') FROM d", "SELECT true, false"); } @Test