56 lines
1.5 KiB
Haskell
56 lines
1.5 KiB
Haskell
{-# LANGUAGE DeriveAnyClass #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
|
|
module PostgREST.DbStructure.Table
|
|
( Column(..)
|
|
, Table(..)
|
|
, tableQi
|
|
) where
|
|
|
|
import qualified Data.Aeson as JSON
|
|
|
|
import PostgREST.DbStructure.Identifiers (FieldName,
|
|
QualifiedIdentifier (..),
|
|
Schema, TableName)
|
|
|
|
import Protolude
|
|
|
|
|
|
data Table = Table
|
|
{ tableSchema :: Schema
|
|
, tableName :: TableName
|
|
, tableDescription :: Maybe Text
|
|
-- The following fields identify what can be done on the table/view, they're not related to the privileges granted to it
|
|
, tableInsertable :: Bool
|
|
, tableUpdatable :: Bool
|
|
, tableDeletable :: Bool
|
|
}
|
|
deriving (Show, Ord, Generic, JSON.ToJSON)
|
|
|
|
instance Eq Table where
|
|
Table{tableSchema=s1,tableName=n1} == Table{tableSchema=s2,tableName=n2} = s1 == s2 && n1 == n2
|
|
|
|
tableQi :: Table -> QualifiedIdentifier
|
|
tableQi Table{tableSchema=s, tableName=n} = QualifiedIdentifier s n
|
|
|
|
data Column = Column
|
|
{ colTable :: Table
|
|
, colName :: FieldName
|
|
, colDescription :: Maybe Text
|
|
, colNullable :: Bool
|
|
, colType :: Text
|
|
, colMaxLen :: Maybe Int32
|
|
, colDefault :: Maybe Text
|
|
, colEnum :: [Text]
|
|
}
|
|
deriving (Ord, Generic, JSON.ToJSON)
|
|
|
|
instance Eq Column where
|
|
Column{colTable=t1,colName=n1} == Column{colTable=t2,colName=n2} = t1 == t2 && n1 == n2
|
|
|
|
data PrimaryKey = PrimaryKey
|
|
{ pkTable :: Table
|
|
, pkName :: Text
|
|
}
|
|
deriving (Generic, JSON.ToJSON)
|