Packages
cake
0.12.0
4.1.0
4.0.0
3.0.0
2.2.2
2.2.1
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.0
retired
0.15.0
retired
0.14.0
retired
0.13.0
retired
0.12.0
retired
0.11.0
retired
0.10.1
retired
0.10.0
retired
0.9.2
retired
0.9.1
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.0
retired
0.0.1
retired
🎂 An SQL query builder for Gleam for SQL dialects 🐘PostgreSQL, 🪶SQLite, 🦭MariaDB, and 🐬MySQL
Retired package: Deprecated - a stable release is available, please use >= 1.0.0
Current section
Files
Jump to
Current section
Files
src/cake@select.erl
-module(cake@select).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([to_query/1, col/1, alias/2, bool/1, float/1, int/1, string/1, null/0, fragment/1, new/0, all/1, distinct/1, get_kind/2, from_table/2, from_sub_query/3, no_from/1, get_from/1, select/2, replace_select/2, selects/2, replace_selects/2, get_select/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, having/2, or_having/2, xor_having/2, replace_having/2, no_having/1, get_having/1, group_by/2, replace_group_by/2, group_bys/2, replace_group_bys/2, no_group_by/1, get_group_by/1, limit/2, no_limit/1, get_limit/1, offset/2, no_offset/1, get_offset/1, order_by_asc/2, order_by_asc_nulls_first/2, order_by_asc_nulls_last/2, replace_order_by_asc/2, replace_order_by_asc_nulls_first/2, replace_order_by_asc_nulls_last/2, order_by_desc/2, order_by_desc_nulls_first/2, order_by_desc_nulls_last/2, replace_order_by_desc/2, replace_order_by_desc_nulls_first/2, replace_order_by_desc_nulls_last/2, order_by/3, replace_order_by/3, no_order_by/1, get_order_by/1, epilog/2, no_epilog/1, get_epilog/1, comment/2, no_comment/1, get_comment/1]).
-export_type([direction/0]).
-type direction() :: asc | desc.
-spec to_query(cake@internal@read_query:select()) -> cake@internal@read_query:read_query().
to_query(Qry) ->
_pipe = Qry,
{select_query, _pipe}.
-spec col(binary()) -> cake@internal@read_query:select_value().
col(Nm) ->
_pipe = Nm,
{select_column, _pipe}.
-spec alias(cake@internal@read_query:select_value(), binary()) -> cake@internal@read_query:select_value().
alias(Vl, Als) ->
_pipe = Vl,
{select_alias, _pipe, Als}.
-spec bool(boolean()) -> cake@internal@read_query:select_value().
bool(Vl) ->
_pipe = Vl,
_pipe@1 = {bool_param, _pipe},
{select_param, _pipe@1}.
-spec float(float()) -> cake@internal@read_query:select_value().
float(Vl) ->
_pipe = Vl,
_pipe@1 = {float_param, _pipe},
{select_param, _pipe@1}.
-spec int(integer()) -> cake@internal@read_query:select_value().
int(Vl) ->
_pipe = Vl,
_pipe@1 = {int_param, _pipe},
{select_param, _pipe@1}.
-spec string(binary()) -> cake@internal@read_query:select_value().
string(Vl) ->
_pipe = Vl,
_pipe@1 = {string_param, _pipe},
{select_param, _pipe@1}.
-spec null() -> cake@internal@read_query:select_value().
null() ->
_pipe = null_param,
{select_param, _pipe}.
-spec fragment(cake@internal@read_query:fragment()) -> cake@internal@read_query:select_value().
fragment(Frgmt) ->
_pipe = Frgmt,
{select_fragment, _pipe}.
-spec new() -> cake@internal@read_query:select().
new() ->
{select,
select_all,
no_selects,
no_from,
no_joins,
no_where,
no_group_by,
no_where,
no_order_by,
no_limit,
no_offset,
no_epilog,
no_comment}.
-spec all(cake@internal@read_query:select()) -> cake@internal@read_query:select().
all(Qry) ->
erlang:setelement(2, Qry, select_all).
-spec distinct(cake@internal@read_query:select()) -> cake@internal@read_query:select().
distinct(Qry) ->
erlang:setelement(2, Qry, select_distinct).
-spec get_kind(
cake@internal@read_query:select(),
cake@internal@read_query:select_kind()
) -> cake@internal@read_query:select().
get_kind(Qry, Knd) ->
erlang:setelement(2, Qry, Knd).
-spec from_table(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
from_table(Qry, Tbl_nm) ->
erlang:setelement(4, Qry, {from_table, Tbl_nm}).
-spec from_sub_query(
cake@internal@read_query:select(),
cake@internal@read_query:read_query(),
binary()
) -> cake@internal@read_query:select().
from_sub_query(Qry, Sb_qry, Als) ->
erlang:setelement(4, Qry, {from_sub_query, Sb_qry, Als}).
-spec no_from(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_from(Qry) ->
erlang:setelement(4, Qry, no_from).
-spec get_from(cake@internal@read_query:select()) -> cake@internal@read_query:from().
get_from(Qry) ->
erlang:element(4, Qry).
-spec select(
cake@internal@read_query:select(),
cake@internal@read_query:select_value()
) -> cake@internal@read_query:select().
select(Qry, Sv) ->
case erlang:element(3, Qry) of
no_selects ->
erlang:setelement(3, Qry, {selects, [Sv]});
{selects, Qry_slcts} ->
erlang:setelement(
3,
Qry,
begin
_pipe = Qry_slcts,
_pipe@1 = lists:append(_pipe, [Sv]),
{selects, _pipe@1}
end
)
end.
-spec replace_select(
cake@internal@read_query:select(),
cake@internal@read_query:select_value()
) -> cake@internal@read_query:select().
replace_select(Qry, Sv) ->
case erlang:element(3, Qry) of
no_selects ->
erlang:setelement(3, Qry, {selects, [Sv]});
{selects, Qry_slcts} ->
erlang:setelement(
3,
Qry,
begin
_pipe = Qry_slcts,
_pipe@1 = lists:append(_pipe, [Sv]),
{selects, _pipe@1}
end
)
end.
-spec selects(
cake@internal@read_query:select(),
list(cake@internal@read_query:select_value())
) -> cake@internal@read_query:select().
selects(Qry, Svs) ->
case {Svs, erlang:element(3, Qry)} of
{[], _} ->
Qry;
{Svs@1, no_selects} ->
erlang:setelement(3, Qry, {selects, Svs@1});
{Svs@2, {selects, Qry_slcts}} ->
erlang:setelement(
3,
Qry,
begin
_pipe = Qry_slcts,
_pipe@1 = lists:append(_pipe, Svs@2),
{selects, _pipe@1}
end
)
end.
-spec replace_selects(
cake@internal@read_query:select(),
list(cake@internal@read_query:select_value())
) -> cake@internal@read_query:select().
replace_selects(Qry, Svs) ->
case {Svs, erlang:element(3, Qry)} of
{[], _} ->
Qry;
{Svs@1, no_selects} ->
erlang:setelement(3, Qry, {selects, Svs@1});
{Svs@2, {selects, Qry_slcts}} ->
erlang:setelement(
3,
Qry,
begin
_pipe = Qry_slcts,
_pipe@1 = lists:append(_pipe, Svs@2),
{selects, _pipe@1}
end
)
end.
-spec get_select(cake@internal@read_query:select()) -> cake@internal@read_query:selects().
get_select(Qry) ->
erlang:element(3, Qry).
-spec join(cake@internal@read_query:select(), cake@internal@read_query:join()) -> cake@internal@read_query:select().
join(Qry, Jn) ->
case erlang:element(5, Qry) of
{joins, Jns} ->
erlang:setelement(
5,
Qry,
begin
_pipe = Jns,
_pipe@1 = lists:append(_pipe, [Jn]),
{joins, _pipe@1}
end
);
no_joins ->
erlang:setelement(
5,
Qry,
begin
_pipe@2 = [Jn],
{joins, _pipe@2}
end
)
end.
-spec replace_join(
cake@internal@read_query:select(),
cake@internal@read_query:join()
) -> cake@internal@read_query:select().
replace_join(Qry, Jn) ->
erlang:setelement(
5,
Qry,
begin
_pipe = [Jn],
{joins, _pipe}
end
).
-spec joins(
cake@internal@read_query:select(),
list(cake@internal@read_query:join())
) -> cake@internal@read_query:select().
joins(Qry, Jns) ->
case {Jns, erlang:element(5, Qry)} of
{[], _} ->
erlang:setelement(5, Qry, {joins, Jns});
{Jns@1, {joins, Qry_joins}} ->
erlang:setelement(
5,
Qry,
begin
_pipe = Qry_joins,
_pipe@1 = lists:append(_pipe, Jns@1),
{joins, _pipe@1}
end
);
{Jns@2, no_joins} ->
erlang:setelement(
5,
Qry,
begin
_pipe@2 = Jns@2,
{joins, _pipe@2}
end
)
end.
-spec replace_joins(
cake@internal@read_query:select(),
list(cake@internal@read_query:join())
) -> cake@internal@read_query:select().
replace_joins(Qry, Jns) ->
erlang:setelement(
5,
Qry,
begin
_pipe = Jns,
{joins, _pipe}
end
).
-spec no_join(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_join(Qry) ->
erlang:setelement(5, Qry, no_joins).
-spec get_joins(cake@internal@read_query:select()) -> cake@internal@read_query:joins().
get_joins(Qry) ->
erlang:element(5, Qry).
-spec where(cake@internal@read_query:select(), cake@internal@read_query:where()) -> cake@internal@read_query:select().
where(Qry, Whr) ->
case erlang:element(6, Qry) of
no_where ->
erlang:setelement(6, Qry, Whr);
{and_where, Wheres} ->
erlang:setelement(
6,
Qry,
{and_where,
begin
_pipe = Wheres,
lists:append(_pipe, [Whr])
end}
);
_ ->
erlang:setelement(
6,
Qry,
{and_where, [erlang:element(6, Qry), Whr]}
)
end.
-spec or_where(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
or_where(Qry, Whr) ->
case erlang:element(6, Qry) of
no_where ->
erlang:setelement(6, Qry, Whr);
{or_where, Wheres} ->
erlang:setelement(
6,
Qry,
{or_where,
begin
_pipe = Wheres,
lists:append(_pipe, [Whr])
end}
);
_ ->
erlang:setelement(6, Qry, {or_where, [erlang:element(6, Qry), Whr]})
end.
-spec xor_where(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
xor_where(Qry, Whr) ->
case erlang:element(6, Qry) of
no_where ->
erlang:setelement(6, Qry, Whr);
{xor_where, Wheres} ->
erlang:setelement(
6,
Qry,
{xor_where,
begin
_pipe = Wheres,
lists:append(_pipe, [Whr])
end}
);
_ ->
erlang:setelement(
6,
Qry,
{xor_where, [erlang:element(6, Qry), Whr]}
)
end.
-spec replace_where(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
replace_where(Qry, Whr) ->
erlang:setelement(6, Qry, Whr).
-spec no_where(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_where(Qry) ->
erlang:setelement(6, Qry, no_where).
-spec get_where(cake@internal@read_query:select()) -> cake@internal@read_query:where().
get_where(Qry) ->
erlang:element(6, Qry).
-spec having(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
having(Qry, Whr) ->
case erlang:element(8, Qry) of
no_where ->
erlang:setelement(8, Qry, Whr);
{and_where, Wheres} ->
erlang:setelement(
8,
Qry,
{and_where,
begin
_pipe = Wheres,
lists:append(_pipe, [Whr])
end}
);
_ ->
erlang:setelement(
8,
Qry,
{and_where, [erlang:element(8, Qry), Whr]}
)
end.
-spec or_having(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
or_having(Qry, Whr) ->
case erlang:element(8, Qry) of
no_where ->
erlang:setelement(8, Qry, Whr);
{or_where, Wheres} ->
erlang:setelement(
8,
Qry,
{or_where,
begin
_pipe = Wheres,
lists:append(_pipe, [Whr])
end}
);
_ ->
erlang:setelement(8, Qry, {or_where, [erlang:element(8, Qry), Whr]})
end.
-spec xor_having(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
xor_having(Qry, Whr) ->
case erlang:element(8, Qry) of
no_where ->
erlang:setelement(8, Qry, Whr);
{xor_where, Wheres} ->
erlang:setelement(
8,
Qry,
{xor_where,
begin
_pipe = Wheres,
lists:append(_pipe, [Whr])
end}
);
_ ->
erlang:setelement(
8,
Qry,
{xor_where, [erlang:element(8, Qry), Whr]}
)
end.
-spec replace_having(
cake@internal@read_query:select(),
cake@internal@read_query:where()
) -> cake@internal@read_query:select().
replace_having(Qry, Whr) ->
erlang:setelement(8, Qry, Whr).
-spec no_having(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_having(Qry) ->
erlang:setelement(8, Qry, no_where).
-spec get_having(cake@internal@read_query:select()) -> cake@internal@read_query:where().
get_having(Qry) ->
erlang:element(8, Qry).
-spec group_by(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
group_by(Qry, Grpb) ->
case erlang:element(7, Qry) of
no_group_by ->
erlang:setelement(7, Qry, {group_by, [Grpb]});
{group_by, Grpbs} ->
erlang:setelement(
7,
Qry,
{group_by,
begin
_pipe = Grpbs,
lists:append(_pipe, [Grpb])
end}
)
end.
-spec replace_group_by(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
replace_group_by(Qry, Grpb) ->
erlang:setelement(7, Qry, {group_by, [Grpb]}).
-spec group_bys(cake@internal@read_query:select(), list(binary())) -> cake@internal@read_query:select().
group_bys(Qry, Grpbs) ->
case erlang:element(7, Qry) of
no_group_by ->
erlang:setelement(7, Qry, {group_by, Grpbs});
{group_by, Grpbs@1} ->
erlang:setelement(
7,
Qry,
{group_by,
begin
_pipe = Grpbs@1,
lists:append(_pipe, Grpbs@1)
end}
)
end.
-spec replace_group_bys(cake@internal@read_query:select(), list(binary())) -> cake@internal@read_query:select().
replace_group_bys(Qry, Grpbs) ->
erlang:setelement(7, Qry, {group_by, Grpbs}).
-spec no_group_by(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_group_by(Qry) ->
erlang:setelement(7, Qry, no_group_by).
-spec get_group_by(cake@internal@read_query:select()) -> cake@internal@read_query:group_by().
get_group_by(Qry) ->
erlang:element(7, Qry).
-spec limit(cake@internal@read_query:select(), integer()) -> cake@internal@read_query:select().
limit(Qry, Lmt) ->
Lmt@1 = begin
_pipe = Lmt,
cake@internal@read_query:limit_new(_pipe)
end,
erlang:setelement(10, Qry, Lmt@1).
-spec no_limit(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_limit(Qry) ->
erlang:setelement(10, Qry, no_limit).
-spec get_limit(cake@internal@read_query:select()) -> cake@internal@read_query:limit().
get_limit(Qry) ->
erlang:element(10, Qry).
-spec offset(cake@internal@read_query:select(), integer()) -> cake@internal@read_query:select().
offset(Qry, Offst) ->
Offst@1 = begin
_pipe = Offst,
cake@internal@read_query:offset_new(_pipe)
end,
erlang:setelement(11, Qry, Offst@1).
-spec no_offset(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_offset(Qry) ->
erlang:setelement(11, Qry, no_offset).
-spec get_offset(cake@internal@read_query:select()) -> cake@internal@read_query:offset().
get_offset(Qry) ->
erlang:element(11, Qry).
-spec map_order_by_direction_constructor(direction()) -> cake@internal@read_query:order_by_direction().
map_order_by_direction_constructor(In) ->
case In of
asc ->
asc;
desc ->
desc
end.
-spec order_by_asc(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
order_by_asc(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc}]},
true
).
-spec order_by_asc_nulls_first(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
order_by_asc_nulls_first(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc_nulls_first}]},
true
).
-spec order_by_asc_nulls_last(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
order_by_asc_nulls_last(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc_nulls_first}]},
true
).
-spec replace_order_by_asc(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
replace_order_by_asc(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc}]},
false
).
-spec replace_order_by_asc_nulls_first(
cake@internal@read_query:select(),
binary()
) -> cake@internal@read_query:select().
replace_order_by_asc_nulls_first(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc_nulls_first}]},
false
).
-spec replace_order_by_asc_nulls_last(
cake@internal@read_query:select(),
binary()
) -> cake@internal@read_query:select().
replace_order_by_asc_nulls_last(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc_nulls_first}]},
false
).
-spec order_by_desc(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
order_by_desc(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc}]},
true
).
-spec order_by_desc_nulls_first(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
order_by_desc_nulls_first(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc_nulls_first}]},
true
).
-spec order_by_desc_nulls_last(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
order_by_desc_nulls_last(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc_nulls_first}]},
true
).
-spec replace_order_by_desc(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
replace_order_by_desc(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc}]},
false
).
-spec replace_order_by_desc_nulls_first(
cake@internal@read_query:select(),
binary()
) -> cake@internal@read_query:select().
replace_order_by_desc_nulls_first(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc_nulls_first}]},
false
).
-spec replace_order_by_desc_nulls_last(
cake@internal@read_query:select(),
binary()
) -> cake@internal@read_query:select().
replace_order_by_desc_nulls_last(Qry, Ordb) ->
_pipe = Qry,
cake@internal@read_query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc_nulls_first}]},
false
).
-spec order_by(cake@internal@read_query:select(), binary(), direction()) -> cake@internal@read_query:select().
order_by(Qry, Ordb, Dir) ->
Dir@1 = begin
_pipe = Dir,
map_order_by_direction_constructor(_pipe)
end,
_pipe@1 = Qry,
cake@internal@read_query:select_order_by(
_pipe@1,
{order_by, [{order_by_column, Ordb, Dir@1}]},
true
).
-spec replace_order_by(cake@internal@read_query:select(), binary(), direction()) -> cake@internal@read_query:select().
replace_order_by(Qry, Ordb, Dir) ->
Dir@1 = begin
_pipe = Dir,
map_order_by_direction_constructor(_pipe)
end,
_pipe@1 = Qry,
cake@internal@read_query:select_order_by(
_pipe@1,
{order_by, [{order_by_column, Ordb, Dir@1}]},
false
).
-spec no_order_by(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_order_by(Qry) ->
erlang:setelement(9, Qry, no_order_by).
-spec get_order_by(cake@internal@read_query:select()) -> cake@internal@read_query:order_by().
get_order_by(Qry) ->
erlang:element(9, Qry).
-spec epilog(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
epilog(Qry, Eplg) ->
Eplg@1 = begin
_pipe = Eplg,
gleam@string:trim(_pipe)
end,
case Eplg@1 of
<<""/utf8>> ->
erlang:setelement(12, Qry, no_epilog);
_ ->
erlang:setelement(
12,
Qry,
begin
_pipe@1 = (<<" "/utf8, Eplg@1/binary>>),
{epilog, _pipe@1}
end
)
end.
-spec no_epilog(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_epilog(Qry) ->
erlang:setelement(12, Qry, no_epilog).
-spec get_epilog(cake@internal@read_query:select()) -> cake@internal@read_query:epilog().
get_epilog(Qry) ->
erlang:element(12, Qry).
-spec comment(cake@internal@read_query:select(), binary()) -> cake@internal@read_query:select().
comment(Qry, Cmmnt) ->
Cmmnt@1 = begin
_pipe = Cmmnt,
gleam@string:trim(_pipe)
end,
case Cmmnt@1 of
<<""/utf8>> ->
erlang:setelement(13, Qry, no_comment);
_ ->
erlang:setelement(
13,
Qry,
begin
_pipe@1 = (<<" "/utf8, Cmmnt@1/binary>>),
{comment, _pipe@1}
end
)
end.
-spec no_comment(cake@internal@read_query:select()) -> cake@internal@read_query:select().
no_comment(Qry) ->
erlang:setelement(13, Qry, no_comment).
-spec get_comment(cake@internal@read_query:select()) -> cake@internal@read_query:comment().
get_comment(Qry) ->
erlang:element(13, Qry).