From 54b8b6d4b205543975349ea23a5893705068e54c Mon Sep 17 00:00:00 2001 From: Paul Brand Date: Fri, 20 Mar 2026 15:41:52 +0100 Subject: [PATCH] Make sure the parameter type is added for each indexed parameter --- .../DoctrineMessageRepository.php | 16 ++++++++-------- .../DoctrineUuidV4MessageRepository.php | 15 +++++++-------- .../BinaryUuidTestTrait.php | 9 +++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/DoctrineMessageRepository/DoctrineMessageRepository.php b/src/DoctrineMessageRepository/DoctrineMessageRepository.php index c2b6a00..a8fc27a 100644 --- a/src/DoctrineMessageRepository/DoctrineMessageRepository.php +++ b/src/DoctrineMessageRepository/DoctrineMessageRepository.php @@ -74,6 +74,7 @@ public function persist(Message ...$messages): void $insertValues = []; $insertParameters = []; + $types = []; foreach ($messages as $index => $message) { $payload = $this->serializer->serializeMessage($message); @@ -92,6 +93,13 @@ public function persist(Message ...$messages): void $messageParameters[$this->indexParameter($column, $index)] = $payload['headers'][$header]; } + if ($this->binaryEventId) { + $types[$eventIdIndex] = ParameterType::BINARY; + } + if ($this->binaryAggregateRootId) { + $types[$aggregateRootIdIndex] = ParameterType::BINARY; + } + // Creates a values line like: (:event_id_1, :aggregate_root_id_1, ...) $insertValues[] = implode(', ', $this->formatNamedParameters(array_keys($messageParameters))); @@ -106,14 +114,6 @@ public function persist(Message ...$messages): void implode("),\n(", $insertValues), ); - $types = []; - if ($this->binaryEventId) { - $types[$eventIdIndex] = ParameterType::BINARY; - } - if ($this->binaryAggregateRootId) { - $types[$aggregateRootIdIndex] = ParameterType::BINARY; - } - try { $this->connection->executeStatement($insertQuery, $insertParameters, $types); } catch (Throwable $exception) { diff --git a/src/DoctrineMessageRepository/DoctrineUuidV4MessageRepository.php b/src/DoctrineMessageRepository/DoctrineUuidV4MessageRepository.php index 0d4006d..fae8963 100644 --- a/src/DoctrineMessageRepository/DoctrineUuidV4MessageRepository.php +++ b/src/DoctrineMessageRepository/DoctrineUuidV4MessageRepository.php @@ -70,6 +70,8 @@ public function persist(Message ...$messages): void $insertValues = []; $insertParameters = []; + $types = []; + $isBinaryId = $this->uuidEncoder instanceof BinaryUuidEncoder; foreach ($messages as $index => $message) { $payload = $this->serializer->serializeMessage($message); @@ -88,6 +90,11 @@ public function persist(Message ...$messages): void $messageParameters[$this->indexParameter($column, $index)] = $payload['headers'][$header]; } + if ($isBinaryId) { + $types[$eventIdIndex] = ParameterType::BINARY; + $types[$aggregateRootIdIndex] = ParameterType::BINARY; + } + // Creates a values line like: (:event_id_1, :aggregate_root_id_1, ...) $insertValues[] = implode(', ', $this->formatNamedParameters(array_keys($messageParameters))); @@ -102,14 +109,6 @@ public function persist(Message ...$messages): void implode("),\n(", $insertValues), ); - $types = []; - if ($this->uuidEncoder instanceof BinaryUuidEncoder) { - $types = [ - $eventIdIndex => ParameterType::BINARY, - $aggregateRootIdIndex => ParameterType::BINARY, - ]; - } - try { $this->connection->executeStatement($insertQuery, $insertParameters, $types); } catch (Throwable $exception) { diff --git a/src/MessageRepositoryTestTooling/BinaryUuidTestTrait.php b/src/MessageRepositoryTestTooling/BinaryUuidTestTrait.php index f45df59..566ea5a 100644 --- a/src/MessageRepositoryTestTooling/BinaryUuidTestTrait.php +++ b/src/MessageRepositoryTestTooling/BinaryUuidTestTrait.php @@ -16,15 +16,16 @@ public function it_uses_correct_parameter_types_for_binary_fields(): void } $repository = $this->messageRepository(); - $message = $this->createMessage('payload'); + $message1 = $this->createMessage('payload1'); + $message2 = $this->createMessage('payload2'); - $repository->persist($message); + $repository->persist($message1, $message2); $this->assertWarnings('persist()'); - $repository->retrieveAll($message->aggregateRootId()); + $repository->retrieveAll($message1->aggregateRootId()); $this->assertWarnings('retrieveAll()'); - $repository->retrieveAllAfterVersion($message->aggregateRootId(), 1); + $repository->retrieveAllAfterVersion($message1->aggregateRootId(), 1); $this->assertWarnings('retrieveAllAfterVersion()'); }