-module(d1_gleamflare@database).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/d1_gleamflare/database.gleam").
-export([query_to_json/1, query_meta_decoder/0, query_result_decoder/1, 'query'/4, query_dynamic/3, raw_query/3, batch/2, delete/1]).
-file("src/d1_gleamflare/database.gleam", 10).
-spec query_to_json(d1_gleamflare@types:'query'()) -> gleam@json:json().
query_to_json(Q) ->
gleam@json:object(
[{<<"sql"/utf8>>, gleam@json:string(erlang:element(2, Q))},
{<<"params"/utf8>>,
gleam@json:array(erlang:element(3, Q), fun(X) -> X end)}]
).
-file("src/d1_gleamflare/database.gleam", 28).
-spec map_option_default(
fun((gleam@dynamic:dynamic_()) -> {ok, gleam@option:option(HFV)} |
{error, list(gleam@dynamic:decode_error())}),
HFV
) -> fun((gleam@dynamic:dynamic_()) -> {ok, HFV} |
{error, list(gleam@dynamic:decode_error())}).
map_option_default(Decoder, Default) ->
fun(D) -> case Decoder(D) of
{ok, Opt} ->
{ok, gleam@option:unwrap(Opt, Default)};
{error, Errs} ->
{error, Errs}
end end.
-file("src/d1_gleamflare/database.gleam", 17).
-spec query_meta_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
d1_gleamflare@types:query_meta()} |
{error, list(gleam@dynamic:decode_error())}).
query_meta_decoder() ->
gleam@dynamic:decode5(
fun(Field@0, Field@1, Field@2, Field@3, Field@4) -> {query_meta, Field@0, Field@1, Field@2, Field@3, Field@4} end,
gleam@dynamic:field(<<"duration"/utf8>>, fun gleam@dynamic:float/1),
gleam@dynamic:field(<<"changes"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"last_row_id"/utf8>>, fun gleam@dynamic:int/1),
begin
_pipe = d1_gleamflare@internal:optional_field(
<<"rows_read"/utf8>>,
fun gleam@dynamic:int/1
),
map_option_default(_pipe, 0)
end,
begin
_pipe@1 = d1_gleamflare@internal:optional_field(
<<"rows_written"/utf8>>,
fun gleam@dynamic:int/1
),
map_option_default(_pipe@1, 0)
end
).
-file("src/d1_gleamflare/database.gleam", 37).
-spec query_result_decoder(
fun((gleam@dynamic:dynamic_()) -> {ok, HFZ} |
{error, list(gleam@dynamic:decode_error())})
) -> fun((gleam@dynamic:dynamic_()) -> {ok,
d1_gleamflare@types:query_result(HFZ)} |
{error, list(gleam@dynamic:decode_error())}).
query_result_decoder(Row_decoder) ->
gleam@dynamic:decode3(
fun(Field@0, Field@1, Field@2) -> {query_result, Field@0, Field@1, Field@2} end,
begin
_pipe = d1_gleamflare@internal:optional_field(
<<"results"/utf8>>,
gleam@dynamic:list(Row_decoder)
),
map_option_default(_pipe, [])
end,
gleam@dynamic:field(<<"success"/utf8>>, fun gleam@dynamic:bool/1),
gleam@dynamic:field(<<"meta"/utf8>>, query_meta_decoder())
).
-file("src/d1_gleamflare/database.gleam", 47).
-spec 'query'(
d1_gleamflare@types:database(),
binary(),
list(gleam@json:json()),
fun((gleam@dynamic:dynamic_()) -> {ok, HGE} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, d1_gleamflare@types:query_result(HGE)} |
{error, d1_gleamflare@types:error()}.
'query'(Db, Sql, Params, Decoder) ->
Body = begin
_pipe = gleam@json:object(
[{<<"sql"/utf8>>, gleam@json:string(Sql)},
{<<"params"/utf8>>, gleam@json:array(Params, fun(X) -> X end)}]
),
gleam@json:to_string(_pipe)
end,
Req = begin
_pipe@1 = d1_gleamflare@internal:base_request(erlang:element(2, Db)),
_pipe@2 = gleam@http@request:set_method(_pipe@1, post),
_pipe@3 = gleam@http@request:set_path(
_pipe@2,
<<<<<<<<"/client/v4/accounts/"/utf8,
(erlang:element(2, erlang:element(2, Db)))/binary>>/binary,
"/d1/database/"/utf8>>/binary,
(erlang:element(3, Db))/binary>>/binary,
"/query"/utf8>>
),
gleam@http@request:set_body(_pipe@3, Body)
end,
case d1_gleamflare@internal:send_request(
Req,
gleam@dynamic:list(query_result_decoder(Decoder))
) of
{ok, Results} ->
case gleam@list:first(Results) of
{ok, Res} ->
{ok, Res};
{error, _} ->
{error,
{json_error,
<<"Cloudflare API returned an empty result list"/utf8>>}}
end;
{error, Err} ->
{error, Err}
end.
-file("src/d1_gleamflare/database.gleam", 83).
-spec query_dynamic(
d1_gleamflare@types:database(),
binary(),
list(gleam@json:json())
) -> {ok, d1_gleamflare@types:query_result(gleam@dynamic:dynamic_())} |
{error, d1_gleamflare@types:error()}.
query_dynamic(Db, Sql, Params) ->
'query'(Db, Sql, Params, fun gleam@dynamic:dynamic/1).
-file("src/d1_gleamflare/database.gleam", 91).
-spec raw_query(
d1_gleamflare@types:database(),
binary(),
list(gleam@json:json())
) -> {ok, list(list(gleam@dynamic:dynamic_()))} |
{error, d1_gleamflare@types:error()}.
raw_query(Db, Sql, Params) ->
Body = begin
_pipe = gleam@json:object(
[{<<"sql"/utf8>>, gleam@json:string(Sql)},
{<<"params"/utf8>>, gleam@json:array(Params, fun(X) -> X end)}]
),
gleam@json:to_string(_pipe)
end,
Req = begin
_pipe@1 = d1_gleamflare@internal:base_request(erlang:element(2, Db)),
_pipe@2 = gleam@http@request:set_method(_pipe@1, post),
_pipe@3 = gleam@http@request:set_path(
_pipe@2,
<<<<<<<<"/client/v4/accounts/"/utf8,
(erlang:element(2, erlang:element(2, Db)))/binary>>/binary,
"/d1/database/"/utf8>>/binary,
(erlang:element(3, Db))/binary>>/binary,
"/raw"/utf8>>
),
gleam@http@request:set_body(_pipe@3, Body)
end,
Decoder = gleam@dynamic:list(
gleam@dynamic:field(
<<"results"/utf8>>,
gleam@dynamic:field(
<<"rows"/utf8>>,
gleam@dynamic:list(
gleam@dynamic:list(fun gleam@dynamic:dynamic/1)
)
)
)
),
case d1_gleamflare@internal:send_request(Req, Decoder) of
{ok, Results} ->
case gleam@list:first(Results) of
{ok, Res} ->
{ok, Res};
{error, _} ->
{error,
{json_error,
<<"Cloudflare API returned an empty result list"/utf8>>}}
end;
{error, Err} ->
{error, Err}
end.
-file("src/d1_gleamflare/database.gleam", 128).
-spec batch(d1_gleamflare@types:database(), list(d1_gleamflare@types:'query'())) -> {ok,
list(d1_gleamflare@types:query_result(gleam@dynamic:dynamic_()))} |
{error, d1_gleamflare@types:error()}.
batch(Db, Queries) ->
Body = begin
_pipe = gleam@json:object(
[{<<"batch"/utf8>>, gleam@json:array(Queries, fun query_to_json/1)}]
),
gleam@json:to_string(_pipe)
end,
Req = begin
_pipe@1 = d1_gleamflare@internal:base_request(erlang:element(2, Db)),
_pipe@2 = gleam@http@request:set_method(_pipe@1, post),
_pipe@3 = gleam@http@request:set_path(
_pipe@2,
<<<<<<<<"/client/v4/accounts/"/utf8,
(erlang:element(2, erlang:element(2, Db)))/binary>>/binary,
"/d1/database/"/utf8>>/binary,
(erlang:element(3, Db))/binary>>/binary,
"/query"/utf8>>
),
gleam@http@request:set_body(_pipe@3, Body)
end,
d1_gleamflare@internal:send_request(
Req,
gleam@dynamic:list(query_result_decoder(fun gleam@dynamic:dynamic/1))
).
-file("src/d1_gleamflare/database.gleam", 151).
-spec delete(d1_gleamflare@types:database()) -> {ok, nil} |
{error, d1_gleamflare@types:error()}.
delete(Db) ->
Req = begin
_pipe = d1_gleamflare@internal:base_request(erlang:element(2, Db)),
_pipe@1 = gleam@http@request:set_method(_pipe, delete),
gleam@http@request:set_path(
_pipe@1,
<<<<<<"/client/v4/accounts/"/utf8,
(erlang:element(2, erlang:element(2, Db)))/binary>>/binary,
"/d1/database/"/utf8>>/binary,
(erlang:element(3, Db))/binary>>
)
end,
d1_gleamflare@internal:send_request(Req, fun(_) -> {ok, nil} end).