Packages

A fun, friendly, and type-safe ORM for Gleam! Compose type-safe SQL queries, generate decoders and types from schemas, and with a fun CLI!

Current section

Files

Jump to
funsies src db@query@yum.erl
Raw

src/db@query@yum.erl

-module(db@query@yum).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([equals/3, ere/1, to_where/1, new/1, select/1, wh/2, order_by/3, to_sql/1]).
-export_type([query_builder/0, where_builder/0, value/0, eq/0]).
-type query_builder() :: {query_builder,
db@schema:table(),
list(binary()),
list(binary()),
list(binary())}.
-type where_builder() :: {where_builder, db@schema:table(), list(binary())}.
-type value() :: {int_value, integer()} |
{string_value, binary()} |
{bool_value, boolean()} |
{error_value, binary()}.
-type eq() :: {equals, binary(), value()}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 36).
-spec to_clause_string(eq()) -> binary().
to_clause_string(Eq) ->
case erlang:element(3, Eq) of
{string_value, Value} ->
<<<<<<(erlang:element(2, Eq))/binary, " = '"/utf8>>/binary,
Value/binary>>/binary,
"'"/utf8>>;
{bool_value, Value@1} ->
<<<<(erlang:element(2, Eq))/binary, " = "/utf8>>/binary,
(gleam@bool:to_string(Value@1))/binary>>;
{int_value, Value@2} ->
<<<<(erlang:element(2, Eq))/binary, " = "/utf8>>/binary,
(gleam@int:to_string(Value@2))/binary>>;
{error_value, Value@3} ->
erlang:error(#{gleam_error => panic,
message => <<"`panic` expression evaluated."/utf8>>,
module => <<"db/query/yum"/utf8>>,
function => <<"to_clause_string"/utf8>>,
line => 41})
end.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 54).
-spec is_right_value(value(), value()) -> boolean().
is_right_value(Value, Target) ->
case {Value, Target} of
{{int_value, _}, {int_value, _}} ->
true;
{{string_value, _}, {string_value, _}} ->
true;
{{bool_value, _}, {bool_value, _}} ->
true;
{_, _} ->
false
end.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 64).
-spec is_col_type(db@schema:table(), binary(), value()) -> boolean().
is_col_type(Table, Col, Value) ->
_assert_subject = gleam@list:find(
erlang:element(3, Table),
fun(C) -> erlang:element(2, C) =:= Col end
),
{ok, Col@1} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"db/query/yum"/utf8>>,
function => <<"is_col_type"/utf8>>,
line => 65})
end,
case Col@1 of
{string_column, _, _} ->
is_right_value(Value, {string_value, <<"Test"/utf8>>});
{bool_column, _} ->
is_right_value(Value, {bool_value, true});
{foreign_key_column, _, _, _, _} ->
is_right_value(Value, {int_value, 1});
{int_column, _} ->
is_right_value(Value, {int_value, 1});
{serial_column, _} ->
is_right_value(Value, {int_value, 1})
end.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 45).
-spec to_clause(db@schema:table(), eq()) -> binary().
to_clause(Table, Eq) ->
Col = gleam@list:find(
erlang:element(3, Table),
fun(C) -> erlang:element(2, C) =:= erlang:element(2, Eq) end
),
case is_col_type(Table, erlang:element(2, Eq), erlang:element(3, Eq)) of
true ->
to_clause_string(Eq);
false ->
<<"FAILED!"/utf8>>
end.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 78).
-spec wrap_value(gleam@dynamic:dynamic_()) -> value().
wrap_value(Value) ->
case gleam@dynamic:bool(Value) of
{ok, Value@1} ->
{bool_value, Value@1};
{error, _} ->
case gleam@dynamic:int(Value) of
{ok, Value@2} ->
{int_value, Value@2};
{error, _} ->
case gleam@dynamic:string(Value) of
{ok, Value@3} ->
{string_value, Value@3};
{error, _} ->
{error_value, <<"Not a supported value!"/utf8>>}
end
end
end.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 95).
-spec equals(where_builder(), binary(), any()) -> where_builder().
equals(Builder, Col, Value) ->
{where_builder,
erlang:element(2, Builder),
lists:append(
erlang:element(3, Builder),
[to_clause(
erlang:element(2, Builder),
{equals, Col, wrap_value(gleam_stdlib:identity(Value))}
)]
)}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 104).
-spec ere(db@schema:table()) -> where_builder().
ere(Table) ->
{where_builder, Table, []}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 108).
-spec to_where(where_builder()) -> list(binary()).
to_where(Builder) ->
erlang:element(3, Builder).
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 113).
-spec new(db@schema:table()) -> query_builder().
new(Table) ->
{query_builder, Table, [], [], []}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 118).
-spec select(query_builder()) -> query_builder().
select(Builder) ->
{query_builder,
erlang:element(2, Builder),
gleam@list:map(
erlang:element(3, erlang:element(2, Builder)),
fun(C) -> erlang:element(2, C) end
),
erlang:element(4, Builder),
erlang:element(5, Builder)}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 128).
-spec wh(query_builder(), list(binary())) -> query_builder().
wh(Builder, Condition) ->
{query_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
lists:append(erlang:element(4, Builder), Condition),
erlang:element(5, Builder)}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 138).
-spec order_by(query_builder(), binary(), binary()) -> query_builder().
order_by(Builder, Column, Direction) ->
{query_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
lists:append(
erlang:element(5, Builder),
[<<<<Column/binary, " "/utf8>>/binary, Direction/binary>>]
)}.
-file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/db/query/yum.gleam", 152).
-spec to_sql(query_builder()) -> binary().
to_sql(Builder) ->
Base_query = <<<<<<"SELECT "/utf8,
(gleam@string:join(erlang:element(3, Builder), <<", "/utf8>>))/binary>>/binary,
" FROM "/utf8>>/binary,
(erlang:element(2, erlang:element(2, Builder)))/binary>>,
Where_sql = case erlang:element(4, Builder) of
[] ->
<<""/utf8>>;
Clauses ->
<<" WHERE "/utf8,
(gleam@string:join(Clauses, <<" AND "/utf8>>))/binary>>
end,
Order_by_sql = case erlang:element(5, Builder) of
[] ->
<<""/utf8>>;
Clauses@1 ->
<<" ORDER BY "/utf8,
(gleam@string:join(Clauses@1, <<", "/utf8>>))/binary>>
end,
<<<<<<Base_query/binary, Where_sql/binary>>/binary, Order_by_sql/binary>>/binary,
";"/utf8>>.