Packages

A delightful ORM (?) for Gleam! 🍳

Current section

Files

Jump to
ormlette src ormlette@ir@ir.erl
Raw

src/ormlette@ir@ir.erl

-module(ormlette@ir@ir).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([to_ir/1, to_sql_drop/1, inverse_ir/1]).
-export_type([table_ir/0, column_ir/0, column_constraint/0]).
-type table_ir() :: {table_ir, binary(), list(column_ir())}.
-type column_ir() :: {column_ir,
binary(),
ormlette@schema@create:column_type(),
list(column_constraint()),
gleam@option:option(gleam@dynamic:dynamic_())}.
-type column_constraint() :: primary_key |
nullable |
unique |
{foreign_key,
table_ir(),
binary(),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/ir/ir.gleam", 35).
-spec column_to_ir(ormlette@schema@create:column()) -> column_ir().
column_to_ir(Column) ->
Constraints = gleam@list:concat([case erlang:element(4, Column) of
true ->
[primary_key];
false ->
[]
end, case erlang:element(5, Column) of
true ->
[nullable];
false ->
[]
end, case erlang:element(6, Column) of
true ->
[unique];
false ->
[]
end, case erlang:element(8, Column) of
{some, Ref} ->
[{foreign_key,
{table_ir,
erlang:element(2, erlang:element(2, Ref)),
gleam@list:map(
erlang:element(3, erlang:element(2, Ref)),
fun(C) -> column_to_ir(C) end
)},
erlang:element(3, Ref),
erlang:element(4, Ref),
erlang:element(5, Ref)}];
none ->
[]
end]),
{column_ir,
erlang:element(2, Column),
erlang:element(3, Column),
Constraints,
erlang:element(7, Column)}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/ir/ir.gleam", 31).
-spec to_ir(ormlette@schema@create:table()) -> table_ir().
to_ir(Table) ->
{table_ir,
erlang:element(2, Table),
gleam@list:map(erlang:element(3, Table), fun column_to_ir/1)}.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/ir/ir.gleam", 78).
-spec to_sql_drop(table_ir()) -> binary().
to_sql_drop(Table_ir) ->
<<<<"DROP TABLE "/utf8, (erlang:element(2, Table_ir))/binary>>/binary,
";"/utf8>>.
-file("/Users/ashercohen/Desktop/gleam/ormlette/src/ormlette/ir/ir.gleam", 74).
-spec inverse_ir(table_ir()) -> binary().
inverse_ir(Table_ir) ->
to_sql_drop(Table_ir).