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 termis "berl" suggestion "berlin" both sqlite , postgresql backends. if termis "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 ilikeinstead 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

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -