From dd6bd6ed422f306945e1a528052c9e5d0861adb7 Mon Sep 17 00:00:00 2001 From: Grant Hollingworth Date: Thu, 2 Sep 2010 17:07:48 -0400 Subject: [PATCH] use bare "=" instead of lower() for case insensitive comparison in mysql --- .../abstract/database_statements.rb | 4 ++++ .../connection_adapters/mysql_adapter.rb | 4 ++++ .../lib/active_record/validations/uniqueness.rb | 2 +- 3 files changed, 9 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb index 01e53b4..b3a118d 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb @@ -272,6 +272,10 @@ module ActiveRecord "=" end + def case_insensitive_equality_comparison(sql_attribute) + "LOWER(#{sql_attribute}) = LOWER(?)" + end + def limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) "WHERE #{quoted_primary_key} IN (SELECT #{quoted_primary_key} FROM #{quoted_table_name} #{where_sql})" end diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 47acf0b..fe2a54b 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -649,6 +649,10 @@ module ActiveRecord "= BINARY" end + def case_insensitive_equality_comparison(sql_attribute) + "#{sql_attribute} = ?" + end + def limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) where_sql end diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb index 853808e..778db20 100644 --- a/activerecord/lib/active_record/validations/uniqueness.rb +++ b/activerecord/lib/active_record/validations/uniqueness.rb @@ -72,7 +72,7 @@ module ActiveRecord if value.nil? || (options[:case_sensitive] || !column.text?) sql = "#{sql_attribute} #{operator}" else - sql = "LOWER(#{sql_attribute}) = LOWER(?)" + sql = klass.connection.case_insensitive_equality_comparison(sql_attribute) end [sql, [value]] -- 1.7.3.2