add directions to order by
This commit is contained in:
parent
2c1eedb70f
commit
1a8551825d
|
@ -267,10 +267,14 @@ to be.
|
|||
> having :: P (Maybe ScalarExpr)
|
||||
> having = optionMaybe (try (keyword_ "having") *> scalarExpr)
|
||||
|
||||
> orderBy :: P [ScalarExpr]
|
||||
> orderBy :: P [(ScalarExpr,Direction)]
|
||||
> orderBy = option [] (try (keyword_ "order")
|
||||
> *> keyword_ "by"
|
||||
> *> commaSep1 scalarExpr)
|
||||
> *> commaSep1 ob)
|
||||
> where
|
||||
> ob = (,) <$> scalarExpr
|
||||
> <*> option Asc (choice [Asc <$ keyword_ "asc"
|
||||
> ,Desc <$ keyword_ "desc"])
|
||||
|
||||
> queryExpr :: P QueryExpr
|
||||
> queryExpr =
|
||||
|
|
|
@ -111,10 +111,13 @@ back into SQL source text. It attempts to format the output nicely.
|
|||
> having = maybe empty
|
||||
> (\w -> sep [text "having"
|
||||
> ,nest 4 $ scalarExpr w])
|
||||
> orderBy :: [ScalarExpr] -> Doc
|
||||
> orderBy :: [(ScalarExpr,Direction)] -> Doc
|
||||
> orderBy [] = empty
|
||||
> orderBy os = sep [text "order by"
|
||||
> ,nest 4 $ commaSep $ map scalarExpr os]
|
||||
> ,nest 4 $ commaSep $ map f os]
|
||||
> where
|
||||
> f (e,Asc) = scalarExpr e
|
||||
> f (e,Desc) = scalarExpr e <+> text "desc"
|
||||
|
||||
|
||||
= utils
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
> ,TableRef(..)
|
||||
> ,JoinType(..)
|
||||
> ,JoinCondition(..)
|
||||
> ,Direction(..)
|
||||
> ) where
|
||||
|
||||
|
||||
|
@ -30,9 +31,11 @@
|
|||
> ,qeWhere :: Maybe ScalarExpr
|
||||
> ,qeGroupBy :: [ScalarExpr]
|
||||
> ,qeHaving :: Maybe ScalarExpr
|
||||
> ,qeOrderBy :: [ScalarExpr]
|
||||
> ,qeOrderBy :: [(ScalarExpr,Direction)]
|
||||
> } deriving (Eq,Show)
|
||||
|
||||
> data Direction = Asc | Desc deriving (Eq,Show)
|
||||
|
||||
> makeSelect :: QueryExpr
|
||||
> makeSelect = Select {qeSelectList = []
|
||||
> ,qeFrom = []
|
||||
|
|
7
TODO
7
TODO
|
@ -1,10 +1,13 @@
|
|||
|
||||
check tpch
|
||||
|
||||
add tests to cabal
|
||||
|
||||
haddock
|
||||
|
||||
dialect switching
|
||||
|
||||
refactor the join parsing
|
||||
|
||||
left factor parsing code
|
||||
|
||||
|
@ -19,8 +22,6 @@ emacs parse error formatting
|
|||
|
||||
= sql support
|
||||
|
||||
decimal literals, split string and number literals
|
||||
order by directions
|
||||
distinct/all
|
||||
limit,offset, top
|
||||
|
||||
|
@ -47,6 +48,8 @@ other missing operators
|
|||
|
||||
except, intersect, union
|
||||
|
||||
-- add docs and haddocks at this point
|
||||
|
||||
|
||||
review identifiers
|
||||
order by nulls first/last
|
||||
|
|
10
Tests.lhs
10
Tests.lhs
|
@ -199,9 +199,13 @@
|
|||
> orderBy :: TestItem
|
||||
> orderBy = Group "orderBy" $ map (uncurry TestQueryExpr)
|
||||
> [("select a from t order by a"
|
||||
> ,ms [Iden "a"])
|
||||
> ,ms [(Iden "a", Asc)])
|
||||
> ,("select a from t order by a, b"
|
||||
> ,ms [Iden "a", Iden "b"])
|
||||
> ,ms [(Iden "a", Asc), (Iden "b", Asc)])
|
||||
> ,("select a from t order by a asc"
|
||||
> ,ms [(Iden "a", Asc)])
|
||||
> ,("select a from t order by a desc, b desc"
|
||||
> ,ms [(Iden "a", Desc), (Iden "b", Desc)])
|
||||
> ]
|
||||
> where
|
||||
> ms o = makeSelect {qeSelectList = [(Nothing,Iden "a")]
|
||||
|
@ -231,7 +235,7 @@
|
|||
> ,qeGroupBy = [Iden "a"]
|
||||
> ,qeHaving = Just $ Op ">" [App "count" [NumLit "1"]
|
||||
> ,NumLit "5"]
|
||||
> ,qeOrderBy = [Iden "s"]
|
||||
> ,qeOrderBy = [(Iden "s", Asc)]
|
||||
> }
|
||||
> )
|
||||
> ]
|
||||
|
|
Loading…
Reference in a new issue