doltgresql icon indicating copy to clipboard operation
doltgresql copied to clipboard

Added WHEN support for triggers

Open Hydrocharged opened this issue 8 months ago • 2 comments

This adds support for WHEN on triggers, which is probably the last major trigger addition that we'll need for now.

Hydrocharged avatar Apr 29 '25 13:04 Hydrocharged

Main PR
covering_index_scan_postgres 328.07/s 330.39/s +0.7%
index_join_postgres 153.32/s 150.22/s -2.1%
index_join_scan_postgres 183.91/s 185.80/s +1.0%
index_scan_postgres 12.23/s 12.32/s +0.7%
oltp_point_select 2480.90/s 2463.80/s -0.7%
oltp_read_only 1777.79/s 1735.27/s -2.4%
select_random_points 112.69/s 110.72/s -1.8%
select_random_ranges 130.64/s 130.83/s +0.1%
table_scan_postgres 11.59/s 11.44/s -1.3%
types_table_scan_postgres 5.31/s 5.31/s 0.0%

github-actions[bot] avatar Apr 29 '25 13:04 github-actions[bot]

Main PR
Total 42090 42090
Successful 16378 16401
Failures 25712 25689
Partial Successes[^1] 5540 5540
Main PR
Successful 38.9119% 38.9665%
Failures 61.0881% 61.0335%

${\color{red}Regressions (4)}$

generated

QUERY:          CREATE TRIGGER gtest1 BEFORE DELETE OR UPDATE ON gtest26
  FOR EACH ROW
  WHEN (OLD.b < 0)  -- ok
  EXECUTE PROCEDURE gtest_trigger_func();
RECEIVED ERROR: unable to parse WHEN expression from CREATE TRIGGER
QUERY:          CREATE TRIGGER gtest3 AFTER DELETE OR UPDATE ON gtest26
  FOR EACH ROW
  WHEN (OLD.b < 0)  -- ok
  EXECUTE PROCEDURE gtest_trigger_func();
RECEIVED ERROR: unable to parse WHEN expression from CREATE TRIGGER
QUERY:          CREATE TRIGGER gtest4 AFTER INSERT OR UPDATE ON gtest26
  FOR EACH ROW
  WHEN (NEW.b < 0)  -- ok
  EXECUTE PROCEDURE gtest_trigger_func();
RECEIVED ERROR: unable to parse WHEN expression from CREATE TRIGGER
QUERY:          UPDATE gtest26 SET a = 11 WHERE a = 1;
RECEIVED ERROR: column "tg_op" could not be found in any table in scope (errno 1105) (sqlstate HY000)

${\color{lightgreen}Progressions (23)}$

alter_table

QUERY: insert into parent values (1, 2, 3);
QUERY: insert into child values (12, 13, 'testing');
QUERY: select * from child;

fast_default

QUERY: DELETE FROM leader;

generated

QUERY: CREATE TRIGGER gtest2a BEFORE INSERT OR UPDATE ON gtest26
  FOR EACH ROW
  WHEN (NEW.b < 0)  -- error
  EXECUTE PROCEDURE gtest_trigger_func();
QUERY: CREATE TRIGGER gtest2b BEFORE INSERT OR UPDATE ON gtest26
  FOR EACH ROW
  WHEN (NEW.* IS NOT NULL)  -- error
  EXECUTE PROCEDURE gtest_trigger_func();
QUERY: INSERT INTO gtest26 (a) VALUES (1);

triggers

QUERY: insert into parted_trig values (1), (2), (3);
QUERY: create trigger t before insert or update on parted
  for each row execute function parted_trigfunc();
QUERY: update parted_trigger set a = a + 2;
QUERY: update parted_trigger set b = b || 'b';
QUERY: create trigger tg after insert on parent
  for each row execute procedure trig_nothing();
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);
QUERY: insert into parted_trig (a) values (50);

updatable_views

QUERY: INSERT INTO base_tbl VALUES (1,2), (4,5), (3,-3);
QUERY: SELECT * FROM rw_view1;
QUERY: INSERT INTO base_tbl VALUES (1,2), (2,3), (1,-1);

[^1]: These are tests that we're marking as Successful, however they do not match the expected output in some way. This is due to small differences, such as different wording on the error messages, or the column names being incorrect while the data itself is correct.

github-actions[bot] avatar Apr 29 '25 14:04 github-actions[bot]