-module(ormlette@ir@ir). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([to_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", 44). -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", 39). -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)}.