mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
fix: set prefix to "public" for fkeys to public schema
improvement: set explicit prefix on join filters
This commit is contained in:
parent
cf4a9f6d3b
commit
84fe7a4822
2 changed files with 58 additions and 5 deletions
|
@ -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:
|
||||
|
|
|
@ -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)}",
|
||||
|
|
Loading…
Reference in a new issue