Current section
Files
Jump to
Current section
Files
src/galchemy@examples@loading.erl
-module(galchemy@examples@loading).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\galchemy\\examples\\loading.gleam").
-export([main/0]).
-file("src\\galchemy\\examples\\loading.gleam", 93).
-spec column(
binary(),
galchemy@schema@model:column_type(),
boolean(),
gleam@option:option(binary()),
integer()
) -> galchemy@schema@model:column_schema().
column(Name, Data_type, Nullable, Default, Ordinal_position) ->
{column_schema, Name, Data_type, Nullable, Default, Ordinal_position}.
-file("src\\galchemy\\examples\\loading.gleam", 55).
-spec snapshot() -> galchemy@schema@model:schema_snapshot().
snapshot() ->
{schema_snapshot,
[{table_schema,
<<"public"/utf8>>,
<<"users"/utf8>>,
[column(<<"id"/utf8>>, integer_type, false, none, 1)],
{some, {primary_key, <<"users_pkey"/utf8>>, [<<"id"/utf8>>]}},
[],
[],
[]},
{table_schema,
<<"public"/utf8>>,
<<"posts"/utf8>>,
[column(<<"id"/utf8>>, integer_type, false, none, 1),
column(<<"user_id"/utf8>>, integer_type, false, none, 2)],
{some, {primary_key, <<"posts_pkey"/utf8>>, [<<"id"/utf8>>]}},
[],
[{foreign_key,
<<"posts_user_id_fkey"/utf8>>,
[<<"user_id"/utf8>>],
<<"public"/utf8>>,
<<"users"/utf8>>,
[<<"id"/utf8>>]}],
[]}]}.
-file("src\\galchemy\\examples\\loading.gleam", 15).
-spec main() -> nil.
main() ->
Users = galchemy@dsl@table:as_(
galchemy@dsl@table:table(<<"users"/utf8>>),
<<"u"/utf8>>
),
User_id = galchemy@dsl@table:int(Users, <<"id"/utf8>>),
Eager_query = case galchemy@session@loading:apply_eager(
begin
_pipe = galchemy@dsl@select:select(
[galchemy@dsl@expr:item(galchemy@dsl@expr:col(User_id))]
),
galchemy@dsl@select:from(_pipe, Users)
end,
snapshot(),
Users,
<<"posts"/utf8>>,
{some, <<"p"/utf8>>}
) of
{ok, Value} ->
Value;
{error, Error} ->
erlang:error(#{gleam_error => panic,
message => gleam@string:inspect(Error),
file => <<?FILEPATH/utf8>>,
module => <<"galchemy/examples/loading"/utf8>>,
function => <<"main"/utf8>>,
line => 30})
end,
Lazy_load = case galchemy@session@loading:lazy_query(
snapshot(),
galchemy@schema@relation:table_ref(<<"public"/utf8>>, <<"users"/utf8>>),
<<"posts"/utf8>>,
[galchemy@session@unit_of_work:identity(
[galchemy@session@unit_of_work:field(<<"id"/utf8>>, {int, 1})]
),
galchemy@session@unit_of_work:identity(
[galchemy@session@unit_of_work:field(<<"id"/utf8>>, {int, 2})]
)]
) of
{ok, Value@1} ->
Value@1;
{error, Error@1} ->
erlang:error(#{gleam_error => panic,
message => gleam@string:inspect(Error@1),
file => <<?FILEPATH/utf8>>,
module => <<"galchemy/examples/loading"/utf8>>,
function => <<"main"/utf8>>,
line => 45})
end,
gleam_stdlib:println(<<"Loading example"/utf8>>),
gleam_stdlib:println(<<"Eager loading query:"/utf8>>),
gleam_stdlib:println(
gleam@string:inspect(
galchemy@sql@compiler:compile({select, Eager_query})
)
),
gleam_stdlib:println(<<"Lazy loading query:"/utf8>>),
gleam_stdlib:println(
gleam@string:inspect(
galchemy@sql@compiler:compile(erlang:element(3, Lazy_load))
)
).