Packages

SQL query builder core for Gleam

Current section

Files

Jump to
galchemy src galchemy@orm@mapper_registry.erl
Raw

src/galchemy@orm@mapper_registry.erl

-module(galchemy@orm@mapper_registry).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\galchemy\\orm\\mapper_registry.gleam").
-export([empty/0, all/1, lookup/3, register/2, get/3, from_snapshot/1]).
-export_type([mapper_registry/0, registry_error/0]).
-type mapper_registry() :: {mapper_registry,
list(galchemy@orm@metadata:model_metadata())}.
-type registry_error() :: {duplicate_mapper,
galchemy@schema@relation:table_ref()} |
{unknown_mapper, galchemy@schema@relation:table_ref()} |
{metadata_error, galchemy@orm@metadata:metadata_error()}.
-file("src\\galchemy\\orm\\mapper_registry.gleam", 17).
-spec empty() -> mapper_registry().
empty() ->
{mapper_registry, []}.
-file("src\\galchemy\\orm\\mapper_registry.gleam", 59).
-spec all(mapper_registry()) -> list(galchemy@orm@metadata:model_metadata()).
all(Registry) ->
erlang:element(2, Registry).
-file("src\\galchemy\\orm\\mapper_registry.gleam", 86).
-spec find_mapper(
list(galchemy@orm@metadata:model_metadata()),
galchemy@schema@relation:table_ref()
) -> gleam@option:option(galchemy@orm@metadata:model_metadata()).
find_mapper(Mappers, Table_ref) ->
case Mappers of
[] ->
none;
[Mapper | Rest] ->
case erlang:element(2, Mapper) =:= Table_ref of
true ->
{some, Mapper};
false ->
find_mapper(Rest, Table_ref)
end
end.
-file("src\\galchemy\\orm\\mapper_registry.gleam", 38).
-spec lookup(mapper_registry(), binary(), binary()) -> gleam@option:option(galchemy@orm@metadata:model_metadata()).
lookup(Registry, Schema_name, Table_name) ->
find_mapper(
erlang:element(2, Registry),
galchemy@schema@relation:table_ref(Schema_name, Table_name)
).
-file("src\\galchemy\\orm\\mapper_registry.gleam", 27).
-spec register(mapper_registry(), galchemy@orm@metadata:model_metadata()) -> {ok,
mapper_registry()} |
{error, registry_error()}.
register(Registry, Mapper) ->
case lookup(
Registry,
erlang:element(2, erlang:element(2, Mapper)),
erlang:element(3, erlang:element(2, Mapper))
) of
{some, _} ->
{error, {duplicate_mapper, erlang:element(2, Mapper)}};
none ->
{ok,
{mapper_registry,
lists:append(erlang:element(2, Registry), [Mapper])}}
end.
-file("src\\galchemy\\orm\\mapper_registry.gleam", 46).
-spec get(mapper_registry(), binary(), binary()) -> {ok,
galchemy@orm@metadata:model_metadata()} |
{error, registry_error()}.
get(Registry, Schema_name, Table_name) ->
Table_ref = galchemy@schema@relation:table_ref(Schema_name, Table_name),
case find_mapper(erlang:element(2, Registry), Table_ref) of
{some, Mapper} ->
{ok, Mapper};
none ->
{error, {unknown_mapper, Table_ref}}
end.
-file("src\\galchemy\\orm\\mapper_registry.gleam", 63).
-spec from_tables(
galchemy@schema@model:schema_snapshot(),
list(galchemy@schema@model:table_schema()),
mapper_registry()
) -> {ok, mapper_registry()} | {error, registry_error()}.
from_tables(Snapshot, Tables, Registry) ->
case Tables of
[] ->
{ok, Registry};
[Table_schema | Rest] ->
Next_mapper = galchemy@orm@metadata:from_snapshot(
Snapshot,
erlang:element(2, Table_schema),
erlang:element(3, Table_schema)
),
case Next_mapper of
{error, Error} ->
{error, {metadata_error, Error}};
{ok, Mapper} ->
case register(Registry, Mapper) of
{error, Error@1} ->
{error, Error@1};
{ok, Next_registry} ->
from_tables(Snapshot, Rest, Next_registry)
end
end
end.
-file("src\\galchemy\\orm\\mapper_registry.gleam", 21).
-spec from_snapshot(galchemy@schema@model:schema_snapshot()) -> {ok,
mapper_registry()} |
{error, registry_error()}.
from_snapshot(Snapshot) ->
from_tables(Snapshot, erlang:element(2, Snapshot), empty()).