From 28480500d7b972137ec0504ece5f468f8c892478 Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Fri, 17 Feb 2023 19:51:44 +0800 Subject: [PATCH] Add more api for snapshot --- api/__init__.py | 7 ++++++- api/database.py | 50 +++++++++++++++++++++++++++++++++++++++++++++---- tjnetwork.py | 31 ++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 5 deletions(-) diff --git a/api/__init__.py b/api/__init__.py index 748504c..a2b8022 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -8,7 +8,12 @@ from .database import API_ADD, API_UPDATE, API_DELETE from .database import ChangeSet from .database import get_current_operation from .database import execute_undo, execute_redo -from .database import have_snapshot, take_snapshot, pick_snapshot +from .database import have_snapshot, have_snapshot_for_operation, have_snapshot_for_current_operation +from .database import take_snapshot_for_operation, take_snapshot_for_current_operation, take_snapshot +from .database import update_snapshot, update_snapshot_for_current_operation +from .database import delete_snapshot, delete_snapshot_by_operation +from .database import get_operation_by_snapshot, get_snapshot_by_operation +from .database import pick_snapshot from .database import pick_operation, sync_with_server, get_restore_operation, set_restore_operation from .batch_cmd import execute_batch_command diff --git a/api/database.py b/api/database.py index 6a2d167..4b64d74 100644 --- a/api/database.py +++ b/api/database.py @@ -166,13 +166,55 @@ def have_snapshot(name: str, tag: str) -> bool: return read(name, f"select id from snapshot_operation where tag = '{tag}'") != None -def take_snapshot(name: str, tag: str) -> int | None: +def have_snapshot_for_operation(name: str, operation: int) -> bool: + return read(name, f"select id from snapshot_operation where id = {operation}") != None + + +def have_snapshot_for_current_operation(name: str) -> bool: + return have_snapshot_for_operation(name, get_current_operation(name)) + + +def take_snapshot_for_operation(name: str, operation: int, tag: str) -> None: if tag == None or tag == '': return None + write(name, f"insert into snapshot_operation (id, tag) values ({operation}, '{tag}')") - current = get_current_operation(name) - write(name, f"insert into snapshot_operation (id, tag) values ({current}, '{tag}')") - return current + +def take_snapshot_for_current_operation(name: str, tag: str) -> int | None: + take_snapshot_for_operation(name, get_current_operation(name), tag) + + +# deprecated ! use take_snapshot_for_current_operation instead +def take_snapshot(name: str, tag: str) -> int | None: + take_snapshot_for_current_operation(name, tag) + + +def update_snapshot(name: str, operation: int, tag: str) -> None: + if tag == None or tag == '': + return None + write(name, f"update snapshot_operation set tag = '{tag}' where id = {operation}") + + +def update_snapshot_for_current_operation(name: str, tag: str) -> None: + return update_snapshot(name, get_current_operation(name), tag) + + +def delete_snapshot(name: str, tag: str) -> None: + write(name, f"delete from snapshot_operation where tag = '{tag}'") + + +def delete_snapshot_by_operation(name: str, operation: int) -> None: + write(name, f"delete from snapshot_operation where id = {operation}") + + +def get_operation_by_snapshot(name: str, tag: str) -> int | None: + row = try_read(name, f"select id from snapshot_operation where tag = '{tag}'") + return int(row['id']) if row != None else None + + +def get_snapshot_by_operation(name: str, operation: int) -> str | None: + row = try_read(name, f"select tag from snapshot_operation where id = {operation}") + return str(row['tag']) if row != None else None def _get_parents(name: str, id: int) -> list[int]: diff --git a/tjnetwork.py b/tjnetwork.py index 4f7e4ba..bbee25a 100644 --- a/tjnetwork.py +++ b/tjnetwork.py @@ -176,9 +176,40 @@ def execute_redo(name: str) -> ChangeSet: def have_snapshot(name: str, tag: str) -> bool: return api.have_snapshot(name, tag) +def have_snapshot_for_operation(name: str, operation: int) -> bool: + return api.have_snapshot_for_operation(name, operation) + +def have_snapshot_for_current_operation(name: str) -> bool: + return api.have_snapshot_for_current_operation(name) + +def take_snapshot_for_operation(name: str, operation: int, tag: str) -> None: + return api.take_snapshot_for_operation(name, operation, tag) + +def take_snapshot_for_current_operation(name: str, tag: str) -> int | None: + return api.take_snapshot_for_current_operation(name, tag) + +# deprecated ! use take_snapshot_for_current_operation instead def take_snapshot(name: str, tag: str) -> int | None: return api.take_snapshot(name, tag) +def update_snapshot(name: str, operation: int, tag: str) -> None: + return api.update_snapshot(name, operation, tag) + +def update_snapshot_for_current_operation(name: str, tag: str) -> None: + return api.update_snapshot_for_current_operation(name, tag) + +def delete_snapshot(name: str, tag: str) -> None: + return api.delete_snapshot(name, tag) + +def delete_snapshot_by_operation(name: str, operation: int) -> None: + return api.delete_snapshot_by_operation(name, operation) + +def get_operation_by_snapshot(name: str, tag: str) -> int | None: + return api.get_operation_by_snapshot(name, tag) + +def get_snapshot_by_operation(name: str, operation: int) -> str | None: + return api.get_snapshot_by_operation(name, operation) + def pick_snapshot(name: str, tag: str, discard: bool = False) -> ChangeSet: return api.pick_snapshot(name, tag, discard)