content: 
  > {-# LANGUAGE OverloadedStrings #-}
  > module Database.HsSqlPpp.Tests.Parsing.Dml (dml) where
  >
  > import Database.HsSqlPpp.Syntax
  
  > import Database.HsSqlPpp.Tests.Parsing.Utils
  > import Database.HsSqlPpp.Tests.TestTypes
  
  TODO:
  
  from in update, using in delete (+ type check these)
  
  > dml:: Item
  > dml =
  >    Group "dml" [
  >      Group "insert" [
  >       s "insert into testtable\n\
  >         \(columna,columnb)\n\
  >         \values (1,2);\n"
  >        [Insert ea
  >         (name "testtable")
  >         [Nmc "columna", Nmc "columnb"]
  >         (Values ea [[num "1", num "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 [[num "1", num "2"]
  >                                     ,[num "3", num "4"]]]
  >
  >      ,s "insert into testtable\n\
  >         \(columna,columnb)\n\
  >         \values (1,2), (3,4);\n"
  >       [Insert ea
  >         (name "testtable")
  >         [Nmc "columna", Nmc "columnb"]
  >         (Values ea [[num "1", num "2"]
  >                    ,[num "3", num "4"]])
  >         Nothing]
  
  insert from select
  
  >      ,s "insert into a\n\
  >          \    select b from c;"
  >       [Insert ea (name "a") []
  >        (makeSelect
  >         {selSelectList = sl [si $ ei "b"]
  >         ,selTref = [tref "c"]})
  >        Nothing]
  >
  >      ,s "insert into testtable\n\
  >         \(columna,columnb)\n\
  >         \values (1,2) returning id;\n"
  >       [Insert ea
  >         (name "testtable")
  >         [Nmc "columna", Nmc "columnb"]
  >         (Values ea [[num "1", num "2"]])
  >         (Just $ sl [si $ ei "id"])]
  >      ]
  >
  >     ,Group "update" [
  >       s "update tb\n\
  >         \  set x = 1, y = 2;"
  >       [Update ea (name "tb") [set "x" $ num "1"
  >                             ,set "y" $ num "2"]
  >        [] Nothing Nothing]
  >      ,s "update tb\n\
  >         \  set x = 1, y = 2 where z = true;"
  >       [Update ea (name "tb") [set "x" $ num "1"
  >                             ,set "y" $ num "2"]
  >        []
  >        (Just $ binop "=" (ei "z") lTrue)
  >        Nothing]
  >      ,s "update tb\n\
  >         \  set x = 1, y = 2 returning id;"
  >       [Update ea (name "tb") [set "x" $ num "1"
  >                             ,set "y" $ num "2"]
  >        [] Nothing (Just $ sl [si $ ei "id"])]
  >      ,s "update tb\n\
  >         \  set (x,y) = (1,2);"
  >       [Update ea (name "tb")
  >        [MultiSetClause ea [Nmc "x",Nmc "y"]
  >         $ specop "rowctor" [num "1"
  >                             ,num "2"]]
  >        []
  >        Nothing Nothing]
  >      ]
  
  App ea "=" [App ea "rowctor" [Identifier ea "x",Identifier ea "y"],App ea "rowctor" [num "1",num "2"]])
  
  
  >
  >     ,Group "delete" [
  >       s "delete from tbl1 where x = true;"
  >       [Delete ea (name "tbl1") [] (Just $ binop "=" (ei "x") lTrue)
  >        Nothing]
  >      ,s "delete from tbl1 where x = true returning id;"
  >       [Delete ea (name "tbl1") [] (Just $ binop "=" (ei "x") lTrue)
  >        (Just $ sl [si $ ei "id"])]
  >      ]
  >
  >     ,Group "truncate" [
  >       s "truncate test;"
  >        [Truncate ea [name "test"] ContinueIdentity Restrict]
  >
  >      ,s "truncate table test, test2 restart identity cascade;"
  >        [Truncate ea [name "test",name "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"
  >       [CopyFrom ea (name "tbl") [Nmc "a", Nmc "b"] Stdin []
  >        ,CopyData ea "\
  >         \bat\tt\n\
  >         \bear\tf\n"]
  >      ,s "copy tbl (a,b) from 'filename' with delimiter '|';"
  >       [CopyFrom ea (name "tbl") [Nmc "a", Nmc "b"]
  >       (CopyFilename "filename")
  >        [CopyFromDelimiter "|"]]
  >      ,s "copy tbl (a,b) from 'filename' with delimiter '|' parsers 'b=oracle';"
  >       [CopyFrom ea (name "tbl") [Nmc "a", Nmc "b"]
  >       (CopyFilename "filename")
  >        [CopyFromDelimiter "|",CopyFromParsers "b=oracle"]]
  >      ,s "copy tbl (a,b) from 'filename' with delimiter '|' error_log 'errors.log';"
  >       [CopyFrom ea (name "tbl") [Nmc "a", Nmc "b"]
  >       (CopyFilename "filename")
  >        [CopyFromDelimiter "|",CopyFromErrorLog "errors.log"]]
  >      ,s "copy tbl (a,b) from 'filename' with delimiter '|' error_log 'errors.log' error_verbosity 1;"
  >       [CopyFrom ea (name "tbl") [Nmc "a", Nmc "b"]
  >       (CopyFilename "filename")
  >        [CopyFromDelimiter "|", CopyFromErrorLog "errors.log", CopyFromErrorVerbosity 1]]
  >      ,s "copy tbl (a,b) from 'filename' with delimiter '|' error_log 'errors.log' error_verbosity 1 parsers 'b=oracle';"
  >       [CopyFrom ea (name "tbl") [Nmc "a", Nmc "b"]
  >       (CopyFilename "filename")
  >        [CopyFromDelimiter "|", CopyFromErrorLog "errors.log", CopyFromErrorVerbosity 1,CopyFromParsers "b=oracle"]]
  >      ,s "copy tbl to 'file';"
  >       [CopyTo ea (CopyTable (name "tbl") []) "file" []]
  >      ,s "copy tbl(a,b) to 'file';"
  >       [CopyTo ea (CopyTable (name "tbl") [Nmc "a", Nmc "b"]) "file" []]
  >      ,s "copy (select * from tbl) to 'file' with format binary;"
  >       [CopyTo ea (CopyQuery $ makeSelect {selSelectList = sl [si $ Star ea]
  >                                          ,selTref = [tref "tbl"]})
  >        "file" [CopyToFormat "binary"]]
  >      ]]
  >  where
  >    s = ParseStmts defaultParseFlags
  