Skip to content

Commit 446e22e

Browse files
Don't truncate excluded tables when restoring backup
1 parent 61680c9 commit 446e22e

5 files changed

Lines changed: 13 additions & 7 deletions

File tree

src/Services/DatabaseBackup/DatabaseBackupInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ public function isBackupActual(): bool;
2626

2727
public function backup(AbstractExecutor $executor): void;
2828

29-
public function restore(AbstractExecutor $executor): void;
29+
public function restore(AbstractExecutor $executor, array $excludedTables = []): void;
3030
}

src/Services/DatabaseBackup/MongodbDatabaseBackup.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function backup(AbstractExecutor $executor): void
8484
self::$metadata = $dm->getMetadataFactory()->getLoadedMetadata();
8585
}
8686

87-
public function restore(AbstractExecutor $executor): void
87+
public function restore(AbstractExecutor $executor, array $excludedTables = []): void
8888
{
8989
/** @var DocumentManager $dm */
9090
$dm = $executor->getReferenceRepository()->getManager();

src/Services/DatabaseBackup/MysqlDatabaseBackup.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ protected function updateSchemaIfNeed(EntityManager $em)
9494
}
9595
}
9696

97-
public function restore(AbstractExecutor $executor): void
97+
public function restore(AbstractExecutor $executor, array $excludedTables = []): void
9898
{
9999
/** @var EntityManager $em */
100100
$em = $executor->getReferenceRepository()->getManager();
@@ -104,9 +104,15 @@ public function restore(AbstractExecutor $executor): void
104104
$this->updateSchemaIfNeed($em);
105105
$truncateSql = [];
106106
foreach ($this->metadatas as $classMetadata) {
107-
$truncateSql[] = 'DELETE FROM '.$classMetadata->table['name']; // in small tables it's really faster than truncate
107+
$tableName = $classMetadata->table['name'];
108+
109+
if (!in_array($tableName, $excludedTables)) {
110+
$truncateSql[] = 'DELETE FROM '.$tableName; // in small tables it's really faster than truncate
111+
}
112+
}
113+
if (!empty($truncateSql)) {
114+
$connection->query(implode(';', $truncateSql));
108115
}
109-
$connection->query(implode(';', $truncateSql));
110116

111117
// Only run query if it exists, to avoid the following exception:
112118
// SQLSTATE[42000]: Syntax error or access violation: 1065 Query was empty

src/Services/DatabaseBackup/SqliteDatabaseBackup.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function backup(AbstractExecutor $executor): void
5858
copy($this->getDatabaseName($connection), $this->getBackupFilePath());
5959
}
6060

61-
public function restore(AbstractExecutor $executor): void
61+
public function restore(AbstractExecutor $executor, array $excludedTables = []): void
6262
{
6363
/** @var EntityManager $em */
6464
$em = $executor->getReferenceRepository()->getManager();

src/Services/DatabaseTools/ORMDatabaseTool.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public function loadFixtures(array $classNames = [], bool $append = false): Abst
111111
$this->webTestCase->preFixtureBackupRestore($this->om, $referenceRepository, $backupService->getBackupFilePath());
112112
$executor = $this->getExecutor($this->getPurger());
113113
$executor->setReferenceRepository($referenceRepository);
114-
$backupService->restore($executor);
114+
$backupService->restore($executor, $this->excludedDoctrineTables);
115115
$this->webTestCase->postFixtureBackupRestore($backupService->getBackupFilePath());
116116

117117
return $executor;

0 commit comments

Comments
 (0)