postgresql-syntax-0.5.0.2: library-internal/PostgresqlSyntax/Ast/FrameClause.hs
module PostgresqlSyntax.Ast.FrameClause where
import qualified HeadedMegaparsec as Parser
import PostgresqlSyntax.Algebra
import PostgresqlSyntax.Ast.FrameClauseMode
import PostgresqlSyntax.Ast.FrameExtent
import PostgresqlSyntax.Ast.WindowExclusionClause
import qualified PostgresqlSyntax.Helpers.Parsers as Parsers
import qualified PostgresqlSyntax.Helpers.TextBuilders as TextBuilders
import PostgresqlSyntax.Prelude
import qualified Test.QuickCheck as Qc
-- |
-- ==== References
-- @
-- opt_frame_clause:
-- | RANGE frame_extent opt_window_exclusion_clause
-- | ROWS frame_extent opt_window_exclusion_clause
-- | GROUPS frame_extent opt_window_exclusion_clause
-- | EMPTY
-- @
data FrameClause = FrameClause FrameClauseMode FrameExtent (Maybe WindowExclusionClause)
deriving (Show, Generic, Eq, Ord, Data)
instance IsAst FrameClause where
toTextBuilder settings (FrameClause a b c) =
TextBuilders.optLexemes
[ Just (toTextBuilder settings a),
Just (toTextBuilder settings b),
fmap (toTextBuilder settings) c
]
parser settings = do
a <- parser settings <* Parsers.space1 <* Parser.endHead
b <- parser settings
c <- optional (Parsers.space1 *> parser settings)
return (FrameClause a b c)
instance Qc.Arbitrary FrameClause where
shrink = Qc.genericShrink
arbitrary = FrameClause <$> arbitrary <*> arbitrary <*> arbitrary