Current section

Files

Jump to
postgleam src postgleam@copy.erl
Raw

src/postgleam@copy.erl

-module(postgleam@copy).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/postgleam/copy.gleam").
-export([copy_in/4, copy_out/3]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/postgleam/copy.gleam", 45).
-spec recv_copy_in_response(postgleam@connection:connection_state(), integer()) -> {ok,
postgleam@connection:connection_state()} |
{error, postgleam@error:error()}.
recv_copy_in_response(State, Timeout) ->
gleam@result:'try'(
postgleam@connection:receive_message(State, Timeout),
fun(_use0) ->
{Msg, State@1} = _use0,
case Msg of
{copy_in_response, _, _} ->
{ok, State@1};
{error_response, Fields} ->
Pg_fields = postgleam@error:parse_error_fields(Fields),
{error,
{pg_error, Pg_fields, erlang:element(3, State@1), none}};
{notice_response, _} ->
recv_copy_in_response(State@1, Timeout);
_ ->
{error,
{protocol_error, <<"Expected CopyInResponse"/utf8>>}}
end
end
).
-file("src/postgleam/copy.gleam", 61).
-spec recv_copy_out_response(postgleam@connection:connection_state(), integer()) -> {ok,
postgleam@connection:connection_state()} |
{error, postgleam@error:error()}.
recv_copy_out_response(State, Timeout) ->
gleam@result:'try'(
postgleam@connection:receive_message(State, Timeout),
fun(_use0) ->
{Msg, State@1} = _use0,
case Msg of
{copy_out_response, _, _} ->
{ok, State@1};
{error_response, Fields} ->
Pg_fields = postgleam@error:parse_error_fields(Fields),
{error,
{pg_error, Pg_fields, erlang:element(3, State@1), none}};
{notice_response, _} ->
recv_copy_out_response(State@1, Timeout);
_ ->
{error,
{protocol_error, <<"Expected CopyOutResponse"/utf8>>}}
end
end
).
-file("src/postgleam/copy.gleam", 77).
-spec send_copy_data(postgleam@connection:connection_state(), list(bitstring())) -> {ok,
postgleam@connection:connection_state()} |
{error, postgleam@error:error()}.
send_copy_data(State, Data) ->
case Data of
[] ->
{ok, State};
[Chunk | Rest] ->
gleam@result:'try'(
postgleam@connection:send_message(State, {copy_data_msg, Chunk}),
fun(State@1) -> send_copy_data(State@1, Rest) end
)
end.
-file("src/postgleam/copy.gleam", 92).
-spec recv_copy_complete(postgleam@connection:connection_state(), integer()) -> {ok,
{binary(), postgleam@connection:connection_state()}} |
{error, postgleam@error:error()}.
recv_copy_complete(State, Timeout) ->
gleam@result:'try'(
postgleam@connection:receive_message(State, Timeout),
fun(_use0) ->
{Msg, State@1} = _use0,
case Msg of
{command_complete, Tag} ->
gleam@result:'try'(
postgleam@connection:receive_message(State@1, Timeout),
fun(_use0@1) ->
{Msg2, State@2} = _use0@1,
case Msg2 of
{ready_for_query, Status} ->
{ok,
{Tag,
{connection_state,
erlang:element(2, State@2),
erlang:element(3, State@2),
erlang:element(4, State@2),
erlang:element(5, State@2),
Status,
erlang:element(7, State@2)}}};
_ ->
{ok, {Tag, State@2}}
end
end
);
{error_response, Fields} ->
Pg_fields = postgleam@error:parse_error_fields(Fields),
{error,
{pg_error, Pg_fields, erlang:element(3, State@1), none}};
{notice_response, _} ->
recv_copy_complete(State@1, Timeout);
_ ->
{error,
{protocol_error,
<<"Expected CommandComplete after COPY"/utf8>>}}
end
end
).
-file("src/postgleam/copy.gleam", 10).
?DOC(" COPY data to a table from text-format data rows\n").
-spec copy_in(
postgleam@connection:connection_state(),
binary(),
list(bitstring()),
integer()
) -> {ok, {binary(), postgleam@connection:connection_state()}} |
{error, postgleam@error:error()}.
copy_in(State, Sql, Data, Timeout) ->
gleam@result:'try'(
postgleam@connection:send_message(State, {simple_query, Sql}),
fun(State@1) ->
gleam@result:'try'(
recv_copy_in_response(State@1, Timeout),
fun(State@2) ->
gleam@result:'try'(
send_copy_data(State@2, Data),
fun(State@3) ->
gleam@result:'try'(
postgleam@connection:send_message(
State@3,
copy_done_msg
),
fun(State@4) ->
recv_copy_complete(State@4, Timeout)
end
)
end
)
end
)
end
).
-file("src/postgleam/copy.gleam", 152).
-spec list_reverse_loop(list(IYS), list(IYS)) -> list(IYS).
list_reverse_loop(L, Acc) ->
case L of
[] ->
Acc;
[X | Rest] ->
list_reverse_loop(Rest, [X | Acc])
end.
-file("src/postgleam/copy.gleam", 148).
-spec list_reverse(list(IYP)) -> list(IYP).
list_reverse(L) ->
list_reverse_loop(L, []).
-file("src/postgleam/copy.gleam", 116).
-spec recv_copy_out_data(
postgleam@connection:connection_state(),
integer(),
list(bitstring())
) -> {ok, {list(bitstring()), postgleam@connection:connection_state()}} |
{error, postgleam@error:error()}.
recv_copy_out_data(State, Timeout, Acc) ->
gleam@result:'try'(
postgleam@connection:receive_message(State, Timeout),
fun(_use0) ->
{Msg, State@1} = _use0,
case Msg of
{copy_data, Data} ->
recv_copy_out_data(State@1, Timeout, [Data | Acc]);
copy_done ->
gleam@result:'try'(
postgleam@connection:receive_message(State@1, Timeout),
fun(_use0@1) ->
{Msg2, State@2} = _use0@1,
case Msg2 of
{command_complete, _} ->
gleam@result:'try'(
postgleam@connection:receive_message(
State@2,
Timeout
),
fun(_use0@2) ->
{Msg3, State@3} = _use0@2,
case Msg3 of
{ready_for_query, Status} ->
{ok,
{list_reverse(Acc),
{connection_state,
erlang:element(
2,
State@3
),
erlang:element(
3,
State@3
),
erlang:element(
4,
State@3
),
erlang:element(
5,
State@3
),
Status,
erlang:element(
7,
State@3
)}}};
_ ->
{ok,
{list_reverse(Acc),
State@3}}
end
end
);
_ ->
{ok, {list_reverse(Acc), State@2}}
end
end
);
{error_response, Fields} ->
Pg_fields = postgleam@error:parse_error_fields(Fields),
{error,
{pg_error, Pg_fields, erlang:element(3, State@1), none}};
_ ->
{error,
{protocol_error,
<<"Expected CopyData or CopyDone"/utf8>>}}
end
end
).
-file("src/postgleam/copy.gleam", 33).
?DOC(" COPY data from a table to the client\n").
-spec copy_out(postgleam@connection:connection_state(), binary(), integer()) -> {ok,
{list(bitstring()), postgleam@connection:connection_state()}} |
{error, postgleam@error:error()}.
copy_out(State, Sql, Timeout) ->
gleam@result:'try'(
postgleam@connection:send_message(State, {simple_query, Sql}),
fun(State@1) ->
gleam@result:'try'(
recv_copy_out_response(State@1, Timeout),
fun(State@2) -> recv_copy_out_data(State@2, Timeout, []) end
)
end
).