21.5.1.6605

```sql
create table bftest (k Int64, x Array(Int64), index ix1(x) TYPE bloom_filter GRANULARITY 3) 
Engine=MergeTree order by k;

insert into bftest select number, 
    arrayMap(i->rand64()%565656, range(10)) from numbers(10000000);
insert into bftest select number, 
    arrayMap(i->rand64()%565656, range(10)) from numbers(100000000);

###  hasAny(x, [42,-42])
select count() from bftest where hasAny(x, [42,-42]);
Elapsed: 0.909 sec. Processed 110.00 million rows

### has (x, 42) or has(x, -42)
select count() from bftest where has (x, 42) or has(x, -42);
Elapsed: 0.143 sec. Processed 6.55 million rows

```
{
    const auto * const_column = typeid_cast<const ColumnConst *>(hash_column);
    const auto * non_const_column = typeid_cast<const ColumnUInt64 *>(hash_column);
    if (!const_column && !non_const_column)
        throw Exception("LOGICAL ERROR: hash column must be Const Column or UInt64 Column.", ErrorCodes::LOGICAL_ERROR);
    if (const_column)
    {
        for (size_t index = 0; index < hash_functions; ++index)
            if (!bloom_filter->findHashWithSeed(const_column->getValue<UInt64>(), BloomFilterHash::bf_hash_seed[index]))
                return false;
        return true;
    }
    else
    {
        bool missing_rows = true;
        const ColumnUInt64::Container & data = non_const_column->getData();
        for (size_t index = 0, size = data.size(); missing_rows && index < size; ++index)
        {
            bool match_row = true;
            for (size_t hash_index = 0; match_row && hash_index < hash_functions; ++hash_index)
                match_row = bloom_filter->findHashWithSeed(data[index], BloomFilterHash::bf_hash_seed[hash_index]);
            missing_rows = !match_row;
        }
        return !missing_rows;
    }
}
}
MergeTreeIndexConditionBloomFilter::MergeTreeIndexConditionBloomFilter(