module Database.PostgreSQL.PQTypes.ExtrasOptions
  ( ExtrasOptions (..)
  , defaultExtrasOptions
  , ObjectsValidationMode (..)
  ) where

data ExtrasOptions
  = ExtrasOptions
  { ExtrasOptions -> Maybe Int
eoLockTimeoutMs :: !(Maybe Int)
  , ExtrasOptions -> Bool
eoEnforcePKs :: !Bool
  -- ^ Validate that every handled table has a primary key
  , ExtrasOptions -> ObjectsValidationMode
eoObjectsValidationMode :: !ObjectsValidationMode
  -- ^ Validation mode for unknown tables and composite types.
  , ExtrasOptions -> Bool
eoAllowHigherTableVersions :: !Bool
  -- ^ Whether to allow tables in the database to have higher versions than
  -- the one in the code definition.
  , ExtrasOptions -> Bool
eoCheckForeignKeysIndexes :: !Bool
  -- ^ Check if all foreign keys have indexes.
  , ExtrasOptions -> Bool
eoCheckOverlappingIndexes :: !Bool
  -- ^ Check if some indexes are redundant
  }
  deriving (ExtrasOptions -> ExtrasOptions -> Bool
(ExtrasOptions -> ExtrasOptions -> Bool)
-> (ExtrasOptions -> ExtrasOptions -> Bool) -> Eq ExtrasOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ExtrasOptions -> ExtrasOptions -> Bool
== :: ExtrasOptions -> ExtrasOptions -> Bool
$c/= :: ExtrasOptions -> ExtrasOptions -> Bool
/= :: ExtrasOptions -> ExtrasOptions -> Bool
Eq)

defaultExtrasOptions :: ExtrasOptions
defaultExtrasOptions :: ExtrasOptions
defaultExtrasOptions =
  ExtrasOptions
    { eoLockTimeoutMs :: Maybe Int
eoLockTimeoutMs = Maybe Int
forall a. Maybe a
Nothing
    , eoEnforcePKs :: Bool
eoEnforcePKs = Bool
False
    , eoObjectsValidationMode :: ObjectsValidationMode
eoObjectsValidationMode = ObjectsValidationMode
DontAllowUnknownObjects
    , eoAllowHigherTableVersions :: Bool
eoAllowHigherTableVersions = Bool
False
    , eoCheckForeignKeysIndexes :: Bool
eoCheckForeignKeysIndexes = Bool
False
    , eoCheckOverlappingIndexes :: Bool
eoCheckOverlappingIndexes = Bool
False
    }

data ObjectsValidationMode = AllowUnknownObjects | DontAllowUnknownObjects
  deriving (ObjectsValidationMode -> ObjectsValidationMode -> Bool
(ObjectsValidationMode -> ObjectsValidationMode -> Bool)
-> (ObjectsValidationMode -> ObjectsValidationMode -> Bool)
-> Eq ObjectsValidationMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ObjectsValidationMode -> ObjectsValidationMode -> Bool
== :: ObjectsValidationMode -> ObjectsValidationMode -> Bool
$c/= :: ObjectsValidationMode -> ObjectsValidationMode -> Bool
/= :: ObjectsValidationMode -> ObjectsValidationMode -> Bool
Eq)