diff options
author | Derek Kraan <derek.kraan@gmail.com> | 2013-01-14 15:39:51 -0500 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2013-01-27 15:36:29 +0000 |
commit | 0a71c7b8644c554c8c97b8b682c7eccd92f6067b (patch) | |
tree | 9434667b4ff6c4eb234b929b7b1655a95f6a4951 /activerecord/lib/active_record/connection_adapters/abstract | |
parent | 0c588480ac4d36bda9ce29c1e364b4bda416d469 (diff) | |
download | rails-0a71c7b8644c554c8c97b8b682c7eccd92f6067b.tar.gz rails-0a71c7b8644c554c8c97b8b682c7eccd92f6067b.tar.bz2 rails-0a71c7b8644c554c8c97b8b682c7eccd92f6067b.zip |
Fix cases where delete_records on a has_many association caused errors
because of an ambiguous column name. This happened if the association
model had a default scope that referenced a third table, and the third
table also referenced the original table (with an identical
foreign_key).
Mysql requires that ambiguous columns are deambiguated by using the full
table.column syntax. Postgresql and Sqlite use a different syntax for
updates altogether (and don't tolerate table.name syntax), so the fix
requires always including the full table.column and discarding it later
for Sqlite and Postgresql.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/quoting.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb index 60a9eee7c7..c97138dfd7 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb @@ -93,6 +93,18 @@ module ActiveRecord quote_column_name(table_name) end + # Override to return the quoted table name for assignment. Defaults to + # table quoting. + # + # This works for mysql and mysql2 where table.column can be used to + # resolve ambiguity. + # + # We override this in the sqlite and postgresql adaptors to use only + # the column name (as per syntax requirements). + def quote_table_name_for_assignment(table, attr) + quote_table_name("#{table}.#{attr}") + end + def quoted_true "'t'" end |