Merge branch 'master' of https://github.com/hanjoosten/simple-sql-parser into hanjoosten-master
This commit is contained in:
commit
933964e074
|
@ -1347,7 +1347,7 @@ and union, etc..
|
||||||
> mkSelect d sl Nothing =
|
> mkSelect d sl Nothing =
|
||||||
> makeSelect{qeSetQuantifier = d, qeSelectList = sl}
|
> makeSelect{qeSetQuantifier = d, qeSelectList = sl}
|
||||||
> mkSelect d sl (Just (TableExpression f w g h od ofs fe)) =
|
> mkSelect d sl (Just (TableExpression f w g h od ofs fe)) =
|
||||||
> Select d sl f w g h od ofs fe
|
> Select d sl f w g h od ofs fe []
|
||||||
> values = keyword_ "values"
|
> values = keyword_ "values"
|
||||||
> >> Values <$> commaSep (parens (commaSep valueExpr))
|
> >> Values <$> commaSep (parens (commaSep valueExpr))
|
||||||
> table = keyword_ "table" >> Table <$> names
|
> table = keyword_ "table" >> Table <$> names
|
||||||
|
@ -1383,7 +1383,7 @@ be in the public syntax?
|
||||||
> <*> option SQDefault duplicates
|
> <*> option SQDefault duplicates
|
||||||
> <*> corr
|
> <*> corr
|
||||||
> where
|
> where
|
||||||
> cq o d c q0 q1 = CombineQueryExpr q0 o d c q1
|
> cq o d c q0 q1 = CombineQueryExpr q0 o d c q1 []
|
||||||
> setOpK = choice [Union <$ keyword_ "union"
|
> setOpK = choice [Union <$ keyword_ "union"
|
||||||
> ,Intersect <$ keyword_ "intersect"
|
> ,Intersect <$ keyword_ "intersect"
|
||||||
> ,Except <$ keyword_ "except"]
|
> ,Except <$ keyword_ "except"]
|
||||||
|
|
|
@ -13,7 +13,7 @@ which have been changed to try to improve the layout of the output.
|
||||||
|
|
||||||
> import Language.SQL.SimpleSQL.Syntax
|
> import Language.SQL.SimpleSQL.Syntax
|
||||||
> import Text.PrettyPrint (render, vcat, text, (<>), (<+>), empty, parens,
|
> import Text.PrettyPrint (render, vcat, text, (<>), (<+>), empty, parens,
|
||||||
> nest, Doc, punctuate, comma, sep, quotes,
|
> nest, Doc, punctuate, comma, sep, fsep, quotes,
|
||||||
> doubleQuotes, brackets,hcat)
|
> doubleQuotes, brackets,hcat)
|
||||||
> import Data.Maybe (maybeToList, catMaybes)
|
> import Data.Maybe (maybeToList, catMaybes)
|
||||||
> import Data.List (intercalate)
|
> import Data.List (intercalate)
|
||||||
|
@ -221,6 +221,8 @@ which have been changed to try to improve the layout of the output.
|
||||||
> valueExpr _ (NextValueFor ns) =
|
> valueExpr _ (NextValueFor ns) =
|
||||||
> text "next value for" <+> names ns
|
> text "next value for" <+> names ns
|
||||||
|
|
||||||
|
> valueExpr d (QEComment cmt v) =
|
||||||
|
> vcat $ map comment cmt ++ [valueExpr d v]
|
||||||
|
|
||||||
> doubleUpQuotes :: String -> String
|
> doubleUpQuotes :: String -> String
|
||||||
> doubleUpQuotes [] = []
|
> doubleUpQuotes [] = []
|
||||||
|
@ -312,8 +314,9 @@ which have been changed to try to improve the layout of the output.
|
||||||
= query expressions
|
= query expressions
|
||||||
|
|
||||||
> queryExpr :: Dialect -> QueryExpr -> Doc
|
> queryExpr :: Dialect -> QueryExpr -> Doc
|
||||||
> queryExpr dia (Select d sl fr wh gb hv od off fe) =
|
> queryExpr dia (Select d sl fr wh gb hv od off fe cmt) =
|
||||||
> sep [text "select"
|
> fsep $ map comment cmt++
|
||||||
|
> [sep [text "select"
|
||||||
> ,case d of
|
> ,case d of
|
||||||
> SQDefault -> empty
|
> SQDefault -> empty
|
||||||
> All -> text "all"
|
> All -> text "all"
|
||||||
|
@ -326,7 +329,7 @@ which have been changed to try to improve the layout of the output.
|
||||||
> ,orderBy dia od
|
> ,orderBy dia od
|
||||||
> ,me (\e -> text "offset" <+> valueExpr dia e <+> text "rows") off
|
> ,me (\e -> text "offset" <+> valueExpr dia e <+> text "rows") off
|
||||||
> ,fetchFirst
|
> ,fetchFirst
|
||||||
> ]
|
> ]]
|
||||||
> where
|
> where
|
||||||
> fetchFirst =
|
> fetchFirst =
|
||||||
> me (\e -> if dia == MySQL
|
> me (\e -> if dia == MySQL
|
||||||
|
@ -334,8 +337,9 @@ which have been changed to try to improve the layout of the output.
|
||||||
> else text "fetch first" <+> valueExpr dia e
|
> else text "fetch first" <+> valueExpr dia e
|
||||||
> <+> text "rows only") fe
|
> <+> text "rows only") fe
|
||||||
|
|
||||||
> queryExpr dia (CombineQueryExpr q1 ct d c q2) =
|
> queryExpr dia (CombineQueryExpr q1 ct d c q2 cmt) =
|
||||||
> sep [queryExpr dia q1
|
> fsep $ map comment cmt++
|
||||||
|
> [sep [queryExpr dia q1
|
||||||
> ,text (case ct of
|
> ,text (case ct of
|
||||||
> Union -> "union"
|
> Union -> "union"
|
||||||
> Intersect -> "intersect"
|
> Intersect -> "intersect"
|
||||||
|
@ -347,7 +351,7 @@ which have been changed to try to improve the layout of the output.
|
||||||
> <+> case c of
|
> <+> case c of
|
||||||
> Corresponding -> text "corresponding"
|
> Corresponding -> text "corresponding"
|
||||||
> Respectively -> empty
|
> Respectively -> empty
|
||||||
> ,queryExpr dia q2]
|
> ,queryExpr dia q2]]
|
||||||
> queryExpr d (With rc withs qe) =
|
> queryExpr d (With rc withs qe) =
|
||||||
> text "with" <+> (if rc then text "recursive" else empty)
|
> text "with" <+> (if rc then text "recursive" else empty)
|
||||||
> <+> vcat [nest 5
|
> <+> vcat [nest 5
|
||||||
|
@ -441,3 +445,6 @@ which have been changed to try to improve the layout of the output.
|
||||||
|
|
||||||
> me :: (a -> Doc) -> Maybe a -> Doc
|
> me :: (a -> Doc) -> Maybe a -> Doc
|
||||||
> me = maybe empty
|
> me = maybe empty
|
||||||
|
|
||||||
|
> comment :: Comment -> Doc
|
||||||
|
> comment (Comment str) = text "/*" <+> text str <+> text "*/"
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
> ,JoinCondition(..)
|
> ,JoinCondition(..)
|
||||||
> -- * dialect
|
> -- * dialect
|
||||||
> ,Dialect(..)
|
> ,Dialect(..)
|
||||||
|
> -- * comment
|
||||||
|
> ,Comment(..)
|
||||||
> ) where
|
> ) where
|
||||||
|
|
||||||
> import Data.Data
|
> import Data.Data
|
||||||
|
@ -161,6 +163,7 @@
|
||||||
> | MultisetCtor [ValueExpr]
|
> | MultisetCtor [ValueExpr]
|
||||||
> | MultisetQueryCtor QueryExpr
|
> | MultisetQueryCtor QueryExpr
|
||||||
> | NextValueFor [Name]
|
> | NextValueFor [Name]
|
||||||
|
> | QEComment [Comment] ValueExpr
|
||||||
> deriving (Eq,Show,Read,Data,Typeable)
|
> deriving (Eq,Show,Read,Data,Typeable)
|
||||||
|
|
||||||
> -- | Represents an identifier name, which can be quoted or unquoted.
|
> -- | Represents an identifier name, which can be quoted or unquoted.
|
||||||
|
@ -278,6 +281,7 @@ This would make some things a bit cleaner?
|
||||||
> ,qeOrderBy :: [SortSpec]
|
> ,qeOrderBy :: [SortSpec]
|
||||||
> ,qeOffset :: Maybe ValueExpr
|
> ,qeOffset :: Maybe ValueExpr
|
||||||
> ,qeFetchFirst :: Maybe ValueExpr
|
> ,qeFetchFirst :: Maybe ValueExpr
|
||||||
|
> ,qeComment :: [Comment]
|
||||||
> }
|
> }
|
||||||
> | CombineQueryExpr
|
> | CombineQueryExpr
|
||||||
> {qe0 :: QueryExpr
|
> {qe0 :: QueryExpr
|
||||||
|
@ -285,6 +289,7 @@ This would make some things a bit cleaner?
|
||||||
> ,qeSetQuantifier :: SetQuantifier
|
> ,qeSetQuantifier :: SetQuantifier
|
||||||
> ,qeCorresponding :: Corresponding
|
> ,qeCorresponding :: Corresponding
|
||||||
> ,qe1 :: QueryExpr
|
> ,qe1 :: QueryExpr
|
||||||
|
> ,qeComment :: [Comment]
|
||||||
> }
|
> }
|
||||||
> | With
|
> | With
|
||||||
> {qeWithRecursive :: Bool
|
> {qeWithRecursive :: Bool
|
||||||
|
@ -321,7 +326,8 @@ I'm not sure if this is valid syntax or not.
|
||||||
> ,qeHaving = Nothing
|
> ,qeHaving = Nothing
|
||||||
> ,qeOrderBy = []
|
> ,qeOrderBy = []
|
||||||
> ,qeOffset = Nothing
|
> ,qeOffset = Nothing
|
||||||
> ,qeFetchFirst = Nothing}
|
> ,qeFetchFirst = Nothing
|
||||||
|
> ,qeComment = []}
|
||||||
|
|
||||||
|
|
||||||
> -- | Represents the Distinct or All keywords, which can be used
|
> -- | Represents the Distinct or All keywords, which can be used
|
||||||
|
@ -383,3 +389,9 @@ I'm not sure if this is valid syntax or not.
|
||||||
> data Dialect = SQL2011
|
> data Dialect = SQL2011
|
||||||
> | MySQL
|
> | MySQL
|
||||||
> deriving (Eq,Show,Read,Data,Typeable)
|
> deriving (Eq,Show,Read,Data,Typeable)
|
||||||
|
|
||||||
|
|
||||||
|
> -- | Comment. Useful when geterating SQL code programmatically.
|
||||||
|
> data Comment = Comment String
|
||||||
|
> deriving (Eq,Show,Read,Data,Typeable)
|
||||||
|
|
||||||
|
|
|
@ -144,24 +144,24 @@ These are a few misc tests which don't fit anywhere else.
|
||||||
> combos :: TestItem
|
> combos :: TestItem
|
||||||
> combos = Group "combos" $ map (uncurry (TestQueryExpr SQL2011))
|
> combos = Group "combos" $ map (uncurry (TestQueryExpr SQL2011))
|
||||||
> [("select a from t union select b from u"
|
> [("select a from t union select b from u"
|
||||||
> ,CombineQueryExpr ms1 Union SQDefault Respectively ms2)
|
> ,CombineQueryExpr ms1 Union SQDefault Respectively ms2 [])
|
||||||
|
|
||||||
> ,("select a from t intersect select b from u"
|
> ,("select a from t intersect select b from u"
|
||||||
> ,CombineQueryExpr ms1 Intersect SQDefault Respectively ms2)
|
> ,CombineQueryExpr ms1 Intersect SQDefault Respectively ms2 [])
|
||||||
|
|
||||||
> ,("select a from t except all select b from u"
|
> ,("select a from t except all select b from u"
|
||||||
> ,CombineQueryExpr ms1 Except All Respectively ms2)
|
> ,CombineQueryExpr ms1 Except All Respectively ms2 [])
|
||||||
|
|
||||||
> ,("select a from t union distinct corresponding \
|
> ,("select a from t union distinct corresponding \
|
||||||
> \select b from u"
|
> \select b from u"
|
||||||
> ,CombineQueryExpr ms1 Union Distinct Corresponding ms2)
|
> ,CombineQueryExpr ms1 Union Distinct Corresponding ms2 [])
|
||||||
|
|
||||||
> ,("select a from t union select a from t union select a from t"
|
> ,("select a from t union select a from t union select a from t"
|
||||||
> -- TODO: union should be left associative. I think the others also
|
> -- TODO: union should be left associative. I think the others also
|
||||||
> -- so this needs to be fixed (new optionSuffix variation which
|
> -- so this needs to be fixed (new optionSuffix variation which
|
||||||
> -- handles this)
|
> -- handles this)
|
||||||
> ,CombineQueryExpr ms1 Union SQDefault Respectively
|
> ,CombineQueryExpr ms1 Union SQDefault Respectively
|
||||||
> (CombineQueryExpr ms1 Union SQDefault Respectively ms1))
|
> (CombineQueryExpr ms1 Union SQDefault Respectively ms1 []) [])
|
||||||
> ]
|
> ]
|
||||||
> where
|
> where
|
||||||
> ms1 = makeSelect
|
> ms1 = makeSelect
|
||||||
|
|
Loading…
Reference in a new issue