diff options
Diffstat (limited to 'activerecord/lib/active_record/relation/where_clause.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/where_clause.rb | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation/where_clause.rb b/activerecord/lib/active_record/relation/where_clause.rb index 119910ee79..0b4c7b7dfa 100644 --- a/activerecord/lib/active_record/relation/where_clause.rb +++ b/activerecord/lib/active_record/relation/where_clause.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ActiveRecord class Relation class WhereClause # :nodoc: @@ -52,8 +54,8 @@ module ActiveRecord binds = self.binds.map { |attr| [attr.name, attr.value] }.to_h equalities.map { |node| - name = node.left.name - [name, binds.fetch(name.to_s) { + name = node.left.name.to_s + [name, binds.fetch(name) { case node.right when Array then node.right.map(&:val) when Arel::Nodes::Casted, Arel::Nodes::Quoted @@ -136,10 +138,11 @@ module ActiveRecord binds_index = 0 predicates = self.predicates.reject do |node| + binds_contains = node.grep(Arel::Nodes::BindParam).size if node.is_a?(Arel::Nodes::Node) + except = \ case node when Arel::Nodes::Between, Arel::Nodes::In, Arel::Nodes::NotIn, Arel::Nodes::Equality, Arel::Nodes::NotEqual, Arel::Nodes::LessThan, Arel::Nodes::LessThanOrEqual, Arel::Nodes::GreaterThan, Arel::Nodes::GreaterThanOrEqual - binds_contains = node.grep(Arel::Nodes::BindParam).size subrelation = (node.left.kind_of?(Arel::Attributes::Attribute) ? node.left : node.right) columns.include?(subrelation.name.to_s) end |