From bf7b18f158979f84e75373ce7cdb87f5371ca4b1 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Mon, 5 Aug 2024 15:40:06 +0200 Subject: [PATCH] DB: Prepare update to 0.1.0. --- src/Model/Friction/Friction.py | 21 +++++++++ src/Model/Geometry/PointXYZ.py | 43 ++++++++++++++++++- src/Model/Geometry/ProfileXYZ.py | 19 ++++++++ .../LateralContribution.py | 2 +- src/Model/SedimentLayer/SedimentLayer.py | 20 +++++++++ 5 files changed, 102 insertions(+), 3 deletions(-) diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index 5f8a9a37..79583c31 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -78,6 +78,7 @@ class Friction(SQLSubModel): def _db_update_to_0_1_0(cls, execute, data): table = "friction" reachs = data['id2pid']['river_reach'] + stricklers = data['id2pid']['stricklers'] cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) @@ -97,6 +98,26 @@ class Friction(SQLSubModel): execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") cls._db_update_to_0_1_0_set_reach_pid(execute, table, reachs) + cls._db_update_to_0_1_0_set_stricklers_pid(execute, table, stricklers) + + @classmethod + def _db_update_to_0_1_0_set_stricklers_pid(cls, execute, table, stricklers): + els = execute( + f"SELECT pamhyr_id, begin_strickler, end_strickler FROM {table}" + ) + + for row in els: + it = iter(row) + pid = next(it) + b_s_id = next(it) + e_s_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET begin_strickler = {stricklers[b_s_id]}, " + + f"end_strickler = {stricklers[e_s_id]} " + + f"WHERE pamhyr_id = {pid}" + ) @classmethod def _db_load(cls, execute, data=None): diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index 163bf3b8..dd9c5a9e 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -81,6 +81,8 @@ class PointXYZ(Point, SQLSubModel): @classmethod def _db_update_to_0_1_0(cls, execute, data): table = "geometry_pointXYZ" + reachs = data['id2pid']['sedimentary_layer'] + profiles = data['id2pid']['geometry_profileXYZ'] cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) @@ -89,14 +91,51 @@ class PointXYZ(Point, SQLSubModel): execute( f"INSERT INTO {table}_tmp " + - "(pamhyr_id, name, comment, minor, medium, scenario) " + - "SELECT pamhyr_id, name, comment, minor, medium, scenario " + + "(pamhyr_id, name, x, y, z, profile, sl, scenario) " + + "SELECT pamhyr_id, name, x, y, z, profile, sl, scenario " + f"FROM {table}" ) execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") + cls._db_update_to_0_1_0_set_profile_pid(execute, table, profiles) + cls._db_update_to_0_1_0_set_sl_pid(execute, table, sl) + + @classmethod + def _db_update_to_0_1_0_set_profile_pid(cls, execute, table, profiles): + els = execute( + f"SELECT pamhyr_id, profile FROM {table}" + ) + + for row in els: + it = iter(row) + pid = next(it) + profile_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET profile = {profiles[profile_id]} " + + f"WHERE pamhyr_id = {pid}" + ) + + @classmethod + def _db_update_to_0_1_0_set_sl_pid(cls, execute, table, sl): + els = execute( + f"SELECT pamhyr_id, sl FROM {table}" + ) + + for row in els: + it = iter(row) + pid = next(it) + sl_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET sl = {sl[sl_id]} " + + f"WHERE pamhyr_id = {pid}" + ) + @classmethod def _db_load(cls, execute, data=None): status = data["status"] diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index a2edf1c6..6f493af9 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -124,6 +124,7 @@ class ProfileXYZ(Profile, SQLSubModel): def _db_update_to_0_1_0(cls, execute, data): table = "geometry_profileXYZ" reachs = data['id2pid']['river_reach'] + sl = data['id2pid']['sedimentary_layer'] cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) @@ -143,6 +144,24 @@ class ProfileXYZ(Profile, SQLSubModel): execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") cls._db_update_to_0_1_0_set_reach_pid(execute, table, reachs) + cls._db_update_to_0_1_0_set_sl_pid(execute, table, sl) + + @classmethod + def _db_update_to_0_1_0_set_sl_pid(cls, execute, table, sl): + els = execute( + f"SELECT pamhyr_id, sl FROM {table}" + ) + + for row in els: + it = iter(row) + pid = next(it) + sl_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET sl = {sl[sl_id]} " + + f"WHERE pamhyr_id = {pid}" + ) @classmethod def _db_load(cls, execute, data=None): diff --git a/src/Model/LateralContribution/LateralContribution.py b/src/Model/LateralContribution/LateralContribution.py index 637e3544..99d0106b 100644 --- a/src/Model/LateralContribution/LateralContribution.py +++ b/src/Model/LateralContribution/LateralContribution.py @@ -93,7 +93,7 @@ class Data(SQLSubModel): cls._db_update_to_0_1_0_set_lc_pid(execute, table, lcs) @classmethod - def _db_update_to_0_1_0_set_lc_pid(cls, execute, table, bcs): + def _db_update_to_0_1_0_set_lc_pid(cls, execute, table, lcs): els = execute( f"SELECT pamhyr_id, lc FROM {table}" ) diff --git a/src/Model/SedimentLayer/SedimentLayer.py b/src/Model/SedimentLayer/SedimentLayer.py index 9b3a8543..c7371d10 100644 --- a/src/Model/SedimentLayer/SedimentLayer.py +++ b/src/Model/SedimentLayer/SedimentLayer.py @@ -133,6 +133,7 @@ class Layer(SQLSubModel): @classmethod def _db_update_to_0_1_0(cls, execute, data): table = "sedimentary_layer_layer" + sl = data['id2pid']['sedimentary_layer'] cls.update_db_add_pamhyr_id(execute, table, data) Scenario.update_db_add_scenario(execute, table) @@ -151,6 +152,25 @@ class Layer(SQLSubModel): execute(f"DROP TABLE {table}") execute(f"ALTER TABLE {table}_tmp RENAME TO {table}") + cls._db_update_to_0_1_0_set_sl_pid(execute, table, sl) + + @classmethod + def _db_update_to_0_1_0_set_sl_pid(cls, execute, table, sl): + els = execute( + f"SELECT pamhyr_id, sl FROM {table}" + ) + + for row in els: + it = iter(row) + pid = next(it) + sl_id = next(it) + + execute( + f"UPDATE {table} " + + f"SET sl = {sl[sl_id]} " + + f"WHERE pamhyr_id = {pid}" + ) + @classmethod def _db_load(cls, execute, data=None): new = []