packages feed

hssqlppp-0.4.2: src-extra/tests/Database/HsSqlPpp/Tests/Parsing/Dml.lhs

> {-# LANGUAGE OverloadedStrings #-}
> module Database.HsSqlPpp.Tests.Parsing.Dml (dmlParsingTestData) where
>
> import Database.HsSqlPpp.Ast

> import Database.HsSqlPpp.Tests.Parsing.Utils

TODO:

from in update, using in delete (+ type check these)

> dmlParsingTestData:: Item
> dmlParsingTestData =
>    Group "dml" [
>      Group "insert" [
>       s "insert into testtable\n\
>         \(columna,columnb)\n\
>         \values (1,2);\n"
>        [Insert ea
>         (dqi "testtable")
>         [Nmc "columna", Nmc "columnb"]
>         (Values ea [[NumberLit ea "1", NumberLit ea "2"]])
>         Nothing]

multi row insert, test the stand alone values statement first, maybe
that should be in the select section?

>      ,s "values (1,2), (3,4);"
>      [QueryStatement ea $ Values ea [[NumberLit ea "1", NumberLit ea "2"]
>              ,[NumberLit ea "3", NumberLit ea "4"]]]
>
>      ,s "insert into testtable\n\
>         \(columna,columnb)\n\
>         \values (1,2), (3,4);\n"
>       [Insert ea
>         (dqi "testtable")
>         [Nmc "columna", Nmc "columnb"]
>         (Values ea [[NumberLit ea "1", NumberLit ea "2"]
>                 ,[NumberLit ea "3", NumberLit ea "4"]])
>         Nothing]

insert from select

>      ,s "insert into a\n\
>          \    select b from c;"
>       [Insert ea (dqi "a") []
>        (selectFrom [selI "b"] (Tref ea (i "c") (NoAlias ea)))
>        Nothing]
>
>      ,s "insert into testtable\n\
>         \(columna,columnb)\n\
>         \values (1,2) returning id;\n"
>       [Insert ea
>         (dqi "testtable")
>         [Nmc "columna", Nmc "columnb"]
>         (Values ea [[NumberLit ea "1", NumberLit ea "2"]])
>         (Just $ sl [selI "id"])]
>      ]
>
>     ,Group "update" [
>       s "update tb\n\
>         \  set x = 1, y = 2;"
>       [Update ea (dqi "tb") [SetClause ea (Nmc "x") $ NumberLit ea "1"
>                             ,SetClause ea (Nmc "y") $ NumberLit ea "2"]
>        [] Nothing Nothing]
>      ,s "update tb\n\
>         \  set x = 1, y = 2 where z = true;"
>       [Update ea (dqi "tb") [SetClause ea (Nmc "x") $ NumberLit ea "1"
>                             ,SetClause ea (Nmc "y") $ NumberLit ea "2"]
>        []
>        (Just $ FunCall ea (name "=")
>         [Identifier ea "z", BooleanLit ea True])
>        Nothing]
>      ,s "update tb\n\
>         \  set x = 1, y = 2 returning id;"
>       [Update ea (dqi "tb") [SetClause ea (Nmc "x") $ NumberLit ea "1"
>                             ,SetClause ea (Nmc "y") $ NumberLit ea "2"]
>        [] Nothing (Just $ sl [selI "id"])]
>      ,s "update tb\n\
>         \  set (x,y) = (1,2);"
>       [Update ea (dqi "tb")
>        [MultiSetClause ea [Nmc "x",Nmc "y"]
>         $ FunCall ea (name "!rowctor") [NumberLit ea "1"
>                                        ,NumberLit ea "2"]]
>        []
>        Nothing Nothing]
>      ]

FunCall ea "=" [FunCall ea "!rowctor" [Identifier ea "x",Identifier ea "y"],FunCall ea "!rowctor" [NumberLit ea "1",NumberLit ea "2"]])


>
>     ,Group "delete" [
>       s "delete from tbl1 where x = true;"
>       [Delete ea (dqi "tbl1") [] (Just $ FunCall ea (name "=")
>                                [Identifier ea "x", BooleanLit ea True])
>        Nothing]
>      ,s "delete from tbl1 where x = true returning id;"
>       [Delete ea (dqi "tbl1") [] (Just $ FunCall ea (name "=")
>                                [Identifier ea "x", BooleanLit ea True])
>        (Just $ sl [selI "id"])]
>      ]
>
>     ,Group "truncate" [
>       s "truncate test;"
>        [Truncate ea [dqi "test"] ContinueIdentity Restrict]
>
>      ,s "truncate table test, test2 restart identity cascade;"
>        [Truncate ea [dqi "test",dqi "test2"] RestartIdentity Cascade]
>      ]

copy, bit crap at the moment

>     ,Group "copy" [
>       s "copy tbl(a,b) from stdin;\n\
>         \bat\tt\n\
>         \bear\tf\n\
>         \\\.\n"
>       [Copy ea (dqi "tbl") [Nmc "a", Nmc "b"] Stdin
>        ,CopyData ea "\
>         \bat\tt\n\
>         \bear\tf\n"]
>      ]]
>  where
>    s = Stmt