work on the semicolon handling
This commit is contained in:
parent
cd7a15c193
commit
3f08adb4c5
|
@ -612,7 +612,7 @@ wrapper for query expr which ignores optional trailing semicolon.
|
|||
|
||||
> topLevelQueryExpr :: P QueryExpr
|
||||
> topLevelQueryExpr =
|
||||
> queryExpr <* (choice [try $ symbol_ ";", return()])
|
||||
> queryExpr >>= optionSuffix ((symbol ";" *>) . return)
|
||||
|
||||
wrapper to parse a series of query exprs from a single source. They
|
||||
must be separated by semicolon, but for the last expression, the
|
||||
|
@ -620,11 +620,9 @@ trailing semicolon is optional.
|
|||
|
||||
> queryExprs :: P [QueryExpr]
|
||||
> queryExprs = do
|
||||
> qe <- queryExpr
|
||||
> choice [[qe] <$ eof
|
||||
> ,symbol_ ";" *>
|
||||
> choice [[qe] <$ eof
|
||||
> ,(:) qe <$> queryExprs]]
|
||||
> ((:[]) <$> queryExpr)
|
||||
> >>= optionSuffix ((symbol ";" *>) . return)
|
||||
> >>= optionSuffix (\p -> (p++) <$> queryExprs)
|
||||
|
||||
------------------------------------------------
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ back into SQL source text. It attempts to format the output nicely.
|
|||
> module Language.SQL.SimpleSQL.Pretty
|
||||
> (prettyQueryExpr
|
||||
> ,prettyScalarExpr
|
||||
> ,prettyQueryExprs
|
||||
> ) where
|
||||
|
||||
> import Language.SQL.SimpleSQL.Syntax
|
||||
|
@ -17,6 +18,8 @@ back into SQL source text. It attempts to format the output nicely.
|
|||
> prettyScalarExpr :: ScalarExpr -> String
|
||||
> prettyScalarExpr = render . scalarExpr
|
||||
|
||||
> prettyQueryExprs :: [QueryExpr] -> String
|
||||
> prettyQueryExprs = render . vcat . map ((<> text ";") . queryExpr)
|
||||
|
||||
= scalar expressions
|
||||
|
||||
|
|
15
Tests.lhs
15
Tests.lhs
|
@ -11,6 +11,7 @@
|
|||
> data TestItem = Group String [TestItem]
|
||||
> | TestScalarExpr String ScalarExpr
|
||||
> | TestQueryExpr String QueryExpr
|
||||
> | TestQueryExprs String [QueryExpr]
|
||||
> | ParseQueryExpr String
|
||||
> deriving (Eq,Show)
|
||||
|
||||
|
@ -440,6 +441,17 @@
|
|||
> )
|
||||
> ]
|
||||
|
||||
> queryExprsParserTests :: TestItem
|
||||
> queryExprsParserTests = Group "query exprs" $ map (uncurry TestQueryExprs)
|
||||
> [("select 1",[ms])
|
||||
> ,("select 1;",[ms])
|
||||
> ,("select 1;select 1",[ms,ms])
|
||||
> ,("select 1;select 1;",[ms,ms])
|
||||
> ,(" select 1;select 1; ",[ms,ms])
|
||||
> ]
|
||||
> where
|
||||
> ms = makeSelect {qeSelectList = [(Nothing,NumLit "1")]}
|
||||
|
||||
> tpchTests :: TestItem
|
||||
> tpchTests =
|
||||
> Group "parse tpch"
|
||||
|
@ -450,6 +462,7 @@
|
|||
> Group "parserTest"
|
||||
> [scalarExprParserTests
|
||||
> ,queryExprParserTests
|
||||
> ,queryExprsParserTests
|
||||
> ,tpchTests
|
||||
> ]
|
||||
|
||||
|
@ -464,6 +477,8 @@
|
|||
> toTest parseScalarExpr prettyScalarExpr str expected
|
||||
> itemToTest (TestQueryExpr str expected) =
|
||||
> toTest parseQueryExpr prettyQueryExpr str expected
|
||||
> itemToTest (TestQueryExprs str expected) =
|
||||
> toTest parseQueryExprs prettyQueryExprs str expected
|
||||
> itemToTest (ParseQueryExpr str) =
|
||||
> toPTest parseQueryExpr prettyQueryExpr str
|
||||
|
||||
|
|
Loading…
Reference in a new issue