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

```
throw Exception("Illegal types of arguments of function " + function_name, ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
            bool match_with_subtype = false;
            const auto & sub_columns = tuple_column->getColumns();
            const auto & sub_data_types = tuple_data_type->getElements();
            for (size_t index = 0; index < arguments.size(); ++index)
                match_with_subtype |= traverseASTIn(function_name, arguments[index], sub_data_types[index], sub_columns[index], out);
            return match_with_subtype;
        }
    }
    return false;
}
static bool indexOfCanUseBloomFilter(const ASTPtr & parent)
{
    if (!parent)
        return true;
    
    
    if (const auto * function = parent->as<ASTFunction>())
    {
        if (function->name == "and")
        {
            return true;
        }
        else if (function->name == "equals" 
            || function->name == "greater" || function->name == "greaterOrEquals"
            || function->name == "less" || function->name == "lessOrEquals")
        {
            if (function->arguments->children.size() != 2)
                return false;