diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py index 1c9c5cea43099c95aa28b370519fc8addb190f3f..729b0b0915aafbdf6b71ae308b33c5aa8d36fccc 100644 --- a/arkindex/documents/api/elements.py +++ b/arkindex/documents/api/elements.py @@ -1767,7 +1767,7 @@ class WorkerResultsDestroy(CorpusACLMixin, DestroyAPIView): worker_results_delete( corpus_id=corpus.id, version=worker_version, - parent_id=element_id, + element_id=element_id, user_id=self.request.user.id, ) diff --git a/arkindex/documents/tasks.py b/arkindex/documents/tasks.py index 01599ac8d1f89b029418b8e00176db02b2c2b808..d0f4bf94f99922c5573a036d0d4b14e748b434b6 100644 --- a/arkindex/documents/tasks.py +++ b/arkindex/documents/tasks.py @@ -85,10 +85,14 @@ def element_trash(queryset: ElementQuerySet, delete_children: bool) -> None: @job('high', timeout=settings.RQ_TIMEOUTS['worker_results_delete']) -def worker_results_delete(corpus_id: str, version_id: Optional[str], parent_id: Optional[str]) -> None: +def worker_results_delete( + corpus_id: str, + version_id: Optional[str], + element_id: Optional[str], + include_children: bool = True) -> None: """ Recursively delete all Worker Results produced by any WorkerVersion or a specific one - on a whole corpus or under a specified parent element (parent element included). + on a whole corpus, under a specified parent element (parent element included), or on a single element. """ elements = Element.objects.filter(corpus_id=corpus_id) classifications = Classification.objects.filter(element__corpus_id=corpus_id) @@ -124,17 +128,31 @@ def worker_results_delete(corpus_id: str, version_id: Optional[str], parent_id: metadata = metadata.exclude(worker_version_id=None) worker_activities = worker_activities.exclude(worker_version_id=None) - # When a parent ID is defined, filter using element paths to match the parent and all its descendants - if parent_id: - elements = elements.filter(Q(id=parent_id) | Q(paths__path__overlap=[parent_id])) - classifications = classifications.filter(Q(element_id=parent_id) | Q(element__paths__path__overlap=[parent_id])) - transcriptions = transcriptions.filter(Q(element_id=parent_id) | Q(element__paths__path__overlap=[parent_id])) - # The same filter is applied to both TranscriptionEntity querysets - transcription_entities_filter = Q(transcription__element_id=parent_id) | Q(transcription__element__paths__path__overlap=[parent_id]) - transcription_entities = transcription_entities.filter(transcription_entities_filter) - worker_transcription_entities = worker_transcription_entities.filter(transcription_entities_filter) - metadata = metadata.filter(Q(element_id=parent_id) | Q(element__paths__path__overlap=[parent_id])) - worker_activities = worker_activities.filter(Q(element_id=parent_id) | Q(element__paths__path__overlap=[parent_id])) + if element_id: + # include_children causes a deletion *only* on the element's descendants. + # To also delete on the element itself, we will call this task synchronously with the same arguments and include_children=False. + # This is used to avoid filtering by Q(id=element_id) | Q(paths__path__overlap=[element_id]) all at once, + # which was found to be up to 30× slower than running two separate deletions. + if include_children: + elements = elements.filter(paths__path__overlap=[element_id]) + classifications = classifications.filter(element__paths__path__overlap=[element_id]) + transcriptions = transcriptions.filter(element__paths__path__overlap=[element_id]) + # The same filter is applied to both TranscriptionEntity querysets + transcription_entities_filter = Q(transcription__element__paths__path__overlap=[element_id]) + transcription_entities = transcription_entities.filter(transcription_entities_filter) + worker_transcription_entities = worker_transcription_entities.filter(transcription_entities_filter) + metadata = metadata.filter(element__paths__path__overlap=[element_id]) + worker_activities = worker_activities.filter(element__paths__path__overlap=[element_id]) + else: + elements = elements.filter(id=element_id) + classifications = classifications.filter(element_id=element_id) + transcriptions = transcriptions.filter(element_id=element_id) + # The same filter is applied to both TranscriptionEntity querysets + transcription_entities_filter = Q(transcription__element_id=element_id) + transcription_entities = transcription_entities.filter(transcription_entities_filter) + worker_transcription_entities = worker_transcription_entities.filter(transcription_entities_filter) + metadata = metadata.filter(element_id=element_id) + worker_activities = worker_activities.filter(element_id=element_id) elements.trash() classifications.delete() @@ -145,6 +163,18 @@ def worker_results_delete(corpus_id: str, version_id: Optional[str], parent_id: metadata.delete() worker_activities.delete() + if element_id and include_children: + # Delete worker results on the parent element itself only after the deletion on its descendants has been done. + # This deletion could cause the parent element to be deleted if it is considered to be a worker result itself, + # which would remove the related ElementPaths and cause us to loose track of which child elements + # we were supposed to delete worker results on. + worker_results_delete( + corpus_id=corpus_id, + version_id=version_id, + element_id=element_id, + include_children=False, + ) + @job('high', timeout=settings.RQ_TIMEOUTS['move_element']) def move_element(source: Element, destination: Element) -> None: diff --git a/arkindex/documents/tests/tasks/test_worker_results_delete.py b/arkindex/documents/tests/tasks/test_worker_results_delete.py index 99cc1bae9f19ac60429a612e19ab14b6a7417a15..4599191fc8727dc174d72f3cc2c87815f19bb954 100644 --- a/arkindex/documents/tests/tasks/test_worker_results_delete.py +++ b/arkindex/documents/tests/tasks/test_worker_results_delete.py @@ -89,7 +89,7 @@ class TestDeleteWorkerResults(FixtureTestCase): with self.assertExactQueries('worker_results_delete_under_parent.sql', params={ 'corpus_id': str(self.corpus.id), 'version_id': str(self.version_1.id), - 'parent_id': str(self.page1.id), + 'element_id': str(self.page1.id), }): worker_results_delete(self.corpus.id, self.version_1.id, self.page1.id) @@ -116,7 +116,7 @@ class TestDeleteWorkerResults(FixtureTestCase): with self.assertExactQueries('worker_results_delete_under_parent_included.sql', params={ 'corpus_id': str(self.corpus.id), 'version_id': str(self.version_1.id), - 'parent_id': str(self.page2.id), + 'element_id': str(self.page2.id), }): worker_results_delete(self.corpus.id, self.version_1.id, self.page2.id) diff --git a/arkindex/documents/tests/test_destroy_worker_results.py b/arkindex/documents/tests/test_destroy_worker_results.py index ed5a60a2890af926363587b97a66f38d8bb9edfe..bf98302e78b3aa76825762ca16acfc1b16ecc987 100644 --- a/arkindex/documents/tests/test_destroy_worker_results.py +++ b/arkindex/documents/tests/test_destroy_worker_results.py @@ -60,7 +60,7 @@ class TestDestroyWorkerResults(FixtureAPITestCase): self.assertEqual(delay_mock.call_args, call( corpus_id=self.corpus.id, version_id=None, - parent_id=None, + element_id=None, user_id=self.user.id, description='Worker results deletion', )) @@ -79,7 +79,7 @@ class TestDestroyWorkerResults(FixtureAPITestCase): self.assertEqual(delay_mock.call_args, call( corpus_id=self.corpus.id, version_id=self.version.id, - parent_id=None, + element_id=None, user_id=self.user.id, description=f"Deletion of results produced by worker version: {self.version}" )) @@ -98,7 +98,7 @@ class TestDestroyWorkerResults(FixtureAPITestCase): self.assertEqual(delay_mock.call_args, call( corpus_id=self.corpus.id, version_id=None, - parent_id=self.page.id, + element_id=self.page.id, user_id=self.user.id, description='Worker results deletion', )) @@ -117,7 +117,7 @@ class TestDestroyWorkerResults(FixtureAPITestCase): self.assertEqual(delay_mock.call_args, call( corpus_id=self.corpus.id, version_id=self.version.id, - parent_id=self.page.id, + element_id=self.page.id, user_id=self.user.id, description=f"Deletion of results produced by worker version: {self.version}" )) diff --git a/arkindex/project/triggers.py b/arkindex/project/triggers.py index da198d1511caecda4d0f6d9a7f6ffd4f0079005b..9ac334b77010068078ce77b44c0ba54a53d9d107 100644 --- a/arkindex/project/triggers.py +++ b/arkindex/project/triggers.py @@ -44,7 +44,7 @@ def element_trash(queryset: ElementQuerySet, def worker_results_delete(corpus_id: UUID, version: Optional[WorkerVersion] = None, - parent_id: Optional[UUID] = None, + element_id: Optional[UUID] = None, user_id: Optional[int] = None) -> None: """ Delete all Worker Results produced by a specific WorkerVersion on a whole corpus or under @@ -58,7 +58,7 @@ def worker_results_delete(corpus_id: UUID, documents_tasks.worker_results_delete.delay( corpus_id=corpus_id, version_id=version.id if version else None, - parent_id=parent_id, + element_id=element_id, user_id=user_id, description=description, ) diff --git a/arkindex/sql_validation/worker_results_delete_under_parent.sql b/arkindex/sql_validation/worker_results_delete_under_parent.sql index fc9d65fa91feb36c15f9f0c4c1d2079c6afe3494..cc2860601ae2cc090ffde62f8f93b617873c3101 100644 --- a/arkindex/sql_validation/worker_results_delete_under_parent.sql +++ b/arkindex/sql_validation/worker_results_delete_under_parent.sql @@ -6,11 +6,10 @@ FROM inner join (SELECT "documents_element"."id" FROM "documents_element" - LEFT OUTER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") + INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid AND "documents_element"."worker_version_id" = '{version_id}'::uuid - AND ("documents_element"."id" = '{parent_id}'::uuid - OR "documents_elementpath"."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))) as input on (array[input.id] && p.path)) as lengths ; + AND "documents_elementpath"."path" && (ARRAY['{element_id}'::uuid])::uuid[])) as input on (array[input.id] && p.path)) as lengths ; DELETE FROM "documents_transcriptionentity" @@ -21,88 +20,80 @@ WHERE "documents_transcriptionentity"."id" IN WHERE V1."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[]))); DELETE FROM "documents_transcription" WHERE "documents_transcription"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "dataimport_workeractivity" WHERE "dataimport_workeractivity"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_metadata" WHERE "documents_metadata"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_classification" WHERE "documents_classification"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_selection" WHERE "documents_selection"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "dataimport_dataimportelement" WHERE "dataimport_dataimportelement"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); UPDATE "dataimport_dataimport" SET "element_id" = NULL WHERE "dataimport_dataimport"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER JOIN "documents_elementpath" U3 ON (U0."id" = U3."element_id") + 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U3."path" && (ARRAY['{element_id}'::uuid])::uuid[])); WITH element_ids (id) AS (DELETE @@ -110,22 +101,20 @@ WITH element_ids (id) AS WHERE element_id IN (SELECT "documents_element"."id" FROM "documents_element" - LEFT OUTER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") + INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid AND "documents_element"."worker_version_id" = '{version_id}'::uuid - AND ("documents_element"."id" = '{parent_id}'::uuid - OR "documents_elementpath"."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))) RETURNING element_id) + AND "documents_elementpath"."path" && (ARRAY['{element_id}'::uuid])::uuid[])) RETURNING element_id) DELETE FROM documents_element element USING element_ids WHERE element.id = element_ids.id ; SELECT "documents_element"."id" FROM "documents_element" -LEFT OUTER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") +INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid AND "documents_element"."worker_version_id" = '{version_id}'::uuid - AND ("documents_element"."id" = '{parent_id}'::uuid - OR "documents_elementpath"."path" && (ARRAY['{parent_id}'::uuid])::uuid[])); + AND "documents_elementpath"."path" && (ARRAY['{element_id}'::uuid])::uuid[]); DELETE FROM "documents_classification" @@ -133,11 +122,10 @@ WHERE "documents_classification"."id" IN (SELECT U0."id" FROM "documents_classification" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_transcriptionentity" @@ -146,11 +134,10 @@ WHERE "documents_transcriptionentity"."id" IN FROM "documents_transcriptionentity" U0 INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") - LEFT OUTER JOIN "documents_elementpath" U5 ON (U2."id" = U5."element_id") + INNER JOIN "documents_elementpath" U5 ON (U2."id" = U5."element_id") WHERE (U2."corpus_id" = '{corpus_id}'::uuid AND U1."worker_version_id" = '{version_id}'::uuid - AND (U1."element_id" = '{parent_id}'::uuid - OR U5."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U5."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_transcriptionentity" @@ -160,12 +147,11 @@ WHERE "documents_transcriptionentity"."id" IN INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") INNER JOIN "documents_entity" U4 ON (U0."entity_id" = U4."id") - LEFT OUTER JOIN "documents_elementpath" U7 ON (U2."id" = U7."element_id") + INNER JOIN "documents_elementpath" U7 ON (U2."id" = U7."element_id") WHERE ((U2."corpus_id" = '{corpus_id}'::uuid OR U4."corpus_id" = '{corpus_id}'::uuid) AND U0."worker_version_id" = '{version_id}'::uuid - AND (U1."element_id" = '{parent_id}'::uuid - OR U7."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U7."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_transcription" @@ -173,11 +159,10 @@ WHERE "documents_transcription"."id" IN (SELECT U0."id" FROM "documents_transcription" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "documents_metadata" @@ -185,11 +170,10 @@ WHERE "documents_metadata"."id" IN (SELECT U0."id" FROM "documents_metadata" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); DELETE FROM "dataimport_workeractivity" @@ -197,8 +181,178 @@ WHERE "dataimport_workeractivity"."id" IN (SELECT U0."id" FROM "dataimport_workeractivity" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))) + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +select min(length), + max(length) +FROM + (select array_length(p.path, 1) as length + from documents_elementpath as p + inner join + (SELECT "documents_element"."id" + FROM "documents_element" + WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid + AND "documents_element"."worker_version_id" = '{version_id}'::uuid + AND "documents_element"."id" = '{element_id}'::uuid)) as input on (array[input.id] && p.path)) as lengths ; + +DELETE +FROM "documents_transcriptionentity" +WHERE "documents_transcriptionentity"."id" IN + (SELECT V0."id" + FROM "documents_transcriptionentity" V0 + INNER JOIN "documents_transcription" V1 ON (V0."transcription_id" = V1."id") + WHERE V1."element_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))); + +DELETE +FROM "documents_transcription" +WHERE "documents_transcription"."element_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)); + +DELETE +FROM "dataimport_workeractivity" +WHERE "dataimport_workeractivity"."element_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)); + +DELETE +FROM "documents_metadata" +WHERE "documents_metadata"."element_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)); + +DELETE +FROM "documents_classification" +WHERE "documents_classification"."element_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)); + +DELETE +FROM "documents_selection" +WHERE "documents_selection"."element_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)); + +DELETE +FROM "dataimport_dataimportelement" +WHERE "dataimport_dataimportelement"."element_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 "dataimport_dataimport" +SET "element_id" = NULL +WHERE "dataimport_dataimport"."element_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 + WHERE element_id IN + (SELECT "documents_element"."id" + FROM "documents_element" + WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid + AND "documents_element"."worker_version_id" = '{version_id}'::uuid + AND "documents_element"."id" = '{element_id}'::uuid)) RETURNING element_id) +DELETE +FROM documents_element element USING element_ids +WHERE element.id = element_ids.id ; + +SELECT "documents_element"."id" +FROM "documents_element" +WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid + AND "documents_element"."worker_version_id" = '{version_id}'::uuid + AND "documents_element"."id" = '{element_id}'::uuid); + +DELETE +FROM "documents_classification" +WHERE "documents_classification"."id" IN + (SELECT U0."id" + FROM "documents_classification" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U0."element_id" = '{element_id}'::uuid)); + +DELETE +FROM "documents_transcriptionentity" +WHERE "documents_transcriptionentity"."id" IN + (SELECT U0."id" + FROM "documents_transcriptionentity" U0 + INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") + INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") + WHERE (U2."corpus_id" = '{corpus_id}'::uuid + AND U1."worker_version_id" = '{version_id}'::uuid + AND U1."element_id" = '{element_id}'::uuid)); + +DELETE +FROM "documents_transcriptionentity" +WHERE "documents_transcriptionentity"."id" IN + (SELECT U0."id" + FROM "documents_transcriptionentity" U0 + INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") + INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") + INNER JOIN "documents_entity" U4 ON (U0."entity_id" = U4."id") + WHERE ((U2."corpus_id" = '{corpus_id}'::uuid + OR U4."corpus_id" = '{corpus_id}'::uuid) + AND U0."worker_version_id" = '{version_id}'::uuid + AND U1."element_id" = '{element_id}'::uuid)); + +DELETE +FROM "documents_transcription" +WHERE "documents_transcription"."id" IN + (SELECT U0."id" + FROM "documents_transcription" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U0."element_id" = '{element_id}'::uuid)); + +DELETE +FROM "documents_metadata" +WHERE "documents_metadata"."id" IN + (SELECT U0."id" + FROM "documents_metadata" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U0."element_id" = '{element_id}'::uuid)); + +DELETE +FROM "dataimport_workeractivity" +WHERE "dataimport_workeractivity"."id" IN + (SELECT U0."id" + FROM "dataimport_workeractivity" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U0."element_id" = '{element_id}'::uuid)) 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 048de7a072f5694513e66e89dd13d418071bfb7a..88ed49ebc9c3972163afadc323359e1b3c53587a 100644 --- a/arkindex/sql_validation/worker_results_delete_under_parent_included.sql +++ b/arkindex/sql_validation/worker_results_delete_under_parent_included.sql @@ -6,11 +6,197 @@ FROM inner join (SELECT "documents_element"."id" FROM "documents_element" - LEFT OUTER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") + INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid AND "documents_element"."worker_version_id" = '{version_id}'::uuid - AND ("documents_element"."id" = '{parent_id}'::uuid - OR "documents_elementpath"."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))) as input on (array[input.id] && p.path)) as lengths ; + AND "documents_elementpath"."path" && (ARRAY['{element_id}'::uuid])::uuid[])) as input on (array[input.id] && p.path)) as lengths ; + +DELETE +FROM "documents_transcriptionentity" +WHERE "documents_transcriptionentity"."id" IN + (SELECT V0."id" + FROM "documents_transcriptionentity" V0 + INNER JOIN "documents_transcription" V1 ON (V0."transcription_id" = V1."id") + WHERE V1."element_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[]))); + +DELETE +FROM "documents_transcription" +WHERE "documents_transcription"."element_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[])); + +DELETE +FROM "dataimport_workeractivity" +WHERE "dataimport_workeractivity"."element_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[])); + +DELETE +FROM "documents_metadata" +WHERE "documents_metadata"."element_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[])); + +DELETE +FROM "documents_classification" +WHERE "documents_classification"."element_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[])); + +DELETE +FROM "documents_selection" +WHERE "documents_selection"."element_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[])); + +DELETE +FROM "dataimport_dataimportelement" +WHERE "dataimport_dataimportelement"."element_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 "dataimport_dataimport" +SET "element_id" = NULL +WHERE "dataimport_dataimport"."element_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 + WHERE element_id IN + (SELECT "documents_element"."id" + FROM "documents_element" + INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") + WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid + AND "documents_element"."worker_version_id" = '{version_id}'::uuid + AND "documents_elementpath"."path" && (ARRAY['{element_id}'::uuid])::uuid[])) RETURNING element_id) +DELETE +FROM documents_element element USING element_ids +WHERE element.id = element_ids.id ; + +SELECT "documents_element"."id" +FROM "documents_element" +INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") +WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid + AND "documents_element"."worker_version_id" = '{version_id}'::uuid + AND "documents_elementpath"."path" && (ARRAY['{element_id}'::uuid])::uuid[]); + +DELETE +FROM "documents_classification" +WHERE "documents_classification"."id" IN + (SELECT U0."id" + FROM "documents_classification" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +DELETE +FROM "documents_transcriptionentity" +WHERE "documents_transcriptionentity"."id" IN + (SELECT U0."id" + FROM "documents_transcriptionentity" U0 + INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") + INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") + INNER JOIN "documents_elementpath" U5 ON (U2."id" = U5."element_id") + WHERE (U2."corpus_id" = '{corpus_id}'::uuid + AND U1."worker_version_id" = '{version_id}'::uuid + AND U5."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +DELETE +FROM "documents_transcriptionentity" +WHERE "documents_transcriptionentity"."id" IN + (SELECT U0."id" + FROM "documents_transcriptionentity" U0 + INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") + INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") + INNER JOIN "documents_entity" U4 ON (U0."entity_id" = U4."id") + INNER JOIN "documents_elementpath" U7 ON (U2."id" = U7."element_id") + WHERE ((U2."corpus_id" = '{corpus_id}'::uuid + OR U4."corpus_id" = '{corpus_id}'::uuid) + AND U0."worker_version_id" = '{version_id}'::uuid + AND U7."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +DELETE +FROM "documents_transcription" +WHERE "documents_transcription"."id" IN + (SELECT U0."id" + FROM "documents_transcription" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +DELETE +FROM "documents_metadata" +WHERE "documents_metadata"."id" IN + (SELECT U0."id" + FROM "documents_metadata" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +DELETE +FROM "dataimport_workeractivity" +WHERE "dataimport_workeractivity"."id" IN + (SELECT U0."id" + FROM "dataimport_workeractivity" U0 + INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") + INNER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") + WHERE (U1."corpus_id" = '{corpus_id}'::uuid + AND U0."worker_version_id" = '{version_id}'::uuid + AND U4."path" && (ARRAY['{element_id}'::uuid])::uuid[])); + +select min(length), + max(length) +FROM + (select array_length(p.path, 1) as length + from documents_elementpath as p + inner join + (SELECT "documents_element"."id" + FROM "documents_element" + WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid + AND "documents_element"."worker_version_id" = '{version_id}'::uuid + AND "documents_element"."id" = '{element_id}'::uuid)) as input on (array[input.id] && p.path)) as lengths ; DELETE FROM "documents_transcriptionentity" @@ -25,11 +211,9 @@ WHERE "documents_transcriptionentity"."id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))))); + AND U0."id" = '{element_id}'::uuid)))); DELETE FROM "documents_transcription" @@ -40,11 +224,9 @@ WHERE "documents_transcription"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); DELETE FROM "dataimport_workeractivity" @@ -55,11 +237,9 @@ WHERE "dataimport_workeractivity"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); DELETE FROM "documents_metadata" @@ -70,11 +250,9 @@ WHERE "documents_metadata"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); DELETE FROM "documents_classification" @@ -85,11 +263,9 @@ WHERE "documents_classification"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); DELETE FROM "documents_selection" @@ -100,11 +276,9 @@ WHERE "documents_selection"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); DELETE FROM "dataimport_dataimportelement" @@ -115,11 +289,9 @@ WHERE "dataimport_dataimportelement"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); UPDATE "dataimport_dataimport" SET "element_id" = NULL @@ -130,11 +302,9 @@ WHERE "dataimport_dataimport"."element_id" IN WHERE V1."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); WITH element_ids (id) AS (DELETE @@ -146,11 +316,9 @@ WITH element_ids (id) AS WHERE "documents_elementpath"."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))) RETURNING element_id) + AND U0."id" = '{element_id}'::uuid))) RETURNING element_id) DELETE FROM documents_element element USING element_ids WHERE element.id = element_ids.id ; @@ -161,11 +329,9 @@ INNER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_ele WHERE "documents_elementpath"."path"[2] IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); DELETE FROM "documents_transcriptionentity" @@ -176,88 +342,72 @@ WHERE "documents_transcriptionentity"."id" IN WHERE V1."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[])))); + AND U0."id" = '{element_id}'::uuid))); DELETE FROM "documents_transcription" WHERE "documents_transcription"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); DELETE FROM "dataimport_workeractivity" WHERE "dataimport_workeractivity"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); DELETE FROM "documents_metadata" WHERE "documents_metadata"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); DELETE FROM "documents_classification" WHERE "documents_classification"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); DELETE FROM "documents_selection" WHERE "documents_selection"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); DELETE FROM "dataimport_dataimportelement" WHERE "dataimport_dataimportelement"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); UPDATE "dataimport_dataimport" SET "element_id" = NULL WHERE "dataimport_dataimport"."element_id" IN (SELECT U0."id" FROM "documents_element" U0 - LEFT OUTER 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 (U0."id" = '{parent_id}'::uuid - OR U3."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."id" = '{element_id}'::uuid)); WITH element_ids (id) AS (DELETE @@ -265,22 +415,18 @@ WITH element_ids (id) AS WHERE element_id IN (SELECT "documents_element"."id" FROM "documents_element" - LEFT OUTER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid AND "documents_element"."worker_version_id" = '{version_id}'::uuid - AND ("documents_element"."id" = '{parent_id}'::uuid - OR "documents_elementpath"."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))) RETURNING element_id) + AND "documents_element"."id" = '{element_id}'::uuid)) RETURNING element_id) DELETE FROM documents_element element USING element_ids WHERE element.id = element_ids.id ; SELECT "documents_element"."id" FROM "documents_element" -LEFT OUTER JOIN "documents_elementpath" ON ("documents_element"."id" = "documents_elementpath"."element_id") WHERE ("documents_element"."corpus_id" = '{corpus_id}'::uuid AND "documents_element"."worker_version_id" = '{version_id}'::uuid - AND ("documents_element"."id" = '{parent_id}'::uuid - OR "documents_elementpath"."path" && (ARRAY['{parent_id}'::uuid])::uuid[])); + AND "documents_element"."id" = '{element_id}'::uuid); DELETE FROM "documents_classification" @@ -288,11 +434,9 @@ WHERE "documents_classification"."id" IN (SELECT U0."id" FROM "documents_classification" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."element_id" = '{element_id}'::uuid)); DELETE FROM "documents_transcriptionentity" @@ -301,11 +445,9 @@ WHERE "documents_transcriptionentity"."id" IN FROM "documents_transcriptionentity" U0 INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") - LEFT OUTER JOIN "documents_elementpath" U5 ON (U2."id" = U5."element_id") WHERE (U2."corpus_id" = '{corpus_id}'::uuid AND U1."worker_version_id" = '{version_id}'::uuid - AND (U1."element_id" = '{parent_id}'::uuid - OR U5."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U1."element_id" = '{element_id}'::uuid)); DELETE FROM "documents_transcriptionentity" @@ -315,12 +457,10 @@ WHERE "documents_transcriptionentity"."id" IN INNER JOIN "documents_transcription" U1 ON (U0."transcription_id" = U1."id") INNER JOIN "documents_element" U2 ON (U1."element_id" = U2."id") INNER JOIN "documents_entity" U4 ON (U0."entity_id" = U4."id") - LEFT OUTER JOIN "documents_elementpath" U7 ON (U2."id" = U7."element_id") WHERE ((U2."corpus_id" = '{corpus_id}'::uuid OR U4."corpus_id" = '{corpus_id}'::uuid) AND U0."worker_version_id" = '{version_id}'::uuid - AND (U1."element_id" = '{parent_id}'::uuid - OR U7."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U1."element_id" = '{element_id}'::uuid)); DELETE FROM "documents_transcription" @@ -328,11 +468,9 @@ WHERE "documents_transcription"."id" IN (SELECT U0."id" FROM "documents_transcription" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."element_id" = '{element_id}'::uuid)); DELETE FROM "documents_metadata" @@ -340,11 +478,9 @@ WHERE "documents_metadata"."id" IN (SELECT U0."id" FROM "documents_metadata" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))); + AND U0."element_id" = '{element_id}'::uuid)); DELETE FROM "dataimport_workeractivity" @@ -352,8 +488,6 @@ WHERE "dataimport_workeractivity"."id" IN (SELECT U0."id" FROM "dataimport_workeractivity" U0 INNER JOIN "documents_element" U1 ON (U0."element_id" = U1."id") - LEFT OUTER JOIN "documents_elementpath" U4 ON (U1."id" = U4."element_id") WHERE (U1."corpus_id" = '{corpus_id}'::uuid AND U0."worker_version_id" = '{version_id}'::uuid - AND (U0."element_id" = '{parent_id}'::uuid - OR U4."path" && (ARRAY['{parent_id}'::uuid])::uuid[]))) + AND U0."element_id" = '{element_id}'::uuid))