Current section
Files
Jump to
Current section
Files
src/ormlette@query@query.erl
-module(ormlette@query@query).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([select/2, from_table/1, join/3, inner_join/2, left_join/2, equals/3, greater_than/3, less_than/3, order_by/3, sql/1, export/1]).
-export_type(['query'/0]).
-type 'query'() :: {'query',
ormlette@schema@create:table(),
cake@internal@read_query:select()}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 17).
-spec find_column(ormlette@schema@create:table(), binary()) -> gleam@option:option(ormlette@schema@create:column()).
find_column(Table, Column_name) ->
case gleam@list:find(
erlang:element(3, Table),
fun(Col) -> erlang:element(2, Col) =:= Column_name end
) of
{ok, V} ->
{some, V};
{error, _} ->
none
end.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 28).
-spec column_exists(ormlette@schema@create:table(), binary()) -> boolean().
column_exists(Table, Column_name) ->
gleam@list:any(
erlang:element(3, Table),
fun(Column) -> erlang:element(2, Column) =:= Column_name end
).
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 33).
-spec to_where_value(gleam@dynamic:dynamic_()) -> cake@internal@read_query:where_value().
to_where_value(Value) ->
case gleam@dynamic:int(Value) of
{ok, Value@1} ->
cake@where:int(Value@1);
{error, _} ->
case gleam@dynamic:string(Value) of
{ok, Value@2} ->
cake@where:string(Value@2);
{error, _} ->
case gleam@dynamic:float(Value) of
{ok, Value@3} ->
cake@where:float(Value@3);
{error, _} ->
case gleam@dynamic:bool(Value) of
{ok, Value@4} ->
case Value@4 of
true ->
cake@where:true();
false ->
cake@where:false()
end;
{error, _} ->
cake@where:null()
end
end
end
end.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 57).
-spec find_relationship(
ormlette@schema@create:table(),
ormlette@schema@create:table()
) -> gleam@option:option({ormlette@schema@create:column(),
ormlette@schema@create:column()}).
find_relationship(Source_table, Target_table) ->
case gleam@list:find_map(
erlang:element(3, Source_table),
fun(Column) -> case erlang:element(8, Column) of
{some, Ref} when erlang:element(2, erlang:element(2, Ref)) =:= erlang:element(
2,
Target_table
) ->
case find_column(Target_table, erlang:element(3, Ref)) of
{some, Target_col} ->
{ok, {Column, Target_col}};
none ->
{error, {}}
end;
_ ->
{error, {}}
end end
) of
{ok, V} ->
{some, V};
{error, _} ->
none
end.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 125).
-spec select('query'(), list(binary())) -> 'query'().
select(Query, Columns) ->
Select_query@1 = gleam@list:fold(
Columns,
erlang:element(3, Query),
fun(Column, Select_query) ->
cake@select:select(
Column,
begin
_pipe = cake@select:col(Select_query),
cake@select:alias(
_pipe,
gleam@string:replace(
Select_query,
<<"."/utf8>>,
<<"_"/utf8>>
)
)
end
)
end
),
{'query', erlang:element(2, Query), Select_query@1}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 83).
-spec from_table(ormlette@schema@create:table()) -> 'query'().
from_table(Table) ->
{'query',
Table,
cake@select:from_table(cake@select:new(), erlang:element(2, Table))}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 88).
-spec join(
'query'(),
ormlette@schema@create:table(),
fun((cake@internal@read_query:join_target(), cake@internal@read_query:where(), binary()) -> cake@internal@read_query:join())
) -> 'query'().
join(Query, Target_table, Join_type) ->
Foreign_key = find_relationship(erlang:element(2, Query), Target_table),
case Foreign_key of
{some, {Source_col, Target_col}} ->
Join_clause = Join_type(
cake@join:table(erlang:element(2, Target_table)),
cake@where:eq(
cake@where:col(
<<<<(erlang:element(2, erlang:element(2, Query)))/binary,
"."/utf8>>/binary,
(erlang:element(2, Source_col))/binary>>
),
cake@where:col(
<<<<(erlang:element(2, Target_table))/binary, "."/utf8>>/binary,
(erlang:element(2, Target_col))/binary>>
)
),
erlang:element(2, Target_table)
),
Joined_query = cake@select:join(
erlang:element(3, Query),
Join_clause
),
{'query', erlang:element(2, Query), Joined_query};
none ->
Query
end.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 115).
-spec inner_join('query'(), ormlette@schema@create:table()) -> 'query'().
inner_join(Query, Target_table) ->
join(Query, Target_table, fun cake@join:inner/3).
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 120).
-spec left_join('query'(), ormlette@schema@create:table()) -> 'query'().
left_join(Query, Target_table) ->
join(Query, Target_table, fun cake@join:left/3).
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 138).
-spec equals('query'(), binary(), any()) -> 'query'().
equals(Query, Column, Value) ->
Where_clause = cake@where:eq(
cake@where:col(Column),
to_where_value(gleam_stdlib:identity(Value))
),
{'query',
erlang:element(2, Query),
cake@select:where(erlang:element(3, Query), Where_clause)}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 145).
-spec greater_than('query'(), binary(), any()) -> 'query'().
greater_than(Query, Column, Value) ->
Where_clause = cake@where:gt(
cake@where:col(Column),
to_where_value(gleam_stdlib:identity(Value))
),
{'query',
erlang:element(2, Query),
cake@select:where(erlang:element(3, Query), Where_clause)}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 152).
-spec less_than('query'(), binary(), any()) -> 'query'().
less_than(Query, Column, Value) ->
Where_clause = cake@where:lt(
cake@where:col(Column),
to_where_value(gleam_stdlib:identity(Value))
),
{'query',
erlang:element(2, Query),
cake@select:where(erlang:element(3, Query), Where_clause)}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 159).
-spec order_by('query'(), binary(), cake@select:direction()) -> 'query'().
order_by(Query, Column, Direction) ->
Ordered_query = cake@select:order_by(
erlang:element(3, Query),
Column,
Direction
),
{'query', erlang:element(2, Query), Ordered_query}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 169).
-spec sql('query'()) -> {binary(), list(cake@param:param())}.
sql(Query) ->
{cake:get_sql(
cake@dialect@postgres_dialect:read_query_to_prepared_statement(
cake@select:to_query(erlang:element(3, Query))
)
),
cake:get_params(
cake@dialect@postgres_dialect:read_query_to_prepared_statement(
cake@select:to_query(erlang:element(3, Query))
)
)}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/query/query.gleam", 184).
-spec export('query'()) -> cake@internal@read_query:select().
export(Query) ->
erlang:element(3, Query).