Files
windmill/backend/migrations/20220901174503_openflow_changes.up.sql
Ruben Fiszel 1d873d5bd5 feat: clean openflow spec v1 (#491)
* clean api 2

* the rest

* clean tests

* stop_after_if test

* unbox `modules: Vec<FlowModule>` in `ForloopFlow`

* migrate

* initFlow stop_after_if_expr and skip_if_stopped

* s/migrateInitTransform/migrateFlowModule

I didn't read the name before... oops

* sql migration for openflow changes

* fix frontend migration code

Co-authored-by: sqwishy <somebody@froghat.ca>
2022-09-02 01:26:39 +02:00

57 lines
1.8 KiB
PL/PgSQL

-- https://github.com/windmill-labs/windmill/pull/491
CREATE FUNCTION migrate_flow(flow jsonb)
RETURNS jsonb
AS $$
DECLARE module jsonb;
i integer := 0;
BEGIN
if flow->'value'?'modules' THEN
flow = JSONB_SET(flow, ARRAY['modules'], flow->'value'->'modules') - 'value';
END IF;
FOR module IN SELECT JSONB_ARRAY_ELEMENTS(flow->'modules') LOOP
flow = JSONB_SET(flow, ARRAY['modules', i::text], migrate_flow_module(module));
i = i + 1;
END LOOP;
RETURN flow;
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION migrate_flow_module(module jsonb)
RETURNS jsonb
AS $$
BEGIN
IF module?'input_transform' AND module->'input_transform' != 'null'::jsonb THEN
module = JSONB_SET(module, ARRAY['input_transforms'], module->'input_transform')
- 'input_transform';
END IF;
IF module?'stop_after_if_expr' AND module->'stop_after_if_expr' != 'null'::jsonb THEN
IF NOT module?'stop_after_if' THEN
module = JSONB_SET(module, ARRAY['stop_after_if'], '{}'::jsonb);
END IF;
module = JSONB_SET(module, ARRAY['stop_after_if', 'expr'], module->'stop_after_if_expr')
- 'stop_after_if_expr';
END IF;
IF module?'skip_if_stopped' AND module->'skip_if_stopped' != 'null'::jsonb THEN
IF NOT module?'stop_after_if' THEN
module = JSONB_SET(module, ARRAY['stop_after_if'], '{}'::jsonb);
END IF;
module = JSONB_SET(module, ARRAY['stop_after_if', 'skip_if_stopped'], module->'skip_if_stopped')
- 'skip_if_stopped';
END IF;
if module->'value'->>'type' = 'forloopflow' THEN
module = JSONB_SET(module, ARRAY['value'], migrate_flow(module->'value'));
END IF;
RETURN module;
END;
$$ LANGUAGE plpgsql;
UPDATE flow SET value = migrate_flow(value);
DROP FUNCTION migrate_flow_module, migrate_flow;