This method is deprecated or moved on the latest stable version.
The last existing version (v3.1.0) is shown here.
join_to_update(update, select)
public
In the simple case, MySQL allows us to place JOINs directly into the UPDATE
query. However, this does not allow for LIMIT, OFFSET and ORDER. To support
these, we must use a subquery. However, MySQL is too stupid to create
a temporary table for this automatically, so we have to give it some
prompting in the form of a subsubquery. Ugh!
# File activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb, line 606
def join_to_update(update, select) #:nodoc:
if select.limit || select.offset || select.orders.any?
subsubselect = select.clone
subsubselect.projections = [update.key]
subselect = Arel::SelectManager.new(select.engine)
subselect.project Arel.sql(update.key.name)
subselect.from subsubselect.as('__active_record_temp')
update.where update.key.in(subselect)
else
update.table select.source
update.wheres = select.constraints
end
end