Packages
ash_sql
0.2.28
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.93
0.2.92
0.2.91
0.2.90
0.2.89
0.2.88
0.2.87
0.2.86
0.2.85
0.2.84
0.2.83
0.2.82
0.2.81
0.2.80
0.2.79
0.2.78
0.2.77
0.2.76
0.2.75
0.2.74
0.2.73
0.2.72
0.2.71
0.2.70
0.2.69
0.2.68
0.2.67
0.2.66
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1-rc.20
0.1.1-rc.19
0.1.1-rc.18
0.1.1-rc.17
0.1.1-rc.16
0.1.1-rc.15
0.1.1-rc.14
0.1.1-rc.13
0.1.1-rc.12
0.1.1-rc.11
0.1.1-rc.10
0.1.1-rc.9
0.1.1-rc.8
0.1.1-rc.7
0.1.1-rc.6
0.1.1-rc.5
0.1.1-rc.4
0.1.1-rc.3
0.1.1-rc.2
0.1.1-rc.1
0.1.1-rc.0
Shared utilities for ecto-based sql data layers.
Current section
Files
Jump to
Current section
Files
lib/implementation.ex
defmodule AshSql.Implementation do
@moduledoc false
@callback table(Ash.Resource.t()) :: String.t()
@callback schema(Ash.Resource.t()) :: String.t() | nil
@callback repo(Ash.Resource.t(), :mutate | :read) :: module
@callback expr(Ecto.Query.t(), Ash.Expr.t(), map, boolean, AshSql.Expr.ExprInfo.t(), term) ::
{:ok, term, AshSql.Expr.ExprInfo.t()} | {:error, term} | :error
@callback simple_join_first_aggregates(Ash.Resource.t()) :: list(atom)
@callback parameterized_type(
Ash.Type.t() | Ecto.Type.t(),
constraints :: Keyword.t(),
no_maps? :: boolean
) ::
term
@callback parameterized_type(
Ash.Type.t() | Ecto.Type.t(),
constraints :: Keyword.t()
) ::
term
@callback storage_type(resource :: Ash.Resource.t(), field :: atom()) :: nil | term
@callback ilike?() :: boolean()
@callback determine_types(module, list(term)) :: {list(term), term} | list(term)
@callback determine_types(module, list(term), returns :: term) ::
{list(term), term} | list(term)
@callback list_aggregate(Ash.Resource.t()) :: String.t() | nil
@callback multicolumn_distinct?() :: boolean
@callback manual_relationship_function() :: atom
@callback manual_relationship_subquery_function() :: atom
@callback require_ash_functions_for_or_and_and?() :: boolean
@callback require_extension_for_citext() :: {true, String.t()} | false
@callback strpos_function() :: String.t()
@callback type_expr(expr :: term, type :: term) :: term
@optional_callbacks determine_types: 3
defmacro __using__(_) do
quote do
@behaviour AshSql.Implementation
require Ecto.Query
def strpos_function, do: "strpos"
def expr(_, _, _, _, _, _), do: :error
def simple_join_first_aggregates(_), do: []
def list_aggregate(_), do: nil
def multicolumn_distinct?, do: true
def require_ash_functions_for_or_and_and?, do: false
def require_extension_for_citext, do: false
def ilike?, do: true
def storage_type(_, _), do: nil
def type_expr(expr, type) do
Ecto.Query.dynamic(type(^expr, ^type))
end
defoverridable expr: 6,
ilike?: 0,
strpos_function: 0,
require_ash_functions_for_or_and_and?: 0,
require_extension_for_citext: 0,
simple_join_first_aggregates: 1,
type_expr: 2,
storage_type: 2,
list_aggregate: 1,
multicolumn_distinct?: 0
end
end
end