postgresql-syntax-0.5.0.0: library-internal/PostgresqlSyntax/Ast/ValuesClause.hs
module PostgresqlSyntax.Ast.ValuesClause where
import qualified HeadedMegaparsec as Parser
import PostgresqlSyntax.Ast.ExprList
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 hiding (filter, many, some, try)
import qualified Test.QuickCheck as Qc
-- |
-- ==== References
-- @
-- values_clause:
-- | VALUES '(' expr_list ')'
-- | values_clause ',' '(' expr_list ')'
-- @
newtype ValuesClause = ValuesClause (NonEmpty ExprList)
deriving (Show, Generic, Eq, Ord, Data)
instance IsAst ValuesClause where
toTextBuilder settings (ValuesClause a) = "VALUES " <> TextBuilders.commaNonEmpty (TextBuilders.renderInParens . toTextBuilder settings) a
parser settings = do
Parsers.keyword "values"
Parsers.space
ValuesClause <$> Parsers.sep1 Parsers.commaSeparator row
where
row = do
Parsers.char '('
Parser.endHead
Parsers.space
a <- ExprList <$> Parsers.sep1 Parsers.commaSeparator (parser settings)
Parsers.space
Parsers.char ')'
return a
instance Qc.Arbitrary ValuesClause where
shrink = Qc.genericShrink
arbitrary = ValuesClause <$> Gens.nonEmptyUpTo 7 Qc.arbitrary