-module(galchemy@examples@orm_declarative). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src\\galchemy\\examples\\orm_declarative.gleam"). -export([main/0]). -file("src\\galchemy\\examples\\orm_declarative.gleam", 78). -spec users_model() -> galchemy@orm@declarative:model(). users_model() -> galchemy@orm@declarative:model_( <<"public"/utf8>>, <<"users"/utf8>>, [begin _pipe = galchemy@orm@declarative:int(<<"id"/utf8>>), galchemy@orm@declarative:primary_key(_pipe) end, galchemy@orm@declarative:text(<<"name"/utf8>>), begin _pipe@1 = galchemy@orm@declarative:text(<<"email"/utf8>>), galchemy@orm@declarative:unique(_pipe@1) end], [galchemy@orm@declarative:has_many( <<"posts"/utf8>>, <<"posts_user_id_fkey"/utf8>>, <<"public"/utf8>>, <<"posts"/utf8>>, [galchemy@orm@declarative:pair( <<"id"/utf8>>, <<"user_id"/utf8>> )] )] ). -file("src\\galchemy\\examples\\orm_declarative.gleam", 95). -spec posts_model() -> galchemy@orm@declarative:model(). posts_model() -> galchemy@orm@declarative:model_( <<"public"/utf8>>, <<"posts"/utf8>>, [begin _pipe = galchemy@orm@declarative:int(<<"id"/utf8>>), galchemy@orm@declarative:primary_key(_pipe) end, galchemy@orm@declarative:int(<<"user_id"/utf8>>), galchemy@orm@declarative:text(<<"title"/utf8>>), galchemy@orm@declarative:bool(<<"published"/utf8>>)], [galchemy@orm@declarative:belongs_to( <<"user"/utf8>>, <<"posts_user_id_fkey"/utf8>>, <<"public"/utf8>>, <<"users"/utf8>>, [galchemy@orm@declarative:pair( <<"user_id"/utf8>>, <<"id"/utf8>> )] )] ). -file("src\\galchemy\\examples\\orm_declarative.gleam", 113). -spec unwrap({ok, MXZ} | {error, any()}) -> MXZ. unwrap(Value) -> case Value of {ok, Inner} -> Inner; {error, Error} -> erlang:error(#{gleam_error => panic, message => gleam@string:inspect(Error), file => <>, module => <<"galchemy/examples/orm_declarative"/utf8>>, function => <<"unwrap"/utf8>>, line => 116}) end. -file("src\\galchemy\\examples\\orm_declarative.gleam", 15). -spec main() -> nil. main() -> Users = users_model(), Posts = posts_model(), Snapshot = unwrap(galchemy@orm@declarative:to_snapshot([Users, Posts])), Registry = unwrap(galchemy@orm@runtime_registry:from_models([Users, Posts])), Users_ref = begin _pipe = unwrap(galchemy@orm@query:from_model(Users)), galchemy@orm@query:as_(_pipe, <<"u"/utf8>>) end, Posts_ref = begin _pipe@1 = unwrap(galchemy@orm@query:from_model(Posts)), galchemy@orm@query:as_(_pipe@1, <<"p"/utf8>>) end, Base_query = unwrap( galchemy@orm@query:select_fields( Users_ref, [galchemy@orm@query:field_as(<<"id"/utf8>>, <<"user_id"/utf8>>), galchemy@orm@query:field_as( <<"name"/utf8>>, <<"user_name"/utf8>> ), galchemy@orm@query:field_as(<<"email"/utf8>>, <<"email"/utf8>>)] ) ), Joined_query = unwrap( galchemy@orm@query:left_join_relation( Base_query, Users_ref, <<"posts"/utf8>>, Posts_ref ) ), Name_filter = unwrap( galchemy@orm@query:ilike( Users_ref, <<"name"/utf8>>, galchemy@dsl@expr:text(<<"A%"/utf8>>) ) ), Order_by_id = unwrap(galchemy@orm@query:asc(Users_ref, <<"id"/utf8>>)), Final_query = begin _pipe@2 = Joined_query, _pipe@3 = galchemy@orm@query:where_(_pipe@2, Name_filter), _pipe@4 = galchemy@orm@query:order_by(_pipe@3, Order_by_id), galchemy@orm@query:limit(_pipe@4, 20) end, Mapper = galchemy@orm@result:tuple2( galchemy@orm@result:scalar_as( <<"user_id"/utf8>>, galchemy@orm@codec:int() ), galchemy@orm@result:scalar_as( <<"user_name"/utf8>>, galchemy@orm@codec:text() ) ), Sample_row = galchemy@orm@result:row( [galchemy@orm@result:scalar(<<"user_id"/utf8>>, {int, 1}), galchemy@orm@result:scalar( <<"user_name"/utf8>>, {text, <<"Ann"/utf8>>} )], [] ), {Mapped_row, _} = unwrap( galchemy@orm@result:one( Mapper, Sample_row, galchemy@orm@materializer:new(galchemy@orm@mapper_registry:empty()) ) ), gleam_stdlib:println(<<"ORM declarative example"/utf8>>), gleam_stdlib:println(<<"Schema snapshot:"/utf8>>), gleam_stdlib:println(gleam@string:inspect(Snapshot)), gleam_stdlib:println(<<"Runtime registry models:"/utf8>>), gleam_stdlib:println( gleam@string:inspect(galchemy@orm@runtime_registry:all(Registry)) ), gleam_stdlib:println(<<"Compiled model-first query:"/utf8>>), gleam_stdlib:println( gleam@string:inspect(galchemy:compile({select, Final_query})) ), gleam_stdlib:println(<<"Mapped scalar row:"/utf8>>), gleam_stdlib:println(gleam@string:inspect(Mapped_row)).