postgresql-syntax-0.5.0.0: library-internal/PostgresqlSyntax/Ast/OptTempTableName.hs
module PostgresqlSyntax.Ast.OptTempTableName where
import qualified HeadedMegaparsec as Parser
import PostgresqlSyntax.Ast.QualifiedName
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
-- @
-- OptTempTableName:
-- | TEMPORARY opt_table qualified_name
-- | TEMP opt_table qualified_name
-- | LOCAL TEMPORARY opt_table qualified_name
-- | LOCAL TEMP opt_table qualified_name
-- | GLOBAL TEMPORARY opt_table qualified_name
-- | GLOBAL TEMP opt_table qualified_name
-- | UNLOGGED opt_table qualified_name
-- | TABLE qualified_name
-- | qualified_name
-- @
data OptTempTableName
= TemporaryOptTempTableName Bool QualifiedName
| TempOptTempTableName Bool QualifiedName
| LocalTemporaryOptTempTableName Bool QualifiedName
| LocalTempOptTempTableName Bool QualifiedName
| GlobalTemporaryOptTempTableName Bool QualifiedName
| GlobalTempOptTempTableName Bool QualifiedName
| UnloggedOptTempTableName Bool QualifiedName
| TableOptTempTableName QualifiedName
| QualifedOptTempTableName QualifiedName
deriving (Show, Generic, Eq, Ord, Data)
instance IsAst OptTempTableName where
toTextBuilder settings = \case
TemporaryOptTempTableName a b -> TextBuilders.optLexemes [Just "TEMPORARY", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
TempOptTempTableName a b -> TextBuilders.optLexemes [Just "TEMP", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
LocalTemporaryOptTempTableName a b -> TextBuilders.optLexemes [Just "LOCAL TEMPORARY", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
LocalTempOptTempTableName a b -> TextBuilders.optLexemes [Just "LOCAL TEMP", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
GlobalTemporaryOptTempTableName a b -> TextBuilders.optLexemes [Just "GLOBAL TEMPORARY", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
GlobalTempOptTempTableName a b -> TextBuilders.optLexemes [Just "GLOBAL TEMP", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
UnloggedOptTempTableName a b -> TextBuilders.optLexemes [Just "UNLOGGED", bool Nothing (Just "TABLE") a, Just (toTextBuilder settings b)]
TableOptTempTableName a -> "TABLE " <> toTextBuilder settings a
QualifedOptTempTableName a -> toTextBuilder settings a
parser settings =
asum
[ do
a <-
asum
[ TemporaryOptTempTableName <$ Parsers.keyword "temporary" <* Parsers.space1,
TempOptTempTableName <$ Parsers.keyword "temp" <* Parsers.space1,
LocalTemporaryOptTempTableName <$ Parsers.keyphrase "local temporary" <* Parsers.space1,
LocalTempOptTempTableName <$ Parsers.keyphrase "local temp" <* Parsers.space1,
GlobalTemporaryOptTempTableName <$ Parsers.keyphrase "global temporary" <* Parsers.space1,
GlobalTempOptTempTableName <$ Parsers.keyphrase "global temp" <* Parsers.space1,
UnloggedOptTempTableName <$ Parsers.keyword "unlogged" <* Parsers.space1
]
b <- option False (True <$ Parsers.keyword "table" <* Parsers.space1)
c <- parser settings
return (a b c),
do
Parsers.keyword "table"
Parsers.space1
Parser.endHead
TableOptTempTableName <$> parser settings,
QualifedOptTempTableName <$> parser settings
]
instance Qc.Arbitrary OptTempTableName where
shrink = Qc.genericShrink
arbitrary =
Qc.oneof
[ TemporaryOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
TempOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
LocalTemporaryOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
LocalTempOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
GlobalTemporaryOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
GlobalTempOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
UnloggedOptTempTableName <$> Qc.arbitrary <*> Qc.arbitrary,
TableOptTempTableName <$> Qc.arbitrary,
QualifedOptTempTableName <$> Qc.arbitrary
]