packages feed

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


> {-# LANGUAGE OverloadedStrings #-}
> module Database.HsSqlPpp.Tests.Parsing.FunctionsDdl (functionsDdl) where
>
> import Database.HsSqlPpp.Syntax
> import Database.HsSqlPpp.Dialect

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

> functionsDdl:: Item
> functionsDdl =
>    Group "functionsddl" [
>      Group "basics" [
>       s "create function t1(text) returns text as $$\n\
>         \select a from t1 where b = $1;\n\
>         \$$ language sql stable;"
>       [CreateFunction ea (name "t1") [ParamDefTp ea $ st "text"]
>        (st "text") NoReplace Sql
>        (SqlFnBody ea
>         [QueryStatement ea $
>          makeSelect
>          {selSelectList = sl [si $ ei "a"]
>          ,selTref = [tref "t1"]
>          ,selWhere = Just $ binop "=" (ei "b") (PositionalArg ea 1)}])
>        Stable]
>      ,s "create function fn() returns void as $$\n\
>         \declare\n\
>         \  a int;\n\
>         \  b text;\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \$$ language plpgsql volatile;"
>       [CreateFunction ea (name "fn") [] (st "void") NoReplace Plpgsql
>        (PlpgsqlFnBody ea (Block ea Nothing [varDef "a" (st "int")
>                                            ,varDef "b" (st "text")]
>                           [NullStatement ea]))
>        Volatile]
>      ,s "create function fn() returns void as $$\n\
>         \declare\n\
>         \  a int;\n\
>         \  b text;\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \$$ language plpgsql volatile;"
>       [CreateFunction ea (name "fn") [] (st "void") NoReplace Plpgsql
>        (PlpgsqlFnBody ea
>         (Block ea Nothing [varDef "a" (st "int")
>                           ,varDef "b" (st "text")]
>         [NullStatement ea]))
>        Volatile]
>      ,s "create function fn(a text[]) returns int[] as $$\n\
>         \declare\n\
>         \  b xtype[] := '{}';\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \$$ language plpgsql immutable;"
>       [CreateFunction ea (name "fn")
>        [paramDef "a" $ at "text"]
>        (at "int") NoReplace Plpgsql
>        (PlpgsqlFnBody ea
>         (Block ea Nothing
>          [varDefv "b" (at "xtype") (stringQ "{}")]
>          [NullStatement ea]))
>        Immutable]
>      ,s "create function fn() returns void as '\n\
>         \declare\n\
>         \  a int := 3;\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \' language plpgsql stable;"
>       [CreateFunction ea (name "fn") [] (st "void") NoReplace Plpgsql
>        (PlpgsqlFnBody ea
>         (Block ea Nothing
>          [varDefv "a" (st "int") (num "3")]
>          [NullStatement ea]))
>        Stable]
>      ,s "create function fn(int) returns void as '\n\
>         \declare\n\
>         \  a alias for $1;\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \' language plpgsql stable;"
>       [CreateFunction ea (name "fn")
>        [ParamDefTp ea $ st "int"]
>        (st "void") NoReplace Plpgsql
>        (PlpgsqlFnBody ea
>         (Block ea Nothing
>          [ParamAlias ea (Nmc "a") 1]
>          [NullStatement ea]))
>        Stable]
>      ,s "create function fn(b int) returns void as '\n\
>         \declare\n\
>         \  a alias for b;\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \' language plpgsql stable;"
>       [CreateFunction ea (name "fn")
>        [ParamDef ea (Nmc "b") $ st "int"]
>        (st "void") NoReplace Plpgsql
>        (PlpgsqlFnBody ea
>         (Block ea Nothing
>          [VarAlias ea (Nmc "a") (name "b")]
>          [NullStatement ea]))
>        Stable]
>      ,s "create function fn() returns setof int as $$\n\
>         \begin\n\
>         \  null;\n\
>         \end;\n\
>         \$$ language plpgsql stable;"
>       [CreateFunction ea (name "fn") []
>        (SetOfTypeName ea $ st "int") NoReplace Plpgsql
>        (PlpgsqlFnBody ea (Block ea Nothing [] [NullStatement ea]))
>        Stable]
>      ,s "create function fn() returns void as $$\n\
>         \begin\n\
>         \  null;\n\
>         \end\n\
>         \$$ language plpgsql stable;"
>       [CreateFunction ea (name "fn") []
>        (st "void") NoReplace Plpgsql
>        (PlpgsqlFnBody ea (Block ea Nothing [] [NullStatement ea]))
>        Stable]
>      ,s "create or replace function fn() returns void as $$\n\
>         \begin\n\
>         \  null;\n\
>         \end\n\
>         \$$ language plpgsql stable;"
>       [CreateFunction ea (name "fn") []
>        (st "void") Replace Plpgsql
>        (PlpgsqlFnBody ea (Block ea Nothing [] [NullStatement ea]))
>        Stable]
>      ,s "drop function test(text);"
>       [DropFunction ea Require [(name "test",[st "text"])] Restrict]
>      ,s "drop function test(int,int);"
>       [DropFunction ea Require [(name "test",[st "int"
>                                             ,st "int"])] Restrict]
>      ,s "drop function if exists a(),test(text) cascade;"
>       [DropFunction ea IfExists [(name "a",[])
>                                 ,(name "test",[st "text"])] Cascade]
>     ]]
>  where
>    s = ParseStmts defaultParseFlags {pfDialect = postgresDialect}