Current section

Files

Jump to
cake src cake@adapter@postgres.erl
Raw

src/cake@adapter@postgres.erl

-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.