when number of NULLs in IN list reaches in_predicate_conversion_threshold
The bug was fixed by removing an assertion that had been set in order
just to test whether the code could be ever executed.
* rename in_subquery_conversion_threshold to in_predicate_conversion_threshold
* make it debug-only, hide from users
* change from ulong to uint - same type and range on all architectures
Conversion of NOT IN predicates into NOT IN subqueries did not work
correctly: the predicates actually were converted into IN subqueries.
As a result if the conversion was applied for the query with
a NOT IN predicate the query could return a wrong result set.
Trasformation goes that way:
a in (1,2) ->
a in (select * from (values ((1),(2))) as new_tvc)
Special variable that controlls optimization added.
Now optimization works only in several cases.
New tests added.
Old tests corrected. Now with TVC explain can be used. TVC also can be used in recursive CTEs.