Estamos utilizando Datamapper en una aplicación Sinatra y nos gustaría utilizar mayúsculas y minúsculas como las que funcionan en Sqlite (localmente en desarrollo) y Postgresql (en Heroku en producción).Insensible a mayúsculas/minúsculas (ilike) en Datamapper con Postgresql
Tenemos declaraciones como
TreeItem.all(:name.like =>"%#{term}%",:unique => true,:limit => 20)
Si term
es "BERL" obtenemos la sugerencia de "Berlín" tanto desde el backend SQLite y PostgreSQL. Sin embargo, si term
es "Berl", solo obtendremos ese resultado de Sqlite y no de Postgresql.
Supongo que esto tiene que ver con el hecho de que tanto dm-postgres-adapter como dm-sqlite-adapter dan como resultado LIKE
en la consulta SQL resultante. Dado que Postgresql tiene un caso sensible LIKE
obtenemos este comportamiento (para nosotros no deseados).
¿Hay alguna manera de obtener mayúsculas y minúsculas como en Datamapper sin recurrir al uso de una consulta SQL sin formato al adaptador o parcheando el adaptador para usar ILIKE
en lugar de LIKE
?
que podría utilizar, por supuesto, algo intermedio, como por ejemplo:
TreeItem.all(:conditions => ["name LIKE ?","%#{term}%"],:unique => true,:limit => 20)
pero entonces estaría ligado al uso de PostgreSQL dentro de nuestro propio código y no sólo como una configuración para el adaptador.
Se me ocurrió una solución al escribir mi propio adaptador dm-postgres que anula el método 'like_operator'. Al ser un n00b en Stackoverflow, no puedo responder mis propias preguntas durante 8 horas. – moonhouse