From 57728681b6138e53bc3a3da09e996701571675d8 Mon Sep 17 00:00:00 2001 From: wqy Date: Sat, 3 Sep 2022 17:29:50 +0800 Subject: [PATCH] Implement redo by PL/pgSQL --- script/script/api/create/1.title.sql | 2 +- script/script/api/create/operation.sql | 22 ++++++++++++++++++++++ script/script/api/drop/operation.sql | 2 ++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/script/script/api/create/1.title.sql b/script/script/api/create/1.title.sql index abbf5e6..fb81579 100644 --- a/script/script/api/create/1.title.sql +++ b/script/script/api/create/1.title.sql @@ -9,7 +9,7 @@ begin end; $$ language plpgsql; --- update_title() +-- set_title() create function tj.set_title(new_title text) returns void as $$ declare diff --git a/script/script/api/create/operation.sql b/script/script/api/create/operation.sql index ebb5edf..ad56cdf 100644 --- a/script/script/api/create/operation.sql +++ b/script/script/api/create/operation.sql @@ -84,4 +84,26 @@ declare begin perform tj.execute_undo(true); end; +$$ language plpgsql; + +create function tj.redo() returns void as +$$ +declare + curr_id int; + child_id int; + redo_sql text; +begin + select id into curr_id from tj.current_operation; + + select redo_child into child_id from tj.operation where id = curr_id; + if child_id = null then + return; + end if; + + select redo into redo_sql from tj.operation where id = child_id; + + execute redo_sql; + + update tj.current_operation set id = child_id where id = curr_id; +end; $$ language plpgsql; \ No newline at end of file diff --git a/script/script/api/drop/operation.sql b/script/script/api/drop/operation.sql index 951fa22..1692da5 100644 --- a/script/script/api/drop/operation.sql +++ b/script/script/api/drop/operation.sql @@ -1,3 +1,5 @@ +drop function if exists tj.redo; + drop function if exists tj.discard_undo; drop function if exists tj.undo; drop function if exists tj.execute_undo;