diff --git a/src/Model/Geometry/PointXYZ.py b/src/Model/Geometry/PointXYZ.py index 4e55c7b8ab1d982f0f80c3a196343682f12302f1..ff0a62fb4d854bc1ab1d74470b11fd05efa17903 100644 --- a/src/Model/Geometry/PointXYZ.py +++ b/src/Model/Geometry/PointXYZ.py @@ -37,6 +37,17 @@ class PointXYZ(Point, SQLSubModel): @classmethod def _sql_update(cls, execute, version): cls._update_submodel(execute, version) + + major, minor, release = version.strip().split(".") + if major == minor == "0": + if int(release) < 2: + execute( + """ + ALTER TABLE geometry_pointXYZ + ADD COLUMN sl INTEGER + REFERENCES sedimentary_layer(id) + """ + ) return True @classmethod @@ -47,7 +58,7 @@ class PointXYZ(Point, SQLSubModel): profile = data["profile"] table = execute( - "SELECT ind, name, x, y, z " + + "SELECT ind, name, x, y, z, sl " + "FROM geometry_pointXYZ " + f"WHERE profile = {profile.id}" ) @@ -63,6 +74,7 @@ class PointXYZ(Point, SQLSubModel): x = row[2] y = row[3] z = row[4] + sl = row[5] new = cls( name = name, @@ -71,6 +83,16 @@ class PointXYZ(Point, SQLSubModel): status = status ) + if sl == -1 or sl == None: + new._sl = None + else: + new._sl = next( + filter( + lambda s: s.id == sl, + data["sediment_layers_list"].sediment_layers + ) + ) + points[ind] = new return points @@ -79,13 +101,15 @@ class PointXYZ(Point, SQLSubModel): profile = data["profile"] ind = data["ind"] + sl = self._sl.id if self._sl is not None else -1 + sql = ( "INSERT OR REPLACE INTO " + - "geometry_pointXYZ(ind, name, x, y, z, profile) "+ + "geometry_pointXYZ(ind, name, x, y, z, profile, sl) "+ "VALUES (" + f"{ind}, '{self._sql_format(self._name)}', " + f"{self.x}, {self.y}, {self.z}, " + - f"{profile.id}" + + f"{profile.id}, {sl}" + ")" ) execute(sql) diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 7199730f7b9fecaa60470d0ac2ab63d654a12bb3..9fa8e9edf00b186e67148db3c0d967db3d6d1dfb 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -133,7 +133,7 @@ class Profile(object): return self._sl @sl.setter - def sl(self, value: str): + def sl(self, value): self._sl = value self._status.modified() diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index af3107692d593823284f2061c0412ee5501361b6..cb681383902b33ec0c753cb6b2a6308b32ed7c13 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -68,6 +68,17 @@ class ProfileXYZ(Profile, SQLSubModel): @classmethod def _sql_update(cls, execute, version): + major, minor, release = version.strip().split(".") + if major == minor == "0": + if int(release) < 2: + execute( + """ + ALTER TABLE geometry_profileXYZ + ADD COLUMN sl INTEGER + REFERENCES sedimentary_layer(id) + """ + ) + return cls._update_submodel(execute, version) @classmethod @@ -77,7 +88,7 @@ class ProfileXYZ(Profile, SQLSubModel): reach = data["reach"] table = execute( - "SELECT id, ind, name, kp, num, code1, code2 " + + "SELECT id, ind, name, kp, num, code1, code2, sl " + "FROM geometry_profileXYZ " + f"WHERE reach = {reach}" ) @@ -93,6 +104,7 @@ class ProfileXYZ(Profile, SQLSubModel): num = row[5] code1 = row[5] code2 = row[6] + sl = row[7] new = cls( id=id, num = num, @@ -102,6 +114,16 @@ class ProfileXYZ(Profile, SQLSubModel): status = status ) + if sl == -1 or sl == None: + new._sl = None + else: + new._sl = next( + filter( + lambda s: s.id == sl, + data["sediment_layers_list"].sediment_layers + ) + ) + data["profile"] = new new._points = PointXYZ._sql_load(execute, data) @@ -113,13 +135,15 @@ class ProfileXYZ(Profile, SQLSubModel): ok = True ind = data["ind"] + sl = self._sl.id if self._sl is not None else -1 + sql = ( "INSERT OR REPLACE INTO " + - "geometry_profileXYZ(id, ind, name, reach, kp, num, code1, code2) "+ + "geometry_profileXYZ(id, ind, name, reach, kp, num, code1, code2, sl) "+ "VALUES (" + f"{self.id}, {ind}, '{self._sql_format(self._name)}', " + f"{self.reach.id}, {self.kp}, {self.num}, " + - f"{self.code1}, {self.code1}" + + f"{self.code1}, {self.code1}, {sl}" + ")" ) execute(sql) diff --git a/src/Model/River.py b/src/Model/River.py index 59b4795778562677b9da9aa138ddeee5ea4c7558..b21a95a91e4ae9751a0f6a4248a75ec54235e4d2 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -233,6 +233,14 @@ class River(Graph, SQLSubModel): ) data["stricklers"] = new._stricklers + + # Initial conditions + new._sediment_layers = SedimentLayerList._sql_load( + execute, + data + ) + data["sediment_layers_list"] = new._sediment_layers + # Network new._nodes = RiverNode._sql_load( execute, @@ -263,12 +271,6 @@ class River(Graph, SQLSubModel): data ) - # Initial conditions - new._sediment_layers = SedimentLayerList._sql_load( - execute, - data - ) - # Parameters new._parameters = SolverParametersList._sql_load( execute, diff --git a/src/Model/Study.py b/src/Model/Study.py index bdebce474867ca24e46a8ff8731a4e972687dd89..fc553f9412317477620405331360a1c3c41e3615 100644 --- a/src/Model/Study.py +++ b/src/Model/Study.py @@ -24,7 +24,7 @@ class Study(SQLModel): def __init__(self, filename = None, init_new = True): # Metadata - self._version = "0.0.1" + self._version = "0.0.2" self.creation_date = datetime.now() self.last_modification_date = datetime.now() self.last_save_date = datetime.now()