-module(cake@update). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([to_query/1, bool/1, float/1, int/1, string/1, new/0, table/2, get_table/1, set_to_param/2, set_to_expression/2, set_to_sub_query/2, set/2, set_replace/2, sets/2, sets_replace/2, set_many_to_expression/2, set_many_to_sub_query/2, get_set/1, from_table/2, from_sub_query/3, no_from/1, get_from/1, join/2, replace_join/2, joins/2, replace_joins/2, no_join/1, get_joins/1, where/2, or_where/2, xor_where/2, replace_where/2, no_where/1, get_where/1, returning/2, no_returning/1, epilog/2, no_epilog/1, get_epilog/1, comment/2, no_comment/1, get_comment/1]). -spec to_query(cake@internal@write_query:update(RIT)) -> cake@internal@write_query:write_query(RIT). to_query(Updt) -> _pipe = Updt, {update_query, _pipe}. -spec bool(boolean()) -> cake@param:param(). bool(Vl) -> _pipe = Vl, {bool_param, _pipe}. -spec float(float()) -> cake@param:param(). float(Vl) -> _pipe = Vl, {float_param, _pipe}. -spec int(integer()) -> cake@param:param(). int(Vl) -> _pipe = Vl, {int_param, _pipe}. -spec string(binary()) -> cake@param:param(). string(Vl) -> _pipe = Vl, {string_param, _pipe}. -spec new() -> cake@internal@write_query:update(any()). new() -> {update, no_update_table, no_update_modifier, no_update_sets, no_from, no_joins, no_where, no_returning, no_epilog, no_comment}. -spec table(cake@internal@write_query:update(RIY), binary()) -> cake@internal@write_query:update(RIY). table(Qry, Tbl_nm) -> erlang:setelement(2, Qry, {update_table, Tbl_nm}). -spec get_table(cake@internal@write_query:update(any())) -> cake@internal@write_query:update_table(). get_table(Qry) -> erlang:element(2, Qry). -spec set_to_param(binary(), cake@param:param()) -> cake@internal@write_query:update_set(). set_to_param(Col, Prm) -> {update_param_set, Col, Prm}. -spec set_to_expression(binary(), binary()) -> cake@internal@write_query:update_set(). set_to_expression(Col, Exp) -> {update_expression_set, [Col], Exp}. -spec set_to_sub_query(binary(), cake@internal@read_query:read_query()) -> cake@internal@write_query:update_set(). set_to_sub_query(Col, Qry) -> {update_sub_query_set, [Col], Qry}. -spec set( cake@internal@write_query:update(RJD), cake@internal@write_query:update_set() ) -> cake@internal@write_query:update(RJD). set(Qry, St) -> case erlang:element(4, Qry) of no_update_sets -> erlang:setelement(4, Qry, {update_sets, [St]}); {update_sets, Sets} -> erlang:setelement( 4, Qry, {update_sets, begin _pipe = Sets, lists:append(_pipe, [St]) end} ) end. -spec set_replace( cake@internal@write_query:update(RJG), cake@internal@write_query:update_set() ) -> cake@internal@write_query:update(RJG). set_replace(Qry, St) -> erlang:setelement(4, Qry, {update_sets, [St]}). -spec sets( cake@internal@write_query:update(RJJ), list(cake@internal@write_query:update_set()) ) -> cake@internal@write_query:update(RJJ). sets(Qry, Sts) -> case erlang:element(4, Qry) of no_update_sets -> erlang:setelement(4, Qry, {update_sets, Sts}); {update_sets, Sets} -> erlang:setelement( 4, Qry, {update_sets, begin _pipe = Sets, lists:append(_pipe, Sts) end} ) end. -spec sets_replace( cake@internal@write_query:update(RJN), list(cake@internal@write_query:update_set()) ) -> cake@internal@write_query:update(RJN). sets_replace(Qry, Sts) -> erlang:setelement(4, Qry, {update_sets, Sts}). -spec set_many_to_expression(list(binary()), binary()) -> cake@internal@write_query:update_set(). set_many_to_expression(Cols, Exp) -> {update_expression_set, Cols, Exp}. -spec set_many_to_sub_query( list(binary()), cake@internal@read_query:read_query() ) -> cake@internal@write_query:update_set(). set_many_to_sub_query(Cols, Qry) -> {update_sub_query_set, Cols, Qry}. -spec get_set(cake@internal@write_query:update(any())) -> list(cake@internal@write_query:update_set()). get_set(Qry) -> case erlang:element(4, Qry) of no_update_sets -> []; {update_sets, Sets} -> Sets end. -spec from_table(cake@internal@write_query:update(RJW), binary()) -> cake@internal@write_query:update(RJW). from_table(Qry, Tbl_nm) -> erlang:setelement(5, Qry, {from_table, Tbl_nm}). -spec from_sub_query( cake@internal@write_query:update(RJZ), cake@internal@read_query:read_query(), binary() ) -> cake@internal@write_query:update(RJZ). from_sub_query(Qry, Sb_qry, Als) -> erlang:setelement(5, Qry, {from_sub_query, Sb_qry, Als}). -spec no_from(cake@internal@write_query:update(RKC)) -> cake@internal@write_query:update(RKC). no_from(Qry) -> erlang:setelement(5, Qry, no_from). -spec get_from(cake@internal@write_query:update(any())) -> cake@internal@read_query:from(). get_from(Qry) -> erlang:element(5, Qry). -spec join( cake@internal@write_query:update(RKH), cake@internal@read_query:join() ) -> cake@internal@write_query:update(RKH). join(Qry, Jn) -> case erlang:element(6, Qry) of {joins, Jns} -> erlang:setelement( 6, Qry, begin _pipe = Jns, _pipe@1 = lists:append(_pipe, [Jn]), {joins, _pipe@1} end ); no_joins -> erlang:setelement( 6, Qry, begin _pipe@2 = [Jn], {joins, _pipe@2} end ) end. -spec replace_join( cake@internal@write_query:update(RKK), cake@internal@read_query:join() ) -> cake@internal@write_query:update(RKK). replace_join(Qry, Jn) -> erlang:setelement( 6, Qry, begin _pipe = [Jn], {joins, _pipe} end ). -spec joins( cake@internal@write_query:update(RKN), list(cake@internal@read_query:join()) ) -> cake@internal@write_query:update(RKN). joins(Qry, Jns) -> case {Jns, erlang:element(6, Qry)} of {[], _} -> erlang:setelement(6, Qry, {joins, Jns}); {Jns@1, {joins, Qry_joins}} -> erlang:setelement( 6, Qry, begin _pipe = Qry_joins, _pipe@1 = lists:append(_pipe, Jns@1), {joins, _pipe@1} end ); {Jns@2, no_joins} -> erlang:setelement( 6, Qry, begin _pipe@2 = Jns@2, {joins, _pipe@2} end ) end. -spec replace_joins( cake@internal@write_query:update(RKR), list(cake@internal@read_query:join()) ) -> cake@internal@write_query:update(RKR). replace_joins(Qry, Jns) -> erlang:setelement( 6, Qry, begin _pipe = Jns, {joins, _pipe} end ). -spec no_join(cake@internal@write_query:update(RKV)) -> cake@internal@write_query:update(RKV). no_join(Qry) -> erlang:setelement(6, Qry, no_joins). -spec get_joins(cake@internal@write_query:update(any())) -> cake@internal@read_query:joins(). get_joins(Qry) -> erlang:element(6, Qry). -spec where( cake@internal@write_query:update(RLA), cake@internal@read_query:where() ) -> cake@internal@write_query:update(RLA). where(Qry, Whr) -> case erlang:element(7, Qry) of no_where -> erlang:setelement(7, Qry, Whr); {and_where, Wheres} -> erlang:setelement( 7, Qry, {and_where, begin _pipe = Wheres, lists:append(_pipe, [Whr]) end} ); _ -> erlang:setelement( 7, Qry, {and_where, [erlang:element(7, Qry), Whr]} ) end. -spec or_where( cake@internal@write_query:update(RLD), cake@internal@read_query:where() ) -> cake@internal@write_query:update(RLD). or_where(Qry, Whr) -> case erlang:element(7, Qry) of no_where -> erlang:setelement(7, Qry, Whr); {or_where, Wheres} -> erlang:setelement( 7, Qry, {or_where, begin _pipe = Wheres, lists:append(_pipe, [Whr]) end} ); _ -> erlang:setelement(7, Qry, {or_where, [erlang:element(7, Qry), Whr]}) end. -spec xor_where( cake@internal@write_query:update(RLG), cake@internal@read_query:where() ) -> cake@internal@write_query:update(RLG). xor_where(Qry, Whr) -> case erlang:element(7, Qry) of no_where -> erlang:setelement(7, Qry, Whr); {xor_where, Wheres} -> erlang:setelement( 7, Qry, {xor_where, begin _pipe = Wheres, lists:append(_pipe, [Whr]) end} ); _ -> erlang:setelement( 7, Qry, {xor_where, [erlang:element(7, Qry), Whr]} ) end. -spec replace_where( cake@internal@write_query:update(RLJ), cake@internal@read_query:where() ) -> cake@internal@write_query:update(RLJ). replace_where(Qry, Whr) -> erlang:setelement(7, Qry, Whr). -spec no_where(cake@internal@write_query:update(RLM)) -> cake@internal@write_query:update(RLM). no_where(Qry) -> erlang:setelement(7, Qry, no_where). -spec get_where(cake@internal@write_query:update(any())) -> cake@internal@read_query:where(). get_where(Qry) -> erlang:element(7, Qry). -spec returning(cake@internal@write_query:update(RLR), list(binary())) -> cake@internal@write_query:update(RLR). returning(Qry, Rtrn) -> case Rtrn of [] -> erlang:setelement(8, Qry, no_returning); _ -> erlang:setelement(8, Qry, {returning, Rtrn}) end. -spec no_returning(cake@internal@write_query:update(RLV)) -> cake@internal@write_query:update(RLV). no_returning(Qry) -> erlang:setelement(8, Qry, no_returning). -spec epilog(cake@internal@write_query:update(RLY), binary()) -> cake@internal@write_query:update(RLY). epilog(Qry, Eplg) -> Eplg@1 = begin _pipe = Eplg, gleam@string:trim(_pipe) end, case Eplg@1 of <<""/utf8>> -> erlang:setelement(9, Qry, no_epilog); _ -> erlang:setelement( 9, Qry, begin _pipe@1 = (<<" "/utf8, Eplg@1/binary>>), {epilog, _pipe@1} end ) end. -spec no_epilog(cake@internal@write_query:update(RMB)) -> cake@internal@write_query:update(RMB). no_epilog(Qry) -> erlang:setelement(9, Qry, no_epilog). -spec get_epilog(cake@internal@write_query:update(any())) -> cake@internal@read_query:epilog(). get_epilog(Qry) -> erlang:element(9, Qry). -spec comment(cake@internal@write_query:update(RMG), binary()) -> cake@internal@write_query:update(RMG). comment(Qry, Cmmnt) -> Cmmnt@1 = begin _pipe = Cmmnt, gleam@string:trim(_pipe) end, case Cmmnt@1 of <<""/utf8>> -> erlang:setelement(10, Qry, no_comment); _ -> erlang:setelement( 10, Qry, begin _pipe@1 = (<<" "/utf8, Cmmnt@1/binary>>), {comment, _pipe@1} end ) end. -spec no_comment(cake@internal@write_query:update(RMJ)) -> cake@internal@write_query:update(RMJ). no_comment(Qry) -> erlang:setelement(10, Qry, no_comment). -spec get_comment(cake@internal@write_query:update(any())) -> cake@internal@read_query:comment(). get_comment(Qry) -> erlang:element(10, Qry).