NULL safe integrations type maintainance trigger
What does this MR do and why?
This MR improves the integrations trigger that keeps type and type_new in-sync by
ensuring that:
- it operates in both directions
- it is null safe
Migration details
This DB changes the integrations_set_type_new function so that if type is NULL, then we infer it from type_new, and if type_new is NULL, we infer it from type. Currently we unconditionally set type_new, even if a value was provided, and never set type.
CREATE OR REPLACE FUNCTION integrations_set_type_new() RETURNS TRIGGER AS $$
BEGIN
UPDATE integrations
SET type_new = COALESCE(NEW.type_new, regexp_replace(NEW.type, '\A(.+)Service\Z', 'Integrations::\1')),
type = COALESCE(NEW.type, regexp_replace(NEW.type_new, '\AIntegrations::(.+)\Z', '\1Service'))
WHERE integrations.id = NEW.id;
RETURN NULL;
END $$ LANGUAGE PLPGSQL
Timings:
Migration: 20220211214605 - UpdateIntegrationsTriggerTypeNewOnInsertNullSafe
Type: Regular
Duration: 1.1 s
Database size change: +8.00 KiB
How to set up and validate locally
- At the database console, insert a value with a null
type_new, but a definedtype:
insert into integrations (type) values ('FooService');
- Insert a value with a null
type, but a definedtype_new:
insert into integrations (type_new) values ('Integrations::Bar');
Observe that the rows have the other values inferred.
select * from integrations;
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #333508 (closed)
Edited by Alex Kalderimis