72 lines
1.6 KiB
PL/PgSQL
72 lines
1.6 KiB
PL/PgSQL
drop function if exists update_title;
|
|
drop function if exists get_title_update_template;
|
|
drop function if exists get_title;
|
|
drop function if exists get_title_schema;
|
|
|
|
|
|
create function get_title_schema() returns jsonb as
|
|
$$
|
|
declare
|
|
begin
|
|
return '{"value": {"opetional": false, "readonly": false}}'::jsonb;
|
|
end;
|
|
$$
|
|
language plpgsql;
|
|
|
|
|
|
create function get_title() returns jsonb as
|
|
$$
|
|
declare
|
|
v_value text;
|
|
begin
|
|
select value into v_value from title;
|
|
return format('{"value": "%s"}', v_value)::jsonb;
|
|
end;
|
|
$$
|
|
language plpgsql;
|
|
|
|
|
|
create function get_title_update_template() returns jsonb as
|
|
$$
|
|
declare
|
|
begin
|
|
return '{"operation": "update", "type": "title", "value": ""}'::jsonb;
|
|
end;
|
|
$$
|
|
language plpgsql;
|
|
|
|
|
|
create function update_title(new jsonb) returns jsonb as
|
|
$$
|
|
declare
|
|
old jsonb;
|
|
redo_sql text;
|
|
undo_sql text;
|
|
redo_cs jsonb;
|
|
undo_cs jsonb;
|
|
|
|
begin
|
|
assert new->>'operation' = 'update';
|
|
assert new->>'type' = 'title';
|
|
assert new ? 'value';
|
|
|
|
old := get_title();
|
|
if old->>'value' = new->>'value' then
|
|
return '{}'::jsonb;
|
|
end if;
|
|
|
|
redo_sql := format('update title set value = ''%s''', new->>'value');
|
|
undo_sql := format('update title set value = ''%s''', old->>'value');
|
|
|
|
redo_cs := format('{"operation": "update", "type": "title", "value": "%s" }', new->>'value')::jsonb;
|
|
undo_cs := format('{"operation": "update", "type": "title", "value": "%s" }', old->>'value')::jsonb;
|
|
|
|
execute redo_sql;
|
|
execute add_operation(redo_sql, undo_sql, redo_cs, undo_cs);
|
|
|
|
return redo_cs;
|
|
|
|
end;
|
|
$$
|
|
language plpgsql;
|