diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-03-06 10:13:04 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-03-07 10:53:53 +0900 |
commit | 1aece76e2548672e5a56c1459c0c1a150ea4f175 (patch) | |
tree | a61568de07792b0ff8df1bf730aa7eb4237f3dbc /activerecord/lib/active_record | |
parent | 2beb0b473606c60e5e1cbb3dac06ffa96f8ce456 (diff) | |
download | rails-1aece76e2548672e5a56c1459c0c1a150ea4f175.tar.gz rails-1aece76e2548672e5a56c1459c0c1a150ea4f175.tar.bz2 rails-1aece76e2548672e5a56c1459c0c1a150ea4f175.zip |
Move all Arel constructions from uniqueness validator into connection adapter
Diffstat (limited to 'activerecord/lib/active_record')
3 files changed, 6 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index c2087b8216..202187a047 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -522,7 +522,7 @@ module ActiveRecord end def default_uniqueness_comparison(attribute, value, klass) # :nodoc: - case_sensitive_comparison(attribute, value) + attribute.eq(value) end def case_sensitive_comparison(attribute, value) # :nodoc: diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index d99c9b9d02..a518b897a0 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -461,15 +461,16 @@ module ActiveRecord def default_uniqueness_comparison(attribute, value, klass) # :nodoc: column = column_for_attribute(attribute) - if column.collation && !column.case_sensitive? + if column.collation && !column.case_sensitive? && !value.nil? ActiveSupport::Deprecation.warn(<<~MSG.squish) Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :#{attribute.name} attribute in #{klass} model, pass `case_sensitive: true` option explicitly to the uniqueness validator. MSG + attribute.eq(Arel::Nodes::Bin.new(value)) + else + super end - - super end def case_sensitive_comparison(attribute, value) # :nodoc: diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb index dc1be73a60..3172aa2078 100644 --- a/activerecord/lib/active_record/validations/uniqueness.rb +++ b/activerecord/lib/active_record/validations/uniqueness.rb @@ -60,9 +60,7 @@ module ActiveRecord comparison = relation.bind_attribute(attribute, value) do |attr, bind| return relation.none! if bind.unboundable? - if bind.nil? - attr.eq(bind) - elsif !options.key?(:case_sensitive) + if !options.key?(:case_sensitive) || bind.nil? klass.connection.default_uniqueness_comparison(attr, bind, klass) elsif options[:case_sensitive] klass.connection.case_sensitive_comparison(attr, bind) |