From 07a54b242d61745a1865ee9f83af1db8b3cfc653 Mon Sep 17 00:00:00 2001 From: jaybedubb Date: Thu, 11 Apr 2019 06:33:47 +0000 Subject: [PATCH 1/2] escaping period characters is not valid in mysql2. Postgres may be different so I'm leaving that alone --- lib/ransack/adapters/active_record/ransack/constants.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/ransack/adapters/active_record/ransack/constants.rb b/lib/ransack/adapters/active_record/ransack/constants.rb index d51df8b..a780113 100644 --- a/lib/ransack/adapters/active_record/ransack/constants.rb +++ b/lib/ransack/adapters/active_record/ransack/constants.rb @@ -102,8 +102,11 @@ module Ransack # replace % \ to \% \\ def escape_wildcards(unescaped) case ActiveRecord::Base.connection.adapter_name - when "Mysql2".freeze, "PostgreSQL".freeze - # Necessary for PostgreSQL and MySQL + when "Mysql2".freeze + # Necessary for MySQL + unescaped.to_s.gsub(/([\\%_])/, '\\\\\\1') + when "PostgreSQL".freeze + # Necessary for PostgreSQL unescaped.to_s.gsub(/([\\%_.])/, '\\\\\\1') else unescaped From 36bf111bde0ee67d2ff25af0951fa48b3c32d5a4 Mon Sep 17 00:00:00 2001 From: jaybedubb Date: Thu, 11 Apr 2019 07:00:21 +0000 Subject: [PATCH 2/2] update tests to ensure period char is NOT escaped in mysql2 as per https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html --- spec/ransack/predicate_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/ransack/predicate_spec.rb b/spec/ransack/predicate_spec.rb index 11f6f1a..ee7186c 100644 --- a/spec/ransack/predicate_spec.rb +++ b/spec/ransack/predicate_spec.rb @@ -126,7 +126,7 @@ module Ransack (if ActiveRecord::Base.connection.adapter_name == "PostgreSQL" /"people"."name" ILIKE '%\\%\\.\\_\\\\%'/ elsif ActiveRecord::Base.connection.adapter_name == "Mysql2" - /`people`.`name` LIKE '%\\\\%\\\\.\\\\_\\\\\\\\%'/ + /`people`.`name` LIKE '%\\\\%.\\\\_\\\\\\\\%'/ else /"people"."name" LIKE '%%._\\%'/ end) do @@ -145,7 +145,7 @@ module Ransack (if ActiveRecord::Base.connection.adapter_name == "PostgreSQL" /"people"."name" NOT ILIKE '%\\%\\.\\_\\\\%'/ elsif ActiveRecord::Base.connection.adapter_name == "Mysql2" - /`people`.`name` NOT LIKE '%\\\\%\\\\.\\\\_\\\\\\\\%'/ + /`people`.`name` NOT LIKE '%\\\\%.\\\\_\\\\\\\\%'/ else /"people"."name" NOT LIKE '%%._\\%'/ end) do