Case insensitive search need to be improved to take advantage of store implementations
This page represents the current plan; for discussion please check the tracker link above.
Nowadays, the CQL module does not implement the ILIKE statement. The CQL specification only talks about the LIKE statement so it is case-sensitive. Moreover, the GeoTool infrastructure (datastore, sql encoders, etc) saves this limitations with the case insensitive functions which allow to lowercase/uppercase an expression.
toLowerCase(myAttribute) LIKE 'blah%'
Those functions are not supported at all by the sql encoders, so the filtering is performed completely in memory. This approach saves the problem and works well for small datasets. Additionally, the use of a toLowerCase or toUpperCase on an sql column will prevent using sql index with the resultant low performance problem.
To take advantages of this new feature some geotools components should be changed.
To begin the impact analysis I copy below some comment taken from our e-mail list.
- extend filter Interface (PropertyIsILike filter).
- extend the interfaces to add matchCase to Like filters,
- change filter parsers,
- sql encoders
This work has completed, voting results were not recorded:
- PropertyIsLike.isMatchingCase() method available
- Update default implementation LikeFilterImpl
- Update the CQL or ECQL parser: GEOT-2359
- Change the SQL Encoders: GEOT-2426
- Update the user guide example