-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 => <>, 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 => <>, 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)) ) ).