postgresql-syntax-0.5.0.0: library-internal/PostgresqlSyntax/Ast/ForLockingClause.hs
module PostgresqlSyntax.Ast.ForLockingClause where
import PostgresqlSyntax.Ast.ForLockingItem
import qualified PostgresqlSyntax.Helpers.Gens as Gens
import qualified PostgresqlSyntax.Helpers.Parsers as Parsers
import qualified PostgresqlSyntax.Helpers.TextBuilders as TextBuilders
import PostgresqlSyntax.IsAst
import PostgresqlSyntax.Prelude
import qualified Test.QuickCheck as Qc
-- |
-- ==== References
-- @
-- for_locking_clause:
-- | for_locking_items
-- | FOR READ ONLY
-- for_locking_items:
-- | for_locking_item
-- | for_locking_items for_locking_item
-- @
data ForLockingClause
= ItemsForLockingClause (NonEmpty ForLockingItem)
| ReadOnlyForLockingClause
deriving (Show, Generic, Eq, Ord, Data)
instance IsAst ForLockingClause where
toTextBuilder settings = \case
ItemsForLockingClause a -> TextBuilders.spaceNonEmpty (toTextBuilder settings) a
ReadOnlyForLockingClause -> "FOR READ ONLY"
parser settings = readOnly <|> items
where
readOnly = ReadOnlyForLockingClause <$ Parsers.keyphrase "for read only"
items = ItemsForLockingClause <$> Parsers.sep1 Parsers.space1 (parser settings)
instance Qc.Arbitrary ForLockingClause where
shrink = Qc.genericShrink
arbitrary =
Qc.oneof
[ ItemsForLockingClause <$> Gens.nonEmptyUpTo 7 Qc.arbitrary,
pure ReadOnlyForLockingClause
]