ruby - Case insensitive like (ilike) in Datamapper with Postgresql -
we using datamapper in sinatra application , use case insensitive works on both sqlite (locally in development) , postgresql (on heroku in production).
we have statements
treeitem.all(:name.like =>"%#{term}%",:unique => true,:limit => 20)
if term
is "berl" suggestion "berlin" both sqlite , postgresql backends. if term
is "berl" result sqlite , not postgresql.
i guess has fact both dm-postgres-adapter , dm-sqlite-adapter outputting like
in resulting sql query. since postgresql has case sensitive like
(for unwanted) behavior.
is there way case insensitive in datamapper without resorting use raw sql query adapter or patching adapter use ilike
instead of like
?
i of course use in between, such as:
treeitem.all(:conditions => ["name ?","%#{term}%"],:unique => true,:limit => 20)
but tied use of postgresql within our own code , not configuration adapter.
by writing own data object adapter overrides like_operator
method managed postgres' case insensitive ilike
.
require 'do_postgres' require 'dm-do-adapter' module datamapper module adapters class postgresadapter < dataobjectsadapter module sql #:nodoc: private # @api private def supports_returning? true end def like_operator(operand) 'ilike' end end include sql end const_added(:postgresadapter) end end
eventually decided port application in question use document database.
Comments
Post a Comment