-module(cake@internal@prepared_statement). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/1, append_sql/2, append_param/2, append_sql_and_param/3, append_sql_and_params/3, get_prefix/1, get_sql/1, get_params/1, next_placeholder/1]). -export_type([prepared_statement/0]). -opaque prepared_statement() :: {prepared_statement, binary(), binary(), list(cake@param:param()), integer()}. -spec new(binary()) -> prepared_statement(). new(Prfx) -> _pipe = Prfx, {prepared_statement, _pipe, <<""/utf8>>, [], 0}. -spec append_sql(prepared_statement(), binary()) -> prepared_statement(). append_sql(Prp_stm, Nw_sql) -> erlang:setelement( 3, Prp_stm, <<(erlang:element(3, Prp_stm))/binary, Nw_sql/binary>> ). -spec append_param(prepared_statement(), cake@param:param()) -> prepared_statement(). append_param(Prp_stm, Nw_prms) -> erlang:setelement( 5, erlang:setelement( 4, Prp_stm, lists:append(erlang:element(4, Prp_stm), [Nw_prms]) ), erlang:element(5, Prp_stm) + 1 ). -spec append_sql_and_param(prepared_statement(), binary(), cake@param:param()) -> prepared_statement(). append_sql_and_param(Prp_stm, Nw_sql, Nw_prms) -> erlang:setelement( 5, erlang:setelement( 4, erlang:setelement( 3, Prp_stm, <<(erlang:element(3, Prp_stm))/binary, Nw_sql/binary>> ), lists:append(erlang:element(4, Prp_stm), [Nw_prms]) ), erlang:element(5, Prp_stm) + 1 ). -spec append_sql_and_params( prepared_statement(), binary(), list(cake@param:param()) ) -> prepared_statement(). append_sql_and_params(Prp_stm, Nw_sql, Nw_prms) -> erlang:setelement( 5, erlang:setelement( 4, erlang:setelement( 3, Prp_stm, <<(erlang:element(3, Prp_stm))/binary, Nw_sql/binary>> ), lists:append(erlang:element(4, Prp_stm), Nw_prms) ), erlang:element(5, Prp_stm) + erlang:length(Nw_prms) ). -spec get_prefix(prepared_statement()) -> binary(). get_prefix(Prp_stm) -> erlang:element(2, Prp_stm). -spec get_sql(prepared_statement()) -> binary(). get_sql(Prp_stm) -> erlang:element(3, Prp_stm). -spec get_params(prepared_statement()) -> list(cake@param:param()). get_params(Prp_stm) -> erlang:element(4, Prp_stm). -spec next_placeholder(prepared_statement()) -> binary(). next_placeholder(Prp_stm) -> <<(erlang:element(2, Prp_stm))/binary, (begin _pipe = erlang:element(5, Prp_stm), _pipe@1 = gleam@int:add(_pipe, 1), gleam@int:to_string(_pipe@1) end)/binary>>.