-module(cake@insert). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([to_query/1, row/1, bool/1, float/1, int/1, string/1, null/0, new/0, from_records/4, from_values/3, table/2, get_table/1, modifier/2, no_modifier/1, get_modifier/1, source_records/3, source_values/2, get_source/1, columns/2, get_columns/1, on_conflict_error/1, on_columns_conflict_ignore/3, on_constraint_conflict_ignore/3, on_columns_conflict_update/4, on_constraint_conflict_update/4, get_on_conflict/1, returning/2, no_returning/1, epilog/2, no_epilog/1, get_epilog/1, comment/2, no_comment/1, get_comment/1]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " A DSL to build `INSERT` queries.\n" "\n" ). -file("src/cake/insert.gleam", 61). ?DOC(" Creates a `WriteQuery` from an `Insert` query.\n"). -spec to_query(cake@internal@write_query:insert(PEC)) -> cake@internal@write_query:write_query(PEC). to_query(Isrt) -> _pipe = Isrt, {insert_query, _pipe}. -file("src/cake/insert.gleam", 69). ?DOC(" Create an `InsertRow` from a list of `InsertValue`s.\n"). -spec row(list(cake@internal@write_query:insert_value())) -> cake@internal@write_query:insert_row(). row(Vls) -> _pipe = Vls, {insert_row, _pipe}. -file("src/cake/insert.gleam", 75). ?DOC(" Create an `InsertValue` from a column `String` and a `Bool` value.\n"). -spec bool(boolean()) -> cake@internal@write_query:insert_value(). bool(Vl) -> _pipe = Vl, _pipe@1 = {bool_param, _pipe}, {insert_param, _pipe@1}. -file("src/cake/insert.gleam", 81). ?DOC(" Create an `InsertValue` from a column `String` and a `Float` value.\n"). -spec float(float()) -> cake@internal@write_query:insert_value(). float(Vl) -> _pipe = Vl, _pipe@1 = {float_param, _pipe}, {insert_param, _pipe@1}. -file("src/cake/insert.gleam", 87). ?DOC(" Create an `InsertValue` from a column `String` and an `Int` value.\n"). -spec int(integer()) -> cake@internal@write_query:insert_value(). int(Vl) -> _pipe = Vl, _pipe@1 = {int_param, _pipe}, {insert_param, _pipe@1}. -file("src/cake/insert.gleam", 93). ?DOC(" Create an `InsertValue` from a column `String` and a `String` value.\n"). -spec string(binary()) -> cake@internal@write_query:insert_value(). string(Vl) -> _pipe = Vl, _pipe@1 = {string_param, _pipe}, {insert_param, _pipe@1}. -file("src/cake/insert.gleam", 99). ?DOC(" Create a NULL `InsertValue`.\n"). -spec null() -> cake@internal@write_query:insert_value(). null() -> _pipe = null_param, {insert_param, _pipe}. -file("src/cake/insert.gleam", 107). ?DOC(" Create an empty `INSERT` query.\n"). -spec new() -> cake@internal@write_query:insert(any()). new() -> {insert, no_insert_into_table, no_insert_columns, no_insert_modifier, no_insert_source, insert_conflict_error, no_returning, no_epilog, no_comment}. -file("src/cake/insert.gleam", 124). ?DOC( " Create an `INSERT` query from a list of gleam records.\n" "\n" " The `encoder` function is used to convert each record into an `InsertRow`.\n" ). -spec from_records( binary(), list(binary()), list(PEJ), fun((PEJ) -> cake@internal@write_query:insert_row()) ) -> cake@internal@write_query:insert(PEJ). from_records(Tbl_nm, Cols, Rcrds, Encdr) -> {insert, begin _pipe = Tbl_nm, {insert_into_table, _pipe} end, begin _pipe@1 = Cols, {insert_columns, _pipe@1} end, no_insert_modifier, begin _pipe@2 = Rcrds, {insert_source_records, _pipe@2, Encdr} end, insert_conflict_error, no_returning, no_epilog, no_comment}. -file("src/cake/insert.gleam", 144). ?DOC(" Create an `INSERT` query from a list of `InsertRow`s.\n"). -spec from_values( binary(), list(binary()), list(cake@internal@write_query:insert_row()) ) -> cake@internal@write_query:insert(any()). from_values(Tbl_nm, Cols, Vls) -> {insert, begin _pipe = Tbl_nm, {insert_into_table, _pipe} end, begin _pipe@1 = Cols, {insert_columns, _pipe@1} end, no_insert_modifier, begin _pipe@2 = Vls, {insert_source_rows, _pipe@2} end, insert_conflict_error, no_returning, no_epilog, no_comment}. -file("src/cake/insert.gleam", 165). ?DOC(" Specify the table to insert into.\n"). -spec table(cake@internal@write_query:insert(PEQ), binary()) -> cake@internal@write_query:insert(PEQ). table(Isrt, Tbl_nm) -> _record = Isrt, {insert, begin _pipe = Tbl_nm, {insert_into_table, _pipe} end, erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 171). ?DOC(" Get the table name to insert into from an `Insert` query.\n"). -spec get_table(cake@internal@write_query:insert(any())) -> cake@internal@write_query:insert_into_table(). get_table(Isrt) -> erlang:element(2, Isrt). -file("src/cake/insert.gleam", 179). ?DOC(" Specify a modifier for the `INSERT` query.\n"). -spec modifier(cake@internal@write_query:insert(PEV), binary()) -> cake@internal@write_query:insert(PEV). modifier(Isrt, Mdfr) -> Mdfr@1 = begin _pipe = Mdfr, gleam@string:trim(_pipe) end, case Mdfr@1 of <<""/utf8>> -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), no_insert_modifier, erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}; _ -> _record@1 = Isrt, {insert, erlang:element(2, _record@1), erlang:element(3, _record@1), begin _pipe@1 = Mdfr@1, {insert_modifier, _pipe@1} end, erlang:element(5, _record@1), erlang:element(6, _record@1), erlang:element(7, _record@1), erlang:element(8, _record@1), erlang:element(9, _record@1)} end. -file("src/cake/insert.gleam", 189). ?DOC(" Specify that no modifier should be used for the given `INSERT` query.\n"). -spec no_modifier(cake@internal@write_query:insert(PEY)) -> cake@internal@write_query:insert(PEY). no_modifier(Isrt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), no_insert_modifier, erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 195). ?DOC(" Get the modifier from an `Insert` query.\n"). -spec get_modifier(cake@internal@write_query:insert(any())) -> binary(). get_modifier(Isrt) -> case erlang:element(4, Isrt) of no_insert_modifier -> <<""/utf8>>; {insert_modifier, Mdfr} -> Mdfr end. -file("src/cake/insert.gleam", 206). ?DOC(" Specify the source records to insert.\n"). -spec source_records( cake@internal@write_query:insert(PFD), list(PFD), fun((PFD) -> cake@internal@write_query:insert_row()) ) -> cake@internal@write_query:insert(PFD). source_records(Isrt, Rcrds, Encdr) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), begin _pipe = Rcrds, {insert_source_records, _pipe, Encdr} end, erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 216). ?DOC(" Specify the source values to insert.\n"). -spec source_values( cake@internal@write_query:insert(PFH), list(cake@internal@write_query:insert_row()) ) -> cake@internal@write_query:insert(PFH). source_values(Isrt, Rws) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), begin _pipe = Rws, {insert_source_rows, _pipe} end, erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 226). ?DOC( " Get the source from an `Insert` query which is either a list of records,\n" " accompanied by a encoder function or a list of `InsertRow`s.\n" ). -spec get_source(cake@internal@write_query:insert(PFL)) -> cake@internal@write_query:insert_source(PFL). get_source(Isrt) -> erlang:element(5, Isrt). -file("src/cake/insert.gleam", 237). ?DOC( " Specify the columns to insert into.\n" "\n" " NOTICE: You have to specify the columns and keep track if their names are\n" " correct, as well as their count which must be equal to the count of\n" " `InsertRows` the encoder function returns or is given as source\n" " values.\n" ). -spec columns(cake@internal@write_query:insert(PFO), list(binary())) -> cake@internal@write_query:insert(PFO). columns(Isrt, Cols) -> _record = Isrt, {insert, erlang:element(2, _record), begin _pipe = Cols, {insert_columns, _pipe} end, erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 243). ?DOC(" Get the columns to insert into from an `Insert` query.\n"). -spec get_columns(cake@internal@write_query:insert(any())) -> cake@internal@write_query:insert_columns(). get_columns(Isrt) -> erlang:element(3, Isrt). -file("src/cake/insert.gleam", 253). ?DOC( " This specifies that any conflicts result in the query to fail\n" "\n" " This is the default behaviour.\n" ). -spec on_conflict_error(cake@internal@write_query:insert(PFU)) -> cake@internal@write_query:insert(PFU). on_conflict_error(Isrt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), insert_conflict_error, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 262). ?DOC( " This specifies that specific conflicts do not result in an error but instead\n" " are just ignored and not inserted.\n" "\n" " Conflict Target: Columns\n" ). -spec on_columns_conflict_ignore( cake@internal@write_query:insert(PFX), list(binary()), cake@internal@read_query:where() ) -> cake@internal@write_query:insert(PFX). on_columns_conflict_ignore(Isrt, Cols, Whr) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), {insert_conflict_ignore, begin _pipe = Cols, {insert_conflict_target, _pipe} end, Whr}, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 281). ?DOC( " This specifies that specific conflicts do not result in an error but instead\n" " are just ignored and not inserted.\n" "\n" " Conflict Target: Constraint\n" ). -spec on_constraint_conflict_ignore( cake@internal@write_query:insert(PGB), binary(), cake@internal@read_query:where() ) -> cake@internal@write_query:insert(PGB). on_constraint_conflict_ignore(Isrt, Cnstrt, Whr) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), {insert_conflict_ignore, begin _pipe = Cnstrt, {insert_conflict_target_constraint, _pipe} end, Whr}, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 299). ?DOC( " Inserts or updates on conflict, also called ´UPSERT´.\n" "\n" " Conflict Target: Columns\n" ). -spec on_columns_conflict_update( cake@internal@write_query:insert(PGE), list(binary()), cake@internal@read_query:where(), cake@internal@write_query:update(PGE) ) -> cake@internal@write_query:insert(PGE). on_columns_conflict_update(Isrt, Cols, Whr, Updt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), {insert_conflict_update, begin _pipe = Cols, {insert_conflict_target, _pipe} end, Whr, Updt}, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 319). ?DOC( " Inserts or updates on conflict, also called ´UPSERT´.\n" "\n" " Conflict Target: Constraint\n" ). -spec on_constraint_conflict_update( cake@internal@write_query:insert(PGJ), binary(), cake@internal@read_query:where(), cake@internal@write_query:update(PGJ) ) -> cake@internal@write_query:insert(PGJ). on_constraint_conflict_update(Isrt, Cnstrt, Whr, Updt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), {insert_conflict_update, begin _pipe = Cnstrt, {insert_conflict_target_constraint, _pipe} end, Whr, Updt}, erlang:element(7, _record), erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 337). ?DOC(" Get the conflict strategy from an `Insert` query.\n"). -spec get_on_conflict(cake@internal@write_query:insert(PGN)) -> cake@internal@write_query:insert_conflict_strategy(PGN). get_on_conflict(Isrt) -> erlang:element(6, Isrt). -file("src/cake/insert.gleam", 345). ?DOC(" Specify the columns to return after the `INSERT` query.\n"). -spec returning(cake@internal@write_query:insert(PGQ), list(binary())) -> cake@internal@write_query:insert(PGQ). returning(Isrt, Rtrn) -> case Rtrn of [] -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), no_returning, erlang:element(8, _record), erlang:element(9, _record)}; _ -> _record@1 = Isrt, {insert, erlang:element(2, _record@1), erlang:element(3, _record@1), erlang:element(4, _record@1), erlang:element(5, _record@1), erlang:element(6, _record@1), begin _pipe = Rtrn, {returning, _pipe} end, erlang:element(8, _record@1), erlang:element(9, _record@1)} end. -file("src/cake/insert.gleam", 357). ?DOC(" Specify that no columns should be returned after the `INSERT` query.\n"). -spec no_returning(cake@internal@write_query:insert(PGU)) -> cake@internal@write_query:insert(PGU). no_returning(Isrt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), no_returning, erlang:element(8, _record), erlang:element(9, _record)}. -file("src/cake/insert.gleam", 365). ?DOC(" Specify an epilog for the `INSERT` query.\n"). -spec epilog(cake@internal@write_query:insert(PGX), binary()) -> cake@internal@write_query:insert(PGX). epilog(Isrt, Eplg) -> Eplg@1 = begin _pipe = Eplg, gleam@string:trim(_pipe) end, case Eplg@1 of <<""/utf8>> -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), no_epilog, erlang:element(9, _record)}; _ -> _record@1 = Isrt, {insert, erlang:element(2, _record@1), erlang:element(3, _record@1), erlang:element(4, _record@1), erlang:element(5, _record@1), erlang:element(6, _record@1), erlang:element(7, _record@1), begin _pipe@1 = (<<" "/utf8, Eplg@1/binary>>), {epilog, _pipe@1} end, erlang:element(9, _record@1)} end. -file("src/cake/insert.gleam", 375). ?DOC(" Specify that no epilog should be added to the `INSERT` query.\n"). -spec no_epilog(cake@internal@write_query:insert(PHA)) -> cake@internal@write_query:insert(PHA). no_epilog(Isrt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), no_epilog, erlang:element(9, _record)}. -file("src/cake/insert.gleam", 381). ?DOC(" Get the epilog from an `INSERT` query.\n"). -spec get_epilog(cake@internal@write_query:insert(any())) -> cake@internal@read_query:epilog(). get_epilog(Isrt) -> erlang:element(8, Isrt). -file("src/cake/insert.gleam", 389). ?DOC(" Specify a comment for the `INSERT` query.\n"). -spec comment(cake@internal@write_query:insert(PHF), binary()) -> cake@internal@write_query:insert(PHF). comment(Isrt, Cmmnt) -> Cmmnt@1 = begin _pipe = Cmmnt, gleam@string:trim(_pipe) end, case Cmmnt@1 of <<""/utf8>> -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), no_comment}; _ -> _record@1 = Isrt, {insert, erlang:element(2, _record@1), erlang:element(3, _record@1), erlang:element(4, _record@1), erlang:element(5, _record@1), erlang:element(6, _record@1), erlang:element(7, _record@1), erlang:element(8, _record@1), begin _pipe@1 = (<<" "/utf8, Cmmnt@1/binary>>), {comment, _pipe@1} end} end. -file("src/cake/insert.gleam", 399). ?DOC(" Specify that no comment should be added to the `INSERT` query.\n"). -spec no_comment(cake@internal@write_query:insert(PHI)) -> cake@internal@write_query:insert(PHI). no_comment(Isrt) -> _record = Isrt, {insert, erlang:element(2, _record), erlang:element(3, _record), erlang:element(4, _record), erlang:element(5, _record), erlang:element(6, _record), erlang:element(7, _record), erlang:element(8, _record), no_comment}. -file("src/cake/insert.gleam", 405). ?DOC(" Get the comment from an `INSERT` query.\n"). -spec get_comment(cake@internal@write_query:insert(any())) -> cake@internal@read_query:comment(). get_comment(Isrt) -> erlang:element(9, Isrt).