packages feed

sqel-0.0.1.0: lib/Sqel/Column.hs

module Sqel.Column where

import Sqel.Class.Mods (AddMod (addMod), MapMod, amendMod)
import Sqel.Data.Dd (Dd (Dd), DdK (DdK), Struct (Prim))
import Sqel.Data.Mods (Nullable (Nullable), PgDefault (PgDefault), PrimaryKey (PrimaryKey), SetTableName (SetTableName))
import Sqel.Data.PgTypeName (PgTableName)
import Sqel.Data.Sql (Sql)
import Sqel.Names.Rename (Rename, rename)
import Sqel.Names.Set (SetName)

pk ::
  AddMod PrimaryKey s0 s1 =>
  Dd s0 ->
  Dd s1
pk =
  addMod PrimaryKey

class MkNullable s0 s1 | s0 -> s1 where
  mkNullable :: Dd s0 -> Dd s1

instance MkNullable ('DdK sel p a 'Prim) ('DdK sel p (Maybe a) 'Prim) where
  mkNullable (Dd sel p s) = Dd sel p s

nullable ::
  ∀ s0 s1 s2 .
  AddMod Nullable s0 s1 =>
  MkNullable s1 s2 =>
  Dd s0 ->
  Dd s2
nullable =
  mkNullable .
  addMod Nullable

nullableAs ::
  ∀ name s0 s1 s2 .
  AddMod Nullable s0 s1 =>
  MkNullable s1 s2 =>
  Rename s2 (SetName s2 name) =>
  Dd s0 ->
  Dd (SetName s2 name)
nullableAs =
  rename . nullable

tableName ::
  ∀ s0 s1 .
  MapMod SetTableName s0 s1 =>
  PgTableName ->
  Dd s0 ->
  Dd s1
tableName name =
  amendMod (SetTableName name)

pgDefault ::
  AddMod PgDefault s0 s1 =>
  Sql ->
  Dd s0 ->
  Dd s1
pgDefault v =
  addMod (PgDefault v)