postgresql-syntax-0.5.0.2: library-internal/PostgresqlSyntax/Ast/ForLockingStrength.hs
module PostgresqlSyntax.Ast.ForLockingStrength where
import PostgresqlSyntax.Algebra
import qualified PostgresqlSyntax.Helpers.Parsers as Parsers
import PostgresqlSyntax.Prelude
import qualified Test.QuickCheck as Qc
-- |
-- ==== References
-- @
-- for_locking_strength:
-- | FOR UPDATE
-- | FOR NO KEY UPDATE
-- | FOR SHARE
-- | FOR KEY SHARE
-- @
data ForLockingStrength
= UpdateForLockingStrength
| NoKeyUpdateForLockingStrength
| ShareForLockingStrength
| KeyForLockingStrength
deriving (Show, Generic, Eq, Ord, Data)
instance IsAst ForLockingStrength where
toTextBuilder _settings = \case
UpdateForLockingStrength -> "FOR UPDATE"
NoKeyUpdateForLockingStrength -> "FOR NO KEY UPDATE"
ShareForLockingStrength -> "FOR SHARE"
KeyForLockingStrength -> "FOR KEY SHARE"
parser _settings =
UpdateForLockingStrength
<$ Parsers.keyphrase "for update"
<|> NoKeyUpdateForLockingStrength
<$ Parsers.keyphrase "for no key update"
<|> ShareForLockingStrength
<$ Parsers.keyphrase "for share"
<|> KeyForLockingStrength
<$ Parsers.keyphrase "for key share"
instance Qc.Arbitrary ForLockingStrength where
shrink = Qc.genericShrink
arbitrary =
Qc.elements
[ UpdateForLockingStrength,
NoKeyUpdateForLockingStrength,
ShareForLockingStrength,
KeyForLockingStrength
]