Skip to content

Commit

Permalink
Add _table_name_for_alias to replace '.' with '_' when creating an …
Browse files Browse the repository at this point in the history
…alias to tables in another database

Fixes #1310, #1316
  • Loading branch information
lgebhardt committed Mar 15, 2020
1 parent 978f590 commit bf135c9
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
2 changes: 1 addition & 1 deletion lib/jsonapi/active_relation/join_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def perform_joins(records, options)

if relationship == :root
unless source_relationship
add_join_details('', {alias: resource_klass._table_name, join_type: :root})
add_join_details('', {alias: resource_klass._table_name_for_alias, join_type: :root})
end
next
end
Expand Down
10 changes: 5 additions & 5 deletions lib/jsonapi/active_relation_resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def find_fragments(filters, options = {})
options: options)

# This alias is going to be resolve down to the model's table name and will not actually be an alias
resource_table_alias = resource_klass._table_name
resource_table_alias = resource_klass._table_name_for_alias

pluck_fields = [Arel.sql("#{concat_table_field(resource_table_alias, resource_klass._primary_key)} AS #{resource_table_alias}_#{resource_klass._primary_key}")]

Expand Down Expand Up @@ -543,9 +543,9 @@ def find_related_polymorphic_fragments(source_rids, relationship, options, conne
related_type = concat_table_field(_table_name, relationship.polymorphic_type)

pluck_fields = [
Arel.sql("#{primary_key} AS #{_table_name}_#{_primary_key}"),
Arel.sql("#{related_key} AS #{_table_name}_#{relationship.foreign_key}"),
Arel.sql("#{related_type} AS #{_table_name}_#{relationship.polymorphic_type}")
Arel.sql("#{primary_key} AS #{_table_name_for_alias}_#{_primary_key}"),
Arel.sql("#{related_key} AS #{_table_name_for_alias}_#{relationship.foreign_key}"),
Arel.sql("#{related_type} AS #{_table_name_for_alias}_#{relationship.polymorphic_type}")
]

# Get the additional fields from each relation. There's a limitation that the fields must exist in each relation
Expand Down Expand Up @@ -826,7 +826,7 @@ def get_aliased_field(path_with_field, join_manager)
join_details = join_manager.join_details[path.last_relationship]
table_alias = join_details[:alias]
else
table_alias = self._table_name
table_alias = self._table_name_for_alias
end

concat_table_field(table_alias, field_segment.delegated_field_name)
Expand Down
4 changes: 4 additions & 0 deletions lib/jsonapi/basic_resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -893,6 +893,10 @@ def _table_name
@_table_name ||= _model_class.respond_to?(:table_name) ? _model_class.table_name : _model_name.tableize
end

def _table_name_for_alias
@_table_name ||= _table_name.tr('.', '_')
end

def _as_parent_key
@_as_parent_key ||= "#{_type.to_s.singularize}_id"
end
Expand Down

0 comments on commit bf135c9

Please sign in to comment.