diff options
| author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-09-02 15:53:06 +0300 |
|---|---|---|
| committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-09-02 15:56:50 +0300 |
| commit | c1008f0037ec9c738127c2fa6d7f6c88d885f45f (patch) | |
| tree | 6832c92a64a63ee5321008d8d3a46cc170f6c7ce /src/test | |
| parent | f8f4227976a2cdb8ac7c611e49da03aa9e65e0d2 (diff) | |
| download | postgresql-c1008f0037ec9c738127c2fa6d7f6c88d885f45f.tar.gz | |
Check number of parameters in RAISE statement at compile time.
The number of % parameter markers in RAISE statement should match the number
of parameters given. We used to check that at execution time, but we have
all the information needed at compile time, so let's check it at compile
time instead. It's generally better to find mistakes earlier.
Marko Tiikkaja, reviewed by Fabien Coelho
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/plpgsql.out | 19 | ||||
| -rw-r--r-- | src/test/regress/sql/plpgsql.sql | 11 |
2 files changed, 23 insertions, 7 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 8892bb417d..983f1b8b5a 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -2446,18 +2446,29 @@ begin return $1; end; $$ language plpgsql; -select raise_test1(5); ERROR: too many parameters specified for RAISE -CONTEXT: PL/pgSQL function raise_test1(integer) line 3 at RAISE +CONTEXT: compilation of PL/pgSQL function "raise_test1" near line 3 create function raise_test2(int) returns int as $$ begin raise notice 'This message has too few parameters: %, %, %', $1, $1; return $1; end; $$ language plpgsql; -select raise_test2(10); ERROR: too few parameters specified for RAISE -CONTEXT: PL/pgSQL function raise_test2(integer) line 3 at RAISE +CONTEXT: compilation of PL/pgSQL function "raise_test2" near line 3 +create function raise_test3(int) returns int as $$ +begin + raise notice 'This message has no parameters (despite having %% signs in it)!'; + return $1; +end; +$$ language plpgsql; +select raise_test3(1); +NOTICE: This message has no parameters (despite having % signs in it)! + raise_test3 +------------- + 1 +(1 row) + -- Test re-RAISE inside a nested exception block. This case is allowed -- by Oracle's PL/SQL but was handled differently by PG before 9.1. CREATE FUNCTION reraise_test() RETURNS void AS $$ diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index c5616ee8fc..2abcbc8d3c 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -2078,8 +2078,6 @@ begin end; $$ language plpgsql; -select raise_test1(5); - create function raise_test2(int) returns int as $$ begin raise notice 'This message has too few parameters: %, %, %', $1, $1; @@ -2087,7 +2085,14 @@ begin end; $$ language plpgsql; -select raise_test2(10); +create function raise_test3(int) returns int as $$ +begin + raise notice 'This message has no parameters (despite having %% signs in it)!'; + return $1; +end; +$$ language plpgsql; + +select raise_test3(1); -- Test re-RAISE inside a nested exception block. This case is allowed -- by Oracle's PL/SQL but was handled differently by PG before 9.1. |
