aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-08-09 00:12:53 +0100
committerJon Leighton <j@jonathanleighton.com>2011-08-15 23:10:15 +0100
commit128d006242dae07edc65ad03e0e045adac0bbbf3 (patch)
treeb06e9eb308ba00e12bae7fdaf8cd277ead5b352f /activerecord/lib/active_record/connection_adapters/abstract
parent9482554f31f3ac7f941e6239890c60fcc01975e1 (diff)
downloadrails-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.rb9
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.