From e0927c51117449c4ef8fb07d7044041225bd7968 Mon Sep 17 00:00:00 2001
From: Claudiu Cristea <7931-claudiucristea@users.noreply.drupalcode.org>
Date: Wed, 13 Mar 2024 11:01:02 +0000
Subject: [PATCH] Issue #3427554 by claudiu.cristea: Postpone URI deletion in
 destruction phase

---
 rdf_sync.module             | 4 ----
 rdf_sync.services.yml       | 1 +
 src/RdfSyncSynchronizer.php | 9 +++++++++
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/rdf_sync.module b/rdf_sync.module
index 8539a34..034b5c3 100644
--- a/rdf_sync.module
+++ b/rdf_sync.module
@@ -152,9 +152,5 @@ function rdf_sync_entity_delete(EntityInterface $entity): void {
   $mapper = \Drupal::getContainer()->get('rdf_sync.mapper');
   if ($entity instanceof ContentEntityInterface && $mapper->isMappedEntity($entity)) {
     \Drupal::getContainer()->get('rdf_sync.synchronizer')->synchronize(SyncMethod::DELETE, [$entity]);
-    \Drupal::database()->delete('rdf_sync_uri')
-      ->condition('entity_type', $entity->getEntityTypeId())
-      ->condition('entity_id', $entity->id())
-      ->execute();
   }
 }
diff --git a/rdf_sync.services.yml b/rdf_sync.services.yml
index 2fc15b8..c663f71 100644
--- a/rdf_sync.services.yml
+++ b/rdf_sync.services.yml
@@ -45,6 +45,7 @@ services:
       - '@queue'
       - '@rdf_sync.mapper'
       - '@rdf_sync.normalizer'
+      - '@database'
     tags:
       - { name: needs_destruction }
   rdf_sync.normalizer.subscriber:
diff --git a/src/RdfSyncSynchronizer.php b/src/RdfSyncSynchronizer.php
index 13e30b9..847be5b 100644
--- a/src/RdfSyncSynchronizer.php
+++ b/src/RdfSyncSynchronizer.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
 
 namespace Drupal\rdf_sync;
 
+use Drupal\Core\Database\Connection;
 use Drupal\Core\DestructableInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Queue\QueueFactory;
@@ -35,6 +36,8 @@ class RdfSyncSynchronizer implements DestructableInterface {
    *   The RDF Sync mapper service.
    * @param \Symfony\Component\Serializer\Normalizer\NormalizerInterface $normalizer
    *   The RDF Sync normalizer.
+   * @param \Drupal\Core\Database\Connection $database
+   *   The database connection.
    */
   public function __construct(
     protected StateInterface $state,
@@ -42,6 +45,7 @@ class RdfSyncSynchronizer implements DestructableInterface {
     protected QueueFactory $queueFactory,
     protected RdfSyncMapper $mapper,
     protected NormalizerInterface $normalizer,
+    protected Connection $database,
   ) {}
 
   /**
@@ -121,6 +125,11 @@ class RdfSyncSynchronizer implements DestructableInterface {
         $entities,
       );
       RdfSyncConnection::deleteTriples($uris);
+
+      // Update {rdf_sync_uri} table.
+      if ($method === SyncMethod::DELETE) {
+        $this->database->delete('rdf_sync_uri')->condition('uri', $uris, 'IN')->execute();
+      }
     }
 
     if (in_array($method, [SyncMethod::INSERT, SyncMethod::UPDATE], TRUE)) {
-- 
GitLab