aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-05-21 10:55:56 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-05-21 10:55:56 -0700
commit50823452f70341447a010df27dd514fd97bfe8a9 (patch)
tree35f71e388e63a314bb7c356ca928c056a5373506 /activerecord/lib/active_record/relation
parentd2d5f15f0729d00132a240dd9e5169dce5962a0d (diff)
downloadrails-50823452f70341447a010df27dd514fd97bfe8a9.tar.gz
rails-50823452f70341447a010df27dd514fd97bfe8a9.tar.bz2
rails-50823452f70341447a010df27dd514fd97bfe8a9.zip
remove bind values for where clauses that were removed
Diffstat (limited to 'activerecord/lib/active_record/relation')
-rw-r--r--activerecord/lib/active_record/relation/merger.rb17
1 files changed, 8 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/relation/merger.rb b/activerecord/lib/active_record/relation/merger.rb
index 38f49912d1..a65ef1898a 100644
--- a/activerecord/lib/active_record/relation/merger.rb
+++ b/activerecord/lib/active_record/relation/merger.rb
@@ -99,13 +99,15 @@ module ActiveRecord
end
def merge_multi_values
- rhs_wheres = values[:where] || []
lhs_wheres = relation.where_values
+ rhs_wheres = values[:where] || []
+ lhs_binds = relation.bind_values
+ rhs_binds = values[:bind] || []
- _, kept = partition_overwrites(lhs_wheres, rhs_wheres)
+ removed, kept = partition_overwrites(lhs_wheres, rhs_wheres)
relation.where_values = kept + rhs_wheres
- relation.bind_values = merged_binds
+ relation.bind_values = filter_binds(lhs_binds, removed) + rhs_binds
if values[:reordering]
# override any order specified in the original relation
@@ -128,12 +130,9 @@ module ActiveRecord
end
end
- def merged_binds
- if values[:bind]
- (relation.bind_values + values[:bind]).uniq(&:first)
- else
- relation.bind_values
- end
+ def filter_binds(lhs_binds, removed_wheres)
+ set = Set.new removed_wheres.map { |x| x.left.name }
+ lhs_binds.dup.delete_if { |col,_| set.include? col.name }
end
# Remove equalities from the existing relation with a LHS which is