Packages
cake
0.3.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@query@select.erl
-module(cake@query@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, fragment/1, new/0, new_from/1, all/1, distinct/1, get_kind/2, from/2, get_from/1, selects/2, selects_replace/2, get_select/1, join/2, join_replace/2, joins/2, joins_replace/2, no_joins/1, get_joins/1, where/2, or_where/2, xor_where/2, where_replace/2, get_where/1, having/2, or_having/2, xor_having/2, having_replace/2, get_having/1, group_by/2, group_by_replace/2, groups_by/2, group_bys_replace/2, limit/2, get_limit/1, offset/2, get_offset/1, order_asc/2, order_asc_nulls_first/2, order_asc_replace/2, order_asc_nulls_first_replace/2, order_desc/2, order_desc_nulls_first/2, order_desc_replace/2, order_desc_nulls_first_replace/2, order/3, order_replace/3, 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@query:select()) -> cake@internal@query:'query'().
to_query(Qry) ->
_pipe = Qry,
{select_query, _pipe}.
-spec col(binary()) -> cake@internal@query:select_value().
col(Nm) ->
_pipe = Nm,
{select_column, _pipe}.
-spec alias(cake@internal@query:select_value(), binary()) -> cake@internal@query:select_value().
alias(Vl, Als) ->
_pipe = Vl,
{select_alias, _pipe, Als}.
-spec bool(boolean()) -> cake@internal@query:select_value().
bool(Vl) ->
_pipe = Vl,
_pipe@1 = cake@param:bool(_pipe),
{select_param, _pipe@1}.
-spec float(float()) -> cake@internal@query:select_value().
float(Vl) ->
_pipe = Vl,
_pipe@1 = cake@param:float(_pipe),
{select_param, _pipe@1}.
-spec int(integer()) -> cake@internal@query:select_value().
int(Vl) ->
_pipe = Vl,
_pipe@1 = cake@param:int(_pipe),
{select_param, _pipe@1}.
-spec string(binary()) -> cake@internal@query:select_value().
string(Vl) ->
_pipe = Vl,
_pipe@1 = cake@param:string(_pipe),
{select_param, _pipe@1}.
-spec fragment(cake@internal@query:fragment()) -> cake@internal@query:select_value().
fragment(Frgmt) ->
_pipe = Frgmt,
{select_fragment, _pipe}.
-spec new() -> cake@internal@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 new_from(cake@internal@query:from()) -> cake@internal@query:select().
new_from(Frm) ->
{select,
select_all,
no_selects,
Frm,
no_joins,
no_where,
no_group_by,
no_where,
no_order_by,
no_limit,
no_offset,
no_epilog,
no_comment}.
-spec all(cake@internal@query:select()) -> cake@internal@query:select().
all(Qry) ->
erlang:setelement(2, Qry, select_all).
-spec distinct(cake@internal@query:select()) -> cake@internal@query:select().
distinct(Qry) ->
erlang:setelement(2, Qry, select_distinct).
-spec get_kind(cake@internal@query:select(), cake@internal@query:select_kind()) -> cake@internal@query:select().
get_kind(Qry, Knd) ->
erlang:setelement(2, Qry, Knd).
-spec from(cake@internal@query:select(), cake@internal@query:from()) -> cake@internal@query:select().
from(Qry, Frm) ->
erlang:setelement(4, Qry, Frm).
-spec get_from(cake@internal@query:select()) -> cake@internal@query:from().
get_from(Qry) ->
erlang:element(4, Qry).
-spec selects(
cake@internal@query:select(),
list(cake@internal@query:select_value())
) -> cake@internal@query:select().
selects(Qry, Sv) ->
case {Sv, erlang:element(3, Qry)} of
{[], _} ->
Qry;
{Sv@1, no_selects} ->
erlang:setelement(3, Qry, {selects, Sv@1});
{Sv@2, {selects, Qry_slcts}} ->
erlang:setelement(
3,
Qry,
begin
_pipe = Qry_slcts,
_pipe@1 = lists:append(_pipe, Sv@2),
{selects, _pipe@1}
end
)
end.
-spec selects_replace(
cake@internal@query:select(),
list(cake@internal@query:select_value())
) -> cake@internal@query:select().
selects_replace(Qry, Sv) ->
case {Sv, erlang:element(3, Qry)} of
{[], _} ->
Qry;
{Sv@1, no_selects} ->
erlang:setelement(3, Qry, {selects, Sv@1});
{Sv@2, {selects, Qry_slcts}} ->
erlang:setelement(
3,
Qry,
begin
_pipe = Qry_slcts,
_pipe@1 = lists:append(_pipe, Sv@2),
{selects, _pipe@1}
end
)
end.
-spec get_select(cake@internal@query:select()) -> cake@internal@query:selects().
get_select(Qry) ->
erlang:element(3, Qry).
-spec join(cake@internal@query:select(), cake@internal@query:join()) -> cake@internal@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 join_replace(cake@internal@query:select(), cake@internal@query:join()) -> cake@internal@query:select().
join_replace(Qry, Jn) ->
erlang:setelement(
5,
Qry,
begin
_pipe = [Jn],
{joins, _pipe}
end
).
-spec joins(cake@internal@query:select(), list(cake@internal@query:join())) -> cake@internal@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 joins_replace(
cake@internal@query:select(),
list(cake@internal@query:join())
) -> cake@internal@query:select().
joins_replace(Qry, Jns) ->
erlang:setelement(
5,
Qry,
begin
_pipe = Jns,
{joins, _pipe}
end
).
-spec no_joins(cake@internal@query:select()) -> cake@internal@query:select().
no_joins(Qry) ->
erlang:setelement(5, Qry, no_joins).
-spec get_joins(cake@internal@query:select()) -> cake@internal@query:joins().
get_joins(Qry) ->
erlang:element(5, Qry).
-spec where(cake@internal@query:select(), cake@internal@query:where()) -> cake@internal@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@query:select(), cake@internal@query:where()) -> cake@internal@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@query:select(), cake@internal@query:where()) -> cake@internal@query:select().
xor_where(Qry, Whr) ->
New_where = {xor_where, [erlang:element(6, Qry), Whr]},
erlang:setelement(6, Qry, New_where).
-spec where_replace(cake@internal@query:select(), cake@internal@query:where()) -> cake@internal@query:select().
where_replace(Qry, Whr) ->
erlang:setelement(6, Qry, Whr).
-spec get_where(cake@internal@query:select()) -> cake@internal@query:where().
get_where(Qry) ->
erlang:element(6, Qry).
-spec having(cake@internal@query:select(), cake@internal@query:where()) -> cake@internal@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@query:select(), cake@internal@query:where()) -> cake@internal@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@query:select(), cake@internal@query:where()) -> cake@internal@query:select().
xor_having(Qry, Whr) ->
New_where = {xor_where, [erlang:element(8, Qry), Whr]},
erlang:setelement(8, Qry, New_where).
-spec having_replace(cake@internal@query:select(), cake@internal@query:where()) -> cake@internal@query:select().
having_replace(Qry, Whr) ->
erlang:setelement(8, Qry, Whr).
-spec get_having(cake@internal@query:select()) -> cake@internal@query:where().
get_having(Qry) ->
erlang:element(8, Qry).
-spec group_by(cake@internal@query:select(), binary()) -> cake@internal@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 group_by_replace(cake@internal@query:select(), binary()) -> cake@internal@query:select().
group_by_replace(Qry, Grpb) ->
erlang:setelement(7, Qry, {group_by, [Grpb]}).
-spec groups_by(cake@internal@query:select(), list(binary())) -> cake@internal@query:select().
groups_by(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 group_bys_replace(cake@internal@query:select(), list(binary())) -> cake@internal@query:select().
group_bys_replace(Qry, Grpbs) ->
erlang:setelement(7, Qry, {group_by, Grpbs}).
-spec limit(cake@internal@query:select(), integer()) -> cake@internal@query:select().
limit(Qry, Lmt) ->
Lmt@1 = begin
_pipe = Lmt,
cake@internal@query:limit_new(_pipe)
end,
erlang:setelement(10, Qry, Lmt@1).
-spec get_limit(cake@internal@query:select()) -> cake@internal@query:limit().
get_limit(Qry) ->
erlang:element(10, Qry).
-spec offset(cake@internal@query:select(), integer()) -> cake@internal@query:select().
offset(Qry, Offst) ->
Offst@1 = begin
_pipe = Offst,
cake@internal@query:offset_new(_pipe)
end,
erlang:setelement(11, Qry, Offst@1).
-spec get_offset(cake@internal@query:select()) -> cake@internal@query:offset().
get_offset(Qry) ->
erlang:element(11, Qry).
-spec map_order_by_direction_constructor(direction()) -> cake@internal@query:order_by_direction().
map_order_by_direction_constructor(In) ->
case In of
asc ->
asc;
desc ->
desc
end.
-spec order_asc(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_asc(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc}]},
true
).
-spec order_asc_nulls_first(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_asc_nulls_first(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc_nulls_first}]},
true
).
-spec order_asc_replace(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_asc_replace(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc}]},
false
).
-spec order_asc_nulls_first_replace(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_asc_nulls_first_replace(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, asc_nulls_first}]},
false
).
-spec order_desc(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_desc(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc}]},
true
).
-spec order_desc_nulls_first(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_desc_nulls_first(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc_nulls_first}]},
true
).
-spec order_desc_replace(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_desc_replace(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc}]},
false
).
-spec order_desc_nulls_first_replace(cake@internal@query:select(), binary()) -> cake@internal@query:select().
order_desc_nulls_first_replace(Qry, Ordb) ->
_pipe = Qry,
cake@internal@query:select_order_by(
_pipe,
{order_by, [{order_by_column, Ordb, desc_nulls_first}]},
false
).
-spec order(cake@internal@query:select(), binary(), direction()) -> cake@internal@query:select().
order(Qry, Ordb, Dir) ->
Dir@1 = begin
_pipe = Dir,
map_order_by_direction_constructor(_pipe)
end,
_pipe@1 = Qry,
cake@internal@query:select_order_by(
_pipe@1,
{order_by, [{order_by_column, Ordb, Dir@1}]},
true
).
-spec order_replace(cake@internal@query:select(), binary(), direction()) -> cake@internal@query:select().
order_replace(Qry, Ordb, Dir) ->
Dir@1 = begin
_pipe = Dir,
map_order_by_direction_constructor(_pipe)
end,
_pipe@1 = Qry,
cake@internal@query:select_order_by(
_pipe@1,
{order_by, [{order_by_column, Ordb, Dir@1}]},
false
).
-spec epilog(cake@internal@query:select(), binary()) -> cake@internal@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@query:select()) -> cake@internal@query:select().
no_epilog(Qry) ->
erlang:setelement(12, Qry, no_epilog).
-spec get_epilog(cake@internal@query:select()) -> cake@internal@query:epilog().
get_epilog(Qry) ->
erlang:element(12, Qry).
-spec comment(cake@internal@query:select(), binary()) -> cake@internal@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@query:select()) -> cake@internal@query:select().
no_comment(Qry) ->
erlang:setelement(13, Qry, no_comment).
-spec get_comment(cake@internal@query:select()) -> cake@internal@query:comment().
get_comment(Qry) ->
erlang:element(13, Qry).