From d08457c3b7bfaba7fa66dc053e01d12184bf427d Mon Sep 17 00:00:00 2001 From: Ashutosh Bapat Date: Thu, 10 May 2018 10:58:56 +0530 Subject: [PATCH 01/10] Testcase accessing system columns from a trigger function. The column references in OLD and NEW tuples in a trigger condition get translated to INNER and OUTER Var nodes. If the trigger condition is referencing any system variable, those references would translate into EEOP_INNER/OUTER_SYSVAR opcodes. There's no test exercizing this code right now. Hence adding one. Ashutosh Bapat --- src/test/regress/expected/triggers.out | 17 +++++++++++++++++ src/test/regress/sql/triggers.sql | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index 1f8caef..732bd2b 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -2788,3 +2788,20 @@ drop table self_ref; drop function dump_insert(); drop function dump_update(); drop function dump_delete(); +-- Test triggers accessing system columns +create table sys_col_table(a int) with oids; +insert into sys_col_table values (1); +create function sys_col_trig_func() returns trigger as $$ +begin + raise notice 'oid of the row did not change'; + return new; +end; $$ language plpgsql; +create trigger sys_col_trig after update on sys_col_table + for each row + when (new.oid = old.oid) + execute procedure sys_col_trig_func(); +update sys_col_table set a = a + 1; +NOTICE: oid of the row did not change +drop trigger sys_col_trig on sys_col_table; +drop function sys_col_trig_func; +drop table sys_col_table; diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql index 7cfa5fd..4715090 100644 --- a/src/test/regress/sql/triggers.sql +++ b/src/test/regress/sql/triggers.sql @@ -2129,3 +2129,20 @@ drop table self_ref; drop function dump_insert(); drop function dump_update(); drop function dump_delete(); + +-- Test triggers accessing system columns +create table sys_col_table(a int) with oids; +insert into sys_col_table values (1); +create function sys_col_trig_func() returns trigger as $$ +begin + raise notice 'oid of the row did not change'; + return new; +end; $$ language plpgsql; +create trigger sys_col_trig after update on sys_col_table + for each row + when (new.oid = old.oid) + execute procedure sys_col_trig_func(); +update sys_col_table set a = a + 1; +drop trigger sys_col_trig on sys_col_table; +drop function sys_col_trig_func; +drop table sys_col_table; -- 1.7.9.5