blob: af5c03f2c5d0fd6067260a5e11aceb204a0d2404 [file] [log] [blame]
-- Testing some advanced trigger functionality
CREATE TABLE log_table (
stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
message VARCHAR(80) NOT NULL,
)
CREATE PROCEDURE record(msg VARCHAR(60))
MODIFIES SQL DATA
BEGIN ATOMIC
INSERT INTO log_table(message) VALUES (msg);
END
CREATE TABLE base_table (
id BIGINT generated ALWAYS AS IDENTITY PRIMARY KEY,
i INTEGER NOT NULL,
vc VARCHAR(600) NOT NULL,
)
/*r0*/ SELECT COUNT(*) FROM log_table
CALL record('test record')
/*r1*/ SELECT COUNT(*) FROM log_table
CREATE TRIGGER manual_log_trigger AFTER INSERT ON base_table
INSERT INTO log_table(message) VALUES ('totally manual trigger event')
INSERT INTO base_table(i, vc) VALUES(1, 'one')
/*r2*/ SELECT COUNT(*) FROM log_table
CREATE TRIGGER call_log_trigger AFTER INSERT ON base_table
CALL record('trigger routine CALL event')
INSERT INTO base_table(i, vc) VALUES(2, 'two')
/*r4*/ SELECT COUNT(*) FROM log_table
/*r2*/ SELECT COUNT(*) FROM base_table
-- this trigger is called recursively -- WHEN clause avoids infinite recursion
CREATE TRIGGER extra_ins_trigger_ AFTER INSERT ON base_table
REFERENCING NEW as new_row
FOR EACH ROW
WHEN (MOD(new_row.i,2) = 1)
INSERT INTO base_table(i, vc)
VALUES(1 + new_row.i, 'TRIG_ADDITION' || new_row.vc)
-- Sanity check to verify that the Trigger creaion didn't change anything
/*r4*/ SELECT COUNT(*) FROM log_table
/*r2*/ SELECT COUNT(*) FROM base_table
INSERT INTO base_table(i, vc) VALUES(3, 'x')
-- Should write 2 base_table entries, hence 4 log records
/*r8*/ SELECT COUNT(*) FROM log_table
/*r4*/ SELECT COUNT(*) FROM base_table