From 71c454c8cf7ac5008e6f941d2c08a192393731ba Mon Sep 17 00:00:00 2001 From: wqy Date: Fri, 2 Sep 2022 20:28:03 +0800 Subject: [PATCH] Multiple operation into a api --- api/s0_base.py | 47 ++++++++++++++++++++----------- script/sql/create/2.junctions.sql | 2 +- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/api/s0_base.py b/api/s0_base.py index 9ee9055..a9b9e4b 100644 --- a/api/s0_base.py +++ b/api/s0_base.py @@ -14,23 +14,32 @@ PIPE = "PIPE" PUMP = "PUMP" VALVE = "VALVE" +nodeTables = { JUNCTION: "junctions", RESERVOIR: "reservoirs", TANK: "tanks" } +linkTables = { PIPE: "pipes", PUMP: "pumps", VALVE: "valves" } +typeTales = { _NODE: nodeTables, _LINK: linkTables } # add -def _add_id_type(name: str, id: str, type: str, table: str) -> None: +def _add_id_type(name: str, id: str, type: str, base_type: str) -> None: with conn[name].cursor() as cur: - sql = f"insert into {table} (id, type) values ('{id}', '{type}')" + sql = f"insert into {base_type} (id, type) values ('{id}', '{type}'); insert into {typeTales[base_type][type]} (id) values ('{id}');" + if base_type == _NODE: + sql += f" insert into coordinates (node) values ('{id}');" cur.execute(sql) + redo = sql.replace("'", '"') - undo = f'delete from {table} where id = "{id}"' + undo = "" + if base_type == _NODE: + undo = f'delete from coordinates where node = "{id}"; ' + undo += f'delete from {typeTales[base_type][type]} where id = "{id}"; delete from {base_type} where id = "{id}";' add_operation(name, redo, undo) -def _add_id(name: str, id: str, table: str) -> None: +def _add_id(name: str, id: str, base_type: str) -> None: with conn[name].cursor() as cur: - sql = f"insert into {table} (id) values ('{id}')" + sql = f"insert into {base_type} (id) values ('{id}')" cur.execute(sql) redo = sql.replace("'", '"') - undo = f'delete from {table} where id = "{id}"' + undo = f'delete from {base_type} where id = "{id}"' add_operation(name, redo, undo) def add_node(name: str, id: str, type: str) -> None: @@ -48,9 +57,9 @@ def add_pattern(name: str, id: str) -> None: # have -def _have_impl(name: str, id: str, table: str) -> bool: +def _have_impl(name: str, id: str, base_type: str) -> bool: with conn[name].cursor() as cur: - cur.execute(f"select * from {table} where id = '{id}'") + cur.execute(f"select * from {base_type} where id = '{id}'") return cur.rowcount > 0 def have_node(name: str, id: str) -> bool: @@ -67,9 +76,9 @@ def have_pattern(name: str, id: str) -> bool: # get -def _get_impl(name: str, id: str, table: str) -> dict[str, str]: +def _get_impl(name: str, id: str, base_type: str) -> dict[str, str]: with conn[name].cursor(row_factory=dict_row) as cur: - cur.execute(f"select * from {table} where id = '{id}'") + cur.execute(f"select * from {base_type} where id = '{id}'") if cur.rowcount > 0: return cur.fetchone() else: @@ -108,20 +117,26 @@ def get_pattern(name: str, id: str) -> dict[str, str]: # delete -def _delete_id_type(name: str, id: str, type: str, table: str) -> None: +def _delete_id_type(name: str, id: str, type: str, base_type: str) -> None: with conn[name].cursor() as cur: - sql = f"delete from {table} where id = '{id}'" + sql = "" + if base_type == _NODE: + sql = f"delete from coordinates where node = '{id}'; " + sql += f"delete from {typeTales[base_type][type]} where id = '{id}'; delete from {base_type} where id = '{id}';" cur.execute(sql) + redo = sql.replace("'", '"') - undo = f'insert into {table} (id, type) values ("{id}", "{type}")' + undo = f'insert into {base_type} (id, type) values ("{id}", "{type}"); insert into {typeTales[base_type][type]} (id) values ("{id}");' + if base_type == _NODE: + undo += f' insert into coordinates (node) values ("{id}");' add_operation(name, redo, undo) -def _delete_id(name:str, id: str, table: str) -> None: +def _delete_id(name:str, id: str, base_type: str) -> None: with conn[name].cursor() as cur: - sql = f"delete from {table} where id = '{id}'" + sql = f"delete from {base_type} where id = '{id}'" cur.execute(sql) redo = sql.replace("'", '"') - undo = f'insert into {table} (id) values ("{id}")' + undo = f'insert into {base_type} (id) values ("{id}")' add_operation(name, redo, undo) def delete_node(name: str, id: str) -> None: diff --git a/script/sql/create/2.junctions.sql b/script/sql/create/2.junctions.sql index 42ea2f3..a2abb89 100644 --- a/script/sql/create/2.junctions.sql +++ b/script/sql/create/2.junctions.sql @@ -3,7 +3,7 @@ CREATE TABLE JUNCTIONS ( ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID) -, Elevation NUMERIC NOT NULL +, Elevation NUMERIC NOT NULL DEFAULT(0.0) , Demand NUMERIC , Pattern VARCHAR(32) REFERENCES _PATTERN(ID) );