Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-02-16 20:18:56 +0300
committerCarl Schwan <carl@carlschwan.eu>2022-02-16 20:28:06 +0300
commitdb6927ee0530d2e352725dc0f6d75e8db8723587 (patch)
treee8bfd2b055745f818958533e8ece0405e24a9e7f /core/Command
parent1bfd001cf6add6cb99d5231502c8c19e8dce910a (diff)
Improve performance when converting between DBs
Use a transaction when doing multiple inserts increase the writing speed. Ref: https://stackoverflow.com/a/68495887 Signed-off-by: Carl Schwan <carl@carlschwan.eu>
Diffstat (limited to 'core/Command')
-rw-r--r--core/Command/Db/ConvertType.php40
1 files changed, 25 insertions, 15 deletions
diff --git a/core/Command/Db/ConvertType.php b/core/Command/Db/ConvertType.php
index 27f3147b81d..754cbd08812 100644
--- a/core/Command/Db/ConvertType.php
+++ b/core/Command/Db/ConvertType.php
@@ -353,27 +353,37 @@ class ConvertType extends Command implements CompletionAwareInterface {
$result = $query->execute();
- while ($row = $result->fetch()) {
- $progress->advance();
- if (!$parametersCreated) {
- foreach ($row as $key => $value) {
- $insertQuery->setValue($key, $insertQuery->createParameter($key));
+ try {
+ $toDB->beginTransaction();
+
+ while ($row = $result->fetch()) {
+ $progress->advance();
+ if (!$parametersCreated) {
+ foreach ($row as $key => $value) {
+ $insertQuery->setValue($key, $insertQuery->createParameter($key));
+ }
+ $parametersCreated = true;
}
- $parametersCreated = true;
- }
- foreach ($row as $key => $value) {
- $type = $this->getColumnType($table, $key);
- if ($type !== false) {
- $insertQuery->setParameter($key, $value, $type);
- } else {
- $insertQuery->setParameter($key, $value);
+ foreach ($row as $key => $value) {
+ $type = $this->getColumnType($table, $key);
+ if ($type !== false) {
+ $insertQuery->setParameter($key, $value, $type);
+ } else {
+ $insertQuery->setParameter($key, $value);
+ }
}
+ $insertQuery->execute();
}
- $insertQuery->execute();
+ $result->closeCursor();
+
+ $toDB->commit();
+ } catch (\Throwable $e) {
+ $toDB->rollBack();
+ throw $e;
}
- $result->closeCursor();
}
+
$progress->finish();
$output->writeln('');
}