This returns an error for trying to update or insert into invalid columns, without hitting the database. This change also switches from `json_populate_recordset` for these operations `json_to_recordset` which should make no functional difference except allowing future flexibility.
59 lines
1.7 KiB
Haskell
59 lines
1.7 KiB
Haskell
{-# LANGUAGE DeriveAnyClass #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
|
|
module PostgREST.SchemaCache.Table
|
|
( Column(..)
|
|
, Table(..)
|
|
, tableColumnsList
|
|
, TablesMap
|
|
, ColumnMap
|
|
) where
|
|
|
|
import qualified Data.Aeson as JSON
|
|
import qualified Data.HashMap.Strict as HM
|
|
import qualified Data.HashMap.Strict.InsOrd as HMI
|
|
|
|
import PostgREST.SchemaCache.Identifiers (FieldName,
|
|
QualifiedIdentifier (..),
|
|
Schema, TableName)
|
|
|
|
import Protolude
|
|
|
|
|
|
data Table = Table
|
|
{ tableSchema :: Schema
|
|
, tableName :: TableName
|
|
, tableDescription :: Maybe Text
|
|
-- TODO Find a better way to separate tables and views
|
|
, tableIsView :: Bool
|
|
-- 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
|
|
, tablePKCols :: [FieldName]
|
|
, tableColumns :: ColumnMap
|
|
}
|
|
deriving (Show, Generic, JSON.ToJSON)
|
|
|
|
tableColumnsList :: Table -> [Column]
|
|
tableColumnsList = HMI.elems . tableColumns
|
|
|
|
instance Eq Table where
|
|
Table{tableSchema=s1,tableName=n1} == Table{tableSchema=s2,tableName=n2} = s1 == s2 && n1 == n2
|
|
|
|
data Column = Column
|
|
{ colName :: FieldName
|
|
, colDescription :: Maybe Text
|
|
, colNullable :: Bool
|
|
, colType :: Text
|
|
, colNominalType :: Text
|
|
, colMaxLen :: Maybe Int32
|
|
, colDefault :: Maybe Text
|
|
, colEnum :: [Text]
|
|
}
|
|
deriving (Eq, Show, Ord, Generic, JSON.ToJSON)
|
|
|
|
type TablesMap = HM.HashMap QualifiedIdentifier Table
|
|
type ColumnMap = HMI.InsOrdHashMap FieldName Column
|