|
4 | 4 |
|
5 | 5 | defmodule AshSql do |
6 | 6 | @moduledoc false |
7 | | - def dynamic_repo(resource, sql_behaviour, %{ |
8 | | - __ash_bindings__: %{context: %{data_layer: %{repo: repo}}} |
9 | | - }) do |
10 | | - repo || sql_behaviour.repo(resource, :read) |
| 7 | + def dynamic_repo( |
| 8 | + resource, |
| 9 | + sql_behaviour, |
| 10 | + %{ |
| 11 | + __ash_bindings__: %{context: %{data_layer: %{repo: repo}}} |
| 12 | + } = query |
| 13 | + ) do |
| 14 | + repo || sql_behaviour.repo(resource, repo_type(query)) |
11 | 15 | end |
12 | 16 |
|
13 | | - def dynamic_repo(resource, sql_behaviour, %struct{context: %{data_layer: %{repo: repo}}}) do |
14 | | - type = struct_to_repo_type(struct) |
15 | | - |
16 | | - repo || sql_behaviour.repo(resource, type) |
| 17 | + def dynamic_repo( |
| 18 | + resource, |
| 19 | + sql_behaviour, |
| 20 | + %_{context: %{data_layer: %{repo: repo}}} = query |
| 21 | + ) do |
| 22 | + repo || sql_behaviour.repo(resource, repo_type(query)) |
17 | 23 | end |
18 | 24 |
|
19 | | - def dynamic_repo(resource, sql_behaviour, %struct{}) do |
20 | | - sql_behaviour.repo(resource, struct_to_repo_type(struct)) |
| 25 | + def dynamic_repo(resource, sql_behaviour, query) do |
| 26 | + sql_behaviour.repo(resource, repo_type(query)) |
21 | 27 | end |
22 | 28 |
|
| 29 | + defp repo_type(%{lock: lock}) when not is_nil(lock), do: :mutate |
| 30 | + defp repo_type(%struct{}), do: struct_to_repo_type(struct) |
| 31 | + defp repo_type(_), do: :read |
| 32 | + |
23 | 33 | def repo_opts(_repo, sql_behaviour, timeout, tenant, resource) do |
24 | 34 | if Ash.Resource.Info.multitenancy_strategy(resource) == :context do |
25 | 35 | [prefix: tenant] |
|
0 commit comments