fix: set prefix to "public" for fkeys to public schema

improvement: set explicit prefix on join filters
This commit is contained in:
Zach Daniel 2021-05-22 23:56:52 -04:00
parent cf4a9f6d3b
commit 84fe7a4822
2 changed files with 58 additions and 5 deletions

View file

@ -1672,8 +1672,15 @@ defmodule AshPostgres.DataLayer do
maybe_get_resource_query(relationship.through, join_relationship),
{:ok, relationship_destination} <-
maybe_get_resource_query(relationship.destination, relationship) do
relationship_through = Ecto.Queryable.to_query(relationship_through)
relationship_destination = Ecto.Queryable.to_query(relationship_destination)
relationship_through =
relationship_through
|> Ecto.Queryable.to_query()
|> set_join_prefix(query, relationship.through)
relationship_destination =
relationship_destination
|> Ecto.Queryable.to_query()
|> set_join_prefix(query, relationship.destination)
current_binding =
Enum.find_value(query.__ash_bindings__.bindings, 0, fn {binding, data} ->
@ -1771,7 +1778,10 @@ defmodule AshPostgres.DataLayer do
{:error, error}
{:ok, relationship_destination} ->
relationship_destination = Ecto.Queryable.to_query(relationship_destination)
relationship_destination =
relationship_destination
|> Ecto.Queryable.to_query()
|> set_join_prefix(query, relationship.destination)
current_binding =
Enum.find_value(query.__ash_bindings__.bindings, 0, fn {binding, data} ->
@ -1866,6 +1876,14 @@ defmodule AshPostgres.DataLayer do
end
end
defp set_join_prefix(join_query, query, resource) do
if Ash.Resource.Info.multitenancy_strategy(resource) == :context do
%{join_query | prefix: query.prefix}
else
%{join_query | prefix: "public"}
end
end
defp clean_subquery_select(
%{
select:

View file

@ -144,8 +144,43 @@ defmodule AshPostgres.MigrationGenerator.Operation do
def up(%{
multitenancy: %{strategy: :context},
attribute:
%{references: %{table: table, destination_field: destination_field} = reference} =
attribute
%{
references:
%{
table: table,
destination_field: destination_field
} = reference
} = attribute
}) do
[
"add #{inspect(attribute.name)}",
"references(:#{table}",
[
"column: #{inspect(destination_field)}",
"name: #{inspect(reference.name)}",
"type: #{inspect(reference_type(attribute, reference))}",
"prefix: \"public\"",
on_delete(reference),
on_update(reference)
],
")",
maybe_add_default(attribute.default),
maybe_add_primary_key(attribute.primary_key?)
]
|> join()
end
def up(%{
multitenancy: %{strategy: :context},
attribute:
%{
references:
%{
multitenancy: %{strategy: :context},
table: table,
destination_field: destination_field
} = reference
} = attribute
}) do
[
"add #{inspect(attribute.name)}",