Packages

🎂Cake 🐘PostgreSQL adapter which passes PreparedStatements to the gleam_pgo library for execution written in Gleam.

Retired package: Renamed - New name is cake_pog

Current section

Files

Jump to
cake_gleam_pgo 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/6, read_query_to_prepared_statement/1, write_query_to_prepared_statement/1, execute_raw_sql/2, run_read_query/3, run_write_query/3, run_query/3]).
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 22).
-spec with_connection(
binary(),
integer(),
binary(),
gleam@option:option(binary()),
binary(),
fun((gleam@pgo:connection()) -> IXK)
) -> IXK.
with_connection(Host, Port, Username, Password, Database, Callback) ->
Connection = begin
_pipe = erlang:setelement(
4,
erlang:setelement(
6,
erlang:setelement(
5,
erlang:setelement(
3,
erlang:setelement(2, gleam@pgo:default_config(), Host),
Port
),
Username
),
Password
),
Database
),
gleam_pgo_ffi:connect(_pipe)
end,
Value = Callback(Connection),
gleam_pgo_ffi:disconnect(Connection),
Value.
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 49).
-spec read_query_to_prepared_statement(cake@internal@read_query:read_query()) -> cake@internal@prepared_statement:prepared_statement().
read_query_to_prepared_statement(Query) ->
_pipe = Query,
cake@dialect@postgres_dialect:read_query_to_prepared_statement(_pipe).
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 57).
-spec write_query_to_prepared_statement(
cake@internal@write_query:write_query(any())
) -> cake@internal@prepared_statement:prepared_statement().
write_query_to_prepared_statement(Query) ->
_pipe = Query,
cake@dialect@postgres_dialect:write_query_to_prepared_statement(_pipe).
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 126).
-spec execute_raw_sql(binary(), gleam@pgo:connection()) -> {ok,
gleam@pgo:returned(gleam@dynamic:dynamic_())} |
{error, gleam@pgo:query_error()}.
execute_raw_sql(Sql_string, Db_connection) ->
_pipe = Sql_string,
gleam@pgo:execute(_pipe, Db_connection, [], fun gleam@dynamic:dynamic/1).
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 134).
-spec cake_param_to_client_param(cake@param:param()) -> gleam@pgo:value().
cake_param_to_client_param(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.
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 63).
-spec run_read_query(
cake@internal@read_query:read_query(),
fun((gleam@dynamic:dynamic_()) -> {ok, IXN} |
{error, list(gleam@dynamic:decode_error())}),
gleam@pgo:connection()
) -> {ok, list(IXN)} | {error, gleam@pgo:query_error()}.
run_read_query(Query, Decoder, Db_connection) ->
Prepared_statement = begin
_pipe = Query,
read_query_to_prepared_statement(_pipe)
end,
Sql_string = begin
_pipe@1 = Prepared_statement,
cake:get_sql(_pipe@1)
end,
Db_params = begin
_pipe@2 = Prepared_statement,
_pipe@3 = cake:get_params(_pipe@2),
gleam@list:map(_pipe@3, fun cake_param_to_client_param/1)
end,
Result = begin
_pipe@4 = Sql_string,
gleam@pgo:execute(_pipe@4, Db_connection, Db_params, Decoder)
end,
case Result of
{ok, {returned, _, V}} ->
{ok, V};
{error, E} ->
{error, E}
end.
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 87).
-spec run_write_query(
cake@internal@write_query:write_query(IXS),
fun((gleam@dynamic:dynamic_()) -> {ok, IXS} |
{error, list(gleam@dynamic:decode_error())}),
gleam@pgo:connection()
) -> {ok, list(IXS)} | {error, gleam@pgo:query_error()}.
run_write_query(Query, Decoder, Db_connection) ->
Prepared_statement = begin
_pipe = Query,
write_query_to_prepared_statement(_pipe)
end,
Sql_string = begin
_pipe@1 = Prepared_statement,
cake:get_sql(_pipe@1)
end,
Db_params = begin
_pipe@2 = Prepared_statement,
_pipe@3 = cake:get_params(_pipe@2),
gleam@list:map(_pipe@3, fun cake_param_to_client_param/1)
end,
Result = begin
_pipe@4 = Sql_string,
gleam@pgo:execute(_pipe@4, Db_connection, Db_params, Decoder)
end,
case Result of
{ok, {returned, _, V}} ->
{ok, V};
{error, E} ->
{error, E}
end.
-file("/Users/leo/local-dev/gleam/gleam-cake-gleam_pgo/src/cake/adapter/postgres.gleam", 113).
-spec run_query(
cake:cake_query(IYA),
fun((gleam@dynamic:dynamic_()) -> {ok, IYA} |
{error, list(gleam@dynamic:decode_error())}),
gleam@pgo:connection()
) -> {ok, list(IYA)} | {error, gleam@pgo:query_error()}.
run_query(Query, Decoder, Db_connection) ->
case Query of
{cake_read_query, Read_query} ->
_pipe = Read_query,
run_read_query(_pipe, Decoder, Db_connection);
{cake_write_query, Write_query} ->
_pipe@1 = Write_query,
run_write_query(_pipe@1, Decoder, Db_connection)
end.