Improve reduce_ids
When reduce_ids is called with an almost sequential list of ids but with some hole (it may happens for example if one record has been deleted), it may be more performent to continue the range and put an exclude clause.
For example with: [1, 2, 3, 4, 6, 7, 8, 9]
The result could be: (id >= 1 AND id <= 9 AND id != 5)
And more over when the hole is bigger like: [1, 2, 3, 4, 10, 11, 12, 13, 20, 21, 22, 23]
We could reduce id recursively: (id >= 1 AND id <= 23 AND NOT (id >= 5 AND id <= 9) AND NOT (id >= 13 AND id <= 19))
Of course it makes sense only for larger set of numbers.