From b9fdf674308394da488ac1df153356588c899766 Mon Sep 17 00:00:00 2001
From: Valentin Rigal <rigal@teklia.com>
Date: Wed, 14 Jun 2023 11:26:32 +0000
Subject: [PATCH] Delete training links upon element deletion

---
 arkindex/documents/deletion.py                |  29 ++++
 arkindex/documents/managers.py                |   5 +
 .../sql_validation/element_dot_delete.sql     |  24 +++
 .../sql_validation/element_trash_children.sql |  87 ++++++++++
 .../sql_validation/element_trash_deep.sql     | 153 ++++++++++++++++++
 .../sql_validation/element_trash_ml_class.sql |  60 +++++++
 .../element_trash_no_children.sql             |  21 +++
 .../worker_results_delete_all_versions.sql    |  60 +++++++
 .../worker_results_delete_in_corpus.sql       |  60 +++++++
 .../worker_results_delete_under_parent.sql    |  57 +++++++
 ...r_results_delete_under_parent_included.sql |  96 +++++++++++
 11 files changed, 652 insertions(+)

diff --git a/arkindex/documents/deletion.py b/arkindex/documents/deletion.py
index e330d7db21..d31de8cfd4 100644
--- a/arkindex/documents/deletion.py
+++ b/arkindex/documents/deletion.py
@@ -70,6 +70,35 @@ def delete_element(element_id: UUID) -> None:
         """, {'id': element_id})
         logger.info(f"Deleted {cursor.rowcount} usage from process as element")
 
+        # Set folders references on training processes to None
+        cursor.execute("""
+        UPDATE process_process
+        SET train_folder_id = NULL
+        WHERE train_folder_id = %(id)s
+        OR train_folder_id IN (
+            SELECT element_id FROM documents_elementpath WHERE path && ARRAY[%(id)s]
+        )
+        """, {'id': element_id})
+        logger.info(f"Deleted {cursor.rowcount} usage from process as train folder")
+        cursor.execute("""
+        UPDATE process_process
+        SET validation_folder_id = NULL
+        WHERE validation_folder_id = %(id)s
+        OR validation_folder_id IN (
+            SELECT element_id FROM documents_elementpath WHERE path && ARRAY[%(id)s]
+        )
+        """, {'id': element_id})
+        logger.info(f"Deleted {cursor.rowcount} usage from process as validation folder")
+        cursor.execute("""
+        UPDATE process_process
+        SET test_folder_id = NULL
+        WHERE test_folder_id = %(id)s
+        OR test_folder_id IN (
+            SELECT element_id FROM documents_elementpath WHERE path && ARRAY[%(id)s]
+        )
+        """, {'id': element_id})
+        logger.info(f"Deleted {cursor.rowcount} usage from process as test folder")
+
         # Remove user selections
         cursor.execute("""
         DELETE FROM documents_selection selection
diff --git a/arkindex/documents/managers.py b/arkindex/documents/managers.py
index c33b3861c8..7dae21c3e3 100644
--- a/arkindex/documents/managers.py
+++ b/arkindex/documents/managers.py
@@ -80,6 +80,11 @@ class ElementQuerySet(models.QuerySet):
         # This may cause workers processes to target a different set of elements
         Process.objects.filter(element_id__in=ids).update(element_id=None)
 
+        # Set folder references on training processes to None
+        Process.objects.filter(train_folder_id__in=ids).update(train_folder_id=None)
+        Process.objects.filter(validation_folder_id__in=ids).update(validation_folder_id=None)
+        Process.objects.filter(test_folder_id__in=ids).update(test_folder_id=None)
+
         # This is where it gets really ugly: in order to delete all the children
         # without losing their reference, we need to inject the generated SQL query
         # directly into an SQL DELETE statement for paths
diff --git a/arkindex/sql_validation/element_dot_delete.sql b/arkindex/sql_validation/element_dot_delete.sql
index 31722f6a59..9c6c904038 100644
--- a/arkindex/sql_validation/element_dot_delete.sql
+++ b/arkindex/sql_validation/element_dot_delete.sql
@@ -35,6 +35,30 @@ OR element_id IN (
     SELECT element_id FROM documents_elementpath WHERE path && ARRAY['{id}'::uuid]
 ) ;
 
+UPDATE process_process
+SET train_folder_id = NULL
+WHERE train_folder_id = '{id}'::uuid
+    OR train_folder_id IN
+        (SELECT element_id
+         FROM documents_elementpath
+         WHERE path && ARRAY['{id}'::uuid] ) ;
+
+UPDATE process_process
+SET validation_folder_id = NULL
+WHERE validation_folder_id = '{id}'::uuid
+    OR validation_folder_id IN
+        (SELECT element_id
+         FROM documents_elementpath
+         WHERE path && ARRAY['{id}'::uuid] ) ;
+
+UPDATE process_process
+SET test_folder_id = NULL
+WHERE test_folder_id = '{id}'::uuid
+    OR test_folder_id IN
+        (SELECT element_id
+         FROM documents_elementpath
+         WHERE path && ARRAY['{id}'::uuid] ) ;
+
 DELETE FROM documents_selection selection
 WHERE element_id = '{id}'::uuid
 OR element_id IN (
diff --git a/arkindex/sql_validation/element_trash_children.sql b/arkindex/sql_validation/element_trash_children.sql
index 0ad34d8158..e287cfddce 100644
--- a/arkindex/sql_validation/element_trash_children.sql
+++ b/arkindex/sql_validation/element_trash_children.sql
@@ -100,6 +100,39 @@ WHERE "process_process"."element_id" IN
                   FROM "documents_element" U0
                   WHERE U0."id" = '{id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -215,6 +248,39 @@ WHERE "process_process"."element_id" IN
                   FROM "documents_element" U0
                   WHERE U0."id" = '{id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[1] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[1] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[1] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -298,6 +364,27 @@ WHERE "process_process"."element_id" IN
          FROM "documents_element" U0
          WHERE U0."id" = '{id}'::uuid);
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/element_trash_deep.sql b/arkindex/sql_validation/element_trash_deep.sql
index b63124f7c2..fa4bc690ff 100644
--- a/arkindex/sql_validation/element_trash_deep.sql
+++ b/arkindex/sql_validation/element_trash_deep.sql
@@ -100,6 +100,39 @@ WHERE "process_process"."element_id" IN
                   FROM "documents_element" U0
                   WHERE U0."id" = '{id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[4] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[4] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[4] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -215,6 +248,39 @@ WHERE "process_process"."element_id" IN
                   FROM "documents_element" U0
                   WHERE U0."id" = '{id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[3] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[3] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[3] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -330,6 +396,39 @@ WHERE "process_process"."element_id" IN
                   FROM "documents_element" U0
                   WHERE U0."id" = '{id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -445,6 +544,39 @@ WHERE "process_process"."element_id" IN
                   FROM "documents_element" U0
                   WHERE U0."id" = '{id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[1] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[1] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[1] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE U0."id" = '{id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -528,6 +660,27 @@ WHERE "process_process"."element_id" IN
          FROM "documents_element" U0
          WHERE U0."id" = '{id}'::uuid);
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/element_trash_ml_class.sql b/arkindex/sql_validation/element_trash_ml_class.sql
index f8d7261585..67a951b60b 100644
--- a/arkindex/sql_validation/element_trash_ml_class.sql
+++ b/arkindex/sql_validation/element_trash_ml_class.sql
@@ -109,6 +109,42 @@ WHERE "process_process"."element_id" IN
                   INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
                   WHERE U1."id" IS NOT NULL));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
+                  WHERE U1."id" IS NOT NULL));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
+                  WHERE U1."id" IS NOT NULL));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
+                  WHERE U1."id" IS NOT NULL));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -202,6 +238,30 @@ WHERE "process_process"."element_id" IN
          INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
          WHERE U1."id" IS NOT NULL);
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
+         WHERE U1."id" IS NOT NULL);
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
+         WHERE U1."id" IS NOT NULL);
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_classification" U1 ON (U0."id" = U1."element_id")
+         WHERE U1."id" IS NOT NULL);
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/element_trash_no_children.sql b/arkindex/sql_validation/element_trash_no_children.sql
index 7bce1a2be5..bbbb84246b 100644
--- a/arkindex/sql_validation/element_trash_no_children.sql
+++ b/arkindex/sql_validation/element_trash_no_children.sql
@@ -58,6 +58,27 @@ WHERE "process_process"."element_id" IN
          FROM "documents_element" U0
          WHERE U0."id" = '{id}'::uuid);
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE U0."id" = '{id}'::uuid);
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/worker_results_delete_all_versions.sql b/arkindex/sql_validation/worker_results_delete_all_versions.sql
index fdc4a049dd..efecadf9ab 100644
--- a/arkindex/sql_validation/worker_results_delete_all_versions.sql
+++ b/arkindex/sql_validation/worker_results_delete_all_versions.sql
@@ -109,6 +109,42 @@ WHERE "process_process"."element_id" IN
                   WHERE (U0."corpus_id" = '{corpus_id}'::uuid
                          AND NOT (U0."worker_version_id" IS NULL))));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND NOT (U0."worker_version_id" IS NULL))));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND NOT (U0."worker_version_id" IS NULL))));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND NOT (U0."worker_version_id" IS NULL))));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -202,6 +238,30 @@ WHERE "process_process"."element_id" IN
          WHERE (U0."corpus_id" = '{corpus_id}'::uuid
                 AND NOT (U0."worker_version_id" IS NULL)));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND NOT (U0."worker_version_id" IS NULL)));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND NOT (U0."worker_version_id" IS NULL)));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND NOT (U0."worker_version_id" IS NULL)));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/worker_results_delete_in_corpus.sql b/arkindex/sql_validation/worker_results_delete_in_corpus.sql
index 1f7a8878f0..8a34274fd6 100644
--- a/arkindex/sql_validation/worker_results_delete_in_corpus.sql
+++ b/arkindex/sql_validation/worker_results_delete_in_corpus.sql
@@ -109,6 +109,42 @@ WHERE "process_process"."element_id" IN
                   WHERE (U0."corpus_id" = '{corpus_id}'::uuid
                          AND U0."worker_version_id" = '{version_id}'::uuid)));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND U0."worker_version_id" = '{version_id}'::uuid)));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND U0."worker_version_id" = '{version_id}'::uuid)));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND U0."worker_version_id" = '{version_id}'::uuid)));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -202,6 +238,30 @@ WHERE "process_process"."element_id" IN
          WHERE (U0."corpus_id" = '{corpus_id}'::uuid
                 AND U0."worker_version_id" = '{version_id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/worker_results_delete_under_parent.sql b/arkindex/sql_validation/worker_results_delete_under_parent.sql
index b807c4b915..eb04b0085c 100644
--- a/arkindex/sql_validation/worker_results_delete_under_parent.sql
+++ b/arkindex/sql_validation/worker_results_delete_under_parent.sql
@@ -95,6 +95,36 @@ WHERE "process_process"."element_id" IN
                 AND U0."worker_version_id" = '{version_id}'::uuid
                 AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id")
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id")
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id")
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -274,6 +304,33 @@ WHERE "process_process"."element_id" IN
                 AND U0."worker_version_id" = '{version_id}'::uuid
                 AND U0."id" = '{element_id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U0."id" = '{element_id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U0."id" = '{element_id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U0."id" = '{element_id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
diff --git a/arkindex/sql_validation/worker_results_delete_under_parent_included.sql b/arkindex/sql_validation/worker_results_delete_under_parent_included.sql
index 91623264d4..fcd9794091 100644
--- a/arkindex/sql_validation/worker_results_delete_under_parent_included.sql
+++ b/arkindex/sql_validation/worker_results_delete_under_parent_included.sql
@@ -95,6 +95,36 @@ WHERE "process_process"."element_id" IN
                 AND U0."worker_version_id" = '{version_id}'::uuid
                 AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id")
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id")
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         INNER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id")
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -306,6 +336,45 @@ WHERE "process_process"."element_id" IN
                          AND U0."worker_version_id" = '{version_id}'::uuid
                          AND U0."id" = '{element_id}'::uuid)));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND U0."worker_version_id" = '{version_id}'::uuid
+                         AND U0."id" = '{element_id}'::uuid)));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND U0."worker_version_id" = '{version_id}'::uuid
+                         AND U0."id" = '{element_id}'::uuid)));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT V0."id"
+         FROM "documents_element" V0
+         INNER JOIN "documents_elementpath" V1 ON (V0."id" = V1."element_id")
+         WHERE V1."path"[2] IN
+                 (SELECT U0."id"
+                  FROM "documents_element" U0
+                  WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                         AND U0."worker_version_id" = '{version_id}'::uuid
+                         AND U0."id" = '{element_id}'::uuid)));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
@@ -409,6 +478,33 @@ WHERE "process_process"."element_id" IN
                 AND U0."worker_version_id" = '{version_id}'::uuid
                 AND U0."id" = '{element_id}'::uuid));
 
+UPDATE "process_process"
+SET "train_folder_id" = NULL
+WHERE "process_process"."train_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U0."id" = '{element_id}'::uuid));
+
+UPDATE "process_process"
+SET "validation_folder_id" = NULL
+WHERE "process_process"."validation_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U0."id" = '{element_id}'::uuid));
+
+UPDATE "process_process"
+SET "test_folder_id" = NULL
+WHERE "process_process"."test_folder_id" IN
+        (SELECT U0."id"
+         FROM "documents_element" U0
+         WHERE (U0."corpus_id" = '{corpus_id}'::uuid
+                AND U0."worker_version_id" = '{version_id}'::uuid
+                AND U0."id" = '{element_id}'::uuid));
+
 WITH element_ids (id) AS
     (DELETE
      FROM documents_elementpath
-- 
GitLab