Current section

Files

Jump to
cake src cake@query@select.erl
Raw

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).