3838use Psr \Http \Message \UriInterface ;
3939use Psr \Log \LogLevel ;
4040use Throwable ;
41+ use Traversable ;
4142use WeakReference ;
4243
4344/**
@@ -209,12 +210,14 @@ public function reset(): void
209210 * Begins a transaction.
210211 *
211212 * Any of the preconditioned states are: 'READY', 'INTERRUPTED'.
213+ *
214+ * @param iterable<string, scalar|array|null>|null $txMetaData
212215 */
213- public function begin (?string $ database , ?float $ timeout , BookmarkHolder $ holder ): void
216+ public function begin (?string $ database , ?float $ timeout , BookmarkHolder $ holder, ? iterable $ txMetaData ): void
214217 {
215218 $ this ->consumeResults ();
216219
217- $ extra = $ this ->buildRunExtra ($ database , $ timeout , $ holder , AccessMode::WRITE ());
220+ $ extra = $ this ->buildRunExtra ($ database , $ timeout , $ holder , AccessMode::WRITE (), $ txMetaData );
218221 $ message = $ this ->messageFactory ->createBeginMessage ($ extra );
219222 $ response = $ message ->send ()->getResponse ();
220223 $ this ->assertNoFailure ($ response );
@@ -248,8 +251,9 @@ public function run(
248251 ?float $ timeout ,
249252 BookmarkHolder $ holder ,
250253 ?AccessMode $ mode ,
254+ ?iterable $ tsxMetadata ,
251255 ): array {
252- $ extra = $ this ->buildRunExtra ($ database , $ timeout , $ holder , $ mode );
256+ $ extra = $ this ->buildRunExtra ($ database , $ timeout , $ holder , $ mode, $ tsxMetadata );
253257 $ message = $ this ->messageFactory ->createRunMessage ($ text , $ parameters , $ extra );
254258 $ response = $ message ->send ()->getResponse ();
255259 $ this ->assertNoFailure ($ response );
@@ -327,7 +331,7 @@ public function close(): void
327331 }
328332 }
329333
330- private function buildRunExtra (?string $ database , ?float $ timeout , BookmarkHolder $ holder , ?AccessMode $ mode ): array
334+ private function buildRunExtra (?string $ database , ?float $ timeout , BookmarkHolder $ holder , ?AccessMode $ mode, ? iterable $ metadata ): array
331335 {
332336 $ extra = [];
333337 if ($ database !== null ) {
@@ -345,6 +349,13 @@ private function buildRunExtra(?string $database, ?float $timeout, BookmarkHolde
345349 $ extra ['mode ' ] = AccessMode::WRITE () === $ mode ? 'w ' : 'r ' ;
346350 }
347351
352+ if ($ metadata !== null ) {
353+ $ metadataArray = $ metadata instanceof Traversable ? iterator_to_array ($ metadata ) : $ metadata ;
354+ if (count ($ metadataArray ) > 0 ) {
355+ $ extra ['tx_metadata ' ] = $ metadataArray ;
356+ }
357+ }
358+
348359 return $ extra ;
349360 }
350361
0 commit comments