def self.process( key, val, caller )
values = [*val]
case key.to_s
when LIKE_RGX
str = values.collect do |v|
"#{caller.quoted_table_name}.#{caller.connection.quote_column_name( $1 )} LIKE " +
"#{caller.connection.quote( '%%' + v + '%%', caller.columns_hash[ $1 ] )} "
end
when STARTS_WITH_RGX
str = values.collect do |v|
"#{caller.quoted_table_name}.#{caller.connection.quote_column_name( $1 )} LIKE " +
"#{caller.connection.quote( v + '%%', caller.columns_hash[ $1 ] )} "
end
when ENDS_WITH_RGX
str = values.collect do |v|
"#{caller.quoted_table_name}.#{caller.connection.quote_column_name( $1 )} LIKE " +
"#{caller.connection.quote( '%%' + v, caller.columns_hash[ $1 ] )} "
end
else
return nil
end
str = str.join(' OR ')
result_values = []
str.gsub!(/'((%%)?([^\?]*\?[^%]*|[^%]*%[^%]*)(%%)?)'/) do |match|
result_values << $2
'?'
end
result_values = nil if result_values.empty?
return Result.new(str , result_values)
end