Use arel_table
directly instead of newly created table
This commit is contained in:
parent
3af558e991
commit
43b83955a2
@ -51,25 +51,23 @@ def initialize(connection, aliases)
|
||||
@connection = connection
|
||||
end
|
||||
|
||||
def aliased_table_for(table_name, aliased_name, klass)
|
||||
if aliases[table_name].zero?
|
||||
def aliased_table_for(arel_table)
|
||||
if aliases[arel_table.name] == 0
|
||||
# If it's zero, we can have our table_name
|
||||
aliases[table_name] = 1
|
||||
Arel::Table.new(table_name, klass: klass)
|
||||
aliases[arel_table.name] = 1
|
||||
else
|
||||
# Otherwise, we need to use an alias
|
||||
aliased_name = @connection.table_alias_for(aliased_name)
|
||||
aliased_name = @connection.table_alias_for(yield)
|
||||
|
||||
# Update the count
|
||||
aliases[aliased_name] += 1
|
||||
count = aliases[aliased_name] += 1
|
||||
|
||||
table_alias = if aliases[aliased_name] > 1
|
||||
"#{truncate(aliased_name)}_#{aliases[aliased_name]}"
|
||||
else
|
||||
aliased_name
|
||||
end
|
||||
Arel::Table.new(table_name, klass: klass).alias(table_alias)
|
||||
aliased_name = "#{truncate(aliased_name)}_#{count}" if count > 1
|
||||
|
||||
arel_table = arel_table.alias(aliased_name)
|
||||
end
|
||||
|
||||
arel_table
|
||||
end
|
||||
|
||||
attr_reader :aliases
|
||||
|
@ -106,11 +106,9 @@ def get_chain(reflection, association, tracker)
|
||||
name = reflection.name
|
||||
chain = [Reflection::RuntimeReflection.new(reflection, association)]
|
||||
reflection.chain.drop(1).each do |refl|
|
||||
aliased_table = tracker.aliased_table_for(
|
||||
refl.table_name,
|
||||
refl.alias_candidate(name),
|
||||
refl.klass
|
||||
)
|
||||
aliased_table = tracker.aliased_table_for(refl.klass.arel_table) do
|
||||
refl.alias_candidate(name)
|
||||
end
|
||||
chain << ReflectionProxy.new(refl, aliased_table)
|
||||
end
|
||||
chain
|
||||
|
@ -173,11 +173,9 @@ def make_constraints(parent, child, join_type)
|
||||
foreign_table = parent.table
|
||||
foreign_klass = parent.base_klass
|
||||
child.join_constraints(foreign_table, foreign_klass, join_type, alias_tracker) do |reflection|
|
||||
alias_tracker.aliased_table_for(
|
||||
reflection.table_name,
|
||||
table_alias_for(reflection, parent, reflection != child.reflection),
|
||||
reflection.klass
|
||||
)
|
||||
alias_tracker.aliased_table_for(reflection.klass.arel_table) do
|
||||
table_alias_for(reflection, parent, reflection != child.reflection)
|
||||
end
|
||||
end.concat child.children.flat_map { |c| make_constraints(child, c, join_type) }
|
||||
end
|
||||
|
||||
|
@ -1052,7 +1052,7 @@ def klass
|
||||
end
|
||||
|
||||
def aliased_table
|
||||
@aliased_table ||= Arel::Table.new(table_name, klass: klass)
|
||||
klass.arel_table
|
||||
end
|
||||
|
||||
def join_primary_key(klass = self.klass)
|
||||
|
Loading…
Reference in New Issue
Block a user