pass where values to the helper function rather than rely on internal state

This commit is contained in:
Aaron Patterson 2013-05-20 17:35:17 -07:00
parent 3b266bcfea
commit 658e9e0f35

@ -137,19 +137,19 @@ def merged_wheres
if values[:where].empty? || relation.where_values.empty?
relation.where_values + values[:where]
else
sanitized_wheres + values[:where]
sanitized_wheres(relation.where_values, values[:where]) + values[:where]
end
end
# Remove equalities from the existing relation with a LHS which is
# present in the relation being merged in.
def sanitized_wheres
def sanitized_wheres(lhs_wheres, rhs_wheres)
seen = Set.new
values[:where].each do |w|
rhs_wheres.each do |w|
seen << w.left if w.respond_to?(:operator) && w.operator == :==
end
relation.where_values.reject do |w|
lhs_wheres.reject do |w|
w.respond_to?(:operator) && w.operator == :== && seen.include?(w.left)
end
end