-module(cake@adapter@postgres_adapter). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([with_connection/1, execute/2, to_prepared_statement/1, run_query/3]). -spec with_connection(fun((gleam@pgo:connection()) -> OET)) -> OET. 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(binary(), gleam@pgo:connection()) -> {ok, gleam@pgo:returned(gleam@dynamic:dynamic_())} | {error, gleam@pgo:query_error()}. execute(Query, Conn) -> Execute_decoder = fun gleam@dynamic:dynamic/1, _pipe = Query, gleam@pgo:execute(_pipe, Conn, [], Execute_decoder). -spec to_prepared_statement(cake@internal@query:'query'()) -> cake@internal@prepared_statement:prepared_statement(). to_prepared_statement(Qry) -> _pipe = Qry, cake@internal@query:builder_new(_pipe, <<"$"/utf8>>). -spec run_query( gleam@pgo:connection(), cake@internal@query:'query'(), fun((gleam@dynamic:dynamic_()) -> {ok, OFO} | {error, list(gleam@dynamic:decode_error())}) ) -> {ok, list(OFO)} | {error, gleam@pgo:query_error()}. run_query(Db_conn, Qry, Dcdr) -> Prp_stm = to_prepared_statement(Qry), Sql = begin _pipe = cake@internal@prepared_statement:get_sql(Prp_stm), cake@stdlib@iox:dbg(_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) end end), _pipe@3 = cake@stdlib@iox:print_tap(_pipe@2, <<"Params: "/utf8>>), cake@stdlib@iox:dbg(_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.