From d148c32983bbf1a2b60deed25e3b4eb4fb28d084 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Fri, 28 Jul 2017 17:18:09 +0900 Subject: Use `predicate_builder.build_bind_attribute` wherever possible For less duplicated code. --- .../lib/active_record/connection_adapters/abstract_adapter.rb | 6 +++--- .../lib/active_record/connection_adapters/abstract_mysql_adapter.rb | 2 +- activerecord/lib/active_record/relation.rb | 4 ++-- activerecord/lib/active_record/validations/uniqueness.rb | 3 +-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index e699a77230..7645cf7825 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -421,14 +421,14 @@ module ActiveRecord end def case_sensitive_comparison(table, attribute, column, value) # :nodoc: - table[attribute].eq(Arel::Nodes::BindParam.new(value)) + table[attribute].eq(value) end def case_insensitive_comparison(table, attribute, column, value) # :nodoc: if can_perform_case_insensitive_comparison_for?(column) - table[attribute].lower.eq(table.lower(Arel::Nodes::BindParam.new(value))) + table[attribute].lower.eq(table.lower(value)) else - table[attribute].eq(Arel::Nodes::BindParam.new(value)) + table[attribute].eq(value) end end 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 e762abc00f..8a9c497918 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -495,7 +495,7 @@ module ActiveRecord def case_sensitive_comparison(table, attribute, column, value) # :nodoc: if column.collation && !column.case_sensitive? - table[attribute].eq(Arel::Nodes::Bin.new(Arel::Nodes::BindParam.new(value))) + table[attribute].eq(Arel::Nodes::Bin.new(value)) else super end diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 1c4011b75e..caabad6055 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -92,8 +92,8 @@ module ActiveRecord def substitute_values(values) # :nodoc: values.map do |arel_attr, value| - bind = QueryAttribute.new(arel_attr.name, value, klass.type_for_attribute(arel_attr.name)) - [arel_attr, Arel::Nodes::BindParam.new(bind)] + bind = predicate_builder.build_bind_attribute(arel_attr.name, value) + [arel_attr, bind] end end diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb index 4f5b157af9..be704f89b3 100644 --- a/activerecord/lib/active_record/validations/uniqueness.rb +++ b/activerecord/lib/active_record/validations/uniqueness.rb @@ -67,12 +67,11 @@ module ActiveRecord end attribute_name = attribute.to_s + value = klass.predicate_builder.build_bind_attribute(attribute_name, value) table = klass.arel_table column = klass.columns_hash[attribute_name] - cast_type = klass.type_for_attribute(attribute_name) - value = Relation::QueryAttribute.new(attribute_name, value, cast_type) comparison = if !options[:case_sensitive] # will use SQL LOWER function before comparison, unless it detects a case insensitive collation klass.connection.case_insensitive_comparison(table, attribute, column, value) -- cgit v1.2.3