Skip to content

Commit f65d782

Browse files
committed
Fix UniqueConstraintViolationException while insert into files_external config tables
* followup to #12371 Signed-off-by: Morris Jobke <hey@morrisjobke.de>
1 parent 859dd1e commit f65d782

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

apps/files_external/lib/Service/DBConfigService.php

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
namespace OCA\Files_External\Service;
2727

28+
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
2829
use OCP\DB\QueryBuilder\IQueryBuilder;
2930
use OCP\IDBConnection;
3031
use OCP\Security\ICrypto;
@@ -300,12 +301,15 @@ public function setConfig($mountId, $key, $value) {
300301
if ($key === 'password') {
301302
$value = $this->encryptValue($value);
302303
}
303-
$count = $this->connection->insertIfNotExist('*PREFIX*external_config', [
304-
'mount_id' => $mountId,
305-
'key' => $key,
306-
'value' => $value
307-
], ['mount_id', 'key']);
308-
if ($count === 0) {
304+
305+
try {
306+
$builder = $this->connection->getQueryBuilder();
307+
$builder->insert('external_config')
308+
->setValue('mount_id', $builder->createNamedParameter($mountId, IQueryBuilder::PARAM_INT))
309+
->setValue('key', $builder->createNamedParameter($key, IQueryBuilder::PARAM_STR))
310+
->setValue('value', $builder->createNamedParameter($value, IQueryBuilder::PARAM_STR))
311+
->execute();
312+
} catch(UniqueConstraintViolationException $e) {
309313
$builder = $this->connection->getQueryBuilder();
310314
$query = $builder->update('external_config')
311315
->set('value', $builder->createNamedParameter($value, IQueryBuilder::PARAM_STR))
@@ -321,13 +325,14 @@ public function setConfig($mountId, $key, $value) {
321325
* @param string $value
322326
*/
323327
public function setOption($mountId, $key, $value) {
324-
325-
$count = $this->connection->insertIfNotExist('*PREFIX*external_options', [
326-
'mount_id' => $mountId,
327-
'key' => $key,
328-
'value' => json_encode($value)
329-
], ['mount_id', 'key']);
330-
if ($count === 0) {
328+
try {
329+
$builder = $this->connection->getQueryBuilder();
330+
$builder->insert('external_options')
331+
->setValue('mount_id', $builder->createNamedParameter(\OCP\Share::SHARE_TYPE_REMOTE, IQueryBuilder::PARAM_INT))
332+
->setValue('key', $builder->createNamedParameter($key, IQueryBuilder::PARAM_STR))
333+
->setValue('value', $builder->createNamedParameter(json_encode($value), IQueryBuilder::PARAM_STR))
334+
->execute();
335+
} catch(UniqueConstraintViolationException $e) {
331336
$builder = $this->connection->getQueryBuilder();
332337
$query = $builder->update('external_options')
333338
->set('value', $builder->createNamedParameter(json_encode($value), IQueryBuilder::PARAM_STR))
@@ -338,11 +343,16 @@ public function setOption($mountId, $key, $value) {
338343
}
339344

340345
public function addApplicable($mountId, $type, $value) {
341-
$this->connection->insertIfNotExist('*PREFIX*external_applicable', [
342-
'mount_id' => $mountId,
343-
'type' => $type,
344-
'value' => $value
345-
], ['mount_id', 'type', 'value']);
346+
try {
347+
$builder = $this->connection->getQueryBuilder();
348+
$builder->insert('external_applicable')
349+
->setValue('mount_id', $builder->createNamedParameter($mountId))
350+
->setValue('type', $builder->createNamedParameter($type))
351+
->setValue('value', $builder->createNamedParameter($value))
352+
->execute();
353+
} catch(UniqueConstraintViolationException $e) {
354+
// applicable exists already
355+
}
346356
}
347357

348358
public function removeApplicable($mountId, $type, $value) {

0 commit comments

Comments
 (0)