Current section
Files
Jump to
Current section
Files
src/starmap@query.erl
-module(starmap@query).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([from/1, select1/2, select2/3, select3/4, select4/5, select5/6, select6/7, unwrap_converted_wheres/1, join/3, limit/2, order_by/2, order_by_desc/2, group_by/2, where/2]).
-export_type(['query'/2, table_column/0, where/3, where_columns/2, converted_where/1, converted_where_columns/1, join/0]).
-type 'query'(GSK, GSL) :: {'query',
binary(),
GSK,
list(join()),
list(converted_where(GSL)),
list({table_column(), binary()}),
list(table_column()),
gleam@option:option(integer())}.
-type table_column() :: {table_column, binary(), binary()}.
-type where(GSM, GSN, GSO) :: {equal, where_columns(GSM, GSO)} |
{not_equal, where_columns(GSM, GSO)} |
{is_null, starmap@schema:column(gleam@option:option(GSM), GSO)} |
{is_not_null, starmap@schema:column(gleam@option:option(GSM), GSO)} |
{greater, where_columns(GSM, GSO)} |
{greater_or_equal, where_columns(GSM, GSO)} |
{lower, where_columns(GSM, GSO)} |
{lower_or_equal, where_columns(GSM, GSO)} |
{'or', where(GSM, GSN, GSO), where(GSN, GSM, GSO)}.
-type where_columns(GSP, GSQ) :: {column_value,
starmap@schema:column(GSP, GSQ),
GSP} |
{columns, starmap@schema:column(GSP, GSQ), starmap@schema:column(GSP, GSQ)} |
{columns_one_nullable,
starmap@schema:column(GSP, GSQ),
starmap@schema:column(gleam@option:option(GSP), GSQ)}.
-type converted_where(GSR) :: {converted_equal, converted_where_columns(GSR)} |
{converted_not_equal, converted_where_columns(GSR)} |
{converted_is_null, table_column()} |
{converted_is_not_null, table_column()} |
{converted_greater, converted_where_columns(GSR)} |
{converted_greater_or_equal, converted_where_columns(GSR)} |
{converted_lower, converted_where_columns(GSR)} |
{converted_lower_or_equal, converted_where_columns(GSR)} |
{converted_or, converted_where(GSR), converted_where(GSR)}.
-type converted_where_columns(GSS) :: {converted_column_value,
table_column(),
GSS} |
{converted_columns, table_column(), table_column()}.
-type join() :: {join, table_column(), table_column()}.
-spec query_replace_columns('query'(nil, GST), GSW) -> 'query'(GSW, GST).
query_replace_columns(Query, Columns) ->
{'query',
erlang:element(2, Query),
Columns,
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
erlang:element(7, Query),
erlang:element(8, Query)}.
-spec from(binary()) -> 'query'(nil, any()).
from(Table) ->
{'query', Table, nil, [], [], [], [], none}.
-spec select1('query'(nil, GTC), starmap@schema:column(GTF, GTG)) -> 'query'(starmap@schema:column(GTF, GTG), GTC).
select1(Query, Column1) ->
_pipe = Query,
query_replace_columns(_pipe, Column1).
-spec select2(
'query'(nil, GTN),
starmap@schema:column(GTQ, GTR),
starmap@schema:column(GTU, GTR)
) -> 'query'({starmap@schema:column(GTQ, GTR), starmap@schema:column(GTU, GTR)}, GTN).
select2(Query, Column1, Column2) ->
_pipe = Query,
query_replace_columns(_pipe, {Column1, Column2}).
-spec select3(
'query'(nil, GUD),
starmap@schema:column(GUG, GUH),
starmap@schema:column(GUK, GUH),
starmap@schema:column(GUN, GUH)
) -> 'query'({starmap@schema:column(GUG, GUH),
starmap@schema:column(GUK, GUH),
starmap@schema:column(GUN, GUH)}, GUD).
select3(Query, Column1, Column2, Column3) ->
_pipe = Query,
query_replace_columns(_pipe, {Column1, Column2, Column3}).
-spec select4(
'query'(nil, GUY),
starmap@schema:column(GVB, GVC),
starmap@schema:column(GVF, GVC),
starmap@schema:column(GVI, GVC),
starmap@schema:column(GVL, GVC)
) -> 'query'({starmap@schema:column(GVB, GVC),
starmap@schema:column(GVF, GVC),
starmap@schema:column(GVI, GVC),
starmap@schema:column(GVL, GVC)}, GUY).
select4(Query, Column1, Column2, Column3, Column4) ->
_pipe = Query,
query_replace_columns(_pipe, {Column1, Column2, Column3, Column4}).
-spec select5(
'query'(nil, GVY),
starmap@schema:column(GWB, GWC),
starmap@schema:column(GWF, GWC),
starmap@schema:column(GWI, GWC),
starmap@schema:column(GWL, GWC),
starmap@schema:column(GWO, GWC)
) -> 'query'({starmap@schema:column(GWB, GWC),
starmap@schema:column(GWF, GWC),
starmap@schema:column(GWI, GWC),
starmap@schema:column(GWL, GWC),
starmap@schema:column(GWO, GWC)}, GVY).
select5(Query, Column1, Column2, Column3, Column4, Column5) ->
_pipe = Query,
query_replace_columns(_pipe, {Column1, Column2, Column3, Column4, Column5}).
-spec select6(
'query'(nil, GXD),
starmap@schema:column(GXG, GXH),
starmap@schema:column(GXK, GXH),
starmap@schema:column(GXN, GXH),
starmap@schema:column(GXQ, GXH),
starmap@schema:column(GXT, GXH),
starmap@schema:column(GXW, GXH)
) -> 'query'({starmap@schema:column(GXG, GXH),
starmap@schema:column(GXK, GXH),
starmap@schema:column(GXN, GXH),
starmap@schema:column(GXQ, GXH),
starmap@schema:column(GXT, GXH),
starmap@schema:column(GXW, GXH)}, GXD).
select6(Query, Column1, Column2, Column3, Column4, Column5, Column6) ->
_pipe = Query,
query_replace_columns(
_pipe,
{Column1, Column2, Column3, Column4, Column5, Column6}
).
-spec unwrap_converted_wheres(list(converted_where(GZF))) -> list(gleam@option:option(converted_where_columns(GZF))).
unwrap_converted_wheres(Converted_wheres) ->
_pipe = Converted_wheres,
_pipe@2 = gleam@list:map(
_pipe,
fun(Converted_where) -> case Converted_where of
{converted_equal, Columns} ->
[{some, Columns}];
{converted_not_equal, Columns@1} ->
[{some, Columns@1}];
{converted_greater, Columns@2} ->
[{some, Columns@2}];
{converted_greater_or_equal, Columns@3} ->
[{some, Columns@3}];
{converted_lower, Columns@4} ->
[{some, Columns@4}];
{converted_lower_or_equal, Columns@5} ->
[{some, Columns@5}];
{converted_or, Where1, Where2} ->
_pipe@1 = [unwrap_converted_wheres([Where1, Where2])],
gleam@list:flatten(_pipe@1);
_ ->
[none]
end end
),
gleam@list:flatten(_pipe@2).
-spec convert_where_columns(where_columns(any(), GZT)) -> converted_where_columns(GZT).
convert_where_columns(Where_columns) ->
case Where_columns of
{column_value, Column, Val} ->
{converted_column_value,
{table_column,
erlang:element(2, Column),
erlang:element(3, Column)},
(erlang:element(2, erlang:element(4, erlang:element(4, Column))))(
Val
)};
{columns, Column1, Column2} ->
{converted_columns,
{table_column,
erlang:element(2, Column1),
erlang:element(3, Column1)},
{table_column,
erlang:element(2, Column2),
erlang:element(3, Column2)}};
{columns_one_nullable, Column1@1, Column2@1} ->
{converted_columns,
{table_column,
erlang:element(2, Column1@1),
erlang:element(3, Column1@1)},
{table_column,
erlang:element(2, Column2@1),
erlang:element(3, Column2@1)}}
end.
-spec join(
'query'(GZX, GZY),
starmap@schema:column(HAB, HAC),
starmap@schema:column(HAB, HAC)
) -> 'query'(GZX, GZY).
join(Query, Column1, Column2) ->
erlang:setelement(
4,
Query,
begin
_pipe = erlang:element(4, Query),
lists:append(
_pipe,
[{join,
{table_column,
erlang:element(2, Column1),
erlang:element(3, Column1)},
{table_column,
erlang:element(2, Column2),
erlang:element(3, Column2)}}]
)
end
).
-spec limit('query'(HAJ, HAK), integer()) -> 'query'(HAJ, HAK).
limit(Query, Amount) ->
erlang:setelement(8, Query, {some, Amount}).
-spec order_by('query'(HAP, HAQ), starmap@schema:column(any(), any())) -> 'query'(HAP, HAQ).
order_by(Query, Column) ->
erlang:setelement(
6,
Query,
begin
_pipe = erlang:element(6, Query),
lists:append(
_pipe,
[{{table_column,
erlang:element(2, Column),
erlang:element(3, Column)},
<<"ASC"/utf8>>}]
)
end
).
-spec order_by_desc('query'(HAZ, HBA), starmap@schema:column(any(), any())) -> 'query'(HAZ, HBA).
order_by_desc(Query, Column) ->
erlang:setelement(
6,
Query,
begin
_pipe = erlang:element(6, Query),
lists:append(
_pipe,
[{{table_column,
erlang:element(2, Column),
erlang:element(3, Column)},
<<"DESC"/utf8>>}]
)
end
).
-spec group_by('query'(HBJ, HBK), starmap@schema:column(any(), any())) -> 'query'(HBJ, HBK).
group_by(Query, Column) ->
erlang:setelement(
7,
Query,
begin
_pipe = erlang:element(7, Query),
lists:append(
_pipe,
[{table_column,
erlang:element(2, Column),
erlang:element(3, Column)}]
)
end
).
-spec convert_where_redirect(where(any(), any(), GZN)) -> converted_where(GZN).
convert_where_redirect(Where) ->
convert_where(Where).
-spec convert_where(where(any(), any(), GZA)) -> converted_where(GZA).
convert_where(Where) ->
case Where of
{equal, Columns} ->
{converted_equal, convert_where_columns(Columns)};
{not_equal, Columns@1} ->
{converted_not_equal, convert_where_columns(Columns@1)};
{is_null, Column} ->
{converted_is_null,
{table_column,
erlang:element(2, Column),
erlang:element(3, Column)}};
{is_not_null, Column@1} ->
{converted_is_not_null,
{table_column,
erlang:element(2, Column@1),
erlang:element(3, Column@1)}};
{greater, Columns@2} ->
{converted_greater, convert_where_columns(Columns@2)};
{greater_or_equal, Columns@3} ->
{converted_greater_or_equal, convert_where_columns(Columns@3)};
{lower, Columns@4} ->
{converted_lower, convert_where_columns(Columns@4)};
{lower_or_equal, Columns@5} ->
{converted_lower_or_equal, convert_where_columns(Columns@5)};
{'or', Where1, Where2} ->
{converted_or,
convert_where(Where1),
convert_where_redirect(Where2)}
end.
-spec where('query'(GYN, GYO), where(any(), any(), GYO)) -> 'query'(GYN, GYO).
where(Query, Where) ->
erlang:setelement(
5,
Query,
begin
_pipe = erlang:element(5, Query),
lists:append(_pipe, [convert_where(Where)])
end
).