yumemi/gen/storage
server.storage の写像(WGy r3、鷹野の裁定)── Entity の器(Neon / Durable Object)と、
導出と違う列の持ち方。穴の契約(Property 1 つに穴 1 つ、値は codec の encode)は変えず、
割る・写すのは SQL の側でする。
Values
pub fn apply(
entities: List(model.Entity),
rows: List(model.Storage),
) -> List(model.Entity)
列名の上書き(Column)と、record を割る列(Split)を FieldDef の列に写す。
割った列は a,b の 1 つの綴りで持ち、INSERT / RETURNING はそのまま並び、UPDATE は組の代入にする。
pub fn in_object(app: model.App, module: String) -> Bool
Entity が Durable Object の器に在るか(PG の SQL を出さない)。
pub fn in_object_named(app: model.App, name: String) -> Bool
Entity の名(Notification)で引く in_object。
pub fn split_columns(
app: model.App,
entity: model.Entity,
property: String,
) -> List(#(String, String))
Split の宣言の (record の欄, 列)。無ければ空。
pub fn sql_type(
app: model.App,
field: model.FieldDef,
) -> option.Option(String)
列の SQL の型の上書き(Text は text、Array は <element>[])。
pub fn text_values(
app: model.App,
entity: model.Entity,
property: String,
) -> List(#(String, String))
Text の宣言の (構成子, 列の値)。無ければ空。
pub fn values(
app: model.App,
field: model.FieldDef,
placeholder: String,
) -> option.Option(List(String))
穴 1 つから列の値を書く(Split は列の数だけ、Text は構成子の snake 名を列の値へ)。