Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc9301de

Browse files
committed
Reword SPI_ERROR_TRANSACTION errors in PL/pgSQL
The previous message for SPI_ERROR_TRANSACTION claimed "cannot begin/endtransactions in PL/pgSQL", but that is no longer true. Nevertheless,the error can still happen, so reword the messages. The error cases inexec_prepare_plan() could never happen, so remove them.
1 parenta40cff8 commitc9301de

File tree

3 files changed

+32
-27
lines changed

3 files changed

+32
-27
lines changed

‎src/pl/plpgsql/src/expected/plpgsql_transaction.out

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ $$;
409409
INFO: read committed
410410
INFO: repeatable read
411411
INFO: read committed
412-
-- errorcase
412+
-- errorcases
413413
DO LANGUAGE plpgsql $$
414414
BEGIN
415415
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
@@ -418,6 +418,20 @@ $$;
418418
ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query
419419
CONTEXT: SQL statement "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ"
420420
PL/pgSQL function inline_code_block line 3 at SET
421+
DO LANGUAGE plpgsql $$
422+
BEGIN
423+
SAVEPOINT foo;
424+
END;
425+
$$;
426+
ERROR: unsupported transaction command in PL/pgSQL
427+
CONTEXT: PL/pgSQL function inline_code_block line 3 at SQL statement
428+
DO LANGUAGE plpgsql $$
429+
BEGIN
430+
EXECUTE 'COMMIT';
431+
END;
432+
$$;
433+
ERROR: EXECUTE of transaction commands is not implemented
434+
CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE
421435
DROP TABLE test1;
422436
DROP TABLE test2;
423437
DROP TABLE test3;

‎src/pl/plpgsql/src/pl_exec.c

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3965,27 +3965,8 @@ exec_prepare_plan(PLpgSQL_execstate *estate,
39653965
(void*)expr,
39663966
cursorOptions);
39673967
if (plan==NULL)
3968-
{
3969-
/* Some SPI errors deserve specific error messages */
3970-
switch (SPI_result)
3971-
{
3972-
caseSPI_ERROR_COPY:
3973-
ereport(ERROR,
3974-
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3975-
errmsg("cannot COPY to/from client in PL/pgSQL")));
3976-
break;
3977-
caseSPI_ERROR_TRANSACTION:
3978-
ereport(ERROR,
3979-
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3980-
errmsg("cannot begin/end transactions in PL/pgSQL"),
3981-
errhint("Use a BEGIN block with an EXCEPTION clause instead.")));
3982-
break;
3983-
default:
3984-
elog(ERROR,"SPI_prepare_params failed for \"%s\": %s",
3985-
expr->query,SPI_result_code_string(SPI_result));
3986-
break;
3987-
}
3988-
}
3968+
elog(ERROR,"SPI_prepare_params failed for \"%s\": %s",
3969+
expr->query,SPI_result_code_string(SPI_result));
39893970
if (keepplan)
39903971
SPI_keepplan(plan);
39913972
expr->plan=plan;
@@ -4129,8 +4110,7 @@ exec_stmt_execsql(PLpgSQL_execstate *estate,
41294110
caseSPI_ERROR_TRANSACTION:
41304111
ereport(ERROR,
41314112
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4132-
errmsg("cannot begin/end transactions in PL/pgSQL"),
4133-
errhint("Use a BEGIN block with an EXCEPTION clause instead.")));
4113+
errmsg("unsupported transaction command in PL/pgSQL")));
41344114
break;
41354115

41364116
default:
@@ -4317,8 +4297,7 @@ exec_stmt_dynexecute(PLpgSQL_execstate *estate,
43174297
caseSPI_ERROR_TRANSACTION:
43184298
ereport(ERROR,
43194299
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
4320-
errmsg("cannot begin/end transactions in PL/pgSQL"),
4321-
errhint("Use a BEGIN block with an EXCEPTION clause instead.")));
4300+
errmsg("EXECUTE of transaction commands is not implemented")));
43224301
break;
43234302

43244303
default:

‎src/pl/plpgsql/src/sql/plpgsql_transaction.sql

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,25 @@ BEGIN
335335
END;
336336
$$;
337337

338-
-- errorcase
338+
-- errorcases
339339
DO LANGUAGE plpgsql $$
340340
BEGIN
341341
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
342342
END;
343343
$$;
344344

345+
DO LANGUAGE plpgsql $$
346+
BEGIN
347+
SAVEPOINT foo;
348+
END;
349+
$$;
350+
351+
DO LANGUAGE plpgsql $$
352+
BEGIN
353+
EXECUTE'COMMIT';
354+
END;
355+
$$;
356+
345357
DROPTABLE test1;
346358
DROPTABLE test2;
347359
DROPTABLE test3;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp