@@ -65,6 +65,8 @@ public function __construct(
6565
6666 #[\Override]
6767 public function createShare (string $ id , ShareUser $ owner , \DateTimeImmutable $ lastUpdated ): void {
68+ $ this ->assertInTransaction ();
69+
6870 $ qb = $ this ->connection ->getQueryBuilder ();
6971 $ qb
7072 ->insert ('sharing_share ' )
@@ -80,6 +82,8 @@ public function createShare(string $id, ShareUser $owner, \DateTimeImmutable $la
8082
8183 #[\Override]
8284 public function onOwnerDeleted (ShareUser $ owner ): array {
85+ $ this ->assertInTransaction ();
86+
8387 $ qb = $ this ->connection ->getQueryBuilder ();
8488 $ qb
8589 ->selectDistinct ('id ' )
@@ -114,6 +118,8 @@ public function onOwnerDeleted(ShareUser $owner): array {
114118
115119 #[\Override]
116120 public function updateShareState (string $ id , ShareState $ state ): void {
121+ $ this ->assertInTransaction ();
122+
117123 $ qb = $ this ->connection ->getQueryBuilder ();
118124 $ rowCount = $ qb
119125 ->update ('sharing_share ' )
@@ -127,6 +133,8 @@ public function updateShareState(string $id, ShareState $state): void {
127133
128134 #[\Override]
129135 public function updateShareUserStatus (string $ id , string $ userId , ShareUserStatus $ userStatus ): void {
136+ $ this ->assertInTransaction ();
137+
130138 $ qb = $ this ->connection ->getQueryBuilder ();
131139 $ rowCount = $ qb
132140 ->update ('sharing_share_user_status ' )
@@ -149,6 +157,8 @@ public function updateShareUserStatus(string $id, string $userId, ShareUserStatu
149157
150158 #[\Override]
151159 public function addShareSource (string $ id , ShareSource $ source ): void {
160+ $ this ->assertInTransaction ();
161+
152162 try {
153163 $ qb = $ this ->connection ->getQueryBuilder ();
154164 $ qb
@@ -173,6 +183,8 @@ public function addShareSource(string $id, ShareSource $source): void {
173183
174184 #[\Override]
175185 public function removeShareSource (string $ id , ShareSource $ source ): void {
186+ $ this ->assertInTransaction ();
187+
176188 $ qb = $ this ->connection ->getQueryBuilder ();
177189 $ rowCount = $ qb
178190 ->delete ('sharing_share_sources ' )
@@ -187,6 +199,8 @@ public function removeShareSource(string $id, ShareSource $source): void {
187199
188200 #[\Override]
189201 public function onSourceDeleted (ShareSource $ source ): array {
202+ $ this ->assertInTransaction ();
203+
190204 $ qb = $ this ->connection ->getQueryBuilder ();
191205 $ result = $ qb
192206 ->selectDistinct ('share_id ' )
@@ -215,6 +229,8 @@ public function onSourceDeleted(ShareSource $source): array {
215229
216230 #[\Override]
217231 public function addShareRecipient (string $ id , ShareRecipient $ recipient ): void {
232+ $ this ->assertInTransaction ();
233+
218234 if ($ recipient ->secret === null ) {
219235 throw new RuntimeException ('The secret must not be null. ' );
220236 }
@@ -255,6 +271,8 @@ public function addShareRecipient(string $id, ShareRecipient $recipient): void {
255271
256272 #[\Override]
257273 public function removeShareRecipient (string $ id , ShareRecipient $ recipient ): void {
274+ $ this ->assertInTransaction ();
275+
258276 $ qb = $ this ->connection ->getQueryBuilder ();
259277 $ rowCount = $ qb
260278 ->delete ('sharing_share_recipients ' )
@@ -276,6 +294,8 @@ public function removeShareRecipient(string $id, ShareRecipient $recipient): voi
276294
277295 #[\Override]
278296 public function onRecipientDeleted (ShareRecipient $ recipient ): array {
297+ $ this ->assertInTransaction ();
298+
279299 $ qb = $ this ->connection ->getQueryBuilder ();
280300 $ result = $ qb
281301 ->selectDistinct ('share_id ' )
@@ -318,6 +338,8 @@ public function onRecipientDeleted(ShareRecipient $recipient): array {
318338
319339 #[\Override]
320340 public function onInitiatorDeleted (ShareUser $ initiator ): array {
341+ $ this ->assertInTransaction ();
342+
321343 $ qb = $ this ->connection ->getQueryBuilder ();
322344 $ qb
323345 ->selectDistinct ('share_id ' )
@@ -363,6 +385,8 @@ public function onInitiatorDeleted(ShareUser $initiator): array {
363385
364386 #[\Override]
365387 public function updateShareRecipientSecret (string $ id , ShareRecipient $ recipient , string $ secret ): void {
388+ $ this ->assertInTransaction ();
389+
366390 $ qb = $ this ->connection ->getQueryBuilder ();
367391 $ rowCount = $ qb
368392 ->update ('sharing_share_recipients ' )
@@ -385,6 +409,8 @@ public function updateShareRecipientSecret(string $id, ShareRecipient $recipient
385409
386410 #[\Override]
387411 public function updateShareProperty (string $ id , ShareProperty $ property ): ?string {
412+ $ this ->assertInTransaction ();
413+
388414 $ value = $ property ->value ;
389415
390416 $ propertyType = $ this ->registry ->getPropertyTypes ()[$ property ->class ];
@@ -436,6 +462,8 @@ public function updateShareProperty(string $id, ShareProperty $property): ?strin
436462
437463 #[\Override]
438464 public function updateSharePermission (string $ id , SharePermission $ permission ): void {
465+ $ this ->assertInTransaction ();
466+
439467 $ qb = $ this ->connection ->getQueryBuilder ();
440468 $ rowCount = $ qb
441469 ->update ('sharing_share_permissions ' )
@@ -460,6 +488,8 @@ public function updateSharePermission(string $id, SharePermission $permission):
460488
461489 #[\Override]
462490 public function updateShareRecipientPermission (string $ id , ShareRecipient $ recipient , SharePermission $ permission ): void {
491+ $ this ->assertInTransaction ();
492+
463493 $ qb = $ this ->connection ->getQueryBuilder ();
464494 $ result = $ qb
465495 ->select ('id ' )
@@ -506,6 +536,8 @@ public function updateShareRecipientPermission(string $id, ShareRecipient $recip
506536
507537 #[\Override]
508538 public function selectSharePermissionPreset (string $ id , string $ permissionPresetClass ): void {
539+ $ this ->assertInTransaction ();
540+
509541 $ qb = $ this ->connection ->getQueryBuilder ();
510542 $ qb
511543 ->update ('sharing_share_permissions ' )
@@ -531,6 +563,8 @@ public function selectSharePermissionPreset(string $id, string $permissionPreset
531563
532564 #[\Override]
533565 public function deleteShare (string $ id ): void {
566+ $ this ->assertInTransaction ();
567+
534568 $ qb = $ this ->connection ->getQueryBuilder ();
535569 $ rowCount = $ qb
536570 ->delete ('sharing_share ' )
@@ -545,6 +579,8 @@ public function deleteShare(string $id): void {
545579
546580 #[\Override]
547581 public function getShare (ShareAccessContext $ accessContext , string $ id ): Share {
582+ $ this ->assertInTransaction ();
583+
548584 $ shares = $ this ->list ($ accessContext , $ id , null , null , null , null , null , null );
549585 if (count ($ shares ) !== 1 ) {
550586 throw new ShareNotFoundException ();
@@ -563,11 +599,15 @@ public function getShares(
563599 ?string $ lastShareID ,
564600 ?int $ limit ,
565601 ): array {
602+ $ this ->assertInTransaction ();
603+
566604 return $ this ->list ($ accessContext , null , $ filterSourceTypeClass , $ filterSourceTypeValue , $ filterState , $ filterUserStatus , $ lastShareID , $ limit );
567605 }
568606
569607 #[\Override]
570608 public function hasShare (string $ id ): bool {
609+ $ this ->assertInTransaction ();
610+
571611 $ qb = $ this ->connection ->getQueryBuilder ();
572612
573613 $ result = $ qb
@@ -581,6 +621,8 @@ public function hasShare(string $id): bool {
581621
582622 #[\Override]
583623 public function getShareOwner (string $ id ): ShareUser {
624+ $ this ->assertInTransaction ();
625+
584626 $ qb = $ this ->connection ->getQueryBuilder ();
585627 $ qb
586628 ->select ('owner_user_id ' , 'owner_instance ' )
@@ -608,6 +650,8 @@ public function getShareOwner(string $id): ShareUser {
608650 */
609651 #[\Override]
610652 public function setLastUpdated (array $ ids , \DateTimeImmutable $ lastUpdated ): void {
653+ $ this ->assertInTransaction ();
654+
611655 foreach (array_chunk ($ ids , 1000 ) as $ chunk ) {
612656 $ qb = $ this ->connection ->getQueryBuilder ();
613657
@@ -1258,6 +1302,8 @@ private function getShareCompatiblePermissionTypeClasses(array $sources): array
12581302
12591303 #[\Override]
12601304 public function ensureDefaults (array $ shares ): array {
1305+ $ this ->assertInTransaction ();
1306+
12611307 $ defaultSet = false ;
12621308 foreach ($ shares as &$ share ) {
12631309 $ shareSourceTypeClasses = array_map (fn (ShareSource $ source ): string => $ source ->class , $ share ->sources );
@@ -1376,4 +1422,10 @@ private static function parseTimestamp(string $timestampMs): \DateTimeImmutable
13761422
13771423 return $ time ;
13781424 }
1425+
1426+ private function assertInTransaction (): void {
1427+ if (!$ this ->connection ->inTransaction ()) {
1428+ throw new RuntimeException ('The SharingBackend can only be used inside a transaction. ' );
1429+ }
1430+ }
13791431}
0 commit comments