-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).