packages feed

hssqlppp-0.6.2: tests/Database/HsSqlPpp/Tests/Parsing/SelectLists.lhs

> {-# LANGUAGE QuasiQuotes,OverloadedStrings #-}
>
> module Database.HsSqlPpp.Tests.Parsing.SelectLists (selectLists) where
>
> --import Database.HsSqlPpp.Utils.Here
>
> import Database.HsSqlPpp.Syntax

> import Database.HsSqlPpp.Tests.Parsing.Utils
> import Database.HsSqlPpp.Tests.TestTypes

> selectLists :: Item
> selectLists =
>    Group "selectLists"
>    [q "select a from tbl" stbl
>    ,q "select a,b from tbl"
>       $ stbl {selSelectList = sl [si $ ei "a"
>                                  ,si $ ei "b"]}
>    ,q "select a as b from tbl"
>       $ stbl {selSelectList = sl [sia (ei "a") $ Nmc "b"]}
>    ,q "select * from tbl"
>       $ stbl {selSelectList = sl [si $ Star ea]}
>    ,q "select tbl.* from tbl"
>       $ stbl {selSelectList = sl [si $ QStar ea (Nmc "tbl")]}
>    ,q "select a + b as b from tbl;"
>       $ stbl {selSelectList = sl [sia (binop "+" (ei "a") (ei "b")) $ Nmc "b"]}

>    -- window stuff
>    ,q "select row_number() over(order by a) as place from tbl;"
>       $ stbl
>         {selSelectList =
>           sl [sia (WindowApp ea
>                     (app "row_number" [])
>                     []
>                     [(ei "a", Asc, NullsDefault)] Nothing)
>               $ Nmc "place"]}
>    ,q "select row_number() over(order by a asc) as place from tbl;"
>       $ stbl
>         {selSelectList =
>           sl [sia (WindowApp ea
>                     (app "row_number" [])
>                     []
>                     [(ei "a", Asc, NullsDefault)] Nothing)
>               $ Nmc "place"]}
>    ,q "select row_number() over(order by a desc) as place from tbl;"
>       $ stbl
>         {selSelectList =
>           sl [sia (WindowApp ea
>                     (app "row_number" [])
>                     []
>                     [(ei "a", Desc, NullsDefault)] Nothing)
>               $ Nmc "place"]}
>    ,q "select row_number()\n\
>         \over(partition by a,b order by c) as place\n\
>         \from tbl;"
>       $ stbl
>         {selSelectList = sl [sia (WindowApp ea
>                                   (app "row_number" [])
>                                   [ei "a", ei "b"]
>                                   [(ei "c", Asc, NullsDefault)]
>                                   Nothing)
>                              (Nmc "place")]}
>    ,q "select row_number() over(), x from tbl;"
>       $ stbl
>         {selSelectList = sl [si $ WindowApp ea
>                                   (app "row_number" [])
>                                   [] [] Nothing
>                             ,si $ ei "x"]}

aggregates, group by, having

>    ,q "select count(distinct b) from tbl;"
>       $ stbl {selSelectList =
>               sl [si $ AggregateApp ea Distinct (app "count" [ei "b"]) []]}
>    ,q "select count(all b) from tbl;"
>       $ stbl {selSelectList =
>               sl [si $ AggregateApp ea All (app "count" [ei "b"]) []]}
>    ,q "select string_agg(distinct relname,',' order by relname1) from tbl;"
>       $ stbl {selSelectList =
>               sl [si $ AggregateApp ea Distinct
>                   (app "string_agg" [ei "relname",str ","])
>                   [(ei "relname1", Asc, NullsDefault)]]}
>    ,q "select a, count(b) from tbl group by a;"
>       $ stbl {selSelectList =
>               sl [si $ ei "a"
>                  ,si $ app "count" [ei "b"]]
>              ,selGroupBy = [ei "a"]}
>    ,q "select a, count(b) as cnt from tbl group by a having cnt > 4;"
>       $ stbl {selSelectList =
>               sl [si $ ei "a"
>                  ,sia (app "count" [ei "b"]) $ Nmc "cnt"]
>              ,selGroupBy = [ei "a"]
>              ,selHaving = Just $ binop  ">" (ei "cnt") (num "4")}
>    ,q "select a from tbl option (partition group);"
>       $ stbl {selOption = [QueryHintPartitionGroup]}
>    ,q "select a from tbl option (partition group,columnar host group);"
>       $ stbl {selOption = [QueryHintPartitionGroup,QueryHintColumnarHostGroup]}
>    ,q "select a b from tbl;"
>       $ stbl { selSelectList = sl [sia (ei "a") (Nmc "b")] }
>    ,q "select a b, b c, c d from tbl;"
>       $ stbl { selSelectList = sl [sia (ei "a") (Nmc "b"), sia (ei "b") (Nmc "c"), sia (ei "c") (Nmc "d")] }
>    ,q "select a + b b from tbl;"
>       $ stbl {selSelectList = sl [sia (binop "+" (ei "a") (ei "b")) $ Nmc "b"]}
>    ,q "select row_number() over(order by a) place from tbl;"
>       $ stbl
>         {selSelectList =
>           sl [sia (WindowApp ea
>                     (app "row_number" [])
>                     []
>                     [(ei "a", Asc, NullsDefault)] Nothing)
>               $ Nmc "place"]}
>    ]
>    where
>      stbl = makeSelect
>             {selSelectList = sl [si $ ei "a"]
>             ,selTref = [tref "tbl"]}
>      q = ParseQueryExpr defaultParseFlags