1
Fork 0

add support for values

This commit is contained in:
Jake Wheat 2013-12-17 13:27:16 +02:00
parent 4330b3d7e0
commit c52334943f
5 changed files with 18 additions and 4 deletions

View file

@ -599,7 +599,7 @@ and union, etc..
> queryExpr :: P QueryExpr > queryExpr :: P QueryExpr
> queryExpr = > queryExpr =
> choice [with > choice [with
> ,select >>= optionSuffix queryExprSuffix] > ,choice [values,select] >>= optionSuffix queryExprSuffix]
> where > where
> select = try (keyword_ "select") >> > select = try (keyword_ "select") >>
> Select > Select
@ -612,6 +612,8 @@ and union, etc..
> <*> option [] orderBy > <*> option [] orderBy
> <*> optionMaybe limit > <*> optionMaybe limit
> <*> optionMaybe offset > <*> optionMaybe offset
> values = try (keyword_ "values")
> >> Values <$> commaSep (parens (commaSep scalarExpr))
> queryExprSuffix :: QueryExpr -> P QueryExpr > queryExprSuffix :: QueryExpr -> P QueryExpr
> queryExprSuffix qe = > queryExprSuffix qe =

View file

@ -177,6 +177,9 @@
> (vcat $ punctuate comma $ flip map withs $ \(n,q) -> > (vcat $ punctuate comma $ flip map withs $ \(n,q) ->
> name n <+> text "as" <+> parens (queryExpr q)) > name n <+> text "as" <+> parens (queryExpr q))
> ,queryExpr qe] > ,queryExpr qe]
> queryExpr (Values vs) =
> text "values"
> <+> nest 7 (commaSep (map (parens . commaSep . map scalarExpr) vs))
> selectList :: [(Maybe Name, ScalarExpr)] -> Doc > selectList :: [(Maybe Name, ScalarExpr)] -> Doc
> selectList is = commaSep $ map si is > selectList is = commaSep $ map si is

View file

@ -159,6 +159,8 @@
> ,qe2 :: QueryExpr > ,qe2 :: QueryExpr
> } > }
> | With [(Name,QueryExpr)] QueryExpr > | With [(Name,QueryExpr)] QueryExpr
> | Values [[ScalarExpr]]
> deriving (Eq,Show,Read) > deriving (Eq,Show,Read)
TODO: add queryexpr parens to deal with e.g. TODO: add queryexpr parens to deal with e.g.

View file

@ -122,7 +122,7 @@ queries section
> ,"SELECT DISTINCT select_list t" > ,"SELECT DISTINCT select_list t"
> --,"VALUES (1, 'one'), (2, 'two'), (3, 'three');" -- values list > ,"VALUES (1, 'one'), (2, 'two'), (3, 'three');"
> ,"SELECT 1 AS column1, 'one' AS column2\n\ > ,"SELECT 1 AS column1, 'one' AS column2\n\
> \UNION ALL\n\ > \UNION ALL\n\
@ -130,8 +130,7 @@ queries section
> \UNION ALL\n\ > \UNION ALL\n\
> \SELECT 3, 'three';" > \SELECT 3, 'three';"
> --,"SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')) AS t (num,letter);" > ,"SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')) AS t (num,letter);"
> -- values list
> ,"WITH regional_sales AS (\n\ > ,"WITH regional_sales AS (\n\
> \ SELECT region, SUM(amount) AS total_sales\n\ > \ SELECT region, SUM(amount) AS total_sales\n\

View file

@ -23,6 +23,7 @@ These are a few misc tests which don't fit anywhere else.
> ,limit > ,limit
> ,combos > ,combos
> ,withQueries > ,withQueries
> ,values
> ] > ]
@ -185,3 +186,10 @@ These are a few misc tests which don't fit anywhere else.
> ms1 = ms "a" "t" > ms1 = ms "a" "t"
> ms2 = ms "a" "u" > ms2 = ms "a" "u"
> ms3 = ms "a" "x" > ms3 = ms "a" "x"
> values :: TestItem
> values = Group "values" $ map (uncurry TestQueryExpr)
> [("values (1,2),(3,4)"
> ,Values [[NumLit "1", NumLit "2"]
> ,[NumLit "3", NumLit "4"]])
> ]