mirror of
https://github.com/postgres/postgres.git
synced 2025-05-29 00:03:09 -04:00
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.
This commit is contained in:
parent
a40cff8956
commit
c9301deb9b
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user