drop function if exists get_title;

create function get_title() returns text as
$$
select value from title as result;
$$
language sql;


drop function if exists set_title;

create function set_title(new_value text) returns json as
$$
declare
    old_value text;

    redo_sql text;
    undo_sql text;
    redo_cs json;
    undo_cs json;

begin
    select value into old_value from title;

    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)::json;
    undo_cs = format('{"operation": "update", "type": "title", "value": "%s" }', old_value)::json;
    execute add_operation(redo_sql, undo_sql, redo_cs, undo_cs);

    execute redo_sql;

    return redo_cs;
    
end;
$$
language plpgsql;