hssqlppp-0.6.2: tests/Database/HsSqlPpp/Tests/Parsing/CombineQueryExprs.lhs
> {-# LANGUAGE QuasiQuotes,OverloadedStrings,TemplateHaskell #-}
>
> module Database.HsSqlPpp.Tests.Parsing.CombineQueryExprs (combineQueryExprs) where
>
> import Database.HsSqlPpp.Utils.Here
>
> import Database.HsSqlPpp.Syntax
> import Database.HsSqlPpp.Tests.Parsing.Utils
> import Database.HsSqlPpp.Tests.TestTypes
> import qualified Data.Text as T
> combineQueryExprs :: Item
> combineQueryExprs =
> Group "combineSelects"
> [q "select a from tbl\n\
> \except\n\
> \select a from tbl1;"
> $ cq Except stbl stbl1
> ,q "select a from tbl where true\n\
> \except\n\
> \select a from tbl1 where true;"
> $ cq Except
> (stbl {selWhere = Just lTrue})
> (stbl1 {selWhere = Just lTrue})
> ,q "select a from tbl\n\
> \union\n\
> \select a from tbl1;"
> $ cq Union stbl stbl1
> ,q "select a from tbl\n\
> \union all\n\
> \select a from tbl1;"
> $ cq UnionAll stbl stbl1
> ,q "(select 1 union select 2) union select 3;"
> $ cq Union (cq Union (sel 1) (sel 2)) (sel 3)
> ,q "select 1 union (select 2 union select 3);"
> $ cq Union (sel 1) (cq Union (sel 2) (sel 3))
> ,q [here|
> with a as (select a from tbl),
> b as (select a from tbl1)
> select 1; |]
> $ with [("a",stbl)
> ,("b",stbl1)] $ sel 1
> ,q [here|
> with a as (select a from tbl),
> b as (select a from tbl1)
> select 1
> union select 2; |]
> $ with [("a",stbl)
> ,("b",stbl1)] $ cq Union (sel 1) (sel 2)
> ]
> where
> stbl = makeSelect
> {selSelectList = sl [si $ ei "a"]
> ,selTref = [tref "tbl"]}
> stbl1 = makeSelect
> {selSelectList = sl [si $ ei "a"]
> ,selTref = [tref "tbl1"]}
> sel :: Int -> QueryExpr
> sel n = makeSelect {selSelectList = sl [si $ num $ T.pack $ show n]}
> q = ParseQueryExpr defaultParseFlags
> cq = CombineQueryExpr ea