diff --git a/src/Model/BoundaryCondition/BoundaryCondition.py b/src/Model/BoundaryCondition/BoundaryCondition.py index 0e213ad2..90f4936a 100644 --- a/src/Model/BoundaryCondition/BoundaryCondition.py +++ b/src/Model/BoundaryCondition/BoundaryCondition.py @@ -190,6 +190,7 @@ class BoundaryCondition(SQLSubModel): @classmethod def _db_update_to_0_1_0(cls, execute, data): table = "boundary_condition" + nodes = data['id2pid']['river_node'] cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) diff --git a/src/Model/BoundaryCondition/BoundaryConditionList.py b/src/Model/BoundaryCondition/BoundaryConditionList.py index 1f528ff9..f4600ac6 100644 --- a/src/Model/BoundaryCondition/BoundaryConditionList.py +++ b/src/Model/BoundaryCondition/BoundaryConditionList.py @@ -41,9 +41,6 @@ class BoundaryConditionList(PamhyrModelListWithTab): def _db_load(cls, execute, data=None): new = cls(status=data['status']) - if data is None: - data = {} - for tab in new._tabs: data["tab"] = tab new._tabs[tab] = BoundaryCondition._db_load( @@ -55,9 +52,6 @@ class BoundaryConditionList(PamhyrModelListWithTab): def _db_save(self, execute, data=None): execute("DELETE FROM boundary_condition") - if data is None: - data = {} - for tab in self._tabs: data["tab"] = tab for bc in self._tabs[tab]: diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index d26c424d..74f445ef 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -27,8 +27,6 @@ logger = logging.getLogger() class Friction(SQLSubModel): - _id_cnt = 0 - def __init__(self, id: int = -1, status=None): super(Friction, self).__init__(id) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 435cee15..0731bdb2 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -122,7 +122,7 @@ class ProfileXYZ(Profile, SQLSubModel): @classmethod def _db_update_to_0_1_0(cls, execute, data): - table = "stricklers" + table = "geometry_profileXYZ" cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index e379bf9a..59fc396c 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -87,9 +87,6 @@ class Reach(SQLSubModel): f"WHERE reach = {self.pamhyr_id}" ) - if data is None: - data = {} - ind = 0 for profile in profiles: data["ind"] = ind diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py index 3fc150d8..254d366b 100644 --- a/src/Model/InitialConditions/InitialConditions.py +++ b/src/Model/InitialConditions/InitialConditions.py @@ -101,8 +101,10 @@ class Data(SQLSubModel): execute( f"INSERT INTO {table}_tmp " + - "(pamhyr_id, name, comment, tab, reach, rk, scenario) " + - "SELECT pamhyr_id, name, comment, tab, reach, rk, scenario " + + "(pamhyr_id, name, comment, reach, rk, " + + "discharge, height, scenario) " + + "SELECT pamhyr_id, name, comment, reach, rk, " + + "discharge, height, scenario " + f"FROM {table}" ) diff --git a/src/Model/LateralContribution/LateralContribution.py b/src/Model/LateralContribution/LateralContribution.py index 5a924d4c..95f99f23 100644 --- a/src/Model/LateralContribution/LateralContribution.py +++ b/src/Model/LateralContribution/LateralContribution.py @@ -67,15 +67,15 @@ class Data(SQLSubModel): major, minor, release = version.strip().split(".") if major == minor == "0": - cls._db_update_to_0_1_0(execute) + cls._db_update_to_0_1_0(execute, data) return cls._update_submodel(execute, version, data) @classmethod - def _db_update_to_0_1_0(cls, execute): + def _db_update_to_0_1_0(cls, execute, data=None): table = "lateral_contribution_data" - cls.update_db_add_pamhyr_id(execute, table) + cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") diff --git a/src/Model/River.py b/src/Model/River.py index e658ea76..b7bff114 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -16,6 +16,8 @@ # -*- coding: utf-8 -*- +import logging + from tools import flatten, logger_exception from Model.Tools.PamhyrDB import SQLSubModel @@ -46,6 +48,8 @@ from Model.REPLine.REPLineList import REPLineList from Solver.Solvers import solver_type_list +logger = logging.getLogger() + class RiverNode(Node, SQLSubModel): _sub_classes = [] @@ -66,7 +70,7 @@ class RiverNode(Node, SQLSubModel): @classmethod def _db_create(cls, execute, ext=""): execute(f""" - CREATE TABLE river_node( + CREATE TABLE river_node{ext}( {cls.create_db_add_pamhyr_id()}, name TEXT NOT NULL, x REAL NOT NULL, @@ -85,15 +89,15 @@ class RiverNode(Node, SQLSubModel): major, minor, release = version.strip().split(".") if major == minor == "0": - cls._db_update_to_0_1_0(execute) + cls._db_update_to_0_1_0(execute, data=data) return cls._update_submodel(execute, version, data) @classmethod - def _db_update_to_0_1_0(cls, execute): + def _db_update_to_0_1_0(cls, execute, data=None): table = "river_node" - cls.update_db_add_pamhyr_id(execute, table) + cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") @@ -164,9 +168,9 @@ class RiverReach(Edge, SQLSubModel): self._frictions = FrictionList(status=self._status) @classmethod - def _db_create(cls, execute): + def _db_create(cls, execute, ext=""): execute(f""" - CREATE TABLE river_reach( + CREATE TABLE river_reach{ext} ( {cls.create_db_add_pamhyr_id()}, name TEXT NOT NULL, enabled BOOLEAN NOT NULL, @@ -187,16 +191,19 @@ class RiverReach(Edge, SQLSubModel): def _db_update(cls, execute, version, data=None): major, minor, release = version.strip().split(".") + logger.info(f"data = {data}") + if major == minor == "0": - cls._db_update_to_0_1_0(execute) + cls._db_update_to_0_1_0(execute, data) return cls._update_submodel(execute, version, data) @classmethod - def _db_update_to_0_1_0(cls, execute): + def _db_update_to_0_1_0(cls, execute, data=None): table = "river_reach" + nodes = data['id2pid']['river_node'] - cls.update_db_add_pamhyr_id(execute, table) + cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) cls._db_create(execute, ext="_tmp") @@ -212,13 +219,32 @@ class RiverReach(Edge, SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") + cls._db_update_to_0_1_0_set_node_pid(execute, table, nodes) + + @classmethod + def _db_update_to_0_1_0_set_node_pid(cls, execute, table, nodes): + bcs = execute( + f"SELECT pamhyr_id, node1, node2 FROM {table}" + ) + + for row in bcs: + it = iter(row) + + pid = next(it) + node1_id = next(it) + node2_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET node1 = {nodes[node1_id]}, " + + f"node2 = {nodes[node2_id]} " + + f"WHERE pamhyr_id = {pid}" + ) + @classmethod def _db_load(cls, execute, data=None): reachs = [] - if data is None: - data = {} - table = execute( "SELECT pamhyr_id, name, enabled, node1, node2 FROM river_reach" ) @@ -230,15 +256,18 @@ class RiverReach(Edge, SQLSubModel): pid = next(it) name = next(it) enabled = (next(it) == 1) + node1_pid = next(it) + node2_pid = next(it) + # Get nodes corresponding to db foreign key id node1 = next( filter( - lambda n: n.pamhyr_id == next(it), data["nodes"] + lambda n: n.pamhyr_id == node1_pid, data["nodes"] ) ) node2 = next( filter( - lambda n: n.pamhyr_id == next(it), data["nodes"] + lambda n: n.pamhyr_id == node2_pid, data["nodes"] ) ) @@ -265,9 +294,6 @@ class RiverReach(Edge, SQLSubModel): ")" ) - if data is None: - data = {} - data["reach"] = self objs = [self._reach, self._frictions] diff --git a/src/Model/SedimentLayer/SedimentLayer.py b/src/Model/SedimentLayer/SedimentLayer.py index 7cff798d..9b3a8543 100644 --- a/src/Model/SedimentLayer/SedimentLayer.py +++ b/src/Model/SedimentLayer/SedimentLayer.py @@ -313,7 +313,7 @@ class SedimentLayer(SQLSubModel): new = [] table = execute( - "SELECT id, name, comment " + + "SELECT pamhyr_id, name, comment " + "FROM sedimentary_layer " ) diff --git a/src/Model/Tools/PamhyrDB.py b/src/Model/Tools/PamhyrDB.py index ec177e5c..13987b0b 100644 --- a/src/Model/Tools/PamhyrDB.py +++ b/src/Model/Tools/PamhyrDB.py @@ -72,7 +72,6 @@ class SQLModel(SQL): return True def _create(self): - raise NotImplementedMethodeError(self, self._create) def _update_submodel(self, version, data=None): @@ -82,12 +81,9 @@ class SQLModel(SQL): commit=False ) - if data is None: - data = {} - ok = True for cls in self._sub_classes: - ok &= cls._db_update(fn, version, data) + ok &= cls._db_update(fn, version, data=data) self.commit() return ok @@ -188,8 +184,12 @@ class SQLSubModel(PamhyrID): @classmethod def _update_submodel(cls, execute, version, data=None): + ok = True + for sc in cls._sub_classes: - sc._db_update(execute, version, data) + ok &= sc._db_update(execute, version, data) + + return ok @classmethod def _db_update(cls, execute, version, data=None): diff --git a/src/Model/Tools/PamhyrID.py b/src/Model/Tools/PamhyrID.py index 7f99d404..b04781fe 100644 --- a/src/Model/Tools/PamhyrID.py +++ b/src/Model/Tools/PamhyrID.py @@ -16,8 +16,12 @@ # -*- coding: utf-8 -*- +import logging + from tools import trace, timer +logger = logging.getLogger() + class PamhyrID(object): _pamhyr_id_cnt = 0 @@ -47,28 +51,26 @@ class PamhyrID(object): @classmethod def update_db_add_pamhyr_id(cls, execute, table, - autoset=True, - data={}): + data=None): execute( f"ALTER TABLE {table} " + f"ADD COLUMN pamhyr_id INTEGER NOT NULL DEFAULT -1" ) - if autoset: - rows = execute(f"SELECT id FROM {table}") - id2pid = cls.update_db_add_pamhyr_id_init_id2pid(table, data) + id2pid = cls.update_db_add_pamhyr_id_init_id2pid(table, data) + rows = execute(f"SELECT id FROM {table}") - for row in rows: - id = row[0] - pid = cls.get_new_pamhyr_id(-1) + for row in rows: + id = row[0] + pid = cls.get_new_pamhyr_id(-1) - id2pid[table][id] = pid + id2pid[table][id] = pid - execute( - f"UPDATE {table} " + - f"SET pamhyr_id = {pid} " + - f"WHERE id = {id}" - ) + execute( + f"UPDATE {table} " + + f"SET pamhyr_id = {pid} " + + f"WHERE id = {id}" + ) return True diff --git a/src/SQL.py b/src/SQL.py index 887e69d9..39ccb8bc 100644 --- a/src/SQL.py +++ b/src/SQL.py @@ -118,6 +118,7 @@ class SQL(object): except Exception as e: logger_exception(e) finally: + logger.debug(f" - {value}") return value def _create(self):