mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Fix table name collision due to incorrect alias count on certain joins.
[#6423 state:committed] Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
This commit is contained in:
committed by
Santiago Pastorino
parent
e2b99eb1a7
commit
d72add9c20
@@ -82,12 +82,12 @@ module ActiveRecord
|
||||
connection = active_record.connection
|
||||
|
||||
name = connection.table_alias_for "#{pluralize(reflection.name)}_#{parent_table_name}#{suffix}"
|
||||
table_index = aliases[name] + 1
|
||||
name = name[0, connection.table_alias_length-3] + "_#{table_index}" if table_index > 1
|
||||
aliases[name] += 1
|
||||
name = name[0, connection.table_alias_length-3] + "_#{aliases[name]}" if aliases[name] > 1
|
||||
else
|
||||
aliases[name] += 1
|
||||
end
|
||||
|
||||
aliases[name] += 1
|
||||
|
||||
name
|
||||
end
|
||||
|
||||
|
||||
@@ -16,6 +16,13 @@ class InnerJoinAssociationTest < ActiveRecord::TestCase
|
||||
assert_equal authors(:david), result.first
|
||||
end
|
||||
|
||||
def test_construct_finder_sql_does_not_table_name_collide_on_duplicate_associations
|
||||
assert_nothing_raised do
|
||||
sql = Person.joins(:agents => {:agents => :agents}).joins(:agents => {:agents => {:primary_contact => :agents}}).to_sql
|
||||
assert_match(/agents_people_4/i, sql)
|
||||
end
|
||||
end
|
||||
|
||||
def test_construct_finder_sql_ignores_empty_joins_hash
|
||||
sql = Author.joins({}).to_sql
|
||||
assert_no_match(/JOIN/i, sql)
|
||||
|
||||
Reference in New Issue
Block a user