diff --git a/src/Model/Geometry/Profile.py b/src/Model/Geometry/Profile.py index 93e2c8a8ac8122a1530fead7f2fb06b06d7443df..4a1f5a5fc1db371f3c9c2dc7d7f0b9ca827effee 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 9894cfeff274cf012cfddf7d934292479251baad..d368b9812feef667efbd957723b70bbb0cc83258 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 c0140db9f7cdc054602f1ff8b84453e3eaa2100c..fa72c8ec7cd386527b76503b24a9eea640a2280f 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