aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorprovokateurin <kate@provokateurin.de>2025-07-22 14:25:47 +0200
committerprovokateurin <kate@provokateurin.de>2025-07-22 14:25:47 +0200
commit0350d52aabcc40952d32071c79961a0e928437ba (patch)
tree5388f30c8156c01979d8677b65a036bc61797d05
parent51a09438bf449ddfed48e81030fefb0695fe57d7 (diff)
downloadnextcloud-server-fix/db-adapter-insert-if-not-exists-atomic.tar.gz
nextcloud-server-fix/db-adapter-insert-if-not-exists-atomic.zip
fix(\OC\DB\Adapter): Ensure insertIfNotExist is atomicfix/db-adapter-insert-if-not-exists-atomic
Signed-off-by: provokateurin <kate@provokateurin.de>
-rw-r--r--lib/private/DB/Adapter.php5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/private/DB/Adapter.php b/lib/private/DB/Adapter.php
index 8f1b8e6d75f..c02220c2442 100644
--- a/lib/private/DB/Adapter.php
+++ b/lib/private/DB/Adapter.php
@@ -103,7 +103,10 @@ class Adapter {
$query .= ' HAVING COUNT(*) = 0';
try {
- return $this->conn->executeUpdate($query, $inserts);
+ $this->conn->beginTransaction();
+ $rows = $this->conn->executeUpdate($query, $inserts);
+ $this->conn->commit();
+ return $rows;
} catch (UniqueConstraintViolationException $e) {
// This exception indicates a concurrent insert happened between
// the insert and the sub-select in the insert, which is safe to ignore.