-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), [<<<>/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, <<<<<>/binary, Order_by_sql/binary>>/binary, ";"/utf8>>.