From ed2f2e3fe5771e595b78ae7b5605c87132e692e3 Mon Sep 17 00:00:00 2001 From: Xavier Leune Date: Tue, 16 Dec 2025 12:03:33 +0100 Subject: [PATCH 1/2] Fix(Hydrator): disabling identity map now disables the identity map --- src/Ting/Repository/Hydrator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ting/Repository/Hydrator.php b/src/Ting/Repository/Hydrator.php index bdc1da1e..67425f73 100644 --- a/src/Ting/Repository/Hydrator.php +++ b/src/Ting/Repository/Hydrator.php @@ -416,7 +416,7 @@ function (Metadata $metadata) use ($column, &$result): void { } } - if (isset($this->references[$ref]) === false) { + if (isset($this->references[$ref]) === false && $this->identityMap) { $this->references[$ref] = $entity; } } From 2bccf3e1346b9331e15a8737eedde130f03e3440 Mon Sep 17 00:00:00 2001 From: Xavier Leune Date: Tue, 16 Dec 2025 16:40:19 +0100 Subject: [PATCH 2/2] Fix(Hydrator): disabling identity map now disables the identity map --- CHANGELOG | 3 +++ src/Ting/Repository/Hydrator.php | 23 +++++++---------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f6fde6c7..dbf81d5e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +3.12.1 (unreleased): + * Fix Hydrator: disable identity map now prevent storing entities + 3.12.0 (2025-04-17): * add __debuginfo() in NotifyInterface to reduce context when dumping an entity * Driver now supports reconnect, useful in forked processes diff --git a/src/Ting/Repository/Hydrator.php b/src/Ting/Repository/Hydrator.php index 67425f73..f83ba380 100644 --- a/src/Ting/Repository/Hydrator.php +++ b/src/Ting/Repository/Hydrator.php @@ -329,22 +329,13 @@ function (Metadata $metadata) use ($column, &$result): void { } } - if ($id !== '') { - $ref = $column['table'] . '-' . $id; - if (isset($this->references[$ref]) === true) { - - // This entity was already created and stored into references - if ($this->identityMap === false) { - // If identityMap is disabled, it clones the object and reset UUID - $result[$column['table']] = clone $this->references[$ref]; - } else { - // If identityMap is enabled, it uses the same object - $result[$column['table']] = $this->references[$ref]; - } - $validEntities[$column['table']] = true; - $fromReferences[$column['table']] = true; - continue; - } + if ($id !== '' && $this->identityMap && isset($this->references[$ref = $column['table'] . '-' . $id]) === true) { + // This entity was already created and stored into references + // If identityMap is enabled, reuse the same object + $result[$column['table']] = $this->references[$ref]; + $validEntities[$column['table']] = true; + $fromReferences[$column['table']] = true; + continue; } if (isset($result[$column['table']]) === false) {