diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-06-26 11:38:46 +0200 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-06-26 11:38:46 +0200 |
commit | c9301deb9bf86aaf9144a66026bc121a3eededee (patch) | |
tree | 96c27298911114cbd6dfdb9c9cef0fc8db2ead57 /src | |
parent | a40cff8956e842f737739d93a7b160f0b4a03d13 (diff) | |
download | postgresql-c9301deb9bf86aaf9144a66026bc121a3eededee.tar.gz postgresql-c9301deb9bf86aaf9144a66026bc121a3eededee.zip |
Reword SPI_ERROR_TRANSACTION errors in PL/pgSQL
The previous message for SPI_ERROR_TRANSACTION claimed "cannot begin/end
transactions in PL/pgSQL", but that is no longer true. Nevertheless,
the error can still happen, so reword the messages. The error cases in
exec_prepare_plan() could never happen, so remove them.
Diffstat (limited to 'src')
-rw-r--r-- | src/pl/plpgsql/src/expected/plpgsql_transaction.out | 16 | ||||
-rw-r--r-- | src/pl/plpgsql/src/pl_exec.c | 29 | ||||
-rw-r--r-- | src/pl/plpgsql/src/sql/plpgsql_transaction.sql | 14 |
3 files changed, 32 insertions, 27 deletions
diff --git a/src/pl/plpgsql/src/expected/plpgsql_transaction.out b/src/pl/plpgsql/src/expected/plpgsql_transaction.out index 2d0e3fa85ed..7f008ac57e9 100644 --- a/src/pl/plpgsql/src/expected/plpgsql_transaction.out +++ b/src/pl/plpgsql/src/expected/plpgsql_transaction.out @@ -409,7 +409,7 @@ $$; INFO: read committed INFO: repeatable read INFO: read committed --- error case +-- error cases DO LANGUAGE plpgsql $$ BEGIN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; @@ -418,6 +418,20 @@ $$; ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query CONTEXT: SQL statement "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" PL/pgSQL function inline_code_block line 3 at SET +DO LANGUAGE plpgsql $$ +BEGIN + SAVEPOINT foo; +END; +$$; +ERROR: unsupported transaction command in PL/pgSQL +CONTEXT: PL/pgSQL function inline_code_block line 3 at SQL statement +DO LANGUAGE plpgsql $$ +BEGIN + EXECUTE 'COMMIT'; +END; +$$; +ERROR: EXECUTE of transaction commands is not implemented +CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE DROP TABLE test1; DROP TABLE test2; DROP TABLE test3; diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index ef013bcdc7f..66ecf5eb559 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -3965,27 +3965,8 @@ exec_prepare_plan(PLpgSQL_execstate *estate, (void *) expr, cursorOptions); if (plan == NULL) - { - /* Some SPI errors deserve specific error messages */ - switch (SPI_result) - { - case SPI_ERROR_COPY: - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot COPY to/from client in PL/pgSQL"))); - break; - case SPI_ERROR_TRANSACTION: - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot begin/end transactions in PL/pgSQL"), - errhint("Use a BEGIN block with an EXCEPTION clause instead."))); - break; - default: - elog(ERROR, "SPI_prepare_params failed for \"%s\": %s", - expr->query, SPI_result_code_string(SPI_result)); - break; - } - } + elog(ERROR, "SPI_prepare_params failed for \"%s\": %s", + expr->query, SPI_result_code_string(SPI_result)); if (keepplan) SPI_keepplan(plan); expr->plan = plan; @@ -4129,8 +4110,7 @@ exec_stmt_execsql(PLpgSQL_execstate *estate, case SPI_ERROR_TRANSACTION: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot begin/end transactions in PL/pgSQL"), - errhint("Use a BEGIN block with an EXCEPTION clause instead."))); + errmsg("unsupported transaction command in PL/pgSQL"))); break; default: @@ -4317,8 +4297,7 @@ exec_stmt_dynexecute(PLpgSQL_execstate *estate, case SPI_ERROR_TRANSACTION: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot begin/end transactions in PL/pgSQL"), - errhint("Use a BEGIN block with an EXCEPTION clause instead."))); + errmsg("EXECUTE of transaction commands is not implemented"))); break; default: diff --git a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql index 373d89864a2..eddc518bb6a 100644 --- a/src/pl/plpgsql/src/sql/plpgsql_transaction.sql +++ b/src/pl/plpgsql/src/sql/plpgsql_transaction.sql @@ -335,13 +335,25 @@ BEGIN END; $$; --- error case +-- error cases DO LANGUAGE plpgsql $$ BEGIN SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; END; $$; +DO LANGUAGE plpgsql $$ +BEGIN + SAVEPOINT foo; +END; +$$; + +DO LANGUAGE plpgsql $$ +BEGIN + EXECUTE 'COMMIT'; +END; +$$; + DROP TABLE test1; DROP TABLE test2; DROP TABLE test3; |