From: Tom Lane Date: Wed, 1 Feb 2012 07:14:37 +0000 (-0500) Subject: Code review for plpgsql fn_signature patch. X-Git-Tag: REL9_2_BETA1~490 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bef47331b6a1c0d081179a7fc9b82dd7e1862394;p=postgresql Code review for plpgsql fn_signature patch. Don't quote the output of format_procedure(); it's already quoted quite enough. Remove the fn_name field, which was now just dead weight. Fix remaining expected-output files. --- diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index 56b6d49d61..d43b8e0b1a 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -341,7 +341,6 @@ do_compile(FunctionCallInfo fcinfo, ALLOCSET_DEFAULT_MAXSIZE); compile_tmp_cxt = MemoryContextSwitchTo(func_cxt); - function->fn_name = pstrdup(NameStr(procStruct->proname)); function->fn_signature = format_procedure(fcinfo->flinfo->fn_oid); function->fn_oid = fcinfo->flinfo->fn_oid; function->fn_xmin = HeapTupleHeaderGetXmin(procTup->t_data); @@ -803,7 +802,6 @@ plpgsql_compile_inline(char *proc_source) ALLOCSET_DEFAULT_MAXSIZE); compile_tmp_cxt = MemoryContextSwitchTo(func_cxt); - function->fn_name = pstrdup(func_name); function->fn_signature = pstrdup(func_name); function->fn_is_trigger = false; function->fn_input_collation = InvalidOid; diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 57e337ee72..bf952b6247 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -798,7 +798,7 @@ plpgsql_exec_error_callback(void *arg) * translator: last %s is a phrase such as "during statement block * local variable initialization" */ - errcontext("PL/pgSQL function \"%s\" line %d %s", + errcontext("PL/pgSQL function %s line %d %s", estate->func->fn_signature, estate->err_stmt->lineno, _(estate->err_text)); @@ -809,7 +809,7 @@ plpgsql_exec_error_callback(void *arg) * translator: last %s is a phrase such as "while storing call * arguments into local variables" */ - errcontext("PL/pgSQL function \"%s\" %s", + errcontext("PL/pgSQL function %s %s", estate->func->fn_signature, _(estate->err_text)); } @@ -817,13 +817,13 @@ plpgsql_exec_error_callback(void *arg) else if (estate->err_stmt != NULL) { /* translator: last %s is a plpgsql statement type name */ - errcontext("PL/pgSQL function \"%s\" line %d at %s", + errcontext("PL/pgSQL function %s line %d at %s", estate->func->fn_signature, estate->err_stmt->lineno, plpgsql_stmt_typename(estate->err_stmt)); } else - errcontext("PL/pgSQL function \"%s\"", + errcontext("PL/pgSQL function %s", estate->func->fn_signature); } diff --git a/src/pl/plpgsql/src/pl_funcs.c b/src/pl/plpgsql/src/pl_funcs.c index 776e9f6139..b5a72ddba9 100644 --- a/src/pl/plpgsql/src/pl_funcs.c +++ b/src/pl/plpgsql/src/pl_funcs.c @@ -1461,7 +1461,7 @@ plpgsql_dumptree(PLpgSQL_function *func) PLpgSQL_datum *d; printf("\nExecution tree of successfully compiled PL/pgSQL function %s:\n", - func->fn_name); + func->fn_signature); printf("\nFunction's data area:\n"); for (i = 0; i < func->ndatums; i++) @@ -1538,6 +1538,6 @@ plpgsql_dumptree(PLpgSQL_function *func) dump_indent = 0; printf("%3d:", func->action->lineno); dump_block(func->action); - printf("\nEnd of execution tree of function %s\n\n", func->fn_name); + printf("\nEnd of execution tree of function %s\n\n", func->fn_signature); fflush(stdout); } diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h index 739b9e48db..b63f336825 100644 --- a/src/pl/plpgsql/src/plpgsql.h +++ b/src/pl/plpgsql/src/plpgsql.h @@ -678,7 +678,6 @@ typedef struct PLpgSQL_func_hashkey typedef struct PLpgSQL_function { /* Complete compiled function */ - char *fn_name; char *fn_signature; Oid fn_oid; TransactionId fn_xmin; diff --git a/src/pl/plpython/expected/plpython_error.out b/src/pl/plpython/expected/plpython_error.out index 8c489923ce..8a4f571253 100644 --- a/src/pl/plpython/expected/plpython_error.out +++ b/src/pl/plpython/expected/plpython_error.out @@ -292,7 +292,7 @@ PL/Python function "python_traceback" SELECT sql_error(); ERROR: division by zero CONTEXT: SQL statement "select 1/0" -PL/pgSQL function "sql_error()" line 3 at SQL statement +PL/pgSQL function sql_error() line 3 at SQL statement SELECT python_from_sql_error(); ERROR: spiexceptions.DivisionByZero: division by zero CONTEXT: Traceback (most recent call last): @@ -306,7 +306,7 @@ CONTEXT: Traceback (most recent call last): plpy.execute("select sql_error()") PL/Python function "python_traceback" SQL statement "select python_traceback()" -PL/pgSQL function "python_from_sql_error()" line 3 at SQL statement +PL/pgSQL function python_from_sql_error() line 3 at SQL statement SELECT sql_from_python_error(); ERROR: spiexceptions.DivisionByZero: division by zero CONTEXT: Traceback (most recent call last): diff --git a/src/pl/plpython/expected/plpython_error_0.out b/src/pl/plpython/expected/plpython_error_0.out index 6cb2ed091b..b8d10dd735 100644 --- a/src/pl/plpython/expected/plpython_error_0.out +++ b/src/pl/plpython/expected/plpython_error_0.out @@ -292,7 +292,7 @@ PL/Python function "python_traceback" SELECT sql_error(); ERROR: division by zero CONTEXT: SQL statement "select 1/0" -PL/pgSQL function "sql_error" line 3 at SQL statement +PL/pgSQL function sql_error() line 3 at SQL statement SELECT python_from_sql_error(); ERROR: spiexceptions.DivisionByZero: division by zero CONTEXT: Traceback (most recent call last): @@ -306,7 +306,7 @@ CONTEXT: Traceback (most recent call last): plpy.execute("select sql_error()") PL/Python function "python_traceback" SQL statement "select python_traceback()" -PL/pgSQL function "python_from_sql_error" line 3 at SQL statement +PL/pgSQL function python_from_sql_error() line 3 at SQL statement SELECT sql_from_python_error(); ERROR: spiexceptions.DivisionByZero: division by zero CONTEXT: Traceback (most recent call last): diff --git a/src/test/regress/expected/domain.out b/src/test/regress/expected/domain.out index 4da1c53740..e713b97056 100644 --- a/src/test/regress/expected/domain.out +++ b/src/test/regress/expected/domain.out @@ -493,7 +493,7 @@ begin end$$ language plpgsql; select doubledecrement(3); -- fail because of implicit null assignment ERROR: domain pos_int does not allow null values -CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" line 3 during statement block local variable initialization +CONTEXT: PL/pgSQL function doubledecrement(pos_int) line 3 during statement block local variable initialization create or replace function doubledecrement(p1 pos_int) returns pos_int as $$ declare v pos_int := 0; begin @@ -501,7 +501,7 @@ begin end$$ language plpgsql; select doubledecrement(3); -- fail at initialization assignment ERROR: value for domain pos_int violates check constraint "pos_int_check" -CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" line 3 during statement block local variable initialization +CONTEXT: PL/pgSQL function doubledecrement(pos_int) line 3 during statement block local variable initialization create or replace function doubledecrement(p1 pos_int) returns pos_int as $$ declare v pos_int := 1; begin @@ -514,10 +514,10 @@ select doubledecrement(0); -- fail before call ERROR: value for domain pos_int violates check constraint "pos_int_check" select doubledecrement(1); -- fail at assignment to v ERROR: value for domain pos_int violates check constraint "pos_int_check" -CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" line 4 at assignment +CONTEXT: PL/pgSQL function doubledecrement(pos_int) line 4 at assignment select doubledecrement(2); -- fail at return ERROR: value for domain pos_int violates check constraint "pos_int_check" -CONTEXT: PL/pgSQL function "doubledecrement(pos_int)" while casting return value to function's return type +CONTEXT: PL/pgSQL function doubledecrement(pos_int) while casting return value to function's return type select doubledecrement(3); -- good doubledecrement ----------------- @@ -566,7 +566,7 @@ end$$ language plpgsql; select array_elem_check(121.00); ERROR: numeric field overflow DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2. -CONTEXT: PL/pgSQL function "array_elem_check(numeric)" line 5 at assignment +CONTEXT: PL/pgSQL function array_elem_check(numeric) line 5 at assignment select array_elem_check(1.23456); array_elem_check ------------------ @@ -584,7 +584,7 @@ end$$ language plpgsql; select array_elem_check(121.00); ERROR: numeric field overflow DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2. -CONTEXT: PL/pgSQL function "array_elem_check(numeric)" line 5 at assignment +CONTEXT: PL/pgSQL function array_elem_check(numeric) line 5 at assignment select array_elem_check(1.23456); array_elem_check ------------------ @@ -602,7 +602,7 @@ end$$ language plpgsql; select array_elem_check(121.00); ERROR: numeric field overflow DETAIL: A field with precision 4, scale 2 must round to an absolute value less than 10^2. -CONTEXT: PL/pgSQL function "array_elem_check(numeric)" line 5 at assignment +CONTEXT: PL/pgSQL function array_elem_check(numeric) line 5 at assignment select array_elem_check(1.23456); array_elem_check ------------------ @@ -650,7 +650,7 @@ select array_elem_check(3); select array_elem_check(-1); ERROR: value for domain orderedpair violates check constraint "orderedpair_check" -CONTEXT: PL/pgSQL function "array_elem_check(integer)" line 5 at assignment +CONTEXT: PL/pgSQL function array_elem_check(integer) line 5 at assignment drop function array_elem_check(int); -- -- Renaming diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index 212728545b..d324862049 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -687,7 +687,7 @@ set work_mem = '1MB'; select myfunc(0); ERROR: division by zero CONTEXT: SQL statement "SELECT 1/$1" -PL/pgSQL function "myfunc(integer)" line 4 at PERFORM +PL/pgSQL function myfunc(integer) line 4 at PERFORM select current_setting('work_mem'); current_setting ----------------- diff --git a/src/test/regress/expected/plancache.out b/src/test/regress/expected/plancache.out index 80322e8e7b..f0aa102334 100644 --- a/src/test/regress/expected/plancache.out +++ b/src/test/regress/expected/plancache.out @@ -235,7 +235,7 @@ end$$ language plpgsql; select cachebug(); NOTICE: table "temptable" does not exist, skipping CONTEXT: SQL statement "drop table if exists temptable cascade" -PL/pgSQL function "cachebug()" line 4 at SQL statement +PL/pgSQL function cachebug() line 4 at SQL statement NOTICE: 1 NOTICE: 2 NOTICE: 3 @@ -247,7 +247,7 @@ NOTICE: 3 select cachebug(); NOTICE: drop cascades to view vv CONTEXT: SQL statement "drop table if exists temptable cascade" -PL/pgSQL function "cachebug()" line 4 at SQL statement +PL/pgSQL function cachebug() line 4 at SQL statement NOTICE: 1 NOTICE: 2 NOTICE: 3 diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 03f22e7278..5455adef25 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -1518,16 +1518,16 @@ ERROR: duplicate key value violates unique constraint "pfield_name" DETAIL: Key (name)=(PF1_1) already exists. update PSlot set backlink = 'WS.not.there' where slotname = 'PS.base.a1'; ERROR: WS.not.there does not exist -CONTEXT: PL/pgSQL function "tg_backlink_a()" line 17 at assignment +CONTEXT: PL/pgSQL function tg_backlink_a() line 17 at assignment update PSlot set backlink = 'XX.illegal' where slotname = 'PS.base.a1'; ERROR: illegal backlink beginning with XX -CONTEXT: PL/pgSQL function "tg_backlink_a()" line 17 at assignment +CONTEXT: PL/pgSQL function tg_backlink_a() line 17 at assignment update PSlot set slotlink = 'PS.not.there' where slotname = 'PS.base.a1'; ERROR: PS.not.there does not exist -CONTEXT: PL/pgSQL function "tg_slotlink_a()" line 17 at assignment +CONTEXT: PL/pgSQL function tg_slotlink_a() line 17 at assignment update PSlot set slotlink = 'XX.illegal' where slotname = 'PS.base.a1'; ERROR: illegal slotlink beginning with XX -CONTEXT: PL/pgSQL function "tg_slotlink_a()" line 17 at assignment +CONTEXT: PL/pgSQL function tg_slotlink_a() line 17 at assignment insert into HSlot values ('HS', 'base.hub1', 1, ''); ERROR: duplicate key value violates unique constraint "hslot_name" DETAIL: Key (slotname)=(HS.base.hub1.1 ) already exists. @@ -2067,13 +2067,13 @@ end$$ language plpgsql; select test_variable_storage(); NOTICE: should see this CONTEXT: SQL statement "SELECT trap_zero_divide(-100)" -PL/pgSQL function "test_variable_storage()" line 8 at PERFORM +PL/pgSQL function test_variable_storage() line 8 at PERFORM NOTICE: should see this only if -100 <> 0 CONTEXT: SQL statement "SELECT trap_zero_divide(-100)" -PL/pgSQL function "test_variable_storage()" line 8 at PERFORM +PL/pgSQL function test_variable_storage() line 8 at PERFORM NOTICE: should see this only if -100 fits in smallint CONTEXT: SQL statement "SELECT trap_zero_divide(-100)" -PL/pgSQL function "test_variable_storage()" line 8 at PERFORM +PL/pgSQL function test_variable_storage() line 8 at PERFORM test_variable_storage ----------------------- 123456789012 @@ -2397,7 +2397,7 @@ end $$ language plpgsql; select namedparmcursor_test7(); ERROR: division by zero CONTEXT: SQL statement "SELECT 42/0 AS p1, 77 AS p2;" -PL/pgSQL function "namedparmcursor_test7()" line 6 at OPEN +PL/pgSQL function namedparmcursor_test7() line 6 at OPEN -- check that line comments work correctly within the argument list (there -- is some special handling of this case in the code: the newline after the -- comment must be preserved when the argument-evaluating query is @@ -2431,7 +2431,7 @@ 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: PL/pgSQL function raise_test1(integer) line 3 at RAISE create function raise_test2(int) returns int as $$ begin raise notice 'This message has too few parameters: %, %, %', $1, $1; @@ -2440,7 +2440,7 @@ 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: PL/pgSQL function raise_test2(integer) line 3 at RAISE -- 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 $$ @@ -2530,7 +2530,7 @@ begin end;$$ language plpgsql; select missing_return_expr(); ERROR: control reached end of function without RETURN -CONTEXT: PL/pgSQL function "missing_return_expr()" +CONTEXT: PL/pgSQL function missing_return_expr() drop function void_return_expr(); drop function missing_return_expr(); -- @@ -2582,7 +2582,7 @@ ERROR: column "sqlstate" does not exist LINE 1: SELECT sqlstate ^ QUERY: SELECT sqlstate -CONTEXT: PL/pgSQL function "excpt_test1()" line 3 at RAISE +CONTEXT: PL/pgSQL function excpt_test1() line 3 at RAISE create function excpt_test2() returns void as $$ begin begin @@ -2597,7 +2597,7 @@ ERROR: column "sqlstate" does not exist LINE 1: SELECT sqlstate ^ QUERY: SELECT sqlstate -CONTEXT: PL/pgSQL function "excpt_test2()" line 5 at RAISE +CONTEXT: PL/pgSQL function excpt_test2() line 5 at RAISE create function excpt_test3() returns void as $$ begin begin @@ -2803,7 +2803,7 @@ $$ language plpgsql; -- should fail select continue_test2(); ERROR: CONTINUE cannot be used outside a loop -CONTEXT: PL/pgSQL function "continue_test2()" +CONTEXT: PL/pgSQL function continue_test2() -- CONTINUE can't reference the label of a named block create function continue_test3() returns void as $$ begin @@ -2818,7 +2818,7 @@ $$ language plpgsql; -- should fail select continue_test3(); ERROR: CONTINUE cannot be used outside a loop -CONTEXT: PL/pgSQL function "continue_test3()" +CONTEXT: PL/pgSQL function continue_test3() drop function continue_test1(); drop function continue_test2(); drop function continue_test3(); @@ -2979,7 +2979,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned more than one row -CONTEXT: PL/pgSQL function "footest()" line 5 at SQL statement +CONTEXT: PL/pgSQL function footest() line 5 at SQL statement create or replace function footest() returns void as $$ declare x record; begin @@ -3042,7 +3042,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned no rows -CONTEXT: PL/pgSQL function "footest()" line 5 at SQL statement +CONTEXT: PL/pgSQL function footest() line 5 at SQL statement create or replace function footest() returns void as $$ declare x record; begin @@ -3052,7 +3052,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned more than one row -CONTEXT: PL/pgSQL function "footest()" line 5 at SQL statement +CONTEXT: PL/pgSQL function footest() line 5 at SQL statement create or replace function footest() returns void as $$ declare x record; begin @@ -3076,7 +3076,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned no rows -CONTEXT: PL/pgSQL function "footest()" line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement create or replace function footest() returns void as $$ declare x record; begin @@ -3086,7 +3086,7 @@ begin end$$ language plpgsql; select footest(); ERROR: query returned more than one row -CONTEXT: PL/pgSQL function "footest()" line 5 at EXECUTE statement +CONTEXT: PL/pgSQL function footest() line 5 at EXECUTE statement drop function footest(); -- test scrollable cursor support create function sc_test() returns setof integer as $$ @@ -3130,7 +3130,7 @@ $$ language plpgsql; select * from sc_test(); -- fails because of NO SCROLL specification ERROR: cursor can only scan forward HINT: Declare it with SCROLL option to enable backward scan. -CONTEXT: PL/pgSQL function "sc_test()" line 7 at FETCH +CONTEXT: PL/pgSQL function sc_test() line 7 at FETCH create or replace function sc_test() returns setof integer as $$ declare c refcursor; @@ -3717,7 +3717,7 @@ end; $$ language plpgsql; select raise_test(); ERROR: RAISE option already specified: MESSAGE -CONTEXT: PL/pgSQL function "raise_test()" line 3 at RAISE +CONTEXT: PL/pgSQL function raise_test() line 3 at RAISE -- conflict on errcode create or replace function raise_test() returns void as $$ begin @@ -3726,7 +3726,7 @@ end; $$ language plpgsql; select raise_test(); ERROR: RAISE option already specified: ERRCODE -CONTEXT: PL/pgSQL function "raise_test()" line 3 at RAISE +CONTEXT: PL/pgSQL function raise_test() line 3 at RAISE -- nothing to re-RAISE create or replace function raise_test() returns void as $$ begin @@ -3735,7 +3735,7 @@ end; $$ language plpgsql; select raise_test(); ERROR: RAISE without parameters cannot be used outside an exception handler -CONTEXT: PL/pgSQL function "raise_test()" line 3 at RAISE +CONTEXT: PL/pgSQL function raise_test() line 3 at RAISE -- test access to exception data create function zero_divide() returns int as $$ declare v int := 0; @@ -3766,7 +3766,7 @@ exception when others then end; $$ language plpgsql; select stacked_diagnostics_test(); -NOTICE: sqlstate: 22012, message: division by zero, context: [PL/pgSQL function "zero_divide()" line 4 at RETURN <- SQL statement "SELECT zero_divide()" <- PL/pgSQL function "stacked_diagnostics_test()" line 6 at PERFORM] +NOTICE: sqlstate: 22012, message: division by zero, context: [PL/pgSQL function zero_divide() line 4 at RETURN <- SQL statement "SELECT zero_divide()" <- PL/pgSQL function stacked_diagnostics_test() line 6 at PERFORM] stacked_diagnostics_test -------------------------- @@ -3808,7 +3808,7 @@ end; $$ language plpgsql; select stacked_diagnostics_test(); ERROR: GET STACKED DIAGNOSTICS cannot be used outside an exception handler -CONTEXT: PL/pgSQL function "stacked_diagnostics_test()" line 6 at GET DIAGNOSTICS +CONTEXT: PL/pgSQL function stacked_diagnostics_test() line 6 at GET DIAGNOSTICS drop function zero_divide(); drop function stacked_diagnostics_test(); -- check cases where implicit SQLSTATE variable could be confused with @@ -3872,7 +3872,7 @@ select case_test(4); select case_test(5); -- fails ERROR: case not found HINT: CASE statement is missing ELSE part. -CONTEXT: PL/pgSQL function "case_test(bigint)" line 5 at CASE +CONTEXT: PL/pgSQL function case_test(bigint) line 5 at CASE select case_test(8); case_test ---------------------- @@ -3900,7 +3900,7 @@ select case_test(12); select case_test(13); -- fails ERROR: case not found HINT: CASE statement is missing ELSE part. -CONTEXT: PL/pgSQL function "case_test(bigint)" line 5 at CASE +CONTEXT: PL/pgSQL function case_test(bigint) line 5 at CASE create or replace function catch() returns void as $$ begin raise notice '%', case_test(6); @@ -4228,7 +4228,7 @@ SAVEPOINT a; select error2('nonexistent.stuffs'); ERROR: schema "nonexistent" does not exist CONTEXT: SQL function "error1" statement 1 -PL/pgSQL function "error2(text)" line 3 at RETURN +PL/pgSQL function error2(text) line 3 at RETURN ROLLBACK TO a; select error2('public.stuffs'); error2 @@ -4266,7 +4266,7 @@ LINE 1: SELECT 'foo\\bar\041baz' ^ HINT: Use the escape string syntax for backslashes, e.g., E'\\'. QUERY: SELECT 'foo\\bar\041baz' -CONTEXT: PL/pgSQL function "strtest()" line 4 at RETURN +CONTEXT: PL/pgSQL function strtest() line 4 at RETURN strtest ------------- foo\bar!baz @@ -4349,7 +4349,7 @@ ERROR: column "foo" does not exist LINE 1: SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomn... ^ QUERY: SELECT rtrim(roomno) AS roomno, foo FROM Room ORDER BY roomno -CONTEXT: PL/pgSQL function "inline_code_block" line 4 at FOR over SELECT rows +CONTEXT: PL/pgSQL function inline_code_block line 4 at FOR over SELECT rows -- Check variable scoping -- a var is not available in its own or prior -- default expressions. create function scope_test() returns int as $$ @@ -4386,7 +4386,7 @@ LINE 1: select q1,q2 from int8_tbl ^ DETAIL: It could refer to either a PL/pgSQL variable or a table column. QUERY: select q1,q2 from int8_tbl -CONTEXT: PL/pgSQL function "conflict_test()" line 5 at FOR over SELECT rows +CONTEXT: PL/pgSQL function conflict_test() line 5 at FOR over SELECT rows create or replace function conflict_test() returns setof int8_tbl as $$ #variable_conflict use_variable declare r record; @@ -4490,10 +4490,10 @@ $$ language plpgsql; -- should fail select foreach_test(ARRAY[1,2,3,4]); ERROR: FOREACH ... SLICE loop variable must be of an array type -CONTEXT: PL/pgSQL function "foreach_test(anyarray)" line 4 at FOREACH over array +CONTEXT: PL/pgSQL function foreach_test(anyarray) line 4 at FOREACH over array select foreach_test(ARRAY[[1,2],[3,4]]); ERROR: FOREACH ... SLICE loop variable must be of an array type -CONTEXT: PL/pgSQL function "foreach_test(anyarray)" line 4 at FOREACH over array +CONTEXT: PL/pgSQL function foreach_test(anyarray) line 4 at FOREACH over array create or replace function foreach_test(anyarray) returns void as $$ declare x int[]; @@ -4533,7 +4533,7 @@ $$ language plpgsql; -- should fail select foreach_test(ARRAY[1,2,3,4]); ERROR: slice dimension (2) is out of the valid range 0..1 -CONTEXT: PL/pgSQL function "foreach_test(anyarray)" line 4 at FOREACH over array +CONTEXT: PL/pgSQL function foreach_test(anyarray) line 4 at FOREACH over array -- ok select foreach_test(ARRAY[[1,2],[3,4]]); NOTICE: {{1,2},{3,4}} @@ -4694,9 +4694,9 @@ select testoa(1,2,3); -- try again to exercise internal caching select testoa(2,1,3); -- fail at initial assign ERROR: value for domain orderedarray violates check constraint "sorted" -CONTEXT: PL/pgSQL function "testoa(integer,integer,integer)" line 4 at assignment +CONTEXT: PL/pgSQL function testoa(integer,integer,integer) line 4 at assignment select testoa(1,2,1); -- fail at update ERROR: value for domain orderedarray violates check constraint "sorted" -CONTEXT: PL/pgSQL function "testoa(integer,integer,integer)" line 5 at assignment +CONTEXT: PL/pgSQL function testoa(integer,integer,integer) line 5 at assignment drop function arrayassign1(); drop function testoa(x1 int, x2 int, x3 int); diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index 3c96c892a4..0e7177edc1 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -965,10 +965,10 @@ NOTICE: main_view INSTEAD OF INSERT ROW (instead_of_ins) NOTICE: NEW: (20,30) NOTICE: trigger_func(before_ins_stmt) called: action = INSERT, when = BEFORE, level = STATEMENT CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)" -PL/pgSQL function "view_trigger()" line 17 at SQL statement +PL/pgSQL function view_trigger() line 17 at SQL statement NOTICE: trigger_func(after_ins_stmt) called: action = INSERT, when = AFTER, level = STATEMENT CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)" -PL/pgSQL function "view_trigger()" line 17 at SQL statement +PL/pgSQL function view_trigger() line 17 at SQL statement NOTICE: main_view AFTER INSERT STATEMENT (after_view_ins_stmt) INSERT 0 1 INSERT INTO main_view VALUES (21, 31) RETURNING a, b; @@ -977,10 +977,10 @@ NOTICE: main_view INSTEAD OF INSERT ROW (instead_of_ins) NOTICE: NEW: (21,31) NOTICE: trigger_func(before_ins_stmt) called: action = INSERT, when = BEFORE, level = STATEMENT CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)" -PL/pgSQL function "view_trigger()" line 17 at SQL statement +PL/pgSQL function view_trigger() line 17 at SQL statement NOTICE: trigger_func(after_ins_stmt) called: action = INSERT, when = AFTER, level = STATEMENT CONTEXT: SQL statement "INSERT INTO main_table VALUES (NEW.a, NEW.b)" -PL/pgSQL function "view_trigger()" line 17 at SQL statement +PL/pgSQL function view_trigger() line 17 at SQL statement NOTICE: main_view AFTER INSERT STATEMENT (after_view_ins_stmt) a | b ----+---- @@ -995,16 +995,16 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd) NOTICE: OLD: (20,30), NEW: (20,31) NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt) UPDATE 0 UPDATE main_view SET b = 32 WHERE a = 21 AND b = 31 RETURNING a, b; @@ -1013,16 +1013,16 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd) NOTICE: OLD: (21,31), NEW: (21,32) NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(before_upd_a_row) called: action = UPDATE, when = BEFORE, level = ROW CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt) a | b ---+--- @@ -1038,19 +1038,19 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd) NOTICE: OLD: (20,30), NEW: (20,31) NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_a_b_row) called: action = UPDATE, when = AFTER, level = ROW CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_b_row) called: action = UPDATE, when = AFTER, level = ROW CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt) UPDATE 1 UPDATE main_view SET b = 32 WHERE a = 21 AND b = 31 RETURNING a, b; @@ -1059,19 +1059,19 @@ NOTICE: main_view INSTEAD OF UPDATE ROW (instead_of_upd) NOTICE: OLD: (21,31), NEW: (21,32) NOTICE: trigger_func(before_upd_a_stmt) called: action = UPDATE, when = BEFORE, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_a_b_row) called: action = UPDATE, when = AFTER, level = ROW CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_b_row) called: action = UPDATE, when = AFTER, level = ROW CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_b_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: trigger_func(after_upd_stmt) called: action = UPDATE, when = AFTER, level = STATEMENT CONTEXT: SQL statement "UPDATE main_table SET a = NEW.a, b = NEW.b WHERE a = OLD.a AND b = OLD.b" -PL/pgSQL function "view_trigger()" line 23 at SQL statement +PL/pgSQL function view_trigger() line 23 at SQL statement NOTICE: main_view AFTER UPDATE STATEMENT (after_view_upd_stmt) a | b ----+---- @@ -1503,28 +1503,28 @@ insert into depth_a values (1); NOTICE: depth_a_tr: depth = 1 NOTICE: depth_b_tr: depth = 2 CONTEXT: SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (1)" -PL/pgSQL function "depth_b_tf()" line 5 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: SQLSTATE = U9999: depth = 2 CONTEXT: SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_b_tr: depth = 2 CONTEXT: SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (1)" -PL/pgSQL function "depth_b_tf()" line 12 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 12 at EXECUTE statement SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement ERROR: U9999 CONTEXT: SQL statement "insert into depth_c values (1)" -PL/pgSQL function "depth_b_tf()" line 12 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 12 at EXECUTE statement SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement select pg_trigger_depth(); pg_trigger_depth ------------------ @@ -1535,20 +1535,20 @@ insert into depth_a values (2); NOTICE: depth_a_tr: depth = 1 NOTICE: depth_b_tr: depth = 2 CONTEXT: SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (2)" -PL/pgSQL function "depth_b_tf()" line 5 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_c_tr: depth = 3 CONTEXT: SQL statement "insert into depth_c values (2)" -PL/pgSQL function "depth_b_tf()" line 5 at EXECUTE statement +PL/pgSQL function depth_b_tf() line 5 at EXECUTE statement SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_b_tr: depth = 2 CONTEXT: SQL statement "insert into depth_b values (new.id)" -PL/pgSQL function "depth_a_tf()" line 4 at SQL statement +PL/pgSQL function depth_a_tf() line 4 at SQL statement NOTICE: depth_a_tr: depth = 1 select pg_trigger_depth(); pg_trigger_depth