-module(cake@adapter@postgres). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([with_connection/1, execute_raw_sql/2, to_prepared_statement/1, write_query_to_prepared_statement/1, run_query/3, run_write/3]). -spec with_connection(fun((gleam@pgo:connection()) -> OQV)) -> OQV. with_connection(F) -> Connection = gleam_pgo_ffi:connect( erlang:setelement( 4, erlang:setelement( 2, gleam@pgo:default_config(), <<"localhost"/utf8>> ), <<"gleam_cake"/utf8>> ) ), Value = F(Connection), gleam_pgo_ffi:disconnect(Connection), Value. -spec execute_raw_sql(binary(), gleam@pgo:connection()) -> {ok, gleam@pgo:returned(gleam@dynamic:dynamic_())} | {error, gleam@pgo:query_error()}. execute_raw_sql(Qry, Conn) -> _pipe = Qry, gleam@pgo:execute(_pipe, Conn, [], fun gleam@dynamic:dynamic/1). -spec to_prepared_statement(cake@internal@query:'query'()) -> cake@internal@prepared_statement:prepared_statement(). to_prepared_statement(Qry) -> _pipe = Qry, cake@internal@query:to_prepared_statement( _pipe, <<"$"/utf8>>, postgres_adapter ). -spec write_query_to_prepared_statement( cake@internal@write_query:write_query(any()) ) -> cake@internal@prepared_statement:prepared_statement(). write_query_to_prepared_statement(Qry) -> _pipe = Qry, cake@internal@write_query:to_prepared_statement( _pipe, <<"$"/utf8>>, postgres_adapter ). -spec run_query( cake@internal@query:'query'(), fun((gleam@dynamic:dynamic_()) -> {ok, ORU} | {error, list(gleam@dynamic:decode_error())}), gleam@pgo:connection() ) -> {ok, list(ORU)} | {error, gleam@pgo:query_error()}. run_query(Qry, Dcdr, Db_conn) -> Prp_stm = to_prepared_statement(Qry), Sql = begin _pipe = cake@internal@prepared_statement:get_sql(Prp_stm), cake@internal@stdlib@iox:inspect_println_tap(_pipe) end, Params = cake@internal@prepared_statement:get_params(Prp_stm), Db_params = begin _pipe@1 = Params, _pipe@2 = gleam@list:map(_pipe@1, fun(Param) -> case Param of {bool_param, Param@1} -> gleam_pgo_ffi:coerce(Param@1); {float_param, Param@2} -> gleam_pgo_ffi:coerce(Param@2); {int_param, Param@3} -> gleam_pgo_ffi:coerce(Param@3); {string_param, Param@4} -> gleam_pgo_ffi:coerce(Param@4); null_param -> gleam_pgo_ffi:null() end end), _pipe@3 = cake@internal@stdlib@iox:print_tap( _pipe@2, <<"Params: "/utf8>> ), cake@internal@stdlib@iox:inspect_println_tap(_pipe@3) end, Result = begin _pipe@4 = Sql, gleam@pgo:execute(_pipe@4, Db_conn, Db_params, Dcdr) end, case Result of {ok, {returned, _, V}} -> {ok, V}; {error, E} -> {error, E} end. -spec run_write( cake@internal@write_query:write_query(any()), fun((gleam@dynamic:dynamic_()) -> {ok, OSO} | {error, list(gleam@dynamic:decode_error())}), gleam@pgo:connection() ) -> {ok, list(OSO)} | {error, gleam@pgo:query_error()}. run_write(Qry, Dcdr, Db_conn) -> Prp_stm = write_query_to_prepared_statement(Qry), Sql = begin _pipe = cake@internal@prepared_statement:get_sql(Prp_stm), cake@internal@stdlib@iox:inspect_println_tap(_pipe) end, Params = cake@internal@prepared_statement:get_params(Prp_stm), Db_params = begin _pipe@1 = Params, _pipe@2 = gleam@list:map(_pipe@1, fun(Param) -> case Param of {bool_param, Param@1} -> gleam_pgo_ffi:coerce(Param@1); {float_param, Param@2} -> gleam_pgo_ffi:coerce(Param@2); {int_param, Param@3} -> gleam_pgo_ffi:coerce(Param@3); {string_param, Param@4} -> gleam_pgo_ffi:coerce(Param@4); null_param -> gleam_pgo_ffi:null() end end), _pipe@3 = cake@internal@stdlib@iox:print_tap( _pipe@2, <<"Params: "/utf8>> ), cake@internal@stdlib@iox:inspect_println_tap(_pipe@3) end, Result = begin _pipe@4 = Sql, gleam@pgo:execute(_pipe@4, Db_conn, Db_params, Dcdr) end, case Result of {ok, {returned, _, V}} -> {ok, V}; {error, E} -> {error, E} end.