Currently IndexCondition is quite cumbersome and hard to understand. The difference between bounds and conditions is unclear as well as unclear what should be used to estimate a selectivity and what should be used to estimate a self cost.
Thus I suggest to change it in a follow way:
- remove [lower|upper]Cond
- bounds remains as is
- self cost estimation of an AbstractIndex should be calculated with regard to bounds
- selectivity should be calculated with regards to whole condition that is member of ProjectableFilterableTableScan