Fixed referencing invalid offset in bloom_filter with array.

This commit is contained in:
philip.han 2019-12-20 20:31:14 +09:00
parent 89039abf69
commit 0b79811d8e
3 changed files with 22 additions and 0 deletions

View File

@ -86,6 +86,7 @@ struct BloomFilterHash
const auto & offsets = array_col->getOffsets();
limit = offsets[pos + limit - 1] - offsets[pos - 1]; /// PaddedPODArray allows access on index -1.
pos = offsets[pos - 1];
if (limit == 0)
{

View File

@ -175,3 +175,6 @@
1
1
1
5000
5000
5000

View File

@ -246,3 +246,21 @@ SELECT COUNT() FROM test.bloom_filter_array_lc_null_types_test WHERE has(str, '1
SELECT COUNT() FROM test.bloom_filter_array_lc_null_types_test WHERE has(fixed_string, toFixedString('100', 5));
DROP TABLE IF EXISTS test.bloom_filter_array_lc_null_types_test;
DROP TABLE IF EXISTS test.bloom_filter_array_offsets_lc_str;
CREATE TABLE test.bloom_filter_array_offsets_lc_str (order_key int, str Array(LowCardinality((String))), INDEX idx str TYPE bloom_filter(1.01) GRANULARITY 1024) ENGINE = MergeTree() ORDER BY order_key SETTINGS index_granularity = 1024;
INSERT INTO test.bloom_filter_array_offsets_lc_str SELECT number AS i, if(i%2, ['value'], []) FROM system.numbers LIMIT 10000;
SELECT count() FROM test.bloom_filter_array_offsets_lc_str WHERE has(str, 'value');
DROP TABLE IF EXISTS test.bloom_filter_array_offsets_lc_str;
DROP TABLE IF EXISTS test.bloom_filter_array_offsets_str;
CREATE TABLE test.bloom_filter_array_offsets_str (order_key int, str Array(String), INDEX idx str TYPE bloom_filter(1.01) GRANULARITY 1024) ENGINE = MergeTree() ORDER BY order_key SETTINGS index_granularity = 1024;
INSERT INTO test.bloom_filter_array_offsets_str SELECT number AS i, if(i%2, ['value'], []) FROM system.numbers LIMIT 10000;
SELECT count() FROM test.bloom_filter_array_offsets_str WHERE has(str, 'value');
DROP TABLE IF EXISTS test.bloom_filter_array_offsets_str;
DROP TABLE IF EXISTS test.bloom_filter_array_offsets_i;
CREATE TABLE test.bloom_filter_array_offsets_i (order_key int, i Array(int), INDEX idx i TYPE bloom_filter(1.01) GRANULARITY 1024) ENGINE = MergeTree() ORDER BY order_key SETTINGS index_granularity = 1024;
INSERT INTO test.bloom_filter_array_offsets_i SELECT number AS i, if(i%2, [99999], []) FROM system.numbers LIMIT 10000;
SELECT count() FROM test.bloom_filter_array_offsets_i WHERE has(i, 99999);
DROP TABLE IF EXISTS test.bloom_filter_array_offsets_i;