diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-08-09 00:12:53 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-08-15 23:10:15 +0100 |
commit | 128d006242dae07edc65ad03e0e045adac0bbbf3 (patch) | |
tree | b06e9eb308ba00e12bae7fdaf8cd277ead5b352f /activerecord/lib/active_record/connection_adapters/abstract | |
parent | 9482554f31f3ac7f941e6239890c60fcc01975e1 (diff) | |
download | rails-128d006242dae07edc65ad03e0e045adac0bbbf3.tar.gz rails-128d006242dae07edc65ad03e0e045adac0bbbf3.tar.bz2 rails-128d006242dae07edc65ad03e0e045adac0bbbf3.zip |
Support updates with joins. Fixes #522.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb index 2ae655e68d..7543d35d3b 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb @@ -306,6 +306,15 @@ module ActiveRecord end end + # The default strategy for an UPDATE with joins is to use a subquery. This doesn't work + # on mysql (even when aliasing the tables), but mysql allows using JOIN directly in + # an UPDATE statement, so in the mysql adapters we redefine this to do that. + def join_to_update(update, select) #:nodoc: + subselect = select.clone + subselect.ast.cores.last.projections = [update.ast.key] + update.wheres = [update.ast.key.in(subselect)] + end + protected # Returns an array of record hashes with the column names as keys and # column values as values. |