diff options
| author | Neil Conway <neilc@samurai.com> | 2005-06-14 06:43:15 +0000 |
|---|---|---|
| committer | Neil Conway <neilc@samurai.com> | 2005-06-14 06:43:15 +0000 |
| commit | d6636543c4becc4ba9989af8e5b490e1ee2e7c0e (patch) | |
| tree | 93479621c179876cee82edb2c79293c975b0a8c4 /src/test | |
| parent | bd6bf50b032a6d095c7f1513aa209d632b264a2f (diff) | |
| download | postgresql-d6636543c4becc4ba9989af8e5b490e1ee2e7c0e.tar.gz | |
Allow the parameters to PL/PgSQL's RAISE statement to be expressions,
instead of just scalar variables. Add regression tests and update the
documentation. Along the way, remove some redundant error checking
code from exec_stmt_perform().
Original patch from Pavel Stehule, reworked by Neil Conway.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/plpgsql.out | 54 | ||||
| -rw-r--r-- | src/test/regress/sql/plpgsql.sql | 34 |
2 files changed, 64 insertions, 24 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 2650cbb908..21101958ab 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -2418,17 +2418,17 @@ drop type eitype cascade; -- -- SQLSTATE and SQLERRM test -- --- should fail: SQLSTATE and SQLERRM are only in defined EXCEPTION --- blocks -create function excpt_test() returns void as $$ +create function excpt_test1() returns void as $$ begin raise notice '% %', sqlstate, sqlerrm; end; $$ language plpgsql; -ERROR: syntax error at or near "sqlstate" at character 79 -LINE 3: raise notice '% %', sqlstate, sqlerrm; - ^ --- should fail -create function excpt_test() returns void as $$ +-- should fail: SQLSTATE and SQLERRM are only in defined EXCEPTION +-- blocks +select excpt_test1(); +ERROR: column "sqlstate" does not exist +CONTEXT: SQL statement "SELECT sqlstate" +PL/pgSQL function "excpt_test1" line 2 at raise +create function excpt_test2() returns void as $$ begin begin begin @@ -2436,10 +2436,12 @@ begin end; end; end; $$ language plpgsql; -ERROR: syntax error at or near "sqlstate" at character 108 -LINE 5: raise notice '% %', sqlstate, sqlerrm; - ^ -create function excpt_test() returns void as $$ +-- should fail +select excpt_test2(); +ERROR: column "sqlstate" does not exist +CONTEXT: SQL statement "SELECT sqlstate" +PL/pgSQL function "excpt_test2" line 4 at raise +create function excpt_test3() returns void as $$ begin begin raise exception 'user exception'; @@ -2458,14 +2460,34 @@ begin raise notice '% %', sqlstate, sqlerrm; end; end; $$ language plpgsql; -select excpt_test(); +select excpt_test3(); NOTICE: caught exception P0001 user exception NOTICE: P0001 user exception NOTICE: caught exception 22012 division by zero NOTICE: P0001 user exception - excpt_test ------------- + excpt_test3 +------------- + +(1 row) + +drop function excpt_test1(); +drop function excpt_test2(); +drop function excpt_test3(); +-- parameters of raise stmt can be expressions +create function raise_exprs() returns void as $$ +declare + a integer[] = '{10,20,30}'; + c varchar = 'xyz'; + i integer; +begin + i := 2; + raise notice '%; %; %; %; %; %', a, a[i], c, (select c || 'abc'), row(10,'aaa',NULL,30), NULL; +end;$$ language plpgsql; +select raise_exprs(); +NOTICE: {10,20,30}; 20; xyz; xyzabc; (10,aaa,,30); <NULL> + raise_exprs +------------- (1 row) -drop function excpt_test(); +drop function raise_exprs(); diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index 9dc00f2f1e..375eef8959 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -2055,15 +2055,15 @@ drop type eitype cascade; -- SQLSTATE and SQLERRM test -- --- should fail: SQLSTATE and SQLERRM are only in defined EXCEPTION --- blocks -create function excpt_test() returns void as $$ +create function excpt_test1() returns void as $$ begin raise notice '% %', sqlstate, sqlerrm; end; $$ language plpgsql; +-- should fail: SQLSTATE and SQLERRM are only in defined EXCEPTION +-- blocks +select excpt_test1(); --- should fail -create function excpt_test() returns void as $$ +create function excpt_test2() returns void as $$ begin begin begin @@ -2071,8 +2071,10 @@ begin end; end; end; $$ language plpgsql; +-- should fail +select excpt_test2(); -create function excpt_test() returns void as $$ +create function excpt_test3() returns void as $$ begin begin raise exception 'user exception'; @@ -2092,5 +2094,21 @@ begin end; end; $$ language plpgsql; -select excpt_test(); -drop function excpt_test(); +select excpt_test3(); +drop function excpt_test1(); +drop function excpt_test2(); +drop function excpt_test3(); + +-- parameters of raise stmt can be expressions +create function raise_exprs() returns void as $$ +declare + a integer[] = '{10,20,30}'; + c varchar = 'xyz'; + i integer; +begin + i := 2; + raise notice '%; %; %; %; %; %', a, a[i], c, (select c || 'abc'), row(10,'aaa',NULL,30), NULL; +end;$$ language plpgsql; + +select raise_exprs(); +drop function raise_exprs(); |
