-module(funsies@query@yummy). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([equals/3, 'not'/1, 'or'/1, 'and'/1, wb/1, new/1, select/1, where/2, order_by/3, to_sql/1, insert/2, w/1, to_insert_sql/1]). -export_type([query_builder/0, where_builder/0, value/0, eq/0]). -type query_builder() :: {query_builder, funsies@schema:table(), list(binary()), list(eq()), list(binary()), list(binary()), list(value())}. -type where_builder() :: {where_builder, funsies@schema:table(), list(eq())}. -type value() :: {int_value, integer()} | {string_value, binary()} | {bool_value, boolean()} | {error_value, binary()}. -type eq() :: {equals, binary(), value()} | {'not', eq()} | {'or', eq(), eq()} | {'and', eq(), eq()}. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 44). -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/funsies/query/yummy.gleam", 62). -spec to_string(value()) -> binary(). to_string(Value) -> case Value of {string_value, Value@1} -> <<<<"'"/utf8, Value@1/binary>>/binary, "'"/utf8>>; {int_value, Value@2} -> gleam@int:to_string(Value@2); {bool_value, Value@3} -> gleam@bool:to_string(Value@3); {error_value, Value@4} -> erlang:error(#{gleam_error => panic, message => <<"`panic` expression evaluated."/utf8>>, module => <<"funsies/query/yummy"/utf8>>, function => <<"to_string"/utf8>>, line => 67}) end. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 71). -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/funsies/query/yummy.gleam", 80). -spec is_col_type(funsies@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 => <<"funsies/query/yummy"/utf8>>, function => <<"is_col_type"/utf8>>, line => 81}) 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/funsies/query/yummy.gleam", 93). -spec equals(where_builder(), binary(), any()) -> where_builder(). equals(Builder, Col, Value) -> Wrapped_value = wrap_value(gleam_stdlib:identity(Value)), case is_col_type(erlang:element(2, Builder), Col, Wrapped_value) of true -> {where_builder, erlang:element(2, Builder), lists:append( erlang:element(3, Builder), [{equals, Col, Wrapped_value}] )}; false -> {where_builder, erlang:element(2, Builder), lists:append( erlang:element(3, Builder), [{equals, Col, {error_value, <<"Type mismatch"/utf8>>}}] )} end. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 109). -spec 'not'(where_builder()) -> where_builder(). 'not'(Builder) -> case gleam@queue:pop_back(gleam@queue:from_list(erlang:element(3, Builder))) of {ok, {Eq, Rest}} -> {where_builder, erlang:element(2, Builder), lists:append(gleam@queue:to_list(Rest), [{'not', Eq}])}; _ -> Builder end. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 117). -spec 'or'(where_builder()) -> where_builder(). 'or'(Builder) -> case gleam@queue:pop_back(gleam@queue:from_list(erlang:element(3, Builder))) of {ok, {Eq1, Rest1}} -> case gleam@queue:pop_back(Rest1) of {ok, {Eq2, Rest2}} -> {where_builder, erlang:element(2, Builder), lists:append( gleam@queue:to_list(Rest2), [{'or', Eq1, Eq2}] )}; _ -> Builder end; _ -> Builder end. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 132). -spec 'and'(where_builder()) -> where_builder(). 'and'(Builder) -> case gleam@queue:pop_back(gleam@queue:from_list(erlang:element(3, Builder))) of {ok, {Eq1, Rest1}} -> case gleam@queue:pop_back(Rest1) of {ok, {Eq2, Rest2}} -> {where_builder, erlang:element(2, Builder), lists:append( gleam@queue:to_list(Rest2), [{'and', Eq1, Eq2}] )}; _ -> Builder end; _ -> Builder end. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 147). -spec wb(funsies@schema:table()) -> where_builder(). wb(Table) -> {where_builder, Table, []}. -file("/Users/ashercohen/Desktop/ASHERSOPRO/funsies/src/funsies/query/yummy.gleam", 168). -spec build(gleam@queue:queue(eq()), list(binary())) -> {ok, list(binary())} | {error, binary()}. build(Clauses, Acc) -> case gleam@queue:pop_back(Clauses) of {ok, {{equals, Col, Val}, Rest}} -> case Val of {error_value, Err} -> {error, Err}; _ -> build( Rest, lists:append( Acc, [<<<