mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
fix(mimetype): Remove unnecessary transaction when storing a mime type
Fixes #40064. This could be fixed by adding a rollback and starting a new transaction before the SELECT query, but in this case that would have the same effect as not using one. See https://dev.mysql.com/doc/refman/8.0/en/innodb-autocommit-commit-rollback.html and https://www.postgresql.org/docs/7.1/sql-begin.html#R1-SQL-BEGIN-1 Signed-off-by: Lucas Azevedo <lhs_azevedo@hotmail.com>
This commit is contained in:
parent
b0fae951e3
commit
5de021cb9a
1 changed files with 22 additions and 26 deletions
|
|
@ -116,35 +116,31 @@ class Loader implements IMimeTypeLoader {
|
|||
* @return int inserted ID
|
||||
*/
|
||||
protected function store($mimetype) {
|
||||
$mimetypeId = $this->atomic(function () use ($mimetype) {
|
||||
try {
|
||||
$insert = $this->dbConnection->getQueryBuilder();
|
||||
$insert->insert('mimetypes')
|
||||
->values([
|
||||
'mimetype' => $insert->createNamedParameter($mimetype)
|
||||
])
|
||||
->executeStatement();
|
||||
return $insert->getLastInsertId();
|
||||
} catch (DbalException $e) {
|
||||
if ($e->getReason() !== DBException::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
|
||||
throw $e;
|
||||
}
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('mimetypes')
|
||||
->where($qb->expr()->eq('mimetype', $qb->createNamedParameter($mimetype)));
|
||||
$result = $qb->executeQuery();
|
||||
$id = $result->fetchOne();
|
||||
$result->closeCursor();
|
||||
if ($id !== false) {
|
||||
return (int) $id;
|
||||
}
|
||||
try {
|
||||
$insert = $this->dbConnection->getQueryBuilder();
|
||||
$insert->insert('mimetypes')
|
||||
->values([
|
||||
'mimetype' => $insert->createNamedParameter($mimetype)
|
||||
])
|
||||
->executeStatement();
|
||||
$mimetypeId = $insert->getLastInsertId();
|
||||
} catch (DbalException $e) {
|
||||
if ($e->getReason() !== DBException::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('mimetypes')
|
||||
->where($qb->expr()->eq('mimetype', $qb->createNamedParameter($mimetype)));
|
||||
$result = $qb->executeQuery();
|
||||
$id = $result->fetchOne();
|
||||
$result->closeCursor();
|
||||
if ($id === false) {
|
||||
throw new \Exception("Database threw an unique constraint on inserting a new mimetype, but couldn't return the ID for this very mimetype");
|
||||
}
|
||||
}, $this->dbConnection);
|
||||
|
||||
if (!$mimetypeId) {
|
||||
throw new \Exception("Failed to get mimetype id for $mimetype after trying to store it");
|
||||
$mimetypeId = (int) $id;
|
||||
}
|
||||
|
||||
$this->mimetypes[$mimetypeId] = $mimetype;
|
||||
|
|
|
|||
Loading…
Reference in a new issue