mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
improvement: support more lock types
This commit is contained in:
parent
41a2e4f1d1
commit
0db9d0d03f
1 changed files with 35 additions and 0 deletions
|
@ -456,6 +456,22 @@ defmodule AshPostgres.DataLayer do
|
||||||
def can?(_, :async_engine), do: true
|
def can?(_, :async_engine), do: true
|
||||||
def can?(_, :bulk_create), do: true
|
def can?(_, :bulk_create), do: true
|
||||||
def can?(_, {:lock, :for_update}), do: true
|
def can?(_, {:lock, :for_update}), do: true
|
||||||
|
|
||||||
|
def can?(_, {:lock, string}) do
|
||||||
|
string = String.trim_trailing(string, " NOWAIT")
|
||||||
|
|
||||||
|
String.upcase(string) in [
|
||||||
|
"ACCESS SHARE",
|
||||||
|
"ROW SHARE",
|
||||||
|
"ROW EXCLUSIVE",
|
||||||
|
"SHARE UPDATE EXCLUSIVE",
|
||||||
|
"SHARE",
|
||||||
|
"SHARE ROW EXCLUSIVE",
|
||||||
|
"EXCLUSIVE",
|
||||||
|
"ACCESS EXCLUSIVE"
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
def can?(_, :transact), do: true
|
def can?(_, :transact), do: true
|
||||||
def can?(_, :composite_primary_key), do: true
|
def can?(_, :composite_primary_key), do: true
|
||||||
def can?(_, :upsert), do: true
|
def can?(_, :upsert), do: true
|
||||||
|
@ -1626,6 +1642,25 @@ defmodule AshPostgres.DataLayer do
|
||||||
{:ok, Ecto.Query.lock(query, "FOR UPDATE")}
|
{:ok, Ecto.Query.lock(query, "FOR UPDATE")}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@locks [
|
||||||
|
"ACCESS SHARE",
|
||||||
|
"ROW SHARE",
|
||||||
|
"ROW EXCLUSIVE",
|
||||||
|
"SHARE UPDATE EXCLUSIVE",
|
||||||
|
"SHARE",
|
||||||
|
"SHARE ROW EXCLUSIVE",
|
||||||
|
"EXCLUSIVE",
|
||||||
|
"ACCESS EXCLUSIVE"
|
||||||
|
]
|
||||||
|
|
||||||
|
@all_locks @locks ++ Enum.map(@locks, &"#{&1} NOWAIT")
|
||||||
|
|
||||||
|
for lock <- @all_locks do
|
||||||
|
def lock(query, unquote(lock), _) do
|
||||||
|
{:ok, Ecto.Query.lock(query, unquote(lock))}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def sort(query, sort, resource) do
|
def sort(query, sort, resource) do
|
||||||
query
|
query
|
||||||
|
|
Loading…
Reference in a new issue