Packages
cake
0.2.0
4.1.0
4.0.0
3.0.0
2.2.2
2.2.1
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.0
retired
0.15.0
retired
0.14.0
retired
0.13.0
retired
0.12.0
retired
0.11.0
retired
0.10.1
retired
0.10.0
retired
0.9.2
retired
0.9.1
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.0
retired
0.0.1
retired
🎂 An SQL query builder for Gleam for SQL dialects 🐘PostgreSQL, 🪶SQLite, 🦭MariaDB, and 🐬MySQL
Retired package: Deprecated - a stable release is available, please use >= 1.0.0
Current section
Files
Jump to
Current section
Files
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.