class ActiveRecord::Associations::JoinDependency

def aliases

def aliases
  @aliases ||= Aliases.new join_root.each_with_index.map { |join_part, i|
    column_names = if join_part == join_root && !join_root_alias
      primary_key = join_root.primary_key
      primary_key ? [primary_key] : []
    else
      join_part.column_names
    end
    columns = column_names.each_with_index.map { |column_name, j|
      Aliases::Column.new column_name, "t#{i}_r#{j}"
    }
    Aliases::Table.new(join_part, columns)
  }
end