home · contact · privacy
Refactor updates of relations tables.
[plomtask] / plomtask / processes.py
index 7872c335eebd702e327db08481a83a77827fbc5f..a3682c541c4b6c95d9ce6e9551c815d6d1f0c551 100644 (file)
@@ -48,16 +48,16 @@ class Process(BaseModel):
                 raise NotFoundException(f'Process not found of id: {id_}')
             process = Process(id_)
         for row in db_conn.exec('SELECT * FROM process_titles '
-                                'WHERE parent_id = ?', (process.id_,)):
+                                'WHERE parent = ?', (process.id_,)):
             process.title.history[row[1]] = row[2]
         for row in db_conn.exec('SELECT * FROM process_descriptions '
-                                'WHERE parent_id = ?', (process.id_,)):
+                                'WHERE parent = ?', (process.id_,)):
             process.description.history[row[1]] = row[2]
         for row in db_conn.exec('SELECT * FROM process_efforts '
-                                'WHERE parent_id = ?', (process.id_,)):
+                                'WHERE parent = ?', (process.id_,)):
             process.effort.history[row[1]] = row[2]
         for row in db_conn.exec('SELECT * FROM process_steps '
-                                'WHERE owner_id = ?', (process.id_,)):
+                                'WHERE owner = ?', (process.id_,)):
             process.explicit_steps += [ProcessStep.from_table_row(db_conn,
                                                                   row)]
         for row in db_conn.exec('SELECT condition FROM process_conditions '
@@ -75,8 +75,8 @@ class Process(BaseModel):
     def used_as_step_by(self, db_conn: DatabaseConnection) -> list[Process]:
         """Return Processes using self for a ProcessStep."""
         owner_ids = set()
-        for owner_id in db_conn.exec('SELECT owner_id FROM process_steps WHERE'
-                                     ' step_process_id = ?', (self.id_,)):
+        for owner_id in db_conn.exec('SELECT owner FROM process_steps WHERE'
+                                     ' step_process = ?', (self.id_,)):
             owner_ids.add(owner_id[0])
         return [self.__class__.by_id(db_conn, id_) for id_ in owner_ids]
 
@@ -174,7 +174,7 @@ class Process(BaseModel):
             assert isinstance(step.id_, int)
             del db_conn.cached_process_steps[step.id_]
         self.explicit_steps = []
-        db_conn.exec('DELETE FROM process_steps WHERE owner_id = ?',
+        db_conn.exec('DELETE FROM process_steps WHERE owner = ?',
                      (self.id_,))
         for step_tuple in steps:
             self._add_step(db_conn, step_tuple[0],
@@ -183,26 +183,17 @@ class Process(BaseModel):
     def save(self, db_conn: DatabaseConnection) -> None:
         """Add (or re-write) self and connected items to DB."""
         self.save_core(db_conn)
+        assert isinstance(self.id_, int)
         self.title.save(db_conn)
         self.description.save(db_conn)
         self.effort.save(db_conn)
-        db_conn.exec('DELETE FROM process_conditions WHERE process = ?',
-                     (self.id_,))
-        for condition in self.conditions:
-            db_conn.exec('INSERT INTO process_conditions VALUES (?,?)',
-                         (self.id_, condition.id_))
-        db_conn.exec('DELETE FROM process_fulfills WHERE process = ?',
-                     (self.id_,))
-        for condition in self.fulfills:
-            db_conn.exec('INSERT INTO process_fulfills VALUES (?,?)',
-                         (self.id_, condition.id_))
-        db_conn.exec('DELETE FROM process_undoes WHERE process = ?',
-                     (self.id_,))
-        for condition in self.undoes:
-            db_conn.exec('INSERT INTO process_undoes VALUES (?,?)',
-                         (self.id_, condition.id_))
-        assert isinstance(self.id_, int)
-        db_conn.exec('DELETE FROM process_steps WHERE owner_id = ?',
+        db_conn.rewrite_relations('process_conditions', 'process', self.id_,
+                                  [[c.id_] for c in self.conditions])
+        db_conn.rewrite_relations('process_fulfills', 'process', self.id_,
+                                  [[c.id_] for c in self.fulfills])
+        db_conn.rewrite_relations('process_undoes', 'process', self.id_,
+                                  [[c.id_] for c in self.undoes])
+        db_conn.exec('DELETE FROM process_steps WHERE owner = ?',
                      (self.id_,))
         for step in self.explicit_steps:
             step.save(db_conn)