class ActiveRecord::Relation::Merger

def merge_multi_values

def merge_multi_values
  lhs_wheres = relation.where_values
  rhs_wheres = values[:where] || []
  lhs_binds  = relation.bind_values
  rhs_binds  = values[:bind] || []
  removed, kept = partition_overwrites(lhs_wheres, rhs_wheres)
  where_values = kept + rhs_wheres
  bind_values  = filter_binds(lhs_binds, removed) + rhs_binds
  conn = relation.klass.connection
  bv_index = 0
  where_values.map! do |node|
    if Arel::Nodes::Equality === node && Arel::Nodes::BindParam === node.right
      substitute = conn.substitute_at(bind_values[bv_index].first, bv_index)
      bv_index += 1
      Arel::Nodes::Equality.new(node.left, substitute)
    else
      node
    end
  end
  relation.where_values = where_values
  relation.bind_values  = bind_values
  if values[:reordering]
    # override any order specified in the original relation
    relation.reorder! values[:order]
  elsif values[:order]
    # merge in order_values from relation
    relation.order! values[:order]
  end
  relation.extend(*values[:extending]) unless values[:extending].blank?
end