doltgresql
doltgresql copied to clipboard
Added WHEN support for triggers
This adds support for WHEN on triggers, which is probably the last major trigger addition that we'll need for now.
| 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% |
| 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.