module PostgresqlSyntax.Parsing where
import Control.Applicative.Combinators hiding (some)
import Control.Applicative.Combinators.NonEmpty
import qualified Data.HashSet as HashSet
import qualified Data.List.NonEmpty as NonEmpty
import qualified Data.Text as Text
import HeadedMegaparsec hiding (string)
import PostgresqlSyntax.Ast
import PostgresqlSyntax.Extras.HeadedMegaparsec hiding (run)
import qualified PostgresqlSyntax.Extras.HeadedMegaparsec as Extras
import qualified PostgresqlSyntax.Extras.NonEmpty as NonEmpty
import qualified PostgresqlSyntax.KeywordSet as KeywordSet
import qualified PostgresqlSyntax.Predicate as Predicate
import PostgresqlSyntax.Prelude hiding (bit, expr, filter, fromList, head, many, option, some, sortBy, tail, try)
import qualified PostgresqlSyntax.Validation as Validation
import qualified Text.Builder as TextBuilder
import Text.Megaparsec (Parsec, Stream)
import qualified Text.Megaparsec as Megaparsec
import qualified Text.Megaparsec.Char as MegaparsecChar
import qualified Text.Megaparsec.Char.Lexer as MegaparsecLexer
type Parser = HeadedParsec Void Text
run :: Parser a -> Text -> Either String a
run :: Parser a -> Text -> Either String a
run = Parser a -> Text -> Either String a
forall err strm a.
(Ord err, VisualStream strm, TraversableStream strm,
ShowErrorComponent err) =>
HeadedParsec err strm a -> strm -> Either String a
Extras.run
commaSeparator :: Parser ()
commaSeparator :: Parser ()
commaSeparator = Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
',' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
dotSeparator :: Parser ()
dotSeparator :: Parser ()
dotSeparator = Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'.' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
inBrackets :: Parser a -> Parser a
inBrackets :: Parser a -> Parser a
inBrackets Parser a
p = Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'[' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser a -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a
p Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser a -> HeadedParsec Void Text Char -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
']'
inBracketsCont :: Parser a -> Parser (Parser a)
inBracketsCont :: Parser a -> Parser (Parser a)
inBracketsCont Parser a
p = Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'[' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser (Parser a) -> Parser (Parser a)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a -> Parser (Parser a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser a -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a
p Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser a -> HeadedParsec Void Text Char -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
']')
inParens :: Parser a -> Parser a
inParens :: Parser a -> Parser a
inParens Parser a
p = Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'(' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser a -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a
p Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser a -> HeadedParsec Void Text Char -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
')'
inParensCont :: Parser a -> Parser (Parser a)
inParensCont :: Parser a -> Parser (Parser a)
inParensCont Parser a
p = Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'(' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser (Parser a) -> Parser (Parser a)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a -> Parser (Parser a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser a -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a
p Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser a -> HeadedParsec Void Text Char -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
')')
inParensWithLabel :: (label -> content -> result) -> Parser label -> Parser content -> Parser result
inParensWithLabel :: (label -> content -> result)
-> Parser label -> Parser content -> Parser result
inParensWithLabel label -> content -> result
_result Parser label
_labelParser Parser content
_contentParser = do
label
_label <- Parser label -> Parser label
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead Parser label
_labelParser
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'('
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
content
_content <- Parser content
_contentParser
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
')'
pure (label -> content -> result
_result label
_label content
_content)
inParensWithClause :: Parser clause -> Parser content -> Parser content
inParensWithClause :: Parser clause -> Parser content -> Parser content
inParensWithClause = (clause -> content -> content)
-> Parser clause -> Parser content -> Parser content
forall label content result.
(label -> content -> result)
-> Parser label -> Parser content -> Parser result
inParensWithLabel ((content -> content) -> clause -> content -> content
forall a b. a -> b -> a
const content -> content
forall k (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)
trueIfPresent :: Parser a -> Parser Bool
trueIfPresent :: Parser a -> Parser Bool
trueIfPresent Parser a
p = Bool -> Parser Bool -> Parser Bool
forall (m :: * -> *) a. Alternative m => a -> m a -> m a
option Bool
False (Bool
True Bool -> Parser a -> Parser Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser a
p)
quotedString :: Char -> Parser Text
quotedString :: Char -> Parser Text
quotedString Char
q = do
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
q
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text
_tail <-
Parsec Void Text Text -> Parser Text
forall err strm a.
(Ord err, Stream strm) =>
Parsec err strm a -> HeadedParsec err strm a
parse (Parsec Void Text Text -> Parser Text)
-> Parsec Void Text Text -> Parser Text
forall a b. (a -> b) -> a -> b
$
let collectChunks :: Builder -> Parsec Void Text Text
collectChunks !Builder
bdr = do
Text
chunk <- Maybe String
-> (Token Text -> Bool) -> ParsecT Void Text Identity (Tokens Text)
forall e s (m :: * -> *).
MonadParsec e s m =>
Maybe String -> (Token s -> Bool) -> m (Tokens s)
Megaparsec.takeWhileP Maybe String
forall a. Maybe a
Nothing (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
q)
let bdr' :: Builder
bdr' = Builder
bdr Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Text -> Builder
TextBuilder.text Text
chunk
Parsec Void Text Text -> Parsec Void Text Text
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
Megaparsec.try (Builder -> Parsec Void Text Text
consumeEscapedQuote Builder
bdr') Parsec Void Text Text
-> Parsec Void Text Text -> Parsec Void Text Text
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Builder -> Parsec Void Text Text
finish Builder
bdr'
consumeEscapedQuote :: Builder -> Parsec Void Text Text
consumeEscapedQuote Builder
bdr = do
Token Text -> ParsecT Void Text Identity (Token Text)
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
Token s -> m (Token s)
MegaparsecChar.char Char
Token Text
q
Token Text -> ParsecT Void Text Identity (Token Text)
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
Token s -> m (Token s)
MegaparsecChar.char Char
Token Text
q
Builder -> Parsec Void Text Text
collectChunks (Builder
bdr Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Char -> Builder
TextBuilder.char Char
q)
finish :: Builder -> Parsec Void Text Text
finish Builder
bdr = do
Token Text -> ParsecT Void Text Identity (Token Text)
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
Token s -> m (Token s)
MegaparsecChar.char Char
Token Text
q
return (Builder -> Text
TextBuilder.run Builder
bdr)
in Builder -> Parsec Void Text Text
collectChunks Builder
forall a. Monoid a => a
mempty
return Text
_tail
atEnd :: Parser a -> Parser a
atEnd :: Parser a -> Parser a
atEnd Parser a
p = Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser a -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser a
p Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser a -> Parser () -> Parser a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm. (Ord err, Stream strm) => HeadedParsec err strm ()
eof
preparableStmt :: Parser PreparableStmt
preparableStmt =
[Parser PreparableStmt] -> Parser PreparableStmt
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ SelectStmt -> PreparableStmt
SelectPreparableStmt (SelectStmt -> PreparableStmt)
-> HeadedParsec Void Text SelectStmt -> Parser PreparableStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectStmt
selectStmt,
InsertStmt -> PreparableStmt
InsertPreparableStmt (InsertStmt -> PreparableStmt)
-> HeadedParsec Void Text InsertStmt -> Parser PreparableStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text InsertStmt
insertStmt,
UpdateStmt -> PreparableStmt
UpdatePreparableStmt (UpdateStmt -> PreparableStmt)
-> HeadedParsec Void Text UpdateStmt -> Parser PreparableStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text UpdateStmt
updateStmt,
DeleteStmt -> PreparableStmt
DeletePreparableStmt (DeleteStmt -> PreparableStmt)
-> HeadedParsec Void Text DeleteStmt -> Parser PreparableStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text DeleteStmt
deleteStmt,
CallStmt -> PreparableStmt
CallPreparableStmt (CallStmt -> PreparableStmt)
-> HeadedParsec Void Text CallStmt -> Parser PreparableStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text CallStmt
callStmt
]
callStmt :: HeadedParsec Void Text CallStmt
callStmt = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"call"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
FuncApplication -> CallStmt
CallStmt (FuncApplication -> CallStmt)
-> HeadedParsec Void Text FuncApplication
-> HeadedParsec Void Text CallStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FuncApplication
funcApplication
insertStmt :: HeadedParsec Void Text InsertStmt
insertStmt = do
Maybe WithClause
a <- HeadedParsec Void Text WithClause
-> HeadedParsec Void Text (Maybe WithClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WithClause
withClause HeadedParsec Void Text WithClause
-> Parser () -> HeadedParsec Void Text WithClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"insert"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"into"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
InsertTarget
b <- HeadedParsec Void Text InsertTarget
insertTarget
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
InsertRest
c <- HeadedParsec Void Text InsertRest
insertRest
Maybe OnConflict
d <- HeadedParsec Void Text OnConflict
-> HeadedParsec Void Text (Maybe OnConflict)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text OnConflict
-> HeadedParsec Void Text OnConflict
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text OnConflict
onConflict)
Maybe ReturningClause
e <- HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text (Maybe ReturningClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text ReturningClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ReturningClause
returningClause)
return (Maybe WithClause
-> InsertTarget
-> InsertRest
-> Maybe OnConflict
-> Maybe ReturningClause
-> InsertStmt
InsertStmt Maybe WithClause
a InsertTarget
b InsertRest
c Maybe OnConflict
d Maybe ReturningClause
e)
insertTarget :: HeadedParsec Void Text InsertTarget
insertTarget = do
QualifiedName
a <- HeadedParsec Void Text QualifiedName
qualifiedName
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Ident
b <- HeadedParsec Void Text Ident
-> HeadedParsec Void Text (Maybe Ident)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Ident
colId)
return (QualifiedName -> Maybe Ident -> InsertTarget
InsertTarget QualifiedName
a Maybe Ident
b)
insertRest :: HeadedParsec Void Text InsertRest
insertRest =
[HeadedParsec Void Text InsertRest]
-> HeadedParsec Void Text InsertRest
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ InsertRest
DefaultValuesInsertRest InsertRest -> Parser Text -> HeadedParsec Void Text InsertRest
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"default" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"values"),
do
Maybe InsertColumnList
a <- HeadedParsec Void Text InsertColumnList
-> HeadedParsec Void Text (Maybe InsertColumnList)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text InsertColumnList
-> HeadedParsec Void Text InsertColumnList
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text InsertColumnList
insertColumnList HeadedParsec Void Text InsertColumnList
-> Parser () -> HeadedParsec Void Text InsertColumnList
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Maybe OverrideKind
b <- HeadedParsec Void Text OverrideKind
-> HeadedParsec Void Text (Maybe OverrideKind)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text OverrideKind
-> HeadedParsec Void Text (Maybe OverrideKind))
-> HeadedParsec Void Text OverrideKind
-> HeadedParsec Void Text (Maybe OverrideKind)
forall a b. (a -> b) -> a -> b
$ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"overriding"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
OverrideKind
b <- HeadedParsec Void Text OverrideKind
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s OverrideKind
overrideKind
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"value"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
return OverrideKind
b
SelectStmt
c <- HeadedParsec Void Text SelectStmt
selectStmt
return (Maybe InsertColumnList
-> Maybe OverrideKind -> SelectStmt -> InsertRest
SelectInsertRest Maybe InsertColumnList
a Maybe OverrideKind
b SelectStmt
c)
]
overrideKind :: HeadedParsec e s OverrideKind
overrideKind =
[HeadedParsec e s OverrideKind] -> HeadedParsec e s OverrideKind
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ OverrideKind
UserOverrideKind OverrideKind
-> HeadedParsec e s Text -> HeadedParsec e s OverrideKind
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"user",
OverrideKind
SystemOverrideKind OverrideKind
-> HeadedParsec e s Text -> HeadedParsec e s OverrideKind
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"system"
]
insertColumnList :: HeadedParsec Void Text InsertColumnList
insertColumnList = Parser ()
-> HeadedParsec Void Text InsertColumnItem
-> HeadedParsec Void Text InsertColumnList
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text InsertColumnItem
insertColumnItem
insertColumnItem :: HeadedParsec Void Text InsertColumnItem
insertColumnItem = do
Ident
a <- HeadedParsec Void Text Ident
colId
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Indirection
b <- HeadedParsec Void Text Indirection
-> HeadedParsec Void Text (Maybe Indirection)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection)
return (Ident -> Maybe Indirection -> InsertColumnItem
InsertColumnItem Ident
a Maybe Indirection
b)
onConflict :: HeadedParsec Void Text OnConflict
onConflict = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"on"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"conflict"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe ConfExpr
a <- HeadedParsec Void Text ConfExpr
-> HeadedParsec Void Text (Maybe ConfExpr)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text ConfExpr
confExpr HeadedParsec Void Text ConfExpr
-> Parser () -> HeadedParsec Void Text ConfExpr
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"do"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
OnConflictDo
b <- HeadedParsec Void Text OnConflictDo
onConflictDo
return (Maybe ConfExpr -> OnConflictDo -> OnConflict
OnConflict Maybe ConfExpr
a OnConflictDo
b)
confExpr :: HeadedParsec Void Text ConfExpr
confExpr =
[HeadedParsec Void Text ConfExpr]
-> HeadedParsec Void Text ConfExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ IndexParams -> Maybe WhereClause -> ConfExpr
WhereConfExpr (IndexParams -> Maybe WhereClause -> ConfExpr)
-> HeadedParsec Void Text IndexParams
-> HeadedParsec Void Text (Maybe WhereClause -> ConfExpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text IndexParams
-> HeadedParsec Void Text IndexParams
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text IndexParams
indexParams HeadedParsec Void Text (Maybe WhereClause -> ConfExpr)
-> HeadedParsec Void Text (Maybe WhereClause)
-> HeadedParsec Void Text ConfExpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
whereClause),
Ident -> ConfExpr
ConstraintConfExpr (Ident -> ConfExpr)
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text ConfExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"on" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"constraint" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Ident
name)
]
onConflictDo :: HeadedParsec Void Text OnConflictDo
onConflictDo =
[HeadedParsec Void Text OnConflictDo]
-> HeadedParsec Void Text OnConflictDo
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ OnConflictDo
NothingOnConflictDo OnConflictDo -> Parser Text -> HeadedParsec Void Text OnConflictDo
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"nothing",
do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"update"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"set"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
NonEmpty SetClause
a <- HeadedParsec Void Text (NonEmpty SetClause)
setClauseList
Maybe WhereClause
b <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
whereClause)
return (NonEmpty SetClause -> Maybe WhereClause -> OnConflictDo
UpdateOnConflictDo NonEmpty SetClause
a Maybe WhereClause
b)
]
returningClause :: HeadedParsec Void Text ReturningClause
returningClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"returning"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
HeadedParsec Void Text ReturningClause
targetList
updateStmt :: HeadedParsec Void Text UpdateStmt
updateStmt = do
Maybe WithClause
a <- HeadedParsec Void Text WithClause
-> HeadedParsec Void Text (Maybe WithClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WithClause
withClause HeadedParsec Void Text WithClause
-> Parser () -> HeadedParsec Void Text WithClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"update"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
RelationExprOptAlias
b <- [Text] -> HeadedParsec Void Text RelationExprOptAlias
relationExprOptAlias [Text
"set"]
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"set"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
NonEmpty SetClause
c <- HeadedParsec Void Text (NonEmpty SetClause)
setClauseList
Maybe FromClause
d <- HeadedParsec Void Text FromClause
-> HeadedParsec Void Text (Maybe FromClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FromClause
-> HeadedParsec Void Text FromClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FromClause
fromClause)
Maybe WhereOrCurrentClause
e <- HeadedParsec Void Text WhereOrCurrentClause
-> HeadedParsec Void Text (Maybe WhereOrCurrentClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereOrCurrentClause
-> HeadedParsec Void Text WhereOrCurrentClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereOrCurrentClause
whereOrCurrentClause)
Maybe ReturningClause
f <- HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text (Maybe ReturningClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text ReturningClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ReturningClause
returningClause)
return (Maybe WithClause
-> RelationExprOptAlias
-> NonEmpty SetClause
-> Maybe FromClause
-> Maybe WhereOrCurrentClause
-> Maybe ReturningClause
-> UpdateStmt
UpdateStmt Maybe WithClause
a RelationExprOptAlias
b NonEmpty SetClause
c Maybe FromClause
d Maybe WhereOrCurrentClause
e Maybe ReturningClause
f)
setClauseList :: HeadedParsec Void Text (NonEmpty SetClause)
setClauseList = Parser ()
-> HeadedParsec Void Text SetClause
-> HeadedParsec Void Text (NonEmpty SetClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text SetClause
setClause
setClause :: HeadedParsec Void Text SetClause
setClause =
[HeadedParsec Void Text SetClause]
-> HeadedParsec Void Text SetClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
SetTargetList
a <- Parser SetTargetList -> Parser SetTargetList
forall a. Parser a -> Parser a
inParens Parser SetTargetList
setTargetList
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'='
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
WhereClause
b <- HeadedParsec Void Text WhereClause
aExpr
return (SetTargetList -> WhereClause -> SetClause
TargetListSetClause SetTargetList
a WhereClause
b),
do
SetTarget
a <- HeadedParsec Void Text SetTarget
setTarget
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'='
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
WhereClause
b <- HeadedParsec Void Text WhereClause
aExpr
return (SetTarget -> WhereClause -> SetClause
TargetSetClause SetTarget
a WhereClause
b)
]
setTarget :: HeadedParsec Void Text SetTarget
setTarget = do
Ident
a <- HeadedParsec Void Text Ident
colId
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Indirection
b <- HeadedParsec Void Text Indirection
-> HeadedParsec Void Text (Maybe Indirection)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection)
return (Ident -> Maybe Indirection -> SetTarget
SetTarget Ident
a Maybe Indirection
b)
setTargetList :: Parser SetTargetList
setTargetList = Parser ()
-> HeadedParsec Void Text SetTarget -> Parser SetTargetList
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text SetTarget
setTarget
deleteStmt :: HeadedParsec Void Text DeleteStmt
deleteStmt = do
Maybe WithClause
a <- HeadedParsec Void Text WithClause
-> HeadedParsec Void Text (Maybe WithClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WithClause
withClause HeadedParsec Void Text WithClause
-> Parser () -> HeadedParsec Void Text WithClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"delete"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
RelationExprOptAlias
b <- [Text] -> HeadedParsec Void Text RelationExprOptAlias
relationExprOptAlias [Text
"using", Text
"where", Text
"returning"]
Maybe FromClause
c <- HeadedParsec Void Text FromClause
-> HeadedParsec Void Text (Maybe FromClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FromClause
-> HeadedParsec Void Text FromClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FromClause
usingClause)
Maybe WhereOrCurrentClause
d <- HeadedParsec Void Text WhereOrCurrentClause
-> HeadedParsec Void Text (Maybe WhereOrCurrentClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereOrCurrentClause
-> HeadedParsec Void Text WhereOrCurrentClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereOrCurrentClause
whereOrCurrentClause)
Maybe ReturningClause
e <- HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text (Maybe ReturningClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text ReturningClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ReturningClause
returningClause)
return (Maybe WithClause
-> RelationExprOptAlias
-> Maybe FromClause
-> Maybe WhereOrCurrentClause
-> Maybe ReturningClause
-> DeleteStmt
DeleteStmt Maybe WithClause
a RelationExprOptAlias
b Maybe FromClause
c Maybe WhereOrCurrentClause
d Maybe ReturningClause
e)
usingClause :: HeadedParsec Void Text FromClause
usingClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"using"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
HeadedParsec Void Text FromClause
fromList
selectStmt :: HeadedParsec Void Text SelectStmt
selectStmt = SelectNoParens -> SelectStmt
forall a b. a -> Either a b
Left (SelectNoParens -> SelectStmt)
-> HeadedParsec Void Text SelectNoParens
-> HeadedParsec Void Text SelectStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectNoParens
selectNoParens HeadedParsec Void Text SelectStmt
-> HeadedParsec Void Text SelectStmt
-> HeadedParsec Void Text SelectStmt
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SelectWithParens -> SelectStmt
forall a b. b -> Either a b
Right (SelectWithParens -> SelectStmt)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectStmt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectWithParens
selectWithParens
selectWithParens :: HeadedParsec Void Text SelectWithParens
selectWithParens = HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall a. Parser a -> Parser a
inParens (SelectWithParens -> SelectWithParens
WithParensSelectWithParens (SelectWithParens -> SelectWithParens)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectWithParens
selectWithParens HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SelectNoParens -> SelectWithParens
NoParensSelectWithParens (SelectNoParens -> SelectWithParens)
-> HeadedParsec Void Text SelectNoParens
-> HeadedParsec Void Text SelectWithParens
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectNoParens
selectNoParens)
selectNoParens :: HeadedParsec Void Text SelectNoParens
selectNoParens = HeadedParsec Void Text SelectNoParens
withSelectNoParens HeadedParsec Void Text SelectNoParens
-> HeadedParsec Void Text SelectNoParens
-> HeadedParsec Void Text SelectNoParens
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text SelectNoParens
simpleSelectNoParens
sharedSelectNoParens :: Maybe WithClause -> HeadedParsec Void Text SelectNoParens
sharedSelectNoParens Maybe WithClause
_with = do
SelectClause
_select <- HeadedParsec Void Text SelectClause
selectClause
Maybe SortClause
_sort <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
Maybe SelectLimit
_limit <- HeadedParsec Void Text SelectLimit
-> HeadedParsec Void Text (Maybe SelectLimit)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SelectLimit
-> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SelectLimit
selectLimit)
Maybe ForLockingClause
_forLocking <- HeadedParsec Void Text ForLockingClause
-> HeadedParsec Void Text (Maybe ForLockingClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text ForLockingClause
-> HeadedParsec Void Text ForLockingClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ForLockingClause
forLockingClause)
return (Maybe WithClause
-> SelectClause
-> Maybe SortClause
-> Maybe SelectLimit
-> Maybe ForLockingClause
-> SelectNoParens
SelectNoParens Maybe WithClause
_with SelectClause
_select Maybe SortClause
_sort Maybe SelectLimit
_limit Maybe ForLockingClause
_forLocking)
simpleSelectNoParens :: HeadedParsec Void Text SelectNoParens
simpleSelectNoParens = Maybe WithClause -> HeadedParsec Void Text SelectNoParens
sharedSelectNoParens Maybe WithClause
forall a. Maybe a
Nothing
withSelectNoParens :: HeadedParsec Void Text SelectNoParens
withSelectNoParens = do
WithClause
_with <- HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WithClause
withClause
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Maybe WithClause -> HeadedParsec Void Text SelectNoParens
sharedSelectNoParens (WithClause -> Maybe WithClause
forall a. a -> Maybe a
Just WithClause
_with)
selectClause :: HeadedParsec Void Text SelectClause
selectClause = HeadedParsec Void Text SelectClause
-> (SelectClause -> HeadedParsec Void Text SelectClause)
-> HeadedParsec Void Text SelectClause
forall (m :: * -> *) a.
(Monad m, Alternative m) =>
m a -> (a -> m a) -> m a
suffixRec HeadedParsec Void Text SelectClause
base SelectClause -> HeadedParsec Void Text SelectClause
suffix
where
base :: HeadedParsec Void Text SelectClause
base =
[HeadedParsec Void Text SelectClause]
-> HeadedParsec Void Text SelectClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ SelectWithParens -> SelectClause
forall a b. b -> Either a b
Right (SelectWithParens -> SelectClause)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectWithParens
selectWithParens,
SimpleSelect -> SelectClause
forall a b. a -> Either a b
Left (SimpleSelect -> SelectClause)
-> HeadedParsec Void Text SimpleSelect
-> HeadedParsec Void Text SelectClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SimpleSelect
baseSimpleSelect
]
suffix :: SelectClause -> HeadedParsec Void Text SelectClause
suffix SelectClause
a = SimpleSelect -> SelectClause
forall a b. a -> Either a b
Left (SimpleSelect -> SelectClause)
-> HeadedParsec Void Text SimpleSelect
-> HeadedParsec Void Text SelectClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> SelectClause -> HeadedParsec Void Text SimpleSelect
extensionSimpleSelect SelectClause
a
baseSimpleSelect :: HeadedParsec Void Text SimpleSelect
baseSimpleSelect =
[HeadedParsec Void Text SimpleSelect]
-> HeadedParsec Void Text SimpleSelect
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"select"
HeadedParsec Void Text Char -> Parser ()
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm ()
notFollowedBy (HeadedParsec Void Text Char -> Parser ())
-> HeadedParsec Void Text Char -> Parser ()
forall a b. (a -> b) -> a -> b
$ (Token Text -> Bool) -> HeadedParsec Void Text (Token Text)
forall err strm.
(Ord err, Stream strm) =>
(Token strm -> Bool) -> HeadedParsec err strm (Token strm)
satisfy ((Token Text -> Bool) -> HeadedParsec Void Text (Token Text))
-> (Token Text -> Bool) -> HeadedParsec Void Text (Token Text)
forall a b. (a -> b) -> a -> b
$ Char -> Bool
Token Text -> Bool
isAlphaNum
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Targeting
_targeting <- HeadedParsec Void Text Targeting
-> HeadedParsec Void Text (Maybe Targeting)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Targeting
targeting)
Maybe IntoClause
_intoClause <- HeadedParsec Void Text IntoClause
-> HeadedParsec Void Text (Maybe IntoClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"into" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text IntoClause
-> HeadedParsec Void Text IntoClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text IntoClause
optTempTableName)
Maybe FromClause
_fromClause <- HeadedParsec Void Text FromClause
-> HeadedParsec Void Text (Maybe FromClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FromClause
-> HeadedParsec Void Text FromClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FromClause
fromClause)
Maybe WhereClause
_whereClause <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
whereClause)
Maybe (NonEmpty GroupByItem)
_groupClause <- HeadedParsec Void Text (NonEmpty GroupByItem)
-> HeadedParsec Void Text (Maybe (NonEmpty GroupByItem))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"group by" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty GroupByItem)
-> HeadedParsec Void Text (NonEmpty GroupByItem)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
-> HeadedParsec Void Text GroupByItem
-> HeadedParsec Void Text (NonEmpty GroupByItem)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text GroupByItem
groupByItem)
Maybe WhereClause
_havingClause <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"having" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr)
Maybe (NonEmpty WindowDefinition)
_windowClause <- HeadedParsec Void Text (NonEmpty WindowDefinition)
-> HeadedParsec Void Text (Maybe (NonEmpty WindowDefinition))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"window" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty WindowDefinition)
-> HeadedParsec Void Text (NonEmpty WindowDefinition)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
-> HeadedParsec Void Text WindowDefinition
-> HeadedParsec Void Text (NonEmpty WindowDefinition)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WindowDefinition
windowDefinition)
return (Maybe Targeting
-> Maybe IntoClause
-> Maybe FromClause
-> Maybe WhereClause
-> Maybe (NonEmpty GroupByItem)
-> Maybe WhereClause
-> Maybe (NonEmpty WindowDefinition)
-> SimpleSelect
NormalSimpleSelect Maybe Targeting
_targeting Maybe IntoClause
_intoClause Maybe FromClause
_fromClause Maybe WhereClause
_whereClause Maybe (NonEmpty GroupByItem)
_groupClause Maybe WhereClause
_havingClause Maybe (NonEmpty WindowDefinition)
_windowClause),
do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"table"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
RelationExpr -> SimpleSelect
TableSimpleSelect (RelationExpr -> SimpleSelect)
-> HeadedParsec Void Text RelationExpr
-> HeadedParsec Void Text SimpleSelect
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text RelationExpr
relationExpr,
ValuesClause -> SimpleSelect
ValuesSimpleSelect (ValuesClause -> SimpleSelect)
-> HeadedParsec Void Text ValuesClause
-> HeadedParsec Void Text SimpleSelect
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ValuesClause
valuesClause
]
extensionSimpleSelect :: SelectClause -> HeadedParsec Void Text SimpleSelect
extensionSimpleSelect SelectClause
_headSelectClause = do
SelectBinOp
_op <- Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SelectBinOp
-> HeadedParsec Void Text SelectBinOp
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SelectBinOp
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s SelectBinOp
selectBinOp HeadedParsec Void Text SelectBinOp
-> Parser () -> HeadedParsec Void Text SelectBinOp
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Bool
_allOrDistinct <- Parser Bool -> HeadedParsec Void Text (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Bool
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Bool
allOrDistinct Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
SelectClause
_selectClause <- HeadedParsec Void Text SelectClause
selectClause
return (SelectBinOp
-> SelectClause -> Maybe Bool -> SelectClause -> SimpleSelect
BinSimpleSelect SelectBinOp
_op SelectClause
_headSelectClause Maybe Bool
_allOrDistinct SelectClause
_selectClause)
allOrDistinct :: HeadedParsec e s Bool
allOrDistinct = Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"all" HeadedParsec e s Text -> Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
False HeadedParsec e s Bool
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"distinct" HeadedParsec e s Text -> Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True
selectBinOp :: HeadedParsec e s SelectBinOp
selectBinOp =
[HeadedParsec e s SelectBinOp] -> HeadedParsec e s SelectBinOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"union" HeadedParsec e s Text
-> SelectBinOp -> HeadedParsec e s SelectBinOp
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SelectBinOp
UnionSelectBinOp,
Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"intersect" HeadedParsec e s Text
-> SelectBinOp -> HeadedParsec e s SelectBinOp
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SelectBinOp
IntersectSelectBinOp,
Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"except" HeadedParsec e s Text
-> SelectBinOp -> HeadedParsec e s SelectBinOp
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> SelectBinOp
ExceptSelectBinOp
]
valuesClause :: HeadedParsec Void Text ValuesClause
valuesClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"values"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text ValuesClause
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator (HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text ValuesClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text ValuesClause
forall a b. (a -> b) -> a -> b
$ do
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'('
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
NonEmpty WhereClause
_a <- Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
')'
return NonEmpty WhereClause
_a
withClause :: HeadedParsec Void Text WithClause
withClause = String
-> HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"with clause" (HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause)
-> HeadedParsec Void Text WithClause
-> HeadedParsec Void Text WithClause
forall a b. (a -> b) -> a -> b
$ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"with"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
_recursive <- Bool -> Parser Bool -> Parser Bool
forall (m :: * -> *) a. Alternative m => a -> m a -> m a
option Bool
False (Bool
True Bool -> Parser Text -> Parser Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"recursive" Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
NonEmpty CommonTableExpr
_cteList <- Parser ()
-> HeadedParsec Void Text CommonTableExpr
-> HeadedParsec Void Text (NonEmpty CommonTableExpr)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text CommonTableExpr
commonTableExpr
return (Bool -> NonEmpty CommonTableExpr -> WithClause
WithClause Bool
_recursive NonEmpty CommonTableExpr
_cteList)
commonTableExpr :: HeadedParsec Void Text CommonTableExpr
commonTableExpr = String
-> HeadedParsec Void Text CommonTableExpr
-> HeadedParsec Void Text CommonTableExpr
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"common table expression" (HeadedParsec Void Text CommonTableExpr
-> HeadedParsec Void Text CommonTableExpr)
-> HeadedParsec Void Text CommonTableExpr
-> HeadedParsec Void Text CommonTableExpr
forall a b. (a -> b) -> a -> b
$ do
Ident
_name <- HeadedParsec Void Text Ident
colId HeadedParsec Void Text Ident
-> Parser () -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space HeadedParsec Void Text Ident
-> Parser () -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe (NonEmpty Ident)
_nameList <- HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (Maybe (NonEmpty Ident))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (NonEmpty Ident)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text Ident
colId) HeadedParsec Void Text (NonEmpty Ident)
-> Parser () -> HeadedParsec Void Text (NonEmpty Ident)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Maybe Bool
_materialized <- Parser Bool -> HeadedParsec Void Text (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Bool
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s Bool
materialized Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
PreparableStmt
_stmt <- Parser PreparableStmt -> Parser PreparableStmt
forall a. Parser a -> Parser a
inParens Parser PreparableStmt
preparableStmt
return (Ident
-> Maybe (NonEmpty Ident)
-> Maybe Bool
-> PreparableStmt
-> CommonTableExpr
CommonTableExpr Ident
_name Maybe (NonEmpty Ident)
_nameList Maybe Bool
_materialized PreparableStmt
_stmt)
materialized :: HeadedParsec e s Bool
materialized =
Bool
True Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"materialized"
HeadedParsec e s Bool
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
False Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"not materialized"
targeting :: HeadedParsec Void Text Targeting
targeting = HeadedParsec Void Text Targeting
distinct HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text Targeting
allWithTargetList HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text Targeting
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Targeting
all HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
-> HeadedParsec Void Text Targeting
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text Targeting
normal
where
normal :: HeadedParsec Void Text Targeting
normal = ReturningClause -> Targeting
NormalTargeting (ReturningClause -> Targeting)
-> HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text Targeting
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ReturningClause
targetList
allWithTargetList :: HeadedParsec Void Text Targeting
allWithTargetList = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"all"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Maybe ReturningClause -> Targeting
AllTargeting (Maybe ReturningClause -> Targeting)
-> (ReturningClause -> Maybe ReturningClause)
-> ReturningClause
-> Targeting
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReturningClause -> Maybe ReturningClause
forall a. a -> Maybe a
Just (ReturningClause -> Targeting)
-> HeadedParsec Void Text ReturningClause
-> HeadedParsec Void Text Targeting
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ReturningClause
targetList
all :: HeadedParsec e s Targeting
all = Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"all" HeadedParsec e s Text -> Targeting -> HeadedParsec e s Targeting
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Maybe ReturningClause -> Targeting
AllTargeting Maybe ReturningClause
forall a. Maybe a
Nothing
distinct :: HeadedParsec Void Text Targeting
distinct = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"distinct"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe (NonEmpty WhereClause)
_optOn <- HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text (NonEmpty WhereClause)
onExpressionsClause HeadedParsec Void Text (NonEmpty WhereClause)
-> Parser () -> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
ReturningClause
_targetList <- HeadedParsec Void Text ReturningClause
targetList
return (Maybe (NonEmpty WhereClause) -> ReturningClause -> Targeting
DistinctTargeting Maybe (NonEmpty WhereClause)
_optOn ReturningClause
_targetList)
targetList :: HeadedParsec Void Text ReturningClause
targetList = Parser ()
-> HeadedParsec Void Text TargetEl
-> HeadedParsec Void Text ReturningClause
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text TargetEl
targetEl
targetEl :: HeadedParsec Void Text TargetEl
targetEl =
String
-> HeadedParsec Void Text TargetEl
-> HeadedParsec Void Text TargetEl
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"target" (HeadedParsec Void Text TargetEl
-> HeadedParsec Void Text TargetEl)
-> HeadedParsec Void Text TargetEl
-> HeadedParsec Void Text TargetEl
forall a b. (a -> b) -> a -> b
$
[HeadedParsec Void Text TargetEl]
-> HeadedParsec Void Text TargetEl
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
WhereClause
_expr <- HeadedParsec Void Text WhereClause
aExpr
[HeadedParsec Void Text TargetEl]
-> HeadedParsec Void Text TargetEl
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
[HeadedParsec Void Text TargetEl]
-> HeadedParsec Void Text TargetEl
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ WhereClause -> Ident -> TargetEl
AliasedExprTargetEl WhereClause
_expr (Ident -> TargetEl)
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text TargetEl
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Ident
colLabel),
WhereClause -> Ident -> TargetEl
ImplicitlyAliasedExprTargetEl WhereClause
_expr (Ident -> TargetEl)
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text TargetEl
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
ident
],
TargetEl -> HeadedParsec Void Text TargetEl
forall (f :: * -> *) a. Applicative f => a -> f a
pure (WhereClause -> TargetEl
ExprTargetEl WhereClause
_expr)
],
TargetEl
AsteriskTargetEl TargetEl
-> HeadedParsec Void Text Char -> HeadedParsec Void Text TargetEl
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'*'
]
onExpressionsClause :: HeadedParsec Void Text (NonEmpty WhereClause)
onExpressionsClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"on"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr)
optTempTableName :: HeadedParsec Void Text IntoClause
optTempTableName =
[HeadedParsec Void Text IntoClause]
-> HeadedParsec Void Text IntoClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Bool -> QualifiedName -> IntoClause
a <-
[HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)]
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Bool -> QualifiedName -> IntoClause
TemporaryOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"temporary" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1,
Bool -> QualifiedName -> IntoClause
TempOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"temp" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1,
Bool -> QualifiedName -> IntoClause
LocalTemporaryOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"local temporary" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1,
Bool -> QualifiedName -> IntoClause
LocalTempOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"local temp" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1,
Bool -> QualifiedName -> IntoClause
GlobalTemporaryOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"global temporary" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1,
Bool -> QualifiedName -> IntoClause
GlobalTempOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"global temp" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1,
Bool -> QualifiedName -> IntoClause
UnloggedOptTempTableName (Bool -> QualifiedName -> IntoClause)
-> Parser Text
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"unlogged" HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
-> Parser ()
-> HeadedParsec Void Text (Bool -> QualifiedName -> IntoClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
]
Bool
b <- Bool -> Parser Bool -> Parser Bool
forall (m :: * -> *) a. Alternative m => a -> m a -> m a
option Bool
False (Bool
True Bool -> Parser Text -> Parser Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"table" Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
QualifiedName
c <- HeadedParsec Void Text QualifiedName
qualifiedName
return (Bool -> QualifiedName -> IntoClause
a Bool
b QualifiedName
c),
do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"table"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
QualifiedName -> IntoClause
TableOptTempTableName (QualifiedName -> IntoClause)
-> HeadedParsec Void Text QualifiedName
-> HeadedParsec Void Text IntoClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text QualifiedName
qualifiedName,
QualifiedName -> IntoClause
QualifedOptTempTableName (QualifiedName -> IntoClause)
-> HeadedParsec Void Text QualifiedName
-> HeadedParsec Void Text IntoClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text QualifiedName
qualifiedName
]
groupByItem :: HeadedParsec Void Text GroupByItem
groupByItem =
[HeadedParsec Void Text GroupByItem]
-> HeadedParsec Void Text GroupByItem
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ GroupByItem
EmptyGroupingSetGroupByItem GroupByItem
-> HeadedParsec Void Text Char
-> HeadedParsec Void Text GroupByItem
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'(' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
')'),
NonEmpty WhereClause -> GroupByItem
RollupGroupByItem (NonEmpty WhereClause -> GroupByItem)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text GroupByItem
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"rollup" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr)),
NonEmpty WhereClause -> GroupByItem
CubeGroupByItem (NonEmpty WhereClause -> GroupByItem)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text GroupByItem
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"cube" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr)),
NonEmpty GroupByItem -> GroupByItem
GroupingSetsGroupByItem (NonEmpty GroupByItem -> GroupByItem)
-> HeadedParsec Void Text (NonEmpty GroupByItem)
-> HeadedParsec Void Text GroupByItem
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"grouping sets" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty GroupByItem)
-> HeadedParsec Void Text (NonEmpty GroupByItem)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty GroupByItem)
-> HeadedParsec Void Text (NonEmpty GroupByItem)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text GroupByItem
-> HeadedParsec Void Text (NonEmpty GroupByItem)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text GroupByItem
groupByItem)),
WhereClause -> GroupByItem
ExprGroupByItem (WhereClause -> GroupByItem)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text GroupByItem
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr
]
windowDefinition :: HeadedParsec Void Text WindowDefinition
windowDefinition = Ident -> WindowSpecification -> WindowDefinition
WindowDefinition (Ident -> WindowSpecification -> WindowDefinition)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (WindowSpecification -> WindowDefinition)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadedParsec Void Text Ident
colId HeadedParsec Void Text Ident
-> Parser () -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec Void Text Ident
-> Parser Text -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" HeadedParsec Void Text Ident
-> Parser () -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec Void Text Ident
-> Parser () -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead) HeadedParsec Void Text (WindowSpecification -> WindowDefinition)
-> HeadedParsec Void Text WindowSpecification
-> HeadedParsec Void Text WindowDefinition
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text WindowSpecification
windowSpecification
windowSpecification :: HeadedParsec Void Text WindowSpecification
windowSpecification =
HeadedParsec Void Text WindowSpecification
-> HeadedParsec Void Text WindowSpecification
forall a. Parser a -> Parser a
inParens (HeadedParsec Void Text WindowSpecification
-> HeadedParsec Void Text WindowSpecification)
-> HeadedParsec Void Text WindowSpecification
-> HeadedParsec Void Text WindowSpecification
forall a b. (a -> b) -> a -> b
$
[HeadedParsec Void Text WindowSpecification]
-> HeadedParsec Void Text WindowSpecification
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
FrameClause
a <- HeadedParsec Void Text FrameClause
frameClause
return (Maybe Ident
-> Maybe (NonEmpty WhereClause)
-> Maybe SortClause
-> Maybe FrameClause
-> WindowSpecification
WindowSpecification Maybe Ident
forall a. Maybe a
Nothing Maybe (NonEmpty WhereClause)
forall a. Maybe a
Nothing Maybe SortClause
forall a. Maybe a
Nothing (FrameClause -> Maybe FrameClause
forall a. a -> Maybe a
Just FrameClause
a)),
do
SortClause
a <- HeadedParsec Void Text SortClause
sortClause
Maybe FrameClause
b <- HeadedParsec Void Text FrameClause
-> HeadedParsec Void Text (Maybe FrameClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FrameClause
-> HeadedParsec Void Text FrameClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FrameClause
frameClause)
return (Maybe Ident
-> Maybe (NonEmpty WhereClause)
-> Maybe SortClause
-> Maybe FrameClause
-> WindowSpecification
WindowSpecification Maybe Ident
forall a. Maybe a
Nothing Maybe (NonEmpty WhereClause)
forall a. Maybe a
Nothing (SortClause -> Maybe SortClause
forall a. a -> Maybe a
Just SortClause
a) Maybe FrameClause
b),
do
NonEmpty WhereClause
a <- HeadedParsec Void Text (NonEmpty WhereClause)
partitionByClause
Maybe SortClause
b <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
Maybe FrameClause
c <- HeadedParsec Void Text FrameClause
-> HeadedParsec Void Text (Maybe FrameClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FrameClause
-> HeadedParsec Void Text FrameClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FrameClause
frameClause)
return (Maybe Ident
-> Maybe (NonEmpty WhereClause)
-> Maybe SortClause
-> Maybe FrameClause
-> WindowSpecification
WindowSpecification Maybe Ident
forall a. Maybe a
Nothing (NonEmpty WhereClause -> Maybe (NonEmpty WhereClause)
forall a. a -> Maybe a
Just NonEmpty WhereClause
a) Maybe SortClause
b Maybe FrameClause
c),
do
Ident
a <- HeadedParsec Void Text Ident
colId
Maybe (NonEmpty WhereClause)
b <- HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
partitionByClause)
Maybe SortClause
c <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
Maybe FrameClause
d <- HeadedParsec Void Text FrameClause
-> HeadedParsec Void Text (Maybe FrameClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FrameClause
-> HeadedParsec Void Text FrameClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FrameClause
frameClause)
return (Maybe Ident
-> Maybe (NonEmpty WhereClause)
-> Maybe SortClause
-> Maybe FrameClause
-> WindowSpecification
WindowSpecification (Ident -> Maybe Ident
forall a. a -> Maybe a
Just Ident
a) Maybe (NonEmpty WhereClause)
b Maybe SortClause
c Maybe FrameClause
d),
WindowSpecification -> HeadedParsec Void Text WindowSpecification
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Ident
-> Maybe (NonEmpty WhereClause)
-> Maybe SortClause
-> Maybe FrameClause
-> WindowSpecification
WindowSpecification Maybe Ident
forall a. Maybe a
Nothing Maybe (NonEmpty WhereClause)
forall a. Maybe a
Nothing Maybe SortClause
forall a. Maybe a
Nothing Maybe FrameClause
forall a. Maybe a
Nothing)
]
partitionByClause :: HeadedParsec Void Text (NonEmpty WhereClause)
partitionByClause = Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"partition by" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr
frameClause :: HeadedParsec Void Text FrameClause
frameClause = do
FrameClauseMode
a <- HeadedParsec Void Text FrameClauseMode
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s FrameClauseMode
frameClauseMode HeadedParsec Void Text FrameClauseMode
-> Parser () -> HeadedParsec Void Text FrameClauseMode
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec Void Text FrameClauseMode
-> Parser () -> HeadedParsec Void Text FrameClauseMode
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
FrameExtent
b <- HeadedParsec Void Text FrameExtent
frameExtent
Maybe WindowExclusionClause
c <- HeadedParsec Void Text WindowExclusionClause
-> HeadedParsec Void Text (Maybe WindowExclusionClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WindowExclusionClause
-> HeadedParsec Void Text WindowExclusionClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WindowExclusionClause
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s WindowExclusionClause
windowExclusionClause)
return (FrameClauseMode
-> FrameExtent -> Maybe WindowExclusionClause -> FrameClause
FrameClause FrameClauseMode
a FrameExtent
b Maybe WindowExclusionClause
c)
frameClauseMode :: HeadedParsec e s FrameClauseMode
frameClauseMode =
[HeadedParsec e s FrameClauseMode]
-> HeadedParsec e s FrameClauseMode
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ FrameClauseMode
RangeFrameClauseMode FrameClauseMode
-> HeadedParsec e s Text -> HeadedParsec e s FrameClauseMode
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"range",
FrameClauseMode
RowsFrameClauseMode FrameClauseMode
-> HeadedParsec e s Text -> HeadedParsec e s FrameClauseMode
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"rows",
FrameClauseMode
GroupsFrameClauseMode FrameClauseMode
-> HeadedParsec e s Text -> HeadedParsec e s FrameClauseMode
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"groups"
]
frameExtent :: HeadedParsec Void Text FrameExtent
frameExtent =
FrameBound -> FrameBound -> FrameExtent
BetweenFrameExtent (FrameBound -> FrameBound -> FrameExtent)
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text (FrameBound -> FrameExtent)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"between" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FrameBound
frameBound HeadedParsec Void Text FrameBound
-> Parser () -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec Void Text FrameBound
-> Parser Text -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"and" HeadedParsec Void Text FrameBound
-> Parser () -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1) HeadedParsec Void Text (FrameBound -> FrameExtent)
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameExtent
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text FrameBound
frameBound
HeadedParsec Void Text FrameExtent
-> HeadedParsec Void Text FrameExtent
-> HeadedParsec Void Text FrameExtent
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> FrameBound -> FrameExtent
SingularFrameExtent (FrameBound -> FrameExtent)
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameExtent
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FrameBound
frameBound
frameBound :: HeadedParsec Void Text FrameBound
frameBound =
FrameBound
UnboundedPrecedingFrameBound FrameBound -> Parser Text -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"unbounded preceding"
HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> FrameBound
UnboundedFollowingFrameBound FrameBound -> Parser Text -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"unbounded following"
HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> FrameBound
CurrentRowFrameBound FrameBound -> Parser Text -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"current row"
HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> do
WhereClause
a <- HeadedParsec Void Text WhereClause
aExpr
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
WhereClause -> FrameBound
PrecedingFrameBound WhereClause
a FrameBound -> Parser Text -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"preceding" HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
-> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WhereClause -> FrameBound
FollowingFrameBound WhereClause
a FrameBound -> Parser Text -> HeadedParsec Void Text FrameBound
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"following"
windowExclusionClause :: HeadedParsec e s WindowExclusionClause
windowExclusionClause =
WindowExclusionClause
CurrentRowWindowExclusionClause WindowExclusionClause
-> HeadedParsec e s Text -> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"exclude current row"
HeadedParsec e s WindowExclusionClause
-> HeadedParsec e s WindowExclusionClause
-> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WindowExclusionClause
GroupWindowExclusionClause WindowExclusionClause
-> HeadedParsec e s Text -> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"exclude group"
HeadedParsec e s WindowExclusionClause
-> HeadedParsec e s WindowExclusionClause
-> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WindowExclusionClause
TiesWindowExclusionClause WindowExclusionClause
-> HeadedParsec e s Text -> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"exclude ties"
HeadedParsec e s WindowExclusionClause
-> HeadedParsec e s WindowExclusionClause
-> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WindowExclusionClause
NoOthersWindowExclusionClause WindowExclusionClause
-> HeadedParsec e s Text -> HeadedParsec e s WindowExclusionClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"exclude no others"
fromList :: HeadedParsec Void Text FromClause
fromList = Parser ()
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text FromClause
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text TableRef
tableRef
fromClause :: HeadedParsec Void Text FromClause
fromClause = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FromClause
-> HeadedParsec Void Text FromClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FromClause
fromList
tableRef :: HeadedParsec Void Text TableRef
tableRef =
String
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"table reference" (HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef)
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall a b. (a -> b) -> a -> b
$
do
TableRef
_tr <- HeadedParsec Void Text TableRef
nonTrailingTableRef
TableRef -> HeadedParsec Void Text TableRef
recur TableRef
_tr
where
recur :: TableRef -> HeadedParsec Void Text TableRef
recur TableRef
_tr =
[HeadedParsec Void Text TableRef]
-> HeadedParsec Void Text TableRef
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
TableRef
_tr2 <- HeadedParsec Void Text TableRef -> HeadedParsec Void Text TableRef
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> TableRef -> HeadedParsec Void Text TableRef
trailingTableRef TableRef
_tr)
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
TableRef -> HeadedParsec Void Text TableRef
recur TableRef
_tr2,
TableRef -> HeadedParsec Void Text TableRef
forall (f :: * -> *) a. Applicative f => a -> f a
pure TableRef
_tr
]
nonTrailingTableRef :: HeadedParsec Void Text TableRef
nonTrailingTableRef =
[HeadedParsec Void Text TableRef]
-> HeadedParsec Void Text TableRef
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ HeadedParsec Void Text TableRef
lateralTableRef
HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text TableRef -> HeadedParsec Void Text TableRef
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text TableRef
nonLateralTableRef
HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text TableRef
relationExprTableRef
HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text TableRef
joinedTableWithAliasTableRef
HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text TableRef
inParensJoinedTableTableRef
]
where
relationExprTableRef :: HeadedParsec Void Text TableRef
relationExprTableRef = do
RelationExpr
_relationExpr <- HeadedParsec Void Text RelationExpr
relationExpr
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe AliasClause
_optAliasClause <- HeadedParsec Void Text AliasClause
-> HeadedParsec Void Text (Maybe AliasClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AliasClause
-> HeadedParsec Void Text AliasClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AliasClause
aliasClause)
Maybe TablesampleClause
_optTablesampleClause <- HeadedParsec Void Text TablesampleClause
-> HeadedParsec Void Text (Maybe TablesampleClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text TablesampleClause
-> HeadedParsec Void Text TablesampleClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text TablesampleClause
tablesampleClause)
return (RelationExpr
-> Maybe AliasClause -> Maybe TablesampleClause -> TableRef
RelationExprTableRef RelationExpr
_relationExpr Maybe AliasClause
_optAliasClause Maybe TablesampleClause
_optTablesampleClause)
lateralTableRef :: HeadedParsec Void Text TableRef
lateralTableRef = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"lateral"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool -> HeadedParsec Void Text TableRef
lateralableTableRef Bool
True
nonLateralTableRef :: HeadedParsec Void Text TableRef
nonLateralTableRef = Bool -> HeadedParsec Void Text TableRef
lateralableTableRef Bool
False
lateralableTableRef :: Bool -> HeadedParsec Void Text TableRef
lateralableTableRef Bool
_lateral =
[HeadedParsec Void Text TableRef]
-> HeadedParsec Void Text TableRef
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
FuncTable
a <- HeadedParsec Void Text FuncTable
funcTable
Maybe FuncAliasClause
b <- HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text (Maybe FuncAliasClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text FuncAliasClause
funcAliasClause)
return (Bool -> FuncTable -> Maybe FuncAliasClause -> TableRef
FuncTableRef Bool
_lateral FuncTable
a Maybe FuncAliasClause
b),
do
SelectWithParens
_select <- HeadedParsec Void Text SelectWithParens
selectWithParens
Maybe AliasClause
_optAliasClause <- HeadedParsec Void Text AliasClause
-> HeadedParsec Void Text (Maybe AliasClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text AliasClause
-> HeadedParsec Void Text (Maybe AliasClause))
-> HeadedParsec Void Text AliasClause
-> HeadedParsec Void Text (Maybe AliasClause)
forall a b. (a -> b) -> a -> b
$ Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AliasClause
-> HeadedParsec Void Text AliasClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AliasClause
aliasClause
return (Bool -> SelectWithParens -> Maybe AliasClause -> TableRef
SelectTableRef Bool
_lateral SelectWithParens
_select Maybe AliasClause
_optAliasClause)
]
inParensJoinedTableTableRef :: HeadedParsec Void Text TableRef
inParensJoinedTableTableRef = JoinedTable -> Maybe AliasClause -> TableRef
JoinTableRef (JoinedTable -> Maybe AliasClause -> TableRef)
-> HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text (Maybe AliasClause -> TableRef)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text JoinedTable
inParensJoinedTable HeadedParsec Void Text (Maybe AliasClause -> TableRef)
-> HeadedParsec Void Text (Maybe AliasClause)
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe AliasClause -> HeadedParsec Void Text (Maybe AliasClause)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe AliasClause
forall a. Maybe a
Nothing
joinedTableWithAliasTableRef :: HeadedParsec Void Text TableRef
joinedTableWithAliasTableRef = do
JoinedTable
_joinedTable <- HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text JoinedTable
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead (HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text JoinedTable
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text JoinedTable
joinedTable)
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
AliasClause
_alias <- HeadedParsec Void Text AliasClause
aliasClause
return (JoinedTable -> Maybe AliasClause -> TableRef
JoinTableRef JoinedTable
_joinedTable (AliasClause -> Maybe AliasClause
forall a. a -> Maybe a
Just AliasClause
_alias))
trailingTableRef :: TableRef -> HeadedParsec Void Text TableRef
trailingTableRef TableRef
_tableRef =
JoinedTable -> Maybe AliasClause -> TableRef
JoinTableRef (JoinedTable -> Maybe AliasClause -> TableRef)
-> HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text (Maybe AliasClause -> TableRef)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TableRef -> HeadedParsec Void Text JoinedTable
trailingJoinedTable TableRef
_tableRef HeadedParsec Void Text (Maybe AliasClause -> TableRef)
-> HeadedParsec Void Text (Maybe AliasClause)
-> HeadedParsec Void Text TableRef
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe AliasClause -> HeadedParsec Void Text (Maybe AliasClause)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe AliasClause
forall a. Maybe a
Nothing
relationExpr :: HeadedParsec Void Text RelationExpr
relationExpr =
String
-> HeadedParsec Void Text RelationExpr
-> HeadedParsec Void Text RelationExpr
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"relation expression" (HeadedParsec Void Text RelationExpr
-> HeadedParsec Void Text RelationExpr)
-> HeadedParsec Void Text RelationExpr
-> HeadedParsec Void Text RelationExpr
forall a b. (a -> b) -> a -> b
$
[HeadedParsec Void Text RelationExpr]
-> HeadedParsec Void Text RelationExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"only"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
QualifiedName
_name <- HeadedParsec Void Text QualifiedName
qualifiedName
return (QualifiedName -> Bool -> RelationExpr
OnlyRelationExpr QualifiedName
_name Bool
False),
Parser Text
-> HeadedParsec Void Text QualifiedName
-> HeadedParsec Void Text QualifiedName
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"only") HeadedParsec Void Text QualifiedName
qualifiedName HeadedParsec Void Text QualifiedName
-> (QualifiedName -> RelationExpr)
-> HeadedParsec Void Text RelationExpr
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \QualifiedName
a -> QualifiedName -> Bool -> RelationExpr
OnlyRelationExpr QualifiedName
a Bool
True,
do
QualifiedName
_name <- HeadedParsec Void Text QualifiedName
qualifiedName
Bool
_asterisk <-
[Parser Bool] -> Parser Bool
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Bool
True Bool -> HeadedParsec Void Text Char -> Parser Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'*'),
Bool -> Parser Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
]
return (QualifiedName -> Bool -> RelationExpr
SimpleRelationExpr QualifiedName
_name Bool
_asterisk)
]
relationExprOptAlias :: [Text] -> HeadedParsec Void Text RelationExprOptAlias
relationExprOptAlias [Text]
reservedKeywords = do
RelationExpr
a <- HeadedParsec Void Text RelationExpr
relationExpr
Maybe (Bool, Ident)
b <- HeadedParsec Void Text (Bool, Ident)
-> HeadedParsec Void Text (Maybe (Bool, Ident))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text (Bool, Ident)
-> HeadedParsec Void Text (Maybe (Bool, Ident)))
-> HeadedParsec Void Text (Bool, Ident)
-> HeadedParsec Void Text (Maybe (Bool, Ident))
forall a b. (a -> b) -> a -> b
$ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Bool
b <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Ident
c <- [Text] -> HeadedParsec Void Text Ident
forall (t :: * -> *).
Foldable t =>
t Text -> HeadedParsec Void Text Ident
filteredColId [Text]
reservedKeywords
return (Bool
b, Ident
c)
return (RelationExpr -> Maybe (Bool, Ident) -> RelationExprOptAlias
RelationExprOptAlias RelationExpr
a Maybe (Bool, Ident)
b)
tablesampleClause :: HeadedParsec Void Text TablesampleClause
tablesampleClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"tablesample"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
FuncName
a <- Parser FuncName
funcName
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
NonEmpty WhereClause
b <- HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text (NonEmpty WhereClause)
exprList
Maybe WhereClause
c <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
repeatableClause)
return (FuncName
-> NonEmpty WhereClause -> Maybe WhereClause -> TablesampleClause
TablesampleClause FuncName
a NonEmpty WhereClause
b Maybe WhereClause
c)
repeatableClause :: HeadedParsec Void Text WhereClause
repeatableClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"repeatable"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall a. Parser a -> Parser a
inParens (Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr)
funcTable :: HeadedParsec Void Text FuncTable
funcTable =
[HeadedParsec Void Text FuncTable]
-> HeadedParsec Void Text FuncTable
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"rows"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
NonEmpty RowsfromItem
a <- Parser (NonEmpty RowsfromItem) -> Parser (NonEmpty RowsfromItem)
forall a. Parser a -> Parser a
inParens (Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> Parser (NonEmpty RowsfromItem) -> Parser (NonEmpty RowsfromItem)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (NonEmpty RowsfromItem)
rowsfromList)
Bool
b <- Parser Text -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Text
optOrdinality)
return (NonEmpty RowsfromItem -> Bool -> FuncTable
RowsFromFuncTable NonEmpty RowsfromItem
a Bool
b),
do
FuncExprWindowless
a <- HeadedParsec Void Text FuncExprWindowless
funcExprWindowless
Bool
b <- Parser Text -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Text
optOrdinality)
return (FuncExprWindowless -> Bool -> FuncTable
FuncExprFuncTable FuncExprWindowless
a Bool
b)
]
rowsfromItem :: HeadedParsec Void Text RowsfromItem
rowsfromItem = do
FuncExprWindowless
a <- HeadedParsec Void Text FuncExprWindowless
funcExprWindowless
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe ColDefList
b <- HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text (Maybe ColDefList)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text ColDefList
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ColDefList
colDefList)
return (FuncExprWindowless -> Maybe ColDefList -> RowsfromItem
RowsfromItem FuncExprWindowless
a Maybe ColDefList
b)
rowsfromList :: Parser (NonEmpty RowsfromItem)
rowsfromList = Parser ()
-> HeadedParsec Void Text RowsfromItem
-> Parser (NonEmpty RowsfromItem)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text RowsfromItem
rowsfromItem
colDefList :: HeadedParsec Void Text ColDefList
colDefList = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text ColDefList
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text ColDefList
forall a. Parser a -> Parser a
inParens (Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text ColDefList
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text ColDefList
tableFuncElementList)
optOrdinality :: HeadedParsec e s Text
optOrdinality = Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"with" HeadedParsec e s Text -> HeadedParsec e s () -> HeadedParsec e s ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec e s ()
-> HeadedParsec e s Text -> HeadedParsec e s Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"ordinality"
tableFuncElementList :: HeadedParsec Void Text ColDefList
tableFuncElementList = Parser ()
-> HeadedParsec Void Text TableFuncElement
-> HeadedParsec Void Text ColDefList
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text TableFuncElement
tableFuncElement
tableFuncElement :: HeadedParsec Void Text TableFuncElement
tableFuncElement = do
Ident
a <- HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Ident
colId
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Typename
b <- HeadedParsec Void Text Typename
typename
Maybe AnyName
c <- HeadedParsec Void Text AnyName
-> HeadedParsec Void Text (Maybe AnyName)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
collateClause)
return (Ident -> Typename -> Maybe AnyName -> TableFuncElement
TableFuncElement Ident
a Typename
b Maybe AnyName
c)
collateClause :: HeadedParsec Void Text AnyName
collateClause = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"collate" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
anyName
funcAliasClause :: HeadedParsec Void Text FuncAliasClause
funcAliasClause =
[HeadedParsec Void Text FuncAliasClause]
-> HeadedParsec Void Text FuncAliasClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as"
[HeadedParsec Void Text FuncAliasClause]
-> HeadedParsec Void Text FuncAliasClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall a. Parser a -> Parser a
inParens (HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause)
-> HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall a b. (a -> b) -> a -> b
$ do
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
ColDefList -> FuncAliasClause
AsFuncAliasClause (ColDefList -> FuncAliasClause)
-> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ColDefList
tableFuncElementList,
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Ident
a <- HeadedParsec Void Text Ident
colId
[HeadedParsec Void Text FuncAliasClause]
-> HeadedParsec Void Text FuncAliasClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall a. Parser a -> Parser a
inParens (HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause)
-> HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall a b. (a -> b) -> a -> b
$ do
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
[HeadedParsec Void Text FuncAliasClause]
-> HeadedParsec Void Text FuncAliasClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Ident -> ColDefList -> FuncAliasClause
AsColIdFuncAliasClause Ident
a (ColDefList -> FuncAliasClause)
-> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text ColDefList
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text ColDefList
tableFuncElementList,
AliasClause -> FuncAliasClause
AliasFuncAliasClause (AliasClause -> FuncAliasClause)
-> (Maybe (NonEmpty Ident) -> AliasClause)
-> Maybe (NonEmpty Ident)
-> FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Ident -> Maybe (NonEmpty Ident) -> AliasClause
AliasClause Bool
True Ident
a (Maybe (NonEmpty Ident) -> FuncAliasClause)
-> (NonEmpty Ident -> Maybe (NonEmpty Ident))
-> NonEmpty Ident
-> FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty Ident -> Maybe (NonEmpty Ident)
forall a. a -> Maybe a
Just (NonEmpty Ident -> FuncAliasClause)
-> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty Ident)
nameList
],
FuncAliasClause -> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AliasClause -> FuncAliasClause
AliasFuncAliasClause (Bool -> Ident -> Maybe (NonEmpty Ident) -> AliasClause
AliasClause Bool
True Ident
a Maybe (NonEmpty Ident)
forall a. Maybe a
Nothing))
]
],
do
Ident
a <- HeadedParsec Void Text Ident
colId
[HeadedParsec Void Text FuncAliasClause]
-> HeadedParsec Void Text FuncAliasClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall a. Parser a -> Parser a
inParens (HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause)
-> HeadedParsec Void Text FuncAliasClause
-> HeadedParsec Void Text FuncAliasClause
forall a b. (a -> b) -> a -> b
$ do
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
[HeadedParsec Void Text FuncAliasClause]
-> HeadedParsec Void Text FuncAliasClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Ident -> ColDefList -> FuncAliasClause
ColIdFuncAliasClause Ident
a (ColDefList -> FuncAliasClause)
-> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ColDefList
-> HeadedParsec Void Text ColDefList
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text ColDefList
tableFuncElementList,
AliasClause -> FuncAliasClause
AliasFuncAliasClause (AliasClause -> FuncAliasClause)
-> (Maybe (NonEmpty Ident) -> AliasClause)
-> Maybe (NonEmpty Ident)
-> FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> Ident -> Maybe (NonEmpty Ident) -> AliasClause
AliasClause Bool
False Ident
a (Maybe (NonEmpty Ident) -> FuncAliasClause)
-> (NonEmpty Ident -> Maybe (NonEmpty Ident))
-> NonEmpty Ident
-> FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty Ident -> Maybe (NonEmpty Ident)
forall a. a -> Maybe a
Just (NonEmpty Ident -> FuncAliasClause)
-> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty Ident)
nameList
],
FuncAliasClause -> HeadedParsec Void Text FuncAliasClause
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AliasClause -> FuncAliasClause
AliasFuncAliasClause (Bool -> Ident -> Maybe (NonEmpty Ident) -> AliasClause
AliasClause Bool
False Ident
a Maybe (NonEmpty Ident)
forall a. Maybe a
Nothing))
]
]
joinedTable :: HeadedParsec Void Text JoinedTable
joinedTable =
HeadedParsec Void Text JoinedTable
head HeadedParsec Void Text JoinedTable
-> (JoinedTable -> HeadedParsec Void Text JoinedTable)
-> HeadedParsec Void Text JoinedTable
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JoinedTable -> HeadedParsec Void Text JoinedTable
tail
where
head :: HeadedParsec Void Text JoinedTable
head =
[HeadedParsec Void Text JoinedTable]
-> HeadedParsec Void Text JoinedTable
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
TableRef
_tr <- HeadedParsec Void Text TableRef -> HeadedParsec Void Text TableRef
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text TableRef
nonTrailingTableRef
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
TableRef -> HeadedParsec Void Text JoinedTable
trailingJoinedTable TableRef
_tr,
HeadedParsec Void Text JoinedTable
inParensJoinedTable
]
tail :: JoinedTable -> HeadedParsec Void Text JoinedTable
tail JoinedTable
_jt =
[HeadedParsec Void Text JoinedTable]
-> HeadedParsec Void Text JoinedTable
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
JoinedTable
_jt2 <- HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text JoinedTable
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text JoinedTable
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> TableRef -> HeadedParsec Void Text JoinedTable
trailingJoinedTable (JoinedTable -> Maybe AliasClause -> TableRef
JoinTableRef JoinedTable
_jt Maybe AliasClause
forall a. Maybe a
Nothing))
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
JoinedTable -> HeadedParsec Void Text JoinedTable
tail JoinedTable
_jt2,
JoinedTable -> HeadedParsec Void Text JoinedTable
forall (f :: * -> *) a. Applicative f => a -> f a
pure JoinedTable
_jt
]
inParensJoinedTable :: HeadedParsec Void Text JoinedTable
inParensJoinedTable = JoinedTable -> JoinedTable
InParensJoinedTable (JoinedTable -> JoinedTable)
-> HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text JoinedTable
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text JoinedTable
-> HeadedParsec Void Text JoinedTable
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text JoinedTable
joinedTable
trailingJoinedTable :: TableRef -> HeadedParsec Void Text JoinedTable
trailingJoinedTable TableRef
_tr1 =
[HeadedParsec Void Text JoinedTable]
-> HeadedParsec Void Text JoinedTable
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"cross join"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
TableRef
_tr2 <- HeadedParsec Void Text TableRef
nonTrailingTableRef
return (JoinMeth -> TableRef -> TableRef -> JoinedTable
MethJoinedTable JoinMeth
CrossJoinMeth TableRef
_tr1 TableRef
_tr2),
do
Maybe JoinType
_jt <- HeadedParsec Void Text (Maybe JoinType)
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s (Maybe JoinType)
joinTypedJoin
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
TableRef
_tr2 <- HeadedParsec Void Text TableRef
tableRef
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
JoinQual
_jq <- HeadedParsec Void Text JoinQual
joinQual
return (JoinMeth -> TableRef -> TableRef -> JoinedTable
MethJoinedTable (Maybe JoinType -> JoinQual -> JoinMeth
QualJoinMeth Maybe JoinType
_jt JoinQual
_jq) TableRef
_tr1 TableRef
_tr2),
do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"natural"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Maybe JoinType
_jt <- HeadedParsec Void Text (Maybe JoinType)
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s (Maybe JoinType)
joinTypedJoin
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
TableRef
_tr2 <- HeadedParsec Void Text TableRef
nonTrailingTableRef
return (JoinMeth -> TableRef -> TableRef -> JoinedTable
MethJoinedTable (Maybe JoinType -> JoinMeth
NaturalJoinMeth Maybe JoinType
_jt) TableRef
_tr1 TableRef
_tr2)
]
where
joinTypedJoin :: HeadedParsec e s (Maybe JoinType)
joinTypedJoin =
JoinType -> Maybe JoinType
forall a. a -> Maybe a
Just (JoinType -> Maybe JoinType)
-> HeadedParsec e s JoinType -> HeadedParsec e s (Maybe JoinType)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadedParsec e s JoinType
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s JoinType
joinType HeadedParsec e s JoinType
-> HeadedParsec e s () -> HeadedParsec e s JoinType
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* HeadedParsec e s ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead HeadedParsec e s JoinType
-> HeadedParsec e s () -> HeadedParsec e s JoinType
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* HeadedParsec e s ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec e s JoinType
-> HeadedParsec e s Text -> HeadedParsec e s JoinType
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"join")
HeadedParsec e s (Maybe JoinType)
-> HeadedParsec e s (Maybe JoinType)
-> HeadedParsec e s (Maybe JoinType)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe JoinType
forall a. Maybe a
Nothing Maybe JoinType
-> HeadedParsec e s Text -> HeadedParsec e s (Maybe JoinType)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"join"
joinType :: HeadedParsec e s JoinType
joinType =
[HeadedParsec e s JoinType] -> HeadedParsec e s JoinType
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"full"
HeadedParsec e s ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
_outer <- HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
outerAfterSpace
return (Bool -> JoinType
FullJoinType Bool
_outer),
do
Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"left"
HeadedParsec e s ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
_outer <- HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
outerAfterSpace
return (Bool -> JoinType
LeftJoinType Bool
_outer),
do
Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"right"
HeadedParsec e s ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
_outer <- HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
outerAfterSpace
return (Bool -> JoinType
RightJoinType Bool
_outer),
Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"inner" HeadedParsec e s Text -> JoinType -> HeadedParsec e s JoinType
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> JoinType
InnerJoinType
]
where
outerAfterSpace :: HeadedParsec err strm Bool
outerAfterSpace = (HeadedParsec err strm ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec err strm ()
-> HeadedParsec err strm Text -> HeadedParsec err strm Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> HeadedParsec err strm Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"outer") HeadedParsec err strm Text -> Bool -> HeadedParsec err strm Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True HeadedParsec err strm Bool
-> HeadedParsec err strm Bool -> HeadedParsec err strm Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> HeadedParsec err strm Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
joinQual :: HeadedParsec Void Text JoinQual
joinQual =
[HeadedParsec Void Text JoinQual]
-> HeadedParsec Void Text JoinQual
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"using" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (NonEmpty Ident)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text Ident
colId) HeadedParsec Void Text (NonEmpty Ident)
-> (NonEmpty Ident -> JoinQual) -> HeadedParsec Void Text JoinQual
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> NonEmpty Ident -> JoinQual
UsingJoinQual,
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"on" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text WhereClause
-> (WhereClause -> JoinQual) -> HeadedParsec Void Text JoinQual
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> WhereClause -> JoinQual
OnJoinQual
]
aliasClause :: HeadedParsec Void Text AliasClause
aliasClause = do
(Bool
_as, Ident
_alias) <- (Bool
True,) (Ident -> (Bool, Ident))
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (Bool, Ident)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Ident
colId) HeadedParsec Void Text (Bool, Ident)
-> HeadedParsec Void Text (Bool, Ident)
-> HeadedParsec Void Text (Bool, Ident)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Bool
False,) (Ident -> (Bool, Ident))
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (Bool, Ident)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
colId
Maybe (NonEmpty Ident)
_columnAliases <- HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (Maybe (NonEmpty Ident))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall a. Parser a -> Parser a
inParens (Parser ()
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (NonEmpty Ident)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text Ident
colId))
return (Bool -> Ident -> Maybe (NonEmpty Ident) -> AliasClause
AliasClause Bool
_as Ident
_alias Maybe (NonEmpty Ident)
_columnAliases)
whereClause :: HeadedParsec Void Text WhereClause
whereClause = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"where" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr
whereOrCurrentClause :: HeadedParsec Void Text WhereOrCurrentClause
whereOrCurrentClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"where"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
[HeadedParsec Void Text WhereOrCurrentClause]
-> HeadedParsec Void Text WhereOrCurrentClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"current"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"of"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Ident
a <- HeadedParsec Void Text Ident
cursorName
return (Ident -> WhereOrCurrentClause
CursorWhereOrCurrentClause Ident
a),
WhereClause -> WhereOrCurrentClause
ExprWhereOrCurrentClause (WhereClause -> WhereOrCurrentClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereOrCurrentClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr
]
sortClause :: HeadedParsec Void Text SortClause
sortClause = do
Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"order by"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
SortClause
a <- Parser ()
-> HeadedParsec Void Text SortBy
-> HeadedParsec Void Text SortClause
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text SortBy
sortBy
return SortClause
a
sortBy :: HeadedParsec Void Text SortBy
sortBy = do
WhereClause
a <- [Text] -> HeadedParsec Void Text WhereClause
filteredAExpr [Text
"using", Text
"asc", Text
"desc", Text
"nulls"]
[HeadedParsec Void Text SortBy] -> HeadedParsec Void Text SortBy
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"using"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
QualAllOp
b <- HeadedParsec Void Text QualAllOp
qualAllOp
Maybe NullsOrder
c <- HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text (Maybe NullsOrder)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text NullsOrder
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text NullsOrder
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s NullsOrder
nullsOrder)
return (WhereClause -> QualAllOp -> Maybe NullsOrder -> SortBy
UsingSortBy WhereClause
a QualAllOp
b Maybe NullsOrder
c),
do
Maybe AscDesc
b <- HeadedParsec Void Text AscDesc
-> HeadedParsec Void Text (Maybe AscDesc)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AscDesc -> HeadedParsec Void Text AscDesc
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AscDesc
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s AscDesc
ascDesc)
Maybe NullsOrder
c <- HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text (Maybe NullsOrder)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text NullsOrder
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text NullsOrder
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s NullsOrder
nullsOrder)
return (WhereClause -> Maybe AscDesc -> Maybe NullsOrder -> SortBy
AscDescSortBy WhereClause
a Maybe AscDesc
b Maybe NullsOrder
c)
]
exprList :: HeadedParsec Void Text (NonEmpty WhereClause)
exprList = Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr
exprListInParens :: HeadedParsec Void Text (NonEmpty WhereClause)
exprListInParens = HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text (NonEmpty WhereClause)
exprList
aExpr :: HeadedParsec Void Text WhereClause
aExpr = HeadedParsec Void Text CExpr -> HeadedParsec Void Text WhereClause
customizedAExpr HeadedParsec Void Text CExpr
cExpr
filteredAExpr :: [Text] -> HeadedParsec Void Text WhereClause
filteredAExpr = HeadedParsec Void Text CExpr -> HeadedParsec Void Text WhereClause
customizedAExpr (HeadedParsec Void Text CExpr
-> HeadedParsec Void Text WhereClause)
-> ([Text] -> HeadedParsec Void Text CExpr)
-> [Text]
-> HeadedParsec Void Text WhereClause
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. HeadedParsec Void Text Columnref -> HeadedParsec Void Text CExpr
customizedCExpr (HeadedParsec Void Text Columnref -> HeadedParsec Void Text CExpr)
-> ([Text] -> HeadedParsec Void Text Columnref)
-> [Text]
-> HeadedParsec Void Text CExpr
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. [Text] -> HeadedParsec Void Text Columnref
filteredColumnref
customizedAExpr :: HeadedParsec Void Text CExpr -> HeadedParsec Void Text WhereClause
customizedAExpr HeadedParsec Void Text CExpr
cExpr = HeadedParsec Void Text WhereClause
-> (WhereClause -> HeadedParsec Void Text WhereClause)
-> HeadedParsec Void Text WhereClause
forall (m :: * -> *) a.
(Monad m, Alternative m) =>
m a -> (a -> m a) -> m a
suffixRec HeadedParsec Void Text WhereClause
base WhereClause -> HeadedParsec Void Text WhereClause
suffix
where
aExpr :: HeadedParsec Void Text WhereClause
aExpr = HeadedParsec Void Text CExpr -> HeadedParsec Void Text WhereClause
customizedAExpr HeadedParsec Void Text CExpr
cExpr
base :: HeadedParsec Void Text WhereClause
base =
[HeadedParsec Void Text WhereClause]
-> HeadedParsec Void Text WhereClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ WhereClause
DefaultAExpr WhereClause -> Parser Text -> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"default",
SelectWithParens -> WhereClause
UniqueAExpr (SelectWithParens -> WhereClause)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"unique" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SelectWithParens
selectWithParens),
Row -> Row -> WhereClause
OverlapsAExpr (Row -> Row -> WhereClause)
-> HeadedParsec Void Text Row
-> HeadedParsec Void Text (Row -> WhereClause)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Row -> HeadedParsec Void Text Row
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Row
row HeadedParsec Void Text (Row -> WhereClause)
-> HeadedParsec Void Text Row -> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"overlaps" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text Row -> HeadedParsec Void Text Row
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Row
row),
HeadedParsec Void Text WhereClause
-> (QualOp -> WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
forall a b.
HeadedParsec Void Text a
-> (QualOp -> a -> b) -> HeadedParsec Void Text b
qualOpExpr HeadedParsec Void Text WhereClause
aExpr QualOp -> WhereClause -> WhereClause
PrefixQualOpAExpr,
WhereClause -> WhereClause
PlusAExpr (WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall strm err b.
(Stream strm, Ord err, Token strm ~ Char) =>
HeadedParsec err strm b -> HeadedParsec err strm b
plusedExpr HeadedParsec Void Text WhereClause
aExpr,
WhereClause -> WhereClause
MinusAExpr (WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall strm err b.
(Stream strm, Ord err, Token strm ~ Char) =>
HeadedParsec err strm b -> HeadedParsec err strm b
minusedExpr HeadedParsec Void Text WhereClause
aExpr,
WhereClause -> WhereClause
NotAExpr (WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr),
CExpr -> WhereClause
CExprAExpr (CExpr -> WhereClause)
-> HeadedParsec Void Text CExpr
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text CExpr
cExpr
]
suffix :: WhereClause -> HeadedParsec Void Text WhereClause
suffix WhereClause
a =
[HeadedParsec Void Text WhereClause]
-> HeadedParsec Void Text WhereClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
SubqueryOp
b <- HeadedParsec Void Text SubqueryOp
-> HeadedParsec Void Text SubqueryOp
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SubqueryOp
subqueryOp
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
SubType
c <- HeadedParsec Void Text SubType -> HeadedParsec Void Text SubType
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SubType
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s SubType
subType
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Either SelectWithParens WhereClause
d <- SelectWithParens -> Either SelectWithParens WhereClause
forall a b. a -> Either a b
Left (SelectWithParens -> Either SelectWithParens WhereClause)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text (Either SelectWithParens WhereClause)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SelectWithParens
selectWithParens HeadedParsec Void Text (Either SelectWithParens WhereClause)
-> HeadedParsec Void Text (Either SelectWithParens WhereClause)
-> HeadedParsec Void Text (Either SelectWithParens WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WhereClause -> Either SelectWithParens WhereClause
forall a b. b -> Either a b
Right (WhereClause -> Either SelectWithParens WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Either SelectWithParens WhereClause)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text WhereClause
aExpr
return (WhereClause
-> SubqueryOp
-> SubType
-> Either SelectWithParens WhereClause
-> WhereClause
SubqueryAExpr WhereClause
a SubqueryOp
b SubType
c Either SelectWithParens WhereClause
d),
WhereClause
-> (WhereClause -> Typename -> WhereClause)
-> HeadedParsec Void Text WhereClause
forall a. a -> (a -> Typename -> a) -> HeadedParsec Void Text a
typecastExpr WhereClause
a WhereClause -> Typename -> WhereClause
TypecastAExpr,
WhereClause -> AnyName -> WhereClause
CollateAExpr WhereClause
a (AnyName -> WhereClause)
-> HeadedParsec Void Text AnyName
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"collate" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
anyName),
WhereClause -> WhereClause -> WhereClause
AtTimeZoneAExpr WhereClause
a (WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"at time zone" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr),
WhereClause
-> HeadedParsec Void Text WhereClause
-> (WhereClause -> SymbolicExprBinOp -> WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
forall t t b.
t
-> HeadedParsec Void Text t
-> (t -> SymbolicExprBinOp -> t -> b)
-> HeadedParsec Void Text b
symbolicBinOpExpr WhereClause
a HeadedParsec Void Text WhereClause
aExpr WhereClause -> SymbolicExprBinOp -> WhereClause -> WhereClause
SymbolicBinOpAExpr,
WhereClause -> QualOp -> WhereClause
SuffixQualOpAExpr WhereClause
a (QualOp -> WhereClause)
-> HeadedParsec Void Text QualOp
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text QualOp -> HeadedParsec Void Text QualOp
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text QualOp
qualOp),
WhereClause -> WhereClause -> WhereClause
AndAExpr WhereClause
a (WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"and" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr),
WhereClause -> WhereClause -> WhereClause
OrAExpr WhereClause
a (WhereClause -> WhereClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"or" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr),
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Bool
b <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
VerbalExprBinOp
c <-
[HeadedParsec Void Text VerbalExprBinOp]
-> HeadedParsec Void Text VerbalExprBinOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ VerbalExprBinOp
LikeVerbalExprBinOp VerbalExprBinOp
-> Parser Text -> HeadedParsec Void Text VerbalExprBinOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"like",
VerbalExprBinOp
IlikeVerbalExprBinOp VerbalExprBinOp
-> Parser Text -> HeadedParsec Void Text VerbalExprBinOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"ilike",
VerbalExprBinOp
SimilarToVerbalExprBinOp VerbalExprBinOp
-> Parser Text -> HeadedParsec Void Text VerbalExprBinOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"similar to"
]
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
WhereClause
d <- HeadedParsec Void Text WhereClause
aExpr
Maybe WhereClause
e <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"escape" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr)
return (WhereClause
-> Bool
-> VerbalExprBinOp
-> WhereClause
-> Maybe WhereClause
-> WhereClause
VerbalExprBinOpAExpr WhereClause
a Bool
b VerbalExprBinOp
c WhereClause
d Maybe WhereClause
e),
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"is"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
b <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
AExprReversableOp
c <-
[HeadedParsec Void Text AExprReversableOp]
-> HeadedParsec Void Text AExprReversableOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ AExprReversableOp
NullAExprReversableOp AExprReversableOp
-> Parser Text -> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"null",
AExprReversableOp
TrueAExprReversableOp AExprReversableOp
-> Parser Text -> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"true",
AExprReversableOp
FalseAExprReversableOp AExprReversableOp
-> Parser Text -> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"false",
AExprReversableOp
UnknownAExprReversableOp AExprReversableOp
-> Parser Text -> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"unknown",
WhereClause -> AExprReversableOp
DistinctFromAExprReversableOp (WhereClause -> AExprReversableOp)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"distinct" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr),
TypeList -> AExprReversableOp
OfAExprReversableOp (TypeList -> AExprReversableOp)
-> HeadedParsec Void Text TypeList
-> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"of" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text TypeList
-> HeadedParsec Void Text TypeList
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text TypeList -> HeadedParsec Void Text TypeList
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text TypeList
typeList),
AExprReversableOp
DocumentAExprReversableOp AExprReversableOp
-> Parser Text -> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"document"
]
return (WhereClause -> Bool -> AExprReversableOp -> WhereClause
ReversableOpAExpr WhereClause
a Bool
b AExprReversableOp
c),
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Bool
b <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"between"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
BExpr -> WhereClause -> AExprReversableOp
c <-
[HeadedParsec
Void Text (BExpr -> WhereClause -> AExprReversableOp)]
-> HeadedParsec
Void Text (BExpr -> WhereClause -> AExprReversableOp)
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ BExpr -> WhereClause -> AExprReversableOp
BetweenSymmetricAExprReversableOp (BExpr -> WhereClause -> AExprReversableOp)
-> Parser ()
-> HeadedParsec
Void Text (BExpr -> WhereClause -> AExprReversableOp)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"symmetric" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1),
Bool -> BExpr -> WhereClause -> AExprReversableOp
BetweenAExprReversableOp Bool
True (BExpr -> WhereClause -> AExprReversableOp)
-> Parser ()
-> HeadedParsec
Void Text (BExpr -> WhereClause -> AExprReversableOp)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"asymmetric" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1),
(BExpr -> WhereClause -> AExprReversableOp)
-> HeadedParsec
Void Text (BExpr -> WhereClause -> AExprReversableOp)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> BExpr -> WhereClause -> AExprReversableOp
BetweenAExprReversableOp Bool
False)
]
BExpr
d <- HeadedParsec Void Text BExpr
bExpr
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"and"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
WhereClause
e <- HeadedParsec Void Text WhereClause
aExpr
return (WhereClause -> Bool -> AExprReversableOp -> WhereClause
ReversableOpAExpr WhereClause
a Bool
b (BExpr -> WhereClause -> AExprReversableOp
c BExpr
d WhereClause
e)),
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Bool
b <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"in"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
AExprReversableOp
c <- InExpr -> AExprReversableOp
InAExprReversableOp (InExpr -> AExprReversableOp)
-> HeadedParsec Void Text InExpr
-> HeadedParsec Void Text AExprReversableOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text InExpr
inExpr
return (WhereClause -> Bool -> AExprReversableOp -> WhereClause
ReversableOpAExpr WhereClause
a Bool
b AExprReversableOp
c),
WhereClause -> WhereClause
IsnullAExpr WhereClause
a WhereClause -> Parser Text -> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"isnull"),
WhereClause -> WhereClause
NotnullAExpr WhereClause
a WhereClause -> Parser Text -> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"notnull")
]
bExpr :: HeadedParsec Void Text BExpr
bExpr = HeadedParsec Void Text CExpr -> HeadedParsec Void Text BExpr
customizedBExpr HeadedParsec Void Text CExpr
cExpr
customizedBExpr :: HeadedParsec Void Text CExpr -> HeadedParsec Void Text BExpr
customizedBExpr HeadedParsec Void Text CExpr
cExpr = HeadedParsec Void Text BExpr
-> (BExpr -> HeadedParsec Void Text BExpr)
-> HeadedParsec Void Text BExpr
forall (m :: * -> *) a.
(Monad m, Alternative m) =>
m a -> (a -> m a) -> m a
suffixRec HeadedParsec Void Text BExpr
base BExpr -> HeadedParsec Void Text BExpr
suffix
where
aExpr :: HeadedParsec Void Text WhereClause
aExpr = HeadedParsec Void Text CExpr -> HeadedParsec Void Text WhereClause
customizedAExpr HeadedParsec Void Text CExpr
cExpr
bExpr :: HeadedParsec Void Text BExpr
bExpr = HeadedParsec Void Text CExpr -> HeadedParsec Void Text BExpr
customizedBExpr HeadedParsec Void Text CExpr
cExpr
base :: HeadedParsec Void Text BExpr
base =
[HeadedParsec Void Text BExpr] -> HeadedParsec Void Text BExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ HeadedParsec Void Text BExpr
-> (QualOp -> BExpr -> BExpr) -> HeadedParsec Void Text BExpr
forall a b.
HeadedParsec Void Text a
-> (QualOp -> a -> b) -> HeadedParsec Void Text b
qualOpExpr HeadedParsec Void Text BExpr
bExpr QualOp -> BExpr -> BExpr
QualOpBExpr,
BExpr -> BExpr
PlusBExpr (BExpr -> BExpr)
-> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExpr
forall strm err b.
(Stream strm, Ord err, Token strm ~ Char) =>
HeadedParsec err strm b -> HeadedParsec err strm b
plusedExpr HeadedParsec Void Text BExpr
bExpr,
BExpr -> BExpr
MinusBExpr (BExpr -> BExpr)
-> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExpr
forall strm err b.
(Stream strm, Ord err, Token strm ~ Char) =>
HeadedParsec err strm b -> HeadedParsec err strm b
minusedExpr HeadedParsec Void Text BExpr
bExpr,
CExpr -> BExpr
CExprBExpr (CExpr -> BExpr)
-> HeadedParsec Void Text CExpr -> HeadedParsec Void Text BExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text CExpr
cExpr
]
suffix :: BExpr -> HeadedParsec Void Text BExpr
suffix BExpr
a =
[HeadedParsec Void Text BExpr] -> HeadedParsec Void Text BExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ BExpr
-> (BExpr -> Typename -> BExpr) -> HeadedParsec Void Text BExpr
forall a. a -> (a -> Typename -> a) -> HeadedParsec Void Text a
typecastExpr BExpr
a BExpr -> Typename -> BExpr
TypecastBExpr,
BExpr
-> HeadedParsec Void Text BExpr
-> (BExpr -> SymbolicExprBinOp -> BExpr -> BExpr)
-> HeadedParsec Void Text BExpr
forall t t b.
t
-> HeadedParsec Void Text t
-> (t -> SymbolicExprBinOp -> t -> b)
-> HeadedParsec Void Text b
symbolicBinOpExpr BExpr
a HeadedParsec Void Text BExpr
bExpr BExpr -> SymbolicExprBinOp -> BExpr -> BExpr
SymbolicBinOpBExpr,
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"is"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
b <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
BExprIsOp
c <-
[HeadedParsec Void Text BExprIsOp]
-> HeadedParsec Void Text BExprIsOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ BExpr -> BExprIsOp
DistinctFromBExprIsOp (BExpr -> BExprIsOp)
-> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExprIsOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"distinct from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExpr
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text BExpr
bExpr),
TypeList -> BExprIsOp
OfBExprIsOp (TypeList -> BExprIsOp)
-> HeadedParsec Void Text TypeList
-> HeadedParsec Void Text BExprIsOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"of" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text TypeList
-> HeadedParsec Void Text TypeList
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text TypeList -> HeadedParsec Void Text TypeList
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text TypeList
typeList),
BExprIsOp
DocumentBExprIsOp BExprIsOp -> Parser Text -> HeadedParsec Void Text BExprIsOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"document"
]
return (BExpr -> Bool -> BExprIsOp -> BExpr
IsOpBExpr BExpr
a Bool
b BExprIsOp
c)
]
cExpr :: HeadedParsec Void Text CExpr
cExpr = HeadedParsec Void Text Columnref -> HeadedParsec Void Text CExpr
customizedCExpr HeadedParsec Void Text Columnref
columnref
customizedCExpr :: HeadedParsec Void Text Columnref -> HeadedParsec Void Text CExpr
customizedCExpr HeadedParsec Void Text Columnref
columnref =
[HeadedParsec Void Text CExpr] -> HeadedParsec Void Text CExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Int -> Maybe Indirection -> CExpr
ParamCExpr (Int -> Maybe Indirection -> CExpr)
-> HeadedParsec Void Text Int
-> HeadedParsec Void Text (Maybe Indirection -> CExpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'$' HeadedParsec Void Text Char
-> HeadedParsec Void Text Int -> HeadedParsec Void Text Int
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Int
forall err strm decimal.
(Ord err, Stream strm, Token strm ~ Char, Integral decimal) =>
HeadedParsec err strm decimal
decimal HeadedParsec Void Text Int
-> Parser () -> HeadedParsec Void Text Int
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead) HeadedParsec Void Text (Maybe Indirection -> CExpr)
-> HeadedParsec Void Text (Maybe Indirection)
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text (Maybe Indirection)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection),
CaseExpr -> CExpr
CaseCExpr (CaseExpr -> CExpr)
-> HeadedParsec Void Text CaseExpr -> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text CaseExpr
caseExpr,
ImplicitRow -> CExpr
ImplicitRowCExpr (ImplicitRow -> CExpr)
-> HeadedParsec Void Text ImplicitRow
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ImplicitRow
implicitRow,
Maybe (NonEmpty WhereClause) -> CExpr
ExplicitRowCExpr (Maybe (NonEmpty WhereClause) -> CExpr)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
explicitRow,
Parser Text
-> HeadedParsec Void Text CExpr -> HeadedParsec Void Text CExpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"grouping") (NonEmpty WhereClause -> CExpr
GroupingCExpr (NonEmpty WhereClause -> CExpr)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text WhereClause
aExpr),
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"exists" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text CExpr -> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (SelectWithParens -> CExpr
ExistsCExpr (SelectWithParens -> CExpr)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectWithParens
selectWithParens),
do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"array"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text (HeadedParsec Void Text CExpr)
-> HeadedParsec Void Text CExpr
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (HeadedParsec Void Text (HeadedParsec Void Text CExpr)
-> HeadedParsec Void Text CExpr)
-> HeadedParsec Void Text (HeadedParsec Void Text CExpr)
-> HeadedParsec Void Text CExpr
forall a b. (a -> b) -> a -> b
$
[HeadedParsec Void Text (HeadedParsec Void Text CExpr)]
-> HeadedParsec Void Text (HeadedParsec Void Text CExpr)
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ (HeadedParsec Void Text ArrayExpr -> HeadedParsec Void Text CExpr)
-> HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
-> HeadedParsec Void Text (HeadedParsec Void Text CExpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((ArrayExpr -> CExpr)
-> HeadedParsec Void Text ArrayExpr -> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Either SelectWithParens ArrayExpr -> CExpr
ArrayCExpr (Either SelectWithParens ArrayExpr -> CExpr)
-> (ArrayExpr -> Either SelectWithParens ArrayExpr)
-> ArrayExpr
-> CExpr
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. ArrayExpr -> Either SelectWithParens ArrayExpr
forall a b. b -> Either a b
Right)) HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
arrayExprCont,
(SelectWithParens -> HeadedParsec Void Text CExpr)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text (HeadedParsec Void Text CExpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((SelectWithParens -> CExpr)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Either SelectWithParens ArrayExpr -> CExpr
ArrayCExpr (Either SelectWithParens ArrayExpr -> CExpr)
-> (SelectWithParens -> Either SelectWithParens ArrayExpr)
-> SelectWithParens
-> CExpr
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. SelectWithParens -> Either SelectWithParens ArrayExpr
forall a b. a -> Either a b
Left) (HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text CExpr)
-> (SelectWithParens -> HeadedParsec Void Text SelectWithParens)
-> SelectWithParens
-> HeadedParsec Void Text CExpr
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. SelectWithParens -> HeadedParsec Void Text SelectWithParens
forall (f :: * -> *) a. Applicative f => a -> f a
pure) HeadedParsec Void Text SelectWithParens
selectWithParens
],
do
SelectWithParens
a <- HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SelectWithParens
selectWithParens
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Indirection
b <- HeadedParsec Void Text Indirection
-> HeadedParsec Void Text (Maybe Indirection)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection)
return (SelectWithParens -> Maybe Indirection -> CExpr
SelectWithParensCExpr SelectWithParens
a Maybe Indirection
b),
WhereClause -> Maybe Indirection -> CExpr
InParensCExpr (WhereClause -> Maybe Indirection -> CExpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe Indirection -> CExpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text WhereClause
-> Parser () -> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead) HeadedParsec Void Text (Maybe Indirection -> CExpr)
-> HeadedParsec Void Text (Maybe Indirection)
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text (Maybe Indirection)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection),
AexprConst -> CExpr
AexprConstCExpr (AexprConst -> CExpr)
-> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text AexprConst
aexprConst,
FuncExpr -> CExpr
FuncCExpr (FuncExpr -> CExpr)
-> HeadedParsec Void Text FuncExpr -> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FuncExpr
funcExpr,
Columnref -> CExpr
ColumnrefCExpr (Columnref -> CExpr)
-> HeadedParsec Void Text Columnref -> HeadedParsec Void Text CExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Columnref
columnref
]
subqueryOp :: HeadedParsec Void Text SubqueryOp
subqueryOp =
[HeadedParsec Void Text SubqueryOp]
-> HeadedParsec Void Text SubqueryOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ AnyOperator -> SubqueryOp
AnySubqueryOp (AnyOperator -> SubqueryOp)
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text SubqueryOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"operator" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text AnyOperator
anyOperator),
do
Bool
a <- Parser () -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"not" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
Bool -> SubqueryOp
LikeSubqueryOp Bool
a SubqueryOp -> Parser Text -> HeadedParsec Void Text SubqueryOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"like" HeadedParsec Void Text SubqueryOp
-> HeadedParsec Void Text SubqueryOp
-> HeadedParsec Void Text SubqueryOp
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> SubqueryOp
IlikeSubqueryOp Bool
a SubqueryOp -> Parser Text -> HeadedParsec Void Text SubqueryOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"ilike",
AllOp -> SubqueryOp
AllSubqueryOp (AllOp -> SubqueryOp)
-> HeadedParsec Void Text AllOp
-> HeadedParsec Void Text SubqueryOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text AllOp
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm),
IsString (Tokens strm), Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm AllOp
allOp
]
subType :: HeadedParsec e s SubType
subType =
[HeadedParsec e s SubType] -> HeadedParsec e s SubType
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ SubType
AnySubType SubType -> HeadedParsec e s Text -> HeadedParsec e s SubType
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"any",
SubType
SomeSubType SubType -> HeadedParsec e s Text -> HeadedParsec e s SubType
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"some",
SubType
AllSubType SubType -> HeadedParsec e s Text -> HeadedParsec e s SubType
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"all"
]
inExpr :: HeadedParsec Void Text InExpr
inExpr = SelectWithParens -> InExpr
SelectInExpr (SelectWithParens -> InExpr)
-> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text InExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectWithParens
-> HeadedParsec Void Text SelectWithParens
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SelectWithParens
selectWithParens HeadedParsec Void Text InExpr
-> HeadedParsec Void Text InExpr -> HeadedParsec Void Text InExpr
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> NonEmpty WhereClause -> InExpr
ExprListInExpr (NonEmpty WhereClause -> InExpr)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text InExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text (NonEmpty WhereClause)
exprList
symbolicBinOpExpr :: t
-> HeadedParsec Void Text t
-> (t -> SymbolicExprBinOp -> t -> b)
-> HeadedParsec Void Text b
symbolicBinOpExpr t
_a HeadedParsec Void Text t
_bParser t -> SymbolicExprBinOp -> t -> b
_constr = do
SymbolicExprBinOp
_binOp <- String
-> HeadedParsec Void Text SymbolicExprBinOp
-> HeadedParsec Void Text SymbolicExprBinOp
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"binary operator" (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text SymbolicExprBinOp
-> HeadedParsec Void Text SymbolicExprBinOp
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SymbolicExprBinOp
-> HeadedParsec Void Text SymbolicExprBinOp
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SymbolicExprBinOp
symbolicExprBinOp HeadedParsec Void Text SymbolicExprBinOp
-> Parser () -> HeadedParsec Void Text SymbolicExprBinOp
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space)
t
_b <- HeadedParsec Void Text t
_bParser
return (t -> SymbolicExprBinOp -> t -> b
_constr t
_a SymbolicExprBinOp
_binOp t
_b)
typecastExpr :: a -> (a -> Typename -> a) -> HeadedParsec Void Text a
typecastExpr :: a -> (a -> Typename -> a) -> HeadedParsec Void Text a
typecastExpr a
_prefix a -> Typename -> a
_constr = do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Tokens Text -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string Tokens Text
"::"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Typename
_type <- HeadedParsec Void Text Typename
typename
return (a -> Typename -> a
_constr a
_prefix Typename
_type)
plusedExpr :: HeadedParsec err strm b -> HeadedParsec err strm b
plusedExpr HeadedParsec err strm b
expr = Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'+' HeadedParsec err strm Char
-> HeadedParsec err strm () -> HeadedParsec err strm ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec err strm ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space HeadedParsec err strm ()
-> HeadedParsec err strm b -> HeadedParsec err strm b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec err strm b
expr
minusedExpr :: HeadedParsec err strm b -> HeadedParsec err strm b
minusedExpr HeadedParsec err strm b
expr = Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'-' HeadedParsec err strm Char
-> HeadedParsec err strm () -> HeadedParsec err strm ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec err strm ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space HeadedParsec err strm ()
-> HeadedParsec err strm b -> HeadedParsec err strm b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec err strm b
expr
qualOpExpr :: HeadedParsec Void Text a
-> (QualOp -> a -> b) -> HeadedParsec Void Text b
qualOpExpr HeadedParsec Void Text a
expr QualOp -> a -> b
constr = QualOp -> a -> b
constr (QualOp -> a -> b)
-> HeadedParsec Void Text QualOp -> HeadedParsec Void Text (a -> b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text QualOp -> HeadedParsec Void Text QualOp
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text QualOp
qualOp HeadedParsec Void Text (a -> b)
-> HeadedParsec Void Text a -> HeadedParsec Void Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> HeadedParsec Void Text a -> HeadedParsec Void Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text a
expr)
row :: HeadedParsec Void Text Row
row = Maybe (NonEmpty WhereClause) -> Row
ExplicitRowRow (Maybe (NonEmpty WhereClause) -> Row)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text Row
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
explicitRow HeadedParsec Void Text Row
-> HeadedParsec Void Text Row -> HeadedParsec Void Text Row
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ImplicitRow -> Row
ImplicitRowRow (ImplicitRow -> Row)
-> HeadedParsec Void Text ImplicitRow -> HeadedParsec Void Text Row
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ImplicitRow
implicitRow
explicitRow :: HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
explicitRow = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"row" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall a. Parser a -> Parser a
inParens (HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text (NonEmpty WhereClause)
exprList)
implicitRow :: HeadedParsec Void Text ImplicitRow
implicitRow = HeadedParsec Void Text ImplicitRow
-> HeadedParsec Void Text ImplicitRow
forall a. Parser a -> Parser a
inParens (HeadedParsec Void Text ImplicitRow
-> HeadedParsec Void Text ImplicitRow)
-> HeadedParsec Void Text ImplicitRow
-> HeadedParsec Void Text ImplicitRow
forall a b. (a -> b) -> a -> b
$ do
WhereClause
a <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WhereClause
aExpr
Parser ()
commaSeparator
NonEmpty WhereClause
b <- HeadedParsec Void Text (NonEmpty WhereClause)
exprList
return $ case WhereClause
-> NonEmpty WhereClause -> (NonEmpty WhereClause, WhereClause)
forall a. a -> NonEmpty a -> (NonEmpty a, a)
NonEmpty.consAndUnsnoc WhereClause
a NonEmpty WhereClause
b of
(NonEmpty WhereClause
c, WhereClause
d) -> NonEmpty WhereClause -> WhereClause -> ImplicitRow
ImplicitRow NonEmpty WhereClause
c WhereClause
d
arrayExprCont :: HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
arrayExprCont =
HeadedParsec Void Text ArrayExpr
-> HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
forall a. Parser a -> Parser (Parser a)
inBracketsCont (HeadedParsec Void Text ArrayExpr
-> HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr))
-> HeadedParsec Void Text ArrayExpr
-> HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
forall a b. (a -> b) -> a -> b
$
[HeadedParsec Void Text ArrayExpr]
-> HeadedParsec Void Text ArrayExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ ArrayExprList -> ArrayExpr
ArrayExprListArrayExpr (ArrayExprList -> ArrayExpr)
-> HeadedParsec Void Text ArrayExprList
-> HeadedParsec Void Text ArrayExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser ()
-> HeadedParsec Void Text ArrayExpr
-> HeadedParsec Void Text ArrayExprList
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator (HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
-> HeadedParsec Void Text ArrayExpr
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join HeadedParsec Void Text (HeadedParsec Void Text ArrayExpr)
arrayExprCont),
NonEmpty WhereClause -> ArrayExpr
ExprListArrayExpr (NonEmpty WhereClause -> ArrayExpr)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text ArrayExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
exprList,
ArrayExpr -> HeadedParsec Void Text ArrayExpr
forall (f :: * -> *) a. Applicative f => a -> f a
pure ArrayExpr
EmptyArrayExpr
]
caseExpr :: HeadedParsec Void Text CaseExpr
caseExpr = String
-> HeadedParsec Void Text CaseExpr
-> HeadedParsec Void Text CaseExpr
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"case expression" (HeadedParsec Void Text CaseExpr
-> HeadedParsec Void Text CaseExpr)
-> HeadedParsec Void Text CaseExpr
-> HeadedParsec Void Text CaseExpr
forall a b. (a -> b) -> a -> b
$ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"case"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe WhereClause
_arg <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text WhereClause
-> Parser () -> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
NonEmpty WhenClause
_whenClauses <- Parser ()
-> HeadedParsec Void Text WhenClause
-> HeadedParsec Void Text (NonEmpty WhenClause)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec Void Text WhenClause
whenClause
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Maybe WhereClause
_default <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text WhereClause
elseClause
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"end"
pure $ Maybe WhereClause
-> NonEmpty WhenClause -> Maybe WhereClause -> CaseExpr
CaseExpr Maybe WhereClause
_arg NonEmpty WhenClause
_whenClauses Maybe WhereClause
_default
whenClause :: HeadedParsec Void Text WhenClause
whenClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"when"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
WhereClause
_a <- HeadedParsec Void Text WhereClause
aExpr
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"then"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
WhereClause
_b <- HeadedParsec Void Text WhereClause
aExpr
return (WhereClause -> WhereClause -> WhenClause
WhenClause WhereClause
_a WhereClause
_b)
elseClause :: HeadedParsec Void Text WhereClause
elseClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"else"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
WhereClause
a <- HeadedParsec Void Text WhereClause
aExpr
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
return WhereClause
a
funcExpr :: HeadedParsec Void Text FuncExpr
funcExpr =
[HeadedParsec Void Text FuncExpr]
-> HeadedParsec Void Text FuncExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ FuncExprCommonSubexpr -> FuncExpr
SubexprFuncExpr (FuncExprCommonSubexpr -> FuncExpr)
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FuncExprCommonSubexpr
funcExprCommonSubexpr,
do
FuncApplication
a <- HeadedParsec Void Text FuncApplication
funcApplication
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe SortClause
b <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
withinGroupClause)
Maybe WhereClause
c <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
filterClause)
Maybe OverClause
d <- HeadedParsec Void Text OverClause
-> HeadedParsec Void Text (Maybe OverClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text OverClause
-> HeadedParsec Void Text OverClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text OverClause
overClause)
return (FuncApplication
-> Maybe SortClause
-> Maybe WhereClause
-> Maybe OverClause
-> FuncExpr
ApplicationFuncExpr FuncApplication
a Maybe SortClause
b Maybe WhereClause
c Maybe OverClause
d)
]
funcExprWindowless :: HeadedParsec Void Text FuncExprWindowless
funcExprWindowless =
[HeadedParsec Void Text FuncExprWindowless]
-> HeadedParsec Void Text FuncExprWindowless
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ FuncExprCommonSubexpr -> FuncExprWindowless
CommonSubexprFuncExprWindowless (FuncExprCommonSubexpr -> FuncExprWindowless)
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprWindowless
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FuncExprCommonSubexpr
funcExprCommonSubexpr,
FuncApplication -> FuncExprWindowless
ApplicationFuncExprWindowless (FuncApplication -> FuncExprWindowless)
-> HeadedParsec Void Text FuncApplication
-> HeadedParsec Void Text FuncExprWindowless
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FuncApplication
funcApplication
]
withinGroupClause :: HeadedParsec Void Text SortClause
withinGroupClause = do
Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"within group"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text SortClause
sortClause
filterClause :: HeadedParsec Void Text WhereClause
filterClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"filter"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall a. Parser a -> Parser a
inParens (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"where" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr)
overClause :: HeadedParsec Void Text OverClause
overClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"over"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
[HeadedParsec Void Text OverClause]
-> HeadedParsec Void Text OverClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ WindowSpecification -> OverClause
WindowOverClause (WindowSpecification -> OverClause)
-> HeadedParsec Void Text WindowSpecification
-> HeadedParsec Void Text OverClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WindowSpecification
windowSpecification,
Ident -> OverClause
ColIdOverClause (Ident -> OverClause)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text OverClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
colId
]
funcExprCommonSubexpr :: HeadedParsec Void Text FuncExprCommonSubexpr
funcExprCommonSubexpr =
[HeadedParsec Void Text FuncExprCommonSubexpr]
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ WhereClause -> FuncExprCommonSubexpr
CollationForFuncExprCommonSubexpr (WhereClause -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser Text
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"collation for") HeadedParsec Void Text WhereClause
aExpr),
FuncExprCommonSubexpr
CurrentDateFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"current_date",
Maybe Int64 -> FuncExprCommonSubexpr
CurrentTimestampFuncExprCommonSubexpr (Maybe Int64 -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => Text -> HeadedParsec Void Text (Maybe a)
labeledIconst Text
"current_timestamp",
Maybe Int64 -> FuncExprCommonSubexpr
CurrentTimeFuncExprCommonSubexpr (Maybe Int64 -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => Text -> HeadedParsec Void Text (Maybe a)
labeledIconst Text
"current_time",
Maybe Int64 -> FuncExprCommonSubexpr
LocalTimestampFuncExprCommonSubexpr (Maybe Int64 -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => Text -> HeadedParsec Void Text (Maybe a)
labeledIconst Text
"localtimestamp",
Maybe Int64 -> FuncExprCommonSubexpr
LocalTimeFuncExprCommonSubexpr (Maybe Int64 -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => Text -> HeadedParsec Void Text (Maybe a)
labeledIconst Text
"localtime",
FuncExprCommonSubexpr
CurrentRoleFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"current_role",
FuncExprCommonSubexpr
CurrentUserFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"current_user",
FuncExprCommonSubexpr
SessionUserFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"session_user",
FuncExprCommonSubexpr
UserFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"user",
FuncExprCommonSubexpr
CurrentCatalogFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"current_catalog",
FuncExprCommonSubexpr
CurrentSchemaFuncExprCommonSubexpr FuncExprCommonSubexpr
-> Parser Text -> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"current_schema",
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"cast") (WhereClause -> Typename -> FuncExprCommonSubexpr
CastFuncExprCommonSubexpr (WhereClause -> Typename -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Typename -> FuncExprCommonSubexpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text (Typename -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text Typename
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Typename
-> HeadedParsec Void Text Typename
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Typename
typename)),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"extract") (Maybe ExtractList -> FuncExprCommonSubexpr
ExtractFuncExprCommonSubexpr (Maybe ExtractList -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe ExtractList)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ExtractList
-> HeadedParsec Void Text (Maybe ExtractList)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text ExtractList
extractList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"overlay") (OverlayList -> FuncExprCommonSubexpr
OverlayFuncExprCommonSubexpr (OverlayList -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text OverlayList
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text OverlayList
overlayList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"position") (Maybe PositionList -> FuncExprCommonSubexpr
PositionFuncExprCommonSubexpr (Maybe PositionList -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe PositionList)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text PositionList
-> HeadedParsec Void Text (Maybe PositionList)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text PositionList
positionList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"substring") (Maybe SubstrList -> FuncExprCommonSubexpr
SubstringFuncExprCommonSubexpr (Maybe SubstrList -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe SubstrList)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SubstrList
-> HeadedParsec Void Text (Maybe SubstrList)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text SubstrList
substrList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"treat") (WhereClause -> Typename -> FuncExprCommonSubexpr
TreatFuncExprCommonSubexpr (WhereClause -> Typename -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Typename -> FuncExprCommonSubexpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text (Typename -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text Typename
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"as" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Typename
-> HeadedParsec Void Text Typename
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Typename
typename)),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"trim") (Maybe TrimModifier -> TrimList -> FuncExprCommonSubexpr
TrimFuncExprCommonSubexpr (Maybe TrimModifier -> TrimList -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (Maybe TrimModifier)
-> HeadedParsec Void Text (TrimList -> FuncExprCommonSubexpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text TrimModifier
-> HeadedParsec Void Text (Maybe TrimModifier)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text TrimModifier
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s TrimModifier
trimModifier HeadedParsec Void Text TrimModifier
-> Parser () -> HeadedParsec Void Text TrimModifier
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1) HeadedParsec Void Text (TrimList -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text TrimList
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text TrimList
trimList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"nullif") (WhereClause -> WhereClause -> FuncExprCommonSubexpr
NullIfFuncExprCommonSubexpr (WhereClause -> WhereClause -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (WhereClause -> FuncExprCommonSubexpr)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text (WhereClause -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
commaSeparator Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr)),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"coalesce") (NonEmpty WhereClause -> FuncExprCommonSubexpr
CoalesceFuncExprCommonSubexpr (NonEmpty WhereClause -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
exprList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"greatest") (NonEmpty WhereClause -> FuncExprCommonSubexpr
GreatestFuncExprCommonSubexpr (NonEmpty WhereClause -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
exprList),
Parser Text
-> HeadedParsec Void Text FuncExprCommonSubexpr
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"least") (NonEmpty WhereClause -> FuncExprCommonSubexpr
LeastFuncExprCommonSubexpr (NonEmpty WhereClause -> FuncExprCommonSubexpr)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text FuncExprCommonSubexpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
exprList)
]
where
labeledIconst :: Text -> HeadedParsec Void Text (Maybe a)
labeledIconst Text
_label = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
_label Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe a)
-> HeadedParsec Void Text (Maybe a)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text a -> HeadedParsec Void Text (Maybe a)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> HeadedParsec Void Text a -> HeadedParsec Void Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text a -> HeadedParsec Void Text a
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text a
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)
= ExtractArg -> WhereClause -> ExtractList
ExtractList (ExtractArg -> WhereClause -> ExtractList)
-> HeadedParsec Void Text ExtractArg
-> HeadedParsec Void Text (WhereClause -> ExtractList)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ExtractArg
extractArg HeadedParsec Void Text (WhereClause -> ExtractList)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text ExtractList
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr)
=
[HeadedParsec Void Text ExtractArg]
-> HeadedParsec Void Text ExtractArg
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ ExtractArg
YearExtractArg ExtractArg -> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"year",
ExtractArg
MonthExtractArg ExtractArg -> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"month",
ExtractArg
DayExtractArg ExtractArg -> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"day",
ExtractArg
HourExtractArg ExtractArg -> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"hour",
ExtractArg
MinuteExtractArg ExtractArg -> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"minute",
ExtractArg
SecondExtractArg ExtractArg -> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"second",
Text -> ExtractArg
SconstExtractArg (Text -> ExtractArg)
-> Parser Text -> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text
sconst,
Ident -> ExtractArg
IdentExtractArg (Ident -> ExtractArg)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text ExtractArg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
ident
]
overlayList :: HeadedParsec Void Text OverlayList
overlayList = do
WhereClause
a <- HeadedParsec Void Text WhereClause
aExpr
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
WhereClause
b <- HeadedParsec Void Text WhereClause
overlayPlacing
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
WhereClause
c <- HeadedParsec Void Text WhereClause
substrFrom
Maybe WhereClause
d <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
substrFor)
return (WhereClause
-> WhereClause -> WhereClause -> Maybe WhereClause -> OverlayList
OverlayList WhereClause
a WhereClause
b WhereClause
c Maybe WhereClause
d)
overlayPlacing :: HeadedParsec Void Text WhereClause
overlayPlacing = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"placing" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr
positionList :: HeadedParsec Void Text PositionList
positionList = BExpr -> BExpr -> PositionList
PositionList (BExpr -> BExpr -> PositionList)
-> HeadedParsec Void Text BExpr
-> HeadedParsec Void Text (BExpr -> PositionList)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text BExpr
bExpr HeadedParsec Void Text (BExpr -> PositionList)
-> HeadedParsec Void Text BExpr
-> HeadedParsec Void Text PositionList
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"in" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text BExpr -> HeadedParsec Void Text BExpr
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text BExpr
bExpr)
substrList :: HeadedParsec Void Text SubstrList
substrList =
[HeadedParsec Void Text SubstrList]
-> HeadedParsec Void Text SubstrList
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ WhereClause -> SubstrListFromFor -> SubstrList
ExprSubstrList (WhereClause -> SubstrListFromFor -> SubstrList)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (SubstrListFromFor -> SubstrList)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text (SubstrListFromFor -> SubstrList)
-> HeadedParsec Void Text SubstrListFromFor
-> HeadedParsec Void Text SubstrList
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SubstrListFromFor
-> HeadedParsec Void Text SubstrListFromFor
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SubstrListFromFor
substrListFromFor),
NonEmpty WhereClause -> SubstrList
ExprListSubstrList (NonEmpty WhereClause -> SubstrList)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text SubstrList
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
exprList
]
substrListFromFor :: HeadedParsec Void Text SubstrListFromFor
substrListFromFor =
[HeadedParsec Void Text SubstrListFromFor]
-> HeadedParsec Void Text SubstrListFromFor
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
WhereClause
a <- HeadedParsec Void Text WhereClause
substrFrom
[HeadedParsec Void Text SubstrListFromFor]
-> HeadedParsec Void Text SubstrListFromFor
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
WhereClause
b <- Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
substrFor
return (WhereClause -> WhereClause -> SubstrListFromFor
FromForSubstrListFromFor WhereClause
a WhereClause
b),
SubstrListFromFor -> HeadedParsec Void Text SubstrListFromFor
forall (m :: * -> *) a. Monad m => a -> m a
return (WhereClause -> SubstrListFromFor
FromSubstrListFromFor WhereClause
a)
],
do
WhereClause
a <- HeadedParsec Void Text WhereClause
substrFor
[HeadedParsec Void Text SubstrListFromFor]
-> HeadedParsec Void Text SubstrListFromFor
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
WhereClause
b <- Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
substrFrom
return (WhereClause -> WhereClause -> SubstrListFromFor
ForFromSubstrListFromFor WhereClause
a WhereClause
b),
SubstrListFromFor -> HeadedParsec Void Text SubstrListFromFor
forall (m :: * -> *) a. Monad m => a -> m a
return (WhereClause -> SubstrListFromFor
ForSubstrListFromFor WhereClause
a)
]
]
substrFrom :: HeadedParsec Void Text WhereClause
substrFrom = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr
substrFor :: HeadedParsec Void Text WhereClause
substrFor = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"for" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr
trimModifier :: HeadedParsec e s TrimModifier
trimModifier =
TrimModifier
BothTrimModifier TrimModifier
-> HeadedParsec e s Text -> HeadedParsec e s TrimModifier
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"both"
HeadedParsec e s TrimModifier
-> HeadedParsec e s TrimModifier -> HeadedParsec e s TrimModifier
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> TrimModifier
LeadingTrimModifier TrimModifier
-> HeadedParsec e s Text -> HeadedParsec e s TrimModifier
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"leading"
HeadedParsec e s TrimModifier
-> HeadedParsec e s TrimModifier -> HeadedParsec e s TrimModifier
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> TrimModifier
TrailingTrimModifier TrimModifier
-> HeadedParsec e s Text -> HeadedParsec e s TrimModifier
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"trailing"
trimList :: HeadedParsec Void Text TrimList
trimList =
[HeadedParsec Void Text TrimList]
-> HeadedParsec Void Text TrimList
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ WhereClause -> NonEmpty WhereClause -> TrimList
ExprFromExprListTrimList (WhereClause -> NonEmpty WhereClause -> TrimList)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (NonEmpty WhereClause -> TrimList)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text WhereClause
aExpr HeadedParsec Void Text (NonEmpty WhereClause -> TrimList)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text TrimList
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
exprList),
NonEmpty WhereClause -> TrimList
FromExprListTrimList (NonEmpty WhereClause -> TrimList)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text TrimList
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"from" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
exprList),
NonEmpty WhereClause -> TrimList
ExprListTrimList (NonEmpty WhereClause -> TrimList)
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text TrimList
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (NonEmpty WhereClause)
exprList
]
funcApplication :: HeadedParsec Void Text FuncApplication
funcApplication = (FuncName -> Maybe FuncApplicationParams -> FuncApplication)
-> Parser FuncName
-> Parser (Maybe FuncApplicationParams)
-> HeadedParsec Void Text FuncApplication
forall label content result.
(label -> content -> result)
-> Parser label -> Parser content -> Parser result
inParensWithLabel FuncName -> Maybe FuncApplicationParams -> FuncApplication
FuncApplication Parser FuncName
funcName (HeadedParsec Void Text FuncApplicationParams
-> Parser (Maybe FuncApplicationParams)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text FuncApplicationParams
funcApplicationParams)
funcApplicationParams :: HeadedParsec Void Text FuncApplicationParams
funcApplicationParams =
[HeadedParsec Void Text FuncApplicationParams]
-> HeadedParsec Void Text FuncApplicationParams
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ HeadedParsec Void Text FuncApplicationParams
forall strm err.
(Stream strm, Ord err, Token strm ~ Char) =>
HeadedParsec err strm FuncApplicationParams
starFuncApplicationParams,
HeadedParsec Void Text FuncApplicationParams
listVariadicFuncApplicationParams,
HeadedParsec Void Text FuncApplicationParams
singleVariadicFuncApplicationParams,
HeadedParsec Void Text FuncApplicationParams
normalFuncApplicationParams
]
normalFuncApplicationParams :: HeadedParsec Void Text FuncApplicationParams
normalFuncApplicationParams = do
Maybe Bool
_optAllOrDistinct <- Parser Bool -> HeadedParsec Void Text (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser Bool
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Bool
allOrDistinct Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1)
NonEmpty FuncArgExpr
_argList <- Parser ()
-> HeadedParsec Void Text FuncArgExpr
-> HeadedParsec Void Text (NonEmpty FuncArgExpr)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text FuncArgExpr
funcArgExpr
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe SortClause
_optSortClause <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
return (Maybe Bool
-> NonEmpty FuncArgExpr
-> Maybe SortClause
-> FuncApplicationParams
NormalFuncApplicationParams Maybe Bool
_optAllOrDistinct NonEmpty FuncArgExpr
_argList Maybe SortClause
_optSortClause)
singleVariadicFuncApplicationParams :: HeadedParsec Void Text FuncApplicationParams
singleVariadicFuncApplicationParams = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"variadic"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
FuncArgExpr
_arg <- HeadedParsec Void Text FuncArgExpr
funcArgExpr
Maybe SortClause
_optSortClause <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
return (Maybe (NonEmpty FuncArgExpr)
-> FuncArgExpr -> Maybe SortClause -> FuncApplicationParams
VariadicFuncApplicationParams Maybe (NonEmpty FuncArgExpr)
forall a. Maybe a
Nothing FuncArgExpr
_arg Maybe SortClause
_optSortClause)
listVariadicFuncApplicationParams :: HeadedParsec Void Text FuncApplicationParams
listVariadicFuncApplicationParams = do
(NonEmpty FuncArgExpr
_argList, Text
_) <- HeadedParsec Void Text (NonEmpty FuncArgExpr, Text)
-> HeadedParsec Void Text (NonEmpty FuncArgExpr, Text)
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead (HeadedParsec Void Text (NonEmpty FuncArgExpr, Text)
-> HeadedParsec Void Text (NonEmpty FuncArgExpr, Text))
-> HeadedParsec Void Text (NonEmpty FuncArgExpr, Text)
-> HeadedParsec Void Text (NonEmpty FuncArgExpr, Text)
forall a b. (a -> b) -> a -> b
$ Parser ()
-> Parser Text
-> HeadedParsec Void Text FuncArgExpr
-> HeadedParsec Void Text (NonEmpty FuncArgExpr, Text)
forall err strm separator end el.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separator
-> HeadedParsec err strm end
-> HeadedParsec err strm el
-> HeadedParsec err strm (NonEmpty el, end)
sepEnd1 Parser ()
commaSeparator (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"variadic" Parser Text -> Parser () -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1) HeadedParsec Void Text FuncArgExpr
funcArgExpr
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
FuncArgExpr
_arg <- HeadedParsec Void Text FuncArgExpr
funcArgExpr
Maybe SortClause
_optSortClause <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
return (Maybe (NonEmpty FuncArgExpr)
-> FuncArgExpr -> Maybe SortClause -> FuncApplicationParams
VariadicFuncApplicationParams (NonEmpty FuncArgExpr -> Maybe (NonEmpty FuncArgExpr)
forall a. a -> Maybe a
Just NonEmpty FuncArgExpr
_argList) FuncArgExpr
_arg Maybe SortClause
_optSortClause)
starFuncApplicationParams :: HeadedParsec err strm FuncApplicationParams
starFuncApplicationParams = HeadedParsec err strm ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space HeadedParsec err strm ()
-> HeadedParsec err strm Char -> HeadedParsec err strm Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'*' HeadedParsec err strm Char
-> HeadedParsec err strm () -> HeadedParsec err strm ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec err strm ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead HeadedParsec err strm ()
-> HeadedParsec err strm () -> HeadedParsec err strm ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec err strm ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space HeadedParsec err strm ()
-> FuncApplicationParams
-> HeadedParsec err strm FuncApplicationParams
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> FuncApplicationParams
StarFuncApplicationParams
funcArgExpr :: HeadedParsec Void Text FuncArgExpr
funcArgExpr =
[HeadedParsec Void Text FuncArgExpr]
-> HeadedParsec Void Text FuncArgExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Ident
a <- HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Ident
typeFunctionName
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
[HeadedParsec Void Text FuncArgExpr]
-> HeadedParsec Void Text FuncArgExpr
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Tokens Text -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string Tokens Text
":="
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
WhereClause
b <- Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr
return (Ident -> WhereClause -> FuncArgExpr
ColonEqualsFuncArgExpr Ident
a WhereClause
b),
do
Tokens Text -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string Tokens Text
"=>"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
WhereClause
b <- Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text WhereClause
aExpr
return (Ident -> WhereClause -> FuncArgExpr
EqualsGreaterFuncArgExpr Ident
a WhereClause
b)
],
WhereClause -> FuncArgExpr
ExprFuncArgExpr (WhereClause -> FuncArgExpr)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text FuncArgExpr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr
]
symbolicExprBinOp :: HeadedParsec Void Text SymbolicExprBinOp
symbolicExprBinOp =
QualOp -> SymbolicExprBinOp
QualSymbolicExprBinOp (QualOp -> SymbolicExprBinOp)
-> HeadedParsec Void Text QualOp
-> HeadedParsec Void Text SymbolicExprBinOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text QualOp
qualOp
HeadedParsec Void Text SymbolicExprBinOp
-> HeadedParsec Void Text SymbolicExprBinOp
-> HeadedParsec Void Text SymbolicExprBinOp
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> MathOp -> SymbolicExprBinOp
MathSymbolicExprBinOp (MathOp -> SymbolicExprBinOp)
-> HeadedParsec Void Text MathOp
-> HeadedParsec Void Text SymbolicExprBinOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text MathOp
forall strm err.
(Stream strm, FoldCase (Tokens strm), IsString (Tokens strm),
Ord err, Token strm ~ Char) =>
HeadedParsec err strm MathOp
mathOp
lexicalExprBinOp :: HeadedParsec e s Text
lexicalExprBinOp = [HeadedParsec e s Text] -> HeadedParsec e s Text
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum ([HeadedParsec e s Text] -> HeadedParsec e s Text)
-> [HeadedParsec e s Text] -> HeadedParsec e s Text
forall a b. (a -> b) -> a -> b
$ (Text -> HeadedParsec e s Text)
-> [Text] -> [HeadedParsec e s Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase ([Text] -> [HeadedParsec e s Text])
-> [Text] -> [HeadedParsec e s Text]
forall a b. (a -> b) -> a -> b
$ [Text
"and", Text
"or", Text
"is distinct from", Text
"is not distinct from"]
qualOp :: HeadedParsec Void Text QualOp
qualOp =
[HeadedParsec Void Text QualOp] -> HeadedParsec Void Text QualOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Text -> QualOp
OpQualOp (Text -> QualOp) -> Parser Text -> HeadedParsec Void Text QualOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Text
op,
AnyOperator -> QualOp
OperatorQualOp (AnyOperator -> QualOp)
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text QualOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall clause content.
Parser clause -> Parser content -> Parser content
inParensWithClause (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"operator") HeadedParsec Void Text AnyOperator
anyOperator
]
qualAllOp :: HeadedParsec Void Text QualAllOp
qualAllOp =
[HeadedParsec Void Text QualAllOp]
-> HeadedParsec Void Text QualAllOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ AnyOperator -> QualAllOp
AnyQualAllOp (AnyOperator -> QualAllOp)
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text QualAllOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"operator" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall a. Parser a -> Parser a
inParens (Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyOperator
anyOperator)),
AllOp -> QualAllOp
AllQualAllOp (AllOp -> QualAllOp)
-> HeadedParsec Void Text AllOp -> HeadedParsec Void Text QualAllOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text AllOp
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm),
IsString (Tokens strm), Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm AllOp
allOp
]
op :: HeadedParsec err strm Text
op = do
Text
a <- Maybe String
-> (Token strm -> Bool) -> HeadedParsec err strm (Tokens strm)
forall err strm.
(Ord err, Stream strm) =>
Maybe String
-> (Token strm -> Bool) -> HeadedParsec err strm (Tokens strm)
takeWhile1P Maybe String
forall a. Maybe a
Nothing Char -> Bool
Token strm -> Bool
Predicate.opChar
case Text -> Maybe Text
Validation.op Text
a of
Maybe Text
Nothing -> Text -> HeadedParsec err strm Text
forall (m :: * -> *) a. Monad m => a -> m a
return Text
a
Just Text
err -> String -> HeadedParsec err strm Text
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (Text -> String
Text.unpack Text
err)
anyOperator :: HeadedParsec Void Text AnyOperator
anyOperator =
[HeadedParsec Void Text AnyOperator]
-> HeadedParsec Void Text AnyOperator
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ AllOp -> AnyOperator
AllOpAnyOperator (AllOp -> AnyOperator)
-> HeadedParsec Void Text AllOp
-> HeadedParsec Void Text AnyOperator
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text AllOp
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm),
IsString (Tokens strm), Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm AllOp
allOp,
Ident -> AnyOperator -> AnyOperator
QualifiedAnyOperator (Ident -> AnyOperator -> AnyOperator)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (AnyOperator -> AnyOperator)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
colId HeadedParsec Void Text (AnyOperator -> AnyOperator)
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'.' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text AnyOperator
-> HeadedParsec Void Text AnyOperator
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyOperator
anyOperator)
]
allOp :: HeadedParsec err strm AllOp
allOp =
[HeadedParsec err strm AllOp] -> HeadedParsec err strm AllOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Text -> AllOp
OpAllOp (Text -> AllOp)
-> HeadedParsec err strm Text -> HeadedParsec err strm AllOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec err strm Text
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Text
op,
MathOp -> AllOp
MathAllOp (MathOp -> AllOp)
-> HeadedParsec err strm MathOp -> HeadedParsec err strm AllOp
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec err strm MathOp
forall strm err.
(Stream strm, FoldCase (Tokens strm), IsString (Tokens strm),
Ord err, Token strm ~ Char) =>
HeadedParsec err strm MathOp
mathOp
]
mathOp :: HeadedParsec err strm MathOp
mathOp =
[HeadedParsec err strm MathOp] -> HeadedParsec err strm MathOp
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ MathOp
ArrowLeftArrowRightMathOp MathOp
-> HeadedParsec err strm (Tokens strm)
-> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Tokens strm -> HeadedParsec err strm (Tokens strm)
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm)) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string' Tokens strm
"<>",
MathOp
GreaterEqualsMathOp MathOp
-> HeadedParsec err strm (Tokens strm)
-> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Tokens strm -> HeadedParsec err strm (Tokens strm)
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm)) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string' Tokens strm
">=",
MathOp
ExclamationEqualsMathOp MathOp
-> HeadedParsec err strm (Tokens strm)
-> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Tokens strm -> HeadedParsec err strm (Tokens strm)
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm)) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string' Tokens strm
"!=",
MathOp
LessEqualsMathOp MathOp
-> HeadedParsec err strm (Tokens strm)
-> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Tokens strm -> HeadedParsec err strm (Tokens strm)
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm)) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string' Tokens strm
"<=",
MathOp
PlusMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'+',
MathOp
MinusMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'-',
MathOp
AsteriskMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'*',
MathOp
SlashMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'/',
MathOp
PercentMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'%',
MathOp
ArrowUpMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'^',
MathOp
ArrowLeftMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'<',
MathOp
ArrowRightMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'>',
MathOp
EqualsMathOp MathOp
-> HeadedParsec err strm Char -> HeadedParsec err strm MathOp
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'='
]
aexprConst :: HeadedParsec Void Text AexprConst
aexprConst =
[HeadedParsec Void Text AexprConst]
-> HeadedParsec Void Text AexprConst
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"interval"
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
AexprConst
a <-
[HeadedParsec Void Text AexprConst]
-> HeadedParsec Void Text AexprConst
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text
a <- Parser Text
sconst
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Interval
b <- HeadedParsec Void Text Interval
-> HeadedParsec Void Text (Maybe Interval)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text Interval
-> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Interval
interval)
return (Text -> Maybe Interval -> AexprConst
StringIntervalAexprConst Text
a Maybe Interval
b),
do
Int64
a <- Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inParens Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text
b <- Parser Text
sconst
return (Int64 -> Text -> AexprConst
IntIntervalAexprConst Int64
a Text
b)
]
return AexprConst
a,
do
ConstTypename
a <- HeadedParsec Void Text ConstTypename
constTypename
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text
b <- Parser Text
sconst
return (ConstTypename -> Text -> AexprConst
ConstTypenameAexprConst ConstTypename
a Text
b),
Bool -> AexprConst
BoolAexprConst Bool
True AexprConst -> Parser Text -> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"true",
Bool -> AexprConst
BoolAexprConst Bool
False AexprConst -> Parser Text -> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"false",
AexprConst
NullAexprConst AexprConst -> Parser Text -> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"null" HeadedParsec Void Text AexprConst
-> Parser () -> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parsec Void Text () -> Parser ()
forall err strm a.
(Ord err, Stream strm) =>
Parsec err strm a -> HeadedParsec err strm a
parse (ParsecT Void Text Identity Char -> Parsec Void Text ()
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m ()
Megaparsec.notFollowedBy ParsecT Void Text Identity Char
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
m (Token s)
MegaparsecChar.alphaNumChar),
(Int64 -> AexprConst)
-> (Fconst -> AexprConst) -> Either Int64 Fconst -> AexprConst
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either Int64 -> AexprConst
IAexprConst Fconst -> AexprConst
FAexprConst (Either Int64 Fconst -> AexprConst)
-> HeadedParsec Void Text (Either Int64 Fconst)
-> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (Either Int64 Fconst)
forall strm b a err.
(Stream strm, RealFloat b, Integral a, Ord err,
Token strm ~ Char) =>
HeadedParsec err strm (Either a b)
iconstOrFconst,
Text -> AexprConst
SAexprConst (Text -> AexprConst)
-> Parser Text -> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text
sconst,
String
-> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"bit literal" (HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst)
-> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall a b. (a -> b) -> a -> b
$ do
Tokens Text -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm)) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string' Tokens Text
"b'"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text
a <- Maybe String
-> (Token Text -> Bool) -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm) =>
Maybe String
-> (Token strm -> Bool) -> HeadedParsec err strm (Tokens strm)
takeWhile1P (String -> Maybe String
forall a. a -> Maybe a
Just String
"0 or 1") (\Token Text
b -> Char
Token Text
b Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'0' Bool -> Bool -> Bool
|| Char
Token Text
b Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'1')
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'\''
return (Text -> AexprConst
BAexprConst Text
a),
String
-> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"hex literal" (HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst)
-> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall a b. (a -> b) -> a -> b
$ do
Tokens Text -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm, FoldCase (Tokens strm)) =>
Tokens strm -> HeadedParsec err strm (Tokens strm)
string' Tokens Text
"x'"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Text
a <- Maybe String
-> (Token Text -> Bool) -> HeadedParsec Void Text (Tokens Text)
forall err strm.
(Ord err, Stream strm) =>
Maybe String
-> (Token strm -> Bool) -> HeadedParsec err strm (Tokens strm)
takeWhile1P (String -> Maybe String
forall a. a -> Maybe a
Just String
"Hex digit") Char -> Bool
Token Text -> Bool
Predicate.hexDigit
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'\''
return (Text -> AexprConst
XAexprConst Text
a),
HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead (HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst)
-> HeadedParsec Void Text AexprConst
-> HeadedParsec Void Text AexprConst
forall a b. (a -> b) -> a -> b
$ do
FuncName
a <- Parser FuncName
funcName
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'('
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
NonEmpty FuncArgExpr
b <- Parser ()
-> HeadedParsec Void Text FuncArgExpr
-> HeadedParsec Void Text (NonEmpty FuncArgExpr)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text FuncArgExpr
funcArgExpr
Maybe SortClause
c <- HeadedParsec Void Text SortClause
-> HeadedParsec Void Text (Maybe SortClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text SortClause
-> HeadedParsec Void Text SortClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text SortClause
sortClause)
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
')'
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text
d <- Parser Text
sconst
return (FuncName -> Maybe FuncConstArgs -> Text -> AexprConst
FuncAexprConst FuncName
a (FuncConstArgs -> Maybe FuncConstArgs
forall a. a -> Maybe a
Just (NonEmpty FuncArgExpr -> Maybe SortClause -> FuncConstArgs
FuncConstArgs NonEmpty FuncArgExpr
b Maybe SortClause
c)) Text
d),
FuncName -> Maybe FuncConstArgs -> Text -> AexprConst
FuncAexprConst (FuncName -> Maybe FuncConstArgs -> Text -> AexprConst)
-> Parser FuncName
-> HeadedParsec
Void Text (Maybe FuncConstArgs -> Text -> AexprConst)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser FuncName -> Parser FuncName
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead Parser FuncName
funcName Parser FuncName -> Parser () -> Parser FuncName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1) HeadedParsec Void Text (Maybe FuncConstArgs -> Text -> AexprConst)
-> HeadedParsec Void Text (Maybe FuncConstArgs)
-> HeadedParsec Void Text (Text -> AexprConst)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe FuncConstArgs -> HeadedParsec Void Text (Maybe FuncConstArgs)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe FuncConstArgs
forall a. Maybe a
Nothing HeadedParsec Void Text (Text -> AexprConst)
-> Parser Text -> HeadedParsec Void Text AexprConst
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Text
sconst
]
iconstOrFconst :: HeadedParsec err strm (Either a b)
iconstOrFconst = b -> Either a b
forall a b. b -> Either a b
Right (b -> Either a b)
-> HeadedParsec err strm b -> HeadedParsec err strm (Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec err strm b
forall strm float err.
(Stream strm, RealFloat float, Ord err, Token strm ~ Char) =>
HeadedParsec err strm float
fconst HeadedParsec err strm (Either a b)
-> HeadedParsec err strm (Either a b)
-> HeadedParsec err strm (Either a b)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> a -> Either a b
forall a b. a -> Either a b
Left (a -> Either a b)
-> HeadedParsec err strm a -> HeadedParsec err strm (Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec err strm a
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst
iconst :: HeadedParsec err strm decimal
iconst = HeadedParsec err strm decimal
forall err strm decimal.
(Ord err, Stream strm, Token strm ~ Char, Integral decimal) =>
HeadedParsec err strm decimal
decimal
fconst :: HeadedParsec err strm float
fconst = HeadedParsec err strm float
forall err strm float.
(Ord err, Stream strm, Token strm ~ Char, RealFloat float) =>
HeadedParsec err strm float
float
sconst :: Parser Text
sconst = Char -> Parser Text
quotedString Char
'\''
constTypename :: HeadedParsec Void Text ConstTypename
constTypename =
[HeadedParsec Void Text ConstTypename]
-> HeadedParsec Void Text ConstTypename
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Numeric -> ConstTypename
NumericConstTypename (Numeric -> ConstTypename)
-> HeadedParsec Void Text Numeric
-> HeadedParsec Void Text ConstTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Numeric
numeric,
ConstBit -> ConstTypename
ConstBitConstTypename (ConstBit -> ConstTypename)
-> HeadedParsec Void Text ConstBit
-> HeadedParsec Void Text ConstTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ConstBit
constBit,
ConstCharacter -> ConstTypename
ConstCharacterConstTypename (ConstCharacter -> ConstTypename)
-> HeadedParsec Void Text ConstCharacter
-> HeadedParsec Void Text ConstTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ConstCharacter
constCharacter,
ConstDatetime -> ConstTypename
ConstDatetimeConstTypename (ConstDatetime -> ConstTypename)
-> HeadedParsec Void Text ConstDatetime
-> HeadedParsec Void Text ConstTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ConstDatetime
constDatetime
]
numeric :: HeadedParsec Void Text Numeric
numeric =
[HeadedParsec Void Text Numeric] -> HeadedParsec Void Text Numeric
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Numeric
IntegerNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"integer",
Numeric
IntNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"int",
Numeric
SmallintNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"smallint",
Numeric
BigintNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"bigint",
Numeric
RealNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"real",
Maybe Int64 -> Numeric
FloatNumeric (Maybe Int64 -> Numeric)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"float" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser Int64 -> Parser Int64
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inParens Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)),
Numeric
DoublePrecisionNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"double precision",
Maybe (NonEmpty WhereClause) -> Numeric
DecimalNumeric (Maybe (NonEmpty WhereClause) -> Numeric)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"decimal" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
exprListInParens)),
Maybe (NonEmpty WhereClause) -> Numeric
DecNumeric (Maybe (NonEmpty WhereClause) -> Numeric)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"dec" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
exprListInParens)),
Maybe (NonEmpty WhereClause) -> Numeric
NumericNumeric (Maybe (NonEmpty WhereClause) -> Numeric)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"numeric" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
exprListInParens)),
Numeric
BooleanNumeric Numeric -> Parser Text -> HeadedParsec Void Text Numeric
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"boolean"
]
bit :: HeadedParsec Void Text ConstBit
bit = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"bit"
Bool
a <- Bool -> Parser Bool -> Parser Bool
forall (m :: * -> *) a. Alternative m => a -> m a -> m a
option Bool
False (Bool
True Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser Bool -> Parser Text -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"varying")
Maybe (NonEmpty WhereClause)
b <- HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
exprListInParens)
return (Bool -> Maybe (NonEmpty WhereClause) -> ConstBit
Bit Bool
a Maybe (NonEmpty WhereClause)
b)
constBit :: HeadedParsec Void Text ConstBit
constBit = HeadedParsec Void Text ConstBit
bit
constCharacter :: HeadedParsec Void Text ConstCharacter
constCharacter = Character -> Maybe Int64 -> ConstCharacter
ConstCharacter (Character -> Maybe Int64 -> ConstCharacter)
-> HeadedParsec Void Text Character
-> HeadedParsec Void Text (Maybe Int64 -> ConstCharacter)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadedParsec Void Text Character
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s Character
character HeadedParsec Void Text Character
-> Parser () -> HeadedParsec Void Text Character
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead) HeadedParsec Void Text (Maybe Int64 -> ConstCharacter)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text ConstCharacter
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Int64 -> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser Int64 -> Parser Int64
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inParens Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)
character :: HeadedParsec e s Character
character =
[HeadedParsec e s Character] -> HeadedParsec e s Character
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Bool -> Character
CharacterCharacter (Bool -> Character)
-> HeadedParsec e s Bool -> HeadedParsec e s Character
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"character" HeadedParsec e s Text
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
optVaryingAfterSpace),
Bool -> Character
CharCharacter (Bool -> Character)
-> HeadedParsec e s Bool -> HeadedParsec e s Character
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"char" HeadedParsec e s Text
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
optVaryingAfterSpace),
Character
VarcharCharacter Character -> HeadedParsec e s Text -> HeadedParsec e s Character
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"varchar",
Bool -> Character
NationalCharacterCharacter (Bool -> Character)
-> HeadedParsec e s Bool -> HeadedParsec e s Character
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"national character" HeadedParsec e s Text
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
optVaryingAfterSpace),
Bool -> Character
NationalCharCharacter (Bool -> Character)
-> HeadedParsec e s Bool -> HeadedParsec e s Character
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"national char" HeadedParsec e s Text
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
optVaryingAfterSpace),
Bool -> Character
NcharCharacter (Bool -> Character)
-> HeadedParsec e s Bool -> HeadedParsec e s Character
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"nchar" HeadedParsec e s Text
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s Bool
forall err strm.
(Ord err, Stream strm, Token strm ~ Char, Tokens strm ~ Text) =>
HeadedParsec err strm Bool
optVaryingAfterSpace)
]
where
optVaryingAfterSpace :: HeadedParsec err strm Bool
optVaryingAfterSpace = Bool
True Bool -> HeadedParsec err strm () -> HeadedParsec err strm Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ HeadedParsec err strm ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec err strm Bool
-> HeadedParsec err strm Text -> HeadedParsec err strm Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Text -> HeadedParsec err strm Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"varying" HeadedParsec err strm Bool
-> HeadedParsec err strm Bool -> HeadedParsec err strm Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> HeadedParsec err strm Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
constDatetime :: HeadedParsec Void Text ConstDatetime
constDatetime =
[HeadedParsec Void Text ConstDatetime]
-> HeadedParsec Void Text ConstDatetime
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"timestamp"
Maybe Int64
a <- Parser Int64 -> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Int64 -> Parser Int64
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inParens Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)
Maybe Bool
b <- Parser Bool -> HeadedParsec Void Text (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Bool -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Bool
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s Bool
timezone)
return (Maybe Int64 -> Maybe Bool -> ConstDatetime
TimestampConstDatetime Maybe Int64
a Maybe Bool
b),
do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"time"
Maybe Int64
a <- Parser Int64 -> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Int64 -> Parser Int64
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inParens Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)
Maybe Bool
b <- Parser Bool -> HeadedParsec Void Text (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Bool -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Bool
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s Bool
timezone)
return (Maybe Int64 -> Maybe Bool -> ConstDatetime
TimeConstDatetime Maybe Int64
a Maybe Bool
b)
]
timezone :: HeadedParsec e s Bool
timezone =
[HeadedParsec e s Bool] -> HeadedParsec e s Bool
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Bool
False Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"with time zone",
Bool
True Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"without time zone"
]
interval :: HeadedParsec Void Text Interval
interval =
[HeadedParsec Void Text Interval]
-> HeadedParsec Void Text Interval
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Interval
YearToMonthInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"year to month",
Interval
DayToHourInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"day to hour",
Interval
DayToMinuteInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"day to minute",
Maybe Int64 -> Interval
DayToSecondInterval (Maybe Int64 -> Interval)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"day to" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => HeadedParsec Void Text (Maybe a)
intervalSecond),
Interval
HourToMinuteInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"hour to minute",
Maybe Int64 -> Interval
HourToSecondInterval (Maybe Int64 -> Interval)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"hour to" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => HeadedParsec Void Text (Maybe a)
intervalSecond),
Maybe Int64 -> Interval
MinuteToSecondInterval (Maybe Int64 -> Interval)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> Parser Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"minute to" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => HeadedParsec Void Text (Maybe a)
intervalSecond),
Interval
YearInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"year",
Interval
MonthInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"month",
Interval
DayInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"day",
Interval
HourInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"hour",
Interval
MinuteInterval Interval -> Parser Text -> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"minute",
Maybe Int64 -> Interval
SecondInterval (Maybe Int64 -> Interval)
-> HeadedParsec Void Text (Maybe Int64)
-> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text (Maybe Int64)
forall a. Integral a => HeadedParsec Void Text (Maybe a)
intervalSecond
]
intervalSecond :: HeadedParsec Void Text (Maybe a)
intervalSecond = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"second"
Maybe a
a <- HeadedParsec Void Text a -> HeadedParsec Void Text (Maybe a)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> HeadedParsec Void Text a -> HeadedParsec Void Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text a -> HeadedParsec Void Text a
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text a
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)
return Maybe a
a
selectLimit :: HeadedParsec Void Text SelectLimit
selectLimit =
[HeadedParsec Void Text SelectLimit]
-> HeadedParsec Void Text SelectLimit
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
LimitClause
_a <- HeadedParsec Void Text LimitClause
limitClause
LimitClause -> OffsetClause -> SelectLimit
LimitOffsetSelectLimit LimitClause
_a (OffsetClause -> SelectLimit)
-> HeadedParsec Void Text OffsetClause
-> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text OffsetClause
-> HeadedParsec Void Text OffsetClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text OffsetClause
offsetClause) HeadedParsec Void Text SelectLimit
-> HeadedParsec Void Text SelectLimit
-> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SelectLimit -> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a. Applicative f => a -> f a
pure (LimitClause -> SelectLimit
LimitSelectLimit LimitClause
_a),
do
OffsetClause
_a <- HeadedParsec Void Text OffsetClause
offsetClause
OffsetClause -> LimitClause -> SelectLimit
OffsetLimitSelectLimit OffsetClause
_a (LimitClause -> SelectLimit)
-> HeadedParsec Void Text LimitClause
-> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text LimitClause
-> HeadedParsec Void Text LimitClause
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text LimitClause
limitClause) HeadedParsec Void Text SelectLimit
-> HeadedParsec Void Text SelectLimit
-> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SelectLimit -> HeadedParsec Void Text SelectLimit
forall (f :: * -> *) a. Applicative f => a -> f a
pure (OffsetClause -> SelectLimit
OffsetSelectLimit OffsetClause
_a)
]
limitClause :: HeadedParsec Void Text LimitClause
limitClause =
( do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"limit"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
SelectLimitValue
_a <- HeadedParsec Void Text SelectLimitValue
selectLimitValue
Maybe WhereClause
_b <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause))
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall a b. (a -> b) -> a -> b
$ do
Parser ()
commaSeparator
HeadedParsec Void Text WhereClause
aExpr
return (SelectLimitValue -> Maybe WhereClause -> LimitClause
LimitLimitClause SelectLimitValue
_a Maybe WhereClause
_b)
)
HeadedParsec Void Text LimitClause
-> HeadedParsec Void Text LimitClause
-> HeadedParsec Void Text LimitClause
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ( do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"fetch"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Bool
_a <- Parser Bool
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Bool
firstOrNext
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
[HeadedParsec Void Text LimitClause]
-> HeadedParsec Void Text LimitClause
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Bool
_b <- Parser Bool
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Bool
rowOrRows
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"only"
return (Bool -> Maybe SelectFetchFirstValue -> Bool -> LimitClause
FetchOnlyLimitClause Bool
_a Maybe SelectFetchFirstValue
forall a. Maybe a
Nothing Bool
_b),
do
SelectFetchFirstValue
_b <- HeadedParsec Void Text SelectFetchFirstValue
selectFetchFirstValue
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Bool
_c <- Parser Bool
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Bool
rowOrRows
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"only"
return (Bool -> Maybe SelectFetchFirstValue -> Bool -> LimitClause
FetchOnlyLimitClause Bool
_a (SelectFetchFirstValue -> Maybe SelectFetchFirstValue
forall a. a -> Maybe a
Just SelectFetchFirstValue
_b) Bool
_c)
]
)
offsetClause :: HeadedParsec Void Text OffsetClause
offsetClause = do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"offset"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
HeadedParsec Void Text OffsetClause
offsetClauseParams
offsetClauseParams :: HeadedParsec Void Text OffsetClause
offsetClauseParams =
SelectFetchFirstValue -> Bool -> OffsetClause
FetchFirstOffsetClause (SelectFetchFirstValue -> Bool -> OffsetClause)
-> HeadedParsec Void Text SelectFetchFirstValue
-> HeadedParsec Void Text (Bool -> OffsetClause)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text SelectFetchFirstValue
-> HeadedParsec Void Text SelectFetchFirstValue
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text SelectFetchFirstValue
selectFetchFirstValue HeadedParsec Void Text (Bool -> OffsetClause)
-> Parser Bool -> HeadedParsec Void Text OffsetClause
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Bool -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Bool
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Bool
rowOrRows)
HeadedParsec Void Text OffsetClause
-> HeadedParsec Void Text OffsetClause
-> HeadedParsec Void Text OffsetClause
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WhereClause -> OffsetClause
ExprOffsetClause (WhereClause -> OffsetClause)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text OffsetClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr
selectLimitValue :: HeadedParsec Void Text SelectLimitValue
selectLimitValue =
SelectLimitValue
AllSelectLimitValue SelectLimitValue
-> Parser Text -> HeadedParsec Void Text SelectLimitValue
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"all"
HeadedParsec Void Text SelectLimitValue
-> HeadedParsec Void Text SelectLimitValue
-> HeadedParsec Void Text SelectLimitValue
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> WhereClause -> SelectLimitValue
ExprSelectLimitValue (WhereClause -> SelectLimitValue)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text SelectLimitValue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
aExpr
rowOrRows :: HeadedParsec e s Bool
rowOrRows =
Bool
True Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"rows"
HeadedParsec e s Bool
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
False Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"row"
firstOrNext :: HeadedParsec e s Bool
firstOrNext =
Bool
False Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"first"
HeadedParsec e s Bool
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
True Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"next"
selectFetchFirstValue :: HeadedParsec Void Text SelectFetchFirstValue
selectFetchFirstValue =
CExpr -> SelectFetchFirstValue
ExprSelectFetchFirstValue (CExpr -> SelectFetchFirstValue)
-> HeadedParsec Void Text CExpr
-> HeadedParsec Void Text SelectFetchFirstValue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text CExpr
cExpr
HeadedParsec Void Text SelectFetchFirstValue
-> HeadedParsec Void Text SelectFetchFirstValue
-> HeadedParsec Void Text SelectFetchFirstValue
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool -> Either Int64 Fconst -> SelectFetchFirstValue
NumSelectFetchFirstValue (Bool -> Either Int64 Fconst -> SelectFetchFirstValue)
-> Parser Bool
-> HeadedParsec
Void Text (Either Int64 Fconst -> SelectFetchFirstValue)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser Bool
forall strm err.
(Stream strm, Ord err, Token strm ~ Char) =>
HeadedParsec err strm Bool
plusOrMinus Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser Bool -> Parser () -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space) HeadedParsec
Void Text (Either Int64 Fconst -> SelectFetchFirstValue)
-> HeadedParsec Void Text (Either Int64 Fconst)
-> HeadedParsec Void Text SelectFetchFirstValue
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text (Either Int64 Fconst)
forall strm b a err.
(Stream strm, RealFloat b, Integral a, Ord err,
Token strm ~ Char) =>
HeadedParsec err strm (Either a b)
iconstOrFconst
plusOrMinus :: HeadedParsec err strm Bool
plusOrMinus = Bool
False Bool -> HeadedParsec err strm Char -> HeadedParsec err strm Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'+' HeadedParsec err strm Bool
-> HeadedParsec err strm Bool -> HeadedParsec err strm Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
True Bool -> HeadedParsec err strm Char -> HeadedParsec err strm Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec err strm Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'-'
forLockingClause :: HeadedParsec Void Text ForLockingClause
forLockingClause = HeadedParsec Void Text ForLockingClause
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s ForLockingClause
readOnly HeadedParsec Void Text ForLockingClause
-> HeadedParsec Void Text ForLockingClause
-> HeadedParsec Void Text ForLockingClause
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text ForLockingClause
items
where
readOnly :: HeadedParsec e s ForLockingClause
readOnly = ForLockingClause
ReadOnlyForLockingClause ForLockingClause
-> HeadedParsec e s Text -> HeadedParsec e s ForLockingClause
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"for read only"
items :: HeadedParsec Void Text ForLockingClause
items = NonEmpty ForLockingItem -> ForLockingClause
ItemsForLockingClause (NonEmpty ForLockingItem -> ForLockingClause)
-> HeadedParsec Void Text (NonEmpty ForLockingItem)
-> HeadedParsec Void Text ForLockingClause
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser ()
-> HeadedParsec Void Text ForLockingItem
-> HeadedParsec Void Text (NonEmpty ForLockingItem)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec Void Text ForLockingItem
forLockingItem
forLockingItem :: HeadedParsec Void Text ForLockingItem
forLockingItem = do
ForLockingStrength
_strength <- HeadedParsec Void Text ForLockingStrength
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s ForLockingStrength
forLockingStrength
Maybe (NonEmpty QualifiedName)
_rels <- HeadedParsec Void Text (NonEmpty QualifiedName)
-> HeadedParsec Void Text (Maybe (NonEmpty QualifiedName))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (HeadedParsec Void Text (NonEmpty QualifiedName)
-> HeadedParsec Void Text (Maybe (NonEmpty QualifiedName)))
-> HeadedParsec Void Text (NonEmpty QualifiedName)
-> HeadedParsec Void Text (Maybe (NonEmpty QualifiedName))
forall a b. (a -> b) -> a -> b
$ Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Text -> Parser Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"of" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text (NonEmpty QualifiedName)
-> HeadedParsec Void Text (NonEmpty QualifiedName)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
-> HeadedParsec Void Text QualifiedName
-> HeadedParsec Void Text (NonEmpty QualifiedName)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text QualifiedName
qualifiedName
Maybe Bool
_nowaitOrSkip <- Parser Bool -> HeadedParsec Void Text (Maybe Bool)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser Bool -> Parser Bool
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Bool
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s Bool
nowaitOrSkip)
return (ForLockingStrength
-> Maybe (NonEmpty QualifiedName) -> Maybe Bool -> ForLockingItem
ForLockingItem ForLockingStrength
_strength Maybe (NonEmpty QualifiedName)
_rels Maybe Bool
_nowaitOrSkip)
forLockingStrength :: HeadedParsec e s ForLockingStrength
forLockingStrength =
ForLockingStrength
UpdateForLockingStrength ForLockingStrength
-> HeadedParsec e s Text -> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"for update"
HeadedParsec e s ForLockingStrength
-> HeadedParsec e s ForLockingStrength
-> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ForLockingStrength
NoKeyUpdateForLockingStrength ForLockingStrength
-> HeadedParsec e s Text -> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"for no key update"
HeadedParsec e s ForLockingStrength
-> HeadedParsec e s ForLockingStrength
-> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ForLockingStrength
ShareForLockingStrength ForLockingStrength
-> HeadedParsec e s Text -> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"for share"
HeadedParsec e s ForLockingStrength
-> HeadedParsec e s ForLockingStrength
-> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ForLockingStrength
KeyForLockingStrength ForLockingStrength
-> HeadedParsec e s Text -> HeadedParsec e s ForLockingStrength
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"for key share"
nowaitOrSkip :: HeadedParsec e s Bool
nowaitOrSkip = Bool
False Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"nowait" HeadedParsec e s Bool
-> HeadedParsec e s Bool -> HeadedParsec e s Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
True Bool -> HeadedParsec e s Text -> HeadedParsec e s Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall s e.
(FoldCase (Tokens s), Ord e, Stream s, Tokens s ~ Text,
Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyphrase Text
"skip locked"
quotedName :: HeadedParsec Void Text Ident
quotedName = (Text -> String) -> (Text -> Bool) -> Parser Text -> Parser Text
forall err strm a.
(Ord err, Stream strm) =>
(a -> String)
-> (a -> Bool)
-> HeadedParsec err strm a
-> HeadedParsec err strm a
filter (String -> Text -> String
forall a b. a -> b -> a
const String
"Empty name") (Bool -> Bool
not (Bool -> Bool) -> (Text -> Bool) -> Text -> Bool
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Bool
Text.null) (Char -> Parser Text
quotedString Char
'"') Parser Text
-> (Parser Text -> HeadedParsec Void Text Ident)
-> HeadedParsec Void Text Ident
forall a b. a -> (a -> b) -> b
& (Text -> Ident) -> Parser Text -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Ident
QuotedIdent
ident :: HeadedParsec Void Text Ident
ident = HeadedParsec Void Text Ident
quotedName HeadedParsec Void Text Ident
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Text -> Bool) -> HeadedParsec Void Text Ident
forall err strm.
(Ord err, Stream strm, Tokens strm ~ Text, Token strm ~ Char) =>
(Text -> Bool) -> HeadedParsec err strm Ident
keywordNameByPredicate (Bool -> Bool
not (Bool -> Bool) -> (Text -> Bool) -> Text -> Bool
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> Bool
Predicate.keyword)
{-# NOINLINE colId #-}
colId :: HeadedParsec Void Text Ident
colId =
String
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"identifier" (HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident)
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall a b. (a -> b) -> a -> b
$
HeadedParsec Void Text Ident
ident HeadedParsec Void Text Ident
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HashSet Text -> HeadedParsec Void Text Ident
forall err strm.
(Ord err, Stream strm, Tokens strm ~ Text, Token strm ~ Char) =>
HashSet Text -> HeadedParsec err strm Ident
keywordNameFromSet (HashSet Text
KeywordSet.unreservedKeyword HashSet Text -> HashSet Text -> HashSet Text
forall a. Semigroup a => a -> a -> a
<> HashSet Text
KeywordSet.colNameKeyword)
{-# NOINLINE filteredColId #-}
filteredColId :: t Text -> HeadedParsec Void Text Ident
filteredColId =
let _originalSet :: HashSet Text
_originalSet = HashSet Text
KeywordSet.unreservedKeyword HashSet Text -> HashSet Text -> HashSet Text
forall a. Semigroup a => a -> a -> a
<> HashSet Text
KeywordSet.colNameKeyword
_filteredSet :: t Text -> HashSet Text
_filteredSet = (Text -> HashSet Text -> HashSet Text)
-> HashSet Text -> t Text -> HashSet Text
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr Text -> HashSet Text -> HashSet Text
forall a. (Eq a, Hashable a) => a -> HashSet a -> HashSet a
HashSet.delete HashSet Text
_originalSet
in \t Text
_reservedKeywords -> String
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"identifier" (HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident)
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall a b. (a -> b) -> a -> b
$ HeadedParsec Void Text Ident
ident HeadedParsec Void Text Ident
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HashSet Text -> HeadedParsec Void Text Ident
forall err strm.
(Ord err, Stream strm, Tokens strm ~ Text, Token strm ~ Char) =>
HashSet Text -> HeadedParsec err strm Ident
keywordNameFromSet (t Text -> HashSet Text
forall (t :: * -> *). Foldable t => t Text -> HashSet Text
_filteredSet t Text
_reservedKeywords)
colLabel :: HeadedParsec Void Text Ident
colLabel =
String
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
String -> HeadedParsec err strm a -> HeadedParsec err strm a
label String
"column label" (HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident)
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall a b. (a -> b) -> a -> b
$
HashSet Text -> HeadedParsec Void Text Ident
forall err strm.
(Ord err, Stream strm, Tokens strm ~ Text, Token strm ~ Char) =>
HashSet Text -> HeadedParsec err strm Ident
keywordNameFromSet HashSet Text
KeywordSet.keyword HeadedParsec Void Text Ident
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text Ident
ident
qualifiedName :: HeadedParsec Void Text QualifiedName
qualifiedName =
Ident -> Indirection -> QualifiedName
IndirectedQualifiedName (Ident -> Indirection -> QualifiedName)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (Indirection -> QualifiedName)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Ident
colId HeadedParsec Void Text (Indirection -> QualifiedName)
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text QualifiedName
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection)
HeadedParsec Void Text QualifiedName
-> HeadedParsec Void Text QualifiedName
-> HeadedParsec Void Text QualifiedName
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Ident -> QualifiedName
SimpleQualifiedName (Ident -> QualifiedName)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text QualifiedName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
colId
columnref :: HeadedParsec Void Text Columnref
columnref = HeadedParsec Void Text Ident -> HeadedParsec Void Text Columnref
customizedColumnref HeadedParsec Void Text Ident
colId
filteredColumnref :: [Text] -> HeadedParsec Void Text Columnref
filteredColumnref [Text]
_keywords = HeadedParsec Void Text Ident -> HeadedParsec Void Text Columnref
customizedColumnref ([Text] -> HeadedParsec Void Text Ident
forall (t :: * -> *).
Foldable t =>
t Text -> HeadedParsec Void Text Ident
filteredColId [Text]
_keywords)
customizedColumnref :: HeadedParsec Void Text Ident -> HeadedParsec Void Text Columnref
customizedColumnref HeadedParsec Void Text Ident
colId = do
Ident
a <- HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Ident
colId
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Indirection
b <- HeadedParsec Void Text Indirection
-> HeadedParsec Void Text (Maybe Indirection)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection)
return (Ident -> Maybe Indirection -> Columnref
Columnref Ident
a Maybe Indirection
b)
anyName :: HeadedParsec Void Text AnyName
anyName = HeadedParsec Void Text Ident -> HeadedParsec Void Text AnyName
customizedAnyName HeadedParsec Void Text Ident
colId
filteredAnyName :: t Text -> HeadedParsec Void Text AnyName
filteredAnyName t Text
_keywords = HeadedParsec Void Text Ident -> HeadedParsec Void Text AnyName
customizedAnyName (t Text -> HeadedParsec Void Text Ident
forall (t :: * -> *).
Foldable t =>
t Text -> HeadedParsec Void Text Ident
filteredColId t Text
_keywords)
customizedAnyName :: HeadedParsec Void Text Ident -> HeadedParsec Void Text AnyName
customizedAnyName HeadedParsec Void Text Ident
colId = do
Ident
a <- HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Ident
colId
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe (NonEmpty Ident)
b <- HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (Maybe (NonEmpty Ident))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty Ident)
attrs)
return (Ident -> Maybe (NonEmpty Ident) -> AnyName
AnyName Ident
a Maybe (NonEmpty Ident)
b)
name :: HeadedParsec Void Text Ident
name = HeadedParsec Void Text Ident
colId
nameList :: HeadedParsec Void Text (NonEmpty Ident)
nameList = Parser ()
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (NonEmpty Ident)
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text Ident
name
cursorName :: HeadedParsec Void Text Ident
cursorName = HeadedParsec Void Text Ident
name
funcName :: Parser FuncName
funcName =
Ident -> Indirection -> FuncName
IndirectedFuncName (Ident -> Indirection -> FuncName)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text (Indirection -> FuncName)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall err strm a.
(Ord err, Stream strm) =>
HeadedParsec err strm a -> HeadedParsec err strm a
wrapToHead HeadedParsec Void Text Ident
colId HeadedParsec Void Text (Indirection -> FuncName)
-> HeadedParsec Void Text Indirection -> Parser FuncName
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Indirection
-> HeadedParsec Void Text Indirection
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Indirection
indirection)
Parser FuncName -> Parser FuncName -> Parser FuncName
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Ident -> FuncName
TypeFuncName (Ident -> FuncName)
-> HeadedParsec Void Text Ident -> Parser FuncName
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
typeFunctionName
typeFunctionName :: HeadedParsec Void Text Ident
typeFunctionName =
HashSet Text -> HeadedParsec Void Text Ident
forall err strm.
(Ord err, Stream strm, Tokens strm ~ Text, Token strm ~ Char) =>
HashSet Text -> HeadedParsec err strm Ident
keywordNameFromSet HashSet Text
KeywordSet.typeFunctionName
HeadedParsec Void Text Ident
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> HeadedParsec Void Text Ident
ident
indirection :: HeadedParsec Void Text Indirection
indirection = HeadedParsec Void Text IndirectionEl
-> HeadedParsec Void Text Indirection
forall (m :: * -> *) a. Alternative m => m a -> m (NonEmpty a)
some HeadedParsec Void Text IndirectionEl
indirectionEl
indirectionEl :: HeadedParsec Void Text IndirectionEl
indirectionEl =
[HeadedParsec Void Text IndirectionEl]
-> HeadedParsec Void Text IndirectionEl
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'.'
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
IndirectionEl
AllIndirectionEl IndirectionEl
-> HeadedParsec Void Text Char
-> HeadedParsec Void Text IndirectionEl
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'*' HeadedParsec Void Text IndirectionEl
-> HeadedParsec Void Text IndirectionEl
-> HeadedParsec Void Text IndirectionEl
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Ident -> IndirectionEl
AttrNameIndirectionEl (Ident -> IndirectionEl)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text IndirectionEl
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
attrName,
do
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'['
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
IndirectionEl
_a <-
[HeadedParsec Void Text IndirectionEl]
-> HeadedParsec Void Text IndirectionEl
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
':'
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Maybe WhereClause
_b <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text WhereClause
aExpr
return (Maybe WhereClause -> Maybe WhereClause -> IndirectionEl
SliceIndirectionEl Maybe WhereClause
forall a. Maybe a
Nothing Maybe WhereClause
_b),
do
WhereClause
_a <- HeadedParsec Void Text WhereClause
aExpr
[HeadedParsec Void Text IndirectionEl]
-> HeadedParsec Void Text IndirectionEl
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
':'
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Maybe WhereClause
_b <- HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text (Maybe WhereClause)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text WhereClause
aExpr
return (Maybe WhereClause -> Maybe WhereClause -> IndirectionEl
SliceIndirectionEl (WhereClause -> Maybe WhereClause
forall a. a -> Maybe a
Just WhereClause
_a) Maybe WhereClause
_b),
IndirectionEl -> HeadedParsec Void Text IndirectionEl
forall (m :: * -> *) a. Monad m => a -> m a
return (WhereClause -> IndirectionEl
ExprIndirectionEl WhereClause
_a)
]
]
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
']'
return IndirectionEl
_a
]
attrName :: HeadedParsec Void Text Ident
attrName = HeadedParsec Void Text Ident
colLabel
keywordNameFromSet :: HashSet Text -> HeadedParsec err strm Ident
keywordNameFromSet HashSet Text
_set = (Text -> Bool) -> HeadedParsec err strm Ident
forall err strm.
(Ord err, Stream strm, Tokens strm ~ Text, Token strm ~ Char) =>
(Text -> Bool) -> HeadedParsec err strm Ident
keywordNameByPredicate (HashSet Text -> Text -> Bool
forall a. (Eq a, Hashable a) => HashSet a -> a -> Bool
Predicate.inSet HashSet Text
_set)
keywordNameByPredicate :: (Text -> Bool) -> HeadedParsec err strm Ident
keywordNameByPredicate Text -> Bool
_predicate =
(Text -> Ident)
-> HeadedParsec err strm Text -> HeadedParsec err strm Ident
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Ident
UnquotedIdent (HeadedParsec err strm Text -> HeadedParsec err strm Ident)
-> HeadedParsec err strm Text -> HeadedParsec err strm Ident
forall a b. (a -> b) -> a -> b
$
(Text -> String)
-> (Text -> Bool)
-> HeadedParsec err strm Text
-> HeadedParsec err strm Text
forall err strm a.
(Ord err, Stream strm) =>
(a -> String)
-> (a -> Bool)
-> HeadedParsec err strm a
-> HeadedParsec err strm a
filter
(\Text
a -> String
"Reserved keyword " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Text -> String
forall a. Show a => a -> String
show Text
a String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" used as an identifier. If that's what you intend, you have to wrap it in double quotes.")
Text -> Bool
_predicate
HeadedParsec err strm Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Text
anyKeyword
anyKeyword :: HeadedParsec e s Text
anyKeyword = Parsec e s Text -> HeadedParsec e s Text
forall err strm a.
(Ord err, Stream strm) =>
Parsec err strm a -> HeadedParsec err strm a
parse (Parsec e s Text -> HeadedParsec e s Text)
-> Parsec e s Text -> HeadedParsec e s Text
forall a b. (a -> b) -> a -> b
$
String -> Parsec e s Text -> Parsec e s Text
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
Megaparsec.label String
"keyword" (Parsec e s Text -> Parsec e s Text)
-> Parsec e s Text -> Parsec e s Text
forall a b. (a -> b) -> a -> b
$ do
Char
_firstChar <- (Token s -> Bool) -> ParsecT e s Identity (Token s)
forall e s (m :: * -> *).
MonadParsec e s m =>
(Token s -> Bool) -> m (Token s)
Megaparsec.satisfy Char -> Bool
Token s -> Bool
Predicate.firstIdentifierChar
Text
_remainder <- Maybe String
-> (Token s -> Bool) -> ParsecT e s Identity (Tokens s)
forall e s (m :: * -> *).
MonadParsec e s m =>
Maybe String -> (Token s -> Bool) -> m (Tokens s)
Megaparsec.takeWhileP Maybe String
forall a. Maybe a
Nothing Char -> Bool
Token s -> Bool
Predicate.notFirstIdentifierChar
return (Text -> Text
Text.toLower (Char -> Text -> Text
Text.cons Char
_firstChar Text
_remainder))
keyword :: Text -> HeadedParsec e s Text
keyword Text
a = (Text -> Bool) -> HeadedParsec e s Text -> HeadedParsec e s Text
forall (m :: * -> *) a. MonadPlus m => (a -> Bool) -> m a -> m a
mfilter (Text
a Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
==) HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s Text
anyKeyword
keyphrase :: Text -> HeadedParsec e s Text
keyphrase Text
a =
Text -> [Text]
Text.words Text
a
[Text]
-> ([Text] -> [ParsecT e s Identity ()])
-> [ParsecT e s Identity ()]
forall a b. a -> (a -> b) -> b
& (Text -> ParsecT e s Identity ())
-> [Text] -> [ParsecT e s Identity ()]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (ParsecT e s Identity Text -> ParsecT e s Identity ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (ParsecT e s Identity Text -> ParsecT e s Identity ())
-> (Text -> ParsecT e s Identity Text)
-> Text
-> ParsecT e s Identity ()
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Text -> ParsecT e s Identity Text
forall e s (m :: * -> *).
(MonadParsec e s m, FoldCase (Tokens s)) =>
Tokens s -> m (Tokens s)
MegaparsecChar.string')
[ParsecT e s Identity ()]
-> ([ParsecT e s Identity ()] -> [ParsecT e s Identity ()])
-> [ParsecT e s Identity ()]
forall a b. a -> (a -> b) -> b
& ParsecT e s Identity ()
-> [ParsecT e s Identity ()] -> [ParsecT e s Identity ()]
forall a. a -> [a] -> [a]
intersperse ParsecT e s Identity ()
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
m ()
MegaparsecChar.space1
[ParsecT e s Identity ()]
-> ([ParsecT e s Identity ()] -> ParsecT e s Identity ())
-> ParsecT e s Identity ()
forall a b. a -> (a -> b) -> b
& [ParsecT e s Identity ()] -> ParsecT e s Identity ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_
ParsecT e s Identity ()
-> (ParsecT e s Identity () -> ParsecT e s Identity ())
-> ParsecT e s Identity ()
forall a b. a -> (a -> b) -> b
& (ParsecT e s Identity ()
-> ParsecT e s Identity () -> ParsecT e s Identity ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT e s Identity Char -> ParsecT e s Identity ()
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m ()
Megaparsec.notFollowedBy ((Token s -> Bool) -> ParsecT e s Identity (Token s)
forall e s (m :: * -> *).
MonadParsec e s m =>
(Token s -> Bool) -> m (Token s)
Megaparsec.satisfy Char -> Bool
Token s -> Bool
Predicate.notFirstIdentifierChar))
ParsecT e s Identity ()
-> (ParsecT e s Identity () -> ParsecT e s Identity Text)
-> ParsecT e s Identity Text
forall a b. a -> (a -> b) -> b
& (() -> Text)
-> ParsecT e s Identity () -> ParsecT e s Identity Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Text -> () -> Text
forall a b. a -> b -> a
const (Text -> Text
Text.toUpper Text
a))
ParsecT e s Identity Text
-> (ParsecT e s Identity Text -> ParsecT e s Identity Text)
-> ParsecT e s Identity Text
forall a b. a -> (a -> b) -> b
& String -> ParsecT e s Identity Text -> ParsecT e s Identity Text
forall e s (m :: * -> *) a.
MonadParsec e s m =>
String -> m a -> m a
Megaparsec.label (Text -> String
forall a. Show a => a -> String
show Text
a)
ParsecT e s Identity Text
-> (ParsecT e s Identity Text -> HeadedParsec e s Text)
-> HeadedParsec e s Text
forall a b. a -> (a -> b) -> b
& ParsecT e s Identity Text -> HeadedParsec e s Text
forall err strm a.
(Ord err, Stream strm) =>
Parsec err strm a -> HeadedParsec err strm a
parse
HeadedParsec e s Text
-> (HeadedParsec e s Text -> HeadedParsec e s Text)
-> HeadedParsec e s Text
forall a b. a -> (a -> b) -> b
& (HeadedParsec e s Text
-> HeadedParsec e s () -> HeadedParsec e s Text
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* HeadedParsec e s ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead)
typeList :: HeadedParsec Void Text TypeList
typeList = Parser ()
-> HeadedParsec Void Text Typename
-> HeadedParsec Void Text TypeList
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text Typename
typename
typename :: HeadedParsec Void Text Typename
typename =
do
Bool
a <- Bool -> Parser Bool -> Parser Bool
forall (m :: * -> *) a. Alternative m => a -> m a -> m a
option Bool
False (Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"setof" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Bool -> Parser Bool
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Bool
True)
SimpleTypename
b <- HeadedParsec Void Text SimpleTypename
simpleTypename
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
c <- HeadedParsec Void Text Char -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'?')
[HeadedParsec Void Text Typename]
-> HeadedParsec Void Text Typename
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"array"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe Int64
d <- Parser Int64 -> HeadedParsec Void Text (Maybe Int64)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser Int64 -> Parser Int64
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inBrackets Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst)
Bool
e <- HeadedParsec Void Text Char -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'?')
return (Bool
-> SimpleTypename
-> Bool
-> Maybe (TypenameArrayDimensions, Bool)
-> Typename
Typename Bool
a SimpleTypename
b Bool
c ((TypenameArrayDimensions, Bool)
-> Maybe (TypenameArrayDimensions, Bool)
forall a. a -> Maybe a
Just (Maybe Int64 -> TypenameArrayDimensions
ExplicitTypenameArrayDimensions Maybe Int64
d, Bool
e))),
do
Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space
NonEmpty (Maybe Int64)
d <- HeadedParsec Void Text (NonEmpty (Maybe Int64))
forall a. Integral a => HeadedParsec Void Text (NonEmpty (Maybe a))
arrayBounds
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Bool
e <- HeadedParsec Void Text Char -> Parser Bool
forall a. Parser a -> Parser Bool
trueIfPresent (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Char -> HeadedParsec Void Text Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'?')
return (Bool
-> SimpleTypename
-> Bool
-> Maybe (TypenameArrayDimensions, Bool)
-> Typename
Typename Bool
a SimpleTypename
b Bool
c ((TypenameArrayDimensions, Bool)
-> Maybe (TypenameArrayDimensions, Bool)
forall a. a -> Maybe a
Just (NonEmpty (Maybe Int64) -> TypenameArrayDimensions
BoundsTypenameArrayDimensions NonEmpty (Maybe Int64)
d, Bool
e))),
Typename -> HeadedParsec Void Text Typename
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool
-> SimpleTypename
-> Bool
-> Maybe (TypenameArrayDimensions, Bool)
-> Typename
Typename Bool
a SimpleTypename
b Bool
c Maybe (TypenameArrayDimensions, Bool)
forall a. Maybe a
Nothing)
]
arrayBounds :: HeadedParsec Void Text (NonEmpty (Maybe a))
arrayBounds = Parser ()
-> HeadedParsec Void Text (Maybe a)
-> HeadedParsec Void Text (NonEmpty (Maybe a))
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space (HeadedParsec Void Text (Maybe a)
-> HeadedParsec Void Text (Maybe a)
forall a. Parser a -> Parser a
inBrackets (HeadedParsec Void Text a -> HeadedParsec Void Text (Maybe a)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional HeadedParsec Void Text a
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst))
simpleTypename :: HeadedParsec Void Text SimpleTypename
simpleTypename =
[HeadedParsec Void Text SimpleTypename]
-> HeadedParsec Void Text SimpleTypename
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum ([HeadedParsec Void Text SimpleTypename]
-> HeadedParsec Void Text SimpleTypename)
-> [HeadedParsec Void Text SimpleTypename]
-> HeadedParsec Void Text SimpleTypename
forall a b. (a -> b) -> a -> b
$
[ do
Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"interval"
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
[HeadedParsec Void Text SimpleTypename]
-> HeadedParsec Void Text SimpleTypename
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
[ Either (Maybe Interval) Int64 -> SimpleTypename
ConstIntervalSimpleTypename (Either (Maybe Interval) Int64 -> SimpleTypename)
-> (Int64 -> Either (Maybe Interval) Int64)
-> Int64
-> SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int64 -> Either (Maybe Interval) Int64
forall a b. b -> Either a b
Right (Int64 -> SimpleTypename)
-> Parser Int64 -> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser () -> Parser Int64 -> Parser Int64
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int64 -> Parser Int64
forall a. Parser a -> Parser a
inParens Parser Int64
forall strm decimal err.
(Stream strm, Integral decimal, Ord err, Token strm ~ Char) =>
HeadedParsec err strm decimal
iconst),
Either (Maybe Interval) Int64 -> SimpleTypename
ConstIntervalSimpleTypename (Either (Maybe Interval) Int64 -> SimpleTypename)
-> (Maybe Interval -> Either (Maybe Interval) Int64)
-> Maybe Interval
-> SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Interval -> Either (Maybe Interval) Int64
forall a b. a -> Either a b
Left (Maybe Interval -> SimpleTypename)
-> HeadedParsec Void Text (Maybe Interval)
-> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Interval
-> HeadedParsec Void Text (Maybe Interval)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Interval
-> HeadedParsec Void Text Interval
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Interval
interval)
],
ConstDatetime -> SimpleTypename
ConstDatetimeSimpleTypename (ConstDatetime -> SimpleTypename)
-> HeadedParsec Void Text ConstDatetime
-> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ConstDatetime
constDatetime,
Numeric -> SimpleTypename
NumericSimpleTypename (Numeric -> SimpleTypename)
-> HeadedParsec Void Text Numeric
-> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Numeric
numeric,
ConstBit -> SimpleTypename
BitSimpleTypename (ConstBit -> SimpleTypename)
-> HeadedParsec Void Text ConstBit
-> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text ConstBit
bit,
Character -> SimpleTypename
CharacterSimpleTypename (Character -> SimpleTypename)
-> HeadedParsec Void Text Character
-> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Character
forall e s.
(Ord e, Stream s, FoldCase (Tokens s), Tokens s ~ Text,
Token s ~ Char) =>
HeadedParsec e s Character
character,
GenericType -> SimpleTypename
GenericTypeSimpleTypename (GenericType -> SimpleTypename)
-> HeadedParsec Void Text GenericType
-> HeadedParsec Void Text SimpleTypename
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text GenericType
genericType
]
genericType :: HeadedParsec Void Text GenericType
genericType = do
Ident
a <- HeadedParsec Void Text Ident
typeFunctionName
Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead
Maybe (NonEmpty Ident)
b <- HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (Maybe (NonEmpty Ident))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text (NonEmpty Ident)
-> HeadedParsec Void Text (NonEmpty Ident)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty Ident)
attrs)
Maybe (NonEmpty WhereClause)
c <- HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (Maybe (NonEmpty WhereClause))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text (NonEmpty WhereClause)
typeModifiers)
return (Ident
-> Maybe (NonEmpty Ident)
-> Maybe (NonEmpty WhereClause)
-> GenericType
GenericType Ident
a Maybe (NonEmpty Ident)
b Maybe (NonEmpty WhereClause)
c)
attrs :: HeadedParsec Void Text (NonEmpty Ident)
attrs = HeadedParsec Void Text Ident
-> HeadedParsec Void Text (NonEmpty Ident)
forall (m :: * -> *) a. Alternative m => m a -> m (NonEmpty a)
some (Char -> HeadedParsec Void Text Char
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
Char -> HeadedParsec err strm Char
char Char
'.' HeadedParsec Void Text Char -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space Parser ()
-> HeadedParsec Void Text Ident -> HeadedParsec Void Text Ident
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text Ident
attrName)
typeModifiers :: HeadedParsec Void Text (NonEmpty WhereClause)
typeModifiers = HeadedParsec Void Text (NonEmpty WhereClause)
-> HeadedParsec Void Text (NonEmpty WhereClause)
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text (NonEmpty WhereClause)
exprList
indexParams :: HeadedParsec Void Text IndexParams
indexParams = Parser ()
-> HeadedParsec Void Text IndexElem
-> HeadedParsec Void Text IndexParams
forall err strm separtor a.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm separtor
-> HeadedParsec err strm a -> HeadedParsec err strm (NonEmpty a)
sep1 Parser ()
commaSeparator HeadedParsec Void Text IndexElem
indexElem
indexElem :: HeadedParsec Void Text IndexElem
indexElem =
IndexElemDef
-> Maybe AnyName
-> Maybe AnyName
-> Maybe AscDesc
-> Maybe NullsOrder
-> IndexElem
IndexElem
(IndexElemDef
-> Maybe AnyName
-> Maybe AnyName
-> Maybe AscDesc
-> Maybe NullsOrder
-> IndexElem)
-> HeadedParsec Void Text IndexElemDef
-> HeadedParsec
Void
Text
(Maybe AnyName
-> Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadedParsec Void Text IndexElemDef
indexElemDef HeadedParsec Void Text IndexElemDef
-> Parser () -> HeadedParsec Void Text IndexElemDef
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead)
HeadedParsec
Void
Text
(Maybe AnyName
-> Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe AnyName)
-> HeadedParsec
Void
Text
(Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text AnyName
-> HeadedParsec Void Text (Maybe AnyName)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
collate)
HeadedParsec
Void
Text
(Maybe AnyName -> Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe AnyName)
-> HeadedParsec
Void Text (Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text AnyName
-> HeadedParsec Void Text (Maybe AnyName)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
class_)
HeadedParsec
Void Text (Maybe AscDesc -> Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe AscDesc)
-> HeadedParsec Void Text (Maybe NullsOrder -> IndexElem)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text AscDesc
-> HeadedParsec Void Text (Maybe AscDesc)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text AscDesc -> HeadedParsec Void Text AscDesc
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AscDesc
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s AscDesc
ascDesc)
HeadedParsec Void Text (Maybe NullsOrder -> IndexElem)
-> HeadedParsec Void Text (Maybe NullsOrder)
-> HeadedParsec Void Text IndexElem
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text (Maybe NullsOrder)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser ()
-> HeadedParsec Void Text NullsOrder
-> HeadedParsec Void Text NullsOrder
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text NullsOrder
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
HeadedParsec e s NullsOrder
nullsOrder)
indexElemDef :: HeadedParsec Void Text IndexElemDef
indexElemDef =
WhereClause -> IndexElemDef
ExprIndexElemDef (WhereClause -> IndexElemDef)
-> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text IndexElemDef
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text WhereClause
-> HeadedParsec Void Text WhereClause
forall a. Parser a -> Parser a
inParens HeadedParsec Void Text WhereClause
aExpr
HeadedParsec Void Text IndexElemDef
-> HeadedParsec Void Text IndexElemDef
-> HeadedParsec Void Text IndexElemDef
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> FuncExprWindowless -> IndexElemDef
FuncIndexElemDef (FuncExprWindowless -> IndexElemDef)
-> HeadedParsec Void Text FuncExprWindowless
-> HeadedParsec Void Text IndexElemDef
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text FuncExprWindowless
funcExprWindowless
HeadedParsec Void Text IndexElemDef
-> HeadedParsec Void Text IndexElemDef
-> HeadedParsec Void Text IndexElemDef
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Ident -> IndexElemDef
IdIndexElemDef (Ident -> IndexElemDef)
-> HeadedParsec Void Text Ident
-> HeadedParsec Void Text IndexElemDef
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HeadedParsec Void Text Ident
colId
collate :: HeadedParsec Void Text AnyName
collate = Text -> Parser Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"collate" Parser Text -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead Parser ()
-> HeadedParsec Void Text AnyName -> HeadedParsec Void Text AnyName
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec Void Text AnyName
anyName
class_ :: HeadedParsec Void Text AnyName
class_ = [Text] -> HeadedParsec Void Text AnyName
forall (t :: * -> *).
Foldable t =>
t Text -> HeadedParsec Void Text AnyName
filteredAnyName [Text
"asc", Text
"desc", Text
"nulls"]
ascDesc :: HeadedParsec e s AscDesc
ascDesc = Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"asc" HeadedParsec e s Text -> AscDesc -> HeadedParsec e s AscDesc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> AscDesc
AscAscDesc HeadedParsec e s AscDesc
-> HeadedParsec e s AscDesc -> HeadedParsec e s AscDesc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"desc" HeadedParsec e s Text -> AscDesc -> HeadedParsec e s AscDesc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> AscDesc
DescAscDesc
nullsOrder :: HeadedParsec e s NullsOrder
nullsOrder = Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"nulls" HeadedParsec e s Text -> HeadedParsec e s () -> HeadedParsec e s ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s ()
forall err strm.
(Ord err, Stream strm, Token strm ~ Char) =>
HeadedParsec err strm ()
space1 HeadedParsec e s () -> HeadedParsec e s () -> HeadedParsec e s ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> HeadedParsec e s ()
forall strm err. Stream strm => HeadedParsec err strm ()
endHead HeadedParsec e s ()
-> HeadedParsec e s NullsOrder -> HeadedParsec e s NullsOrder
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (NullsOrder
FirstNullsOrder NullsOrder -> HeadedParsec e s Text -> HeadedParsec e s NullsOrder
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"first" HeadedParsec e s NullsOrder
-> HeadedParsec e s NullsOrder -> HeadedParsec e s NullsOrder
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> NullsOrder
LastNullsOrder NullsOrder -> HeadedParsec e s Text -> HeadedParsec e s NullsOrder
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Text -> HeadedParsec e s Text
forall e s.
(Ord e, Stream s, Tokens s ~ Text, Token s ~ Char) =>
Text -> HeadedParsec e s Text
keyword Text
"last")