From e7099bfb862b493f7f5d2bd7b65c0652af5e7753 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Tue, 4 Jul 2023 13:26:45 +0200 Subject: [PATCH] Profile: Fix profile id issues and profile index in reach. --- src/Model/Geometry/Profile.py | 3 ++- src/Model/Geometry/ProfileXYZ.py | 27 +++++++++++++++------------ src/Model/Geometry/Reach.py | 15 +++++++++++++-- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 93e2c8a8..4a1f5a5f 100644 --- a/src/Model/Geometry/Profile.py +++ b/src/Model/Geometry/Profile.py @@ -19,10 +19,11 @@ class Profile(object): if id == -1: self.id = Profile._id_cnt - Profile._id_cnt += 1 else: self.id = id + Profile._id_cnt = max(self.id, Profile._id_cnt+1) + self._num = int(num) self._code1 = int(code1) self._code2 = int(code2) diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index 9894cfef..d368b981 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -53,6 +53,7 @@ class ProfileXYZ(Profile, SQLSubModel): execute(""" CREATE TABLE geometry_profileXYZ( id INTEGER NOT NULL PRIMARY KEY, + ind INTEGER NOT NULL, name TEXT, reach INTEGER NOT NULL, kp REAL NOT NULL, @@ -76,18 +77,22 @@ class ProfileXYZ(Profile, SQLSubModel): reach = data["reach"] table = execute( - "SELECT id, name, kp, num, code1, code2 " + + "SELECT id, ind, name, kp, num, code1, code2 " + "FROM geometry_profileXYZ " + f"WHERE reach = {reach}" ) + for _ in table: + profiles.append(None) + for row in table: id = row[0] - name = row[1] - kp = row[2] - num = row[3] - code1 = row[4] - code2 = row[5] + ind = row[1] + name = row[2] + kp = row[3] + num = row[5] + code1 = row[5] + code2 = row[6] new = cls( id=id, num = num, @@ -100,28 +105,26 @@ class ProfileXYZ(Profile, SQLSubModel): data["profile"] = id new._points = PointXYZ._sql_load(execute, data) - profiles.append(new) + profiles[ind] = new return profiles def _sql_save(self, execute, data = None): ok = True + ind = data["ind"] sql = ( "INSERT OR REPLACE INTO " + - "geometry_profileXYZ(id, name, reach, kp, num, code1, code2) "+ + "geometry_profileXYZ(id, ind, name, reach, kp, num, code1, code2) "+ "VALUES (" + - f"{self.id}, '{self._sql_format(self._name)}', " + + f"{self.id}, {ind}, '{self._sql_format(self._name)}', " + f"{self.reach.id}, {self.kp}, {self.num}, " + f"{self.code1}, {self.code1}" + ")" ) execute(sql) - if data is None: - data = {} data["profile"] = self.id - execute(f"DELETE FROM geometry_pointXYZ WHERE profile = {self.id}") ind = 0 diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index c0140db9..fa72c8ec 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -51,9 +51,20 @@ class Reach(SQLSubModel): return new def _sql_save(self, execute, data = None): - objs = self._profiles + # Delete old data + execute(f"DELETE FROM geometry_profileXYZ") + execute(f"DELETE FROM geometry_pointXYZ") - return self._save_submodel(execute, objs, data) + if data is None: + data = {} + + ind = 0 + for profile in self._profiles: + data["ind"] = ind + profile._sql_save(execute, data) + ind += 1 + + return True def profile(self, i): """Returns profile at index i -- GitLab