handle the cache where a cache entry with the correct path has already been recreated
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
0e790dad31
commit
f8346f43f1
|
@ -69,12 +69,18 @@ class RepairTree extends Command {
|
|||
$output->writeln("Path of file ${row['fileid']} is ${row['path']} but should be ${row['parent_path']}/${row['name']} based on it's parent", OutputInterface::VERBOSITY_VERBOSE);
|
||||
|
||||
if ($fix) {
|
||||
$query->setParameters([
|
||||
'fileid' => $row['fileid'],
|
||||
'path' => $row['parent_path'] . '/' . $row['name'],
|
||||
'storage' => $row['parent_storage'],
|
||||
]);
|
||||
$query->execute();
|
||||
$fileId = $this->getFileId($row['parent_storage'], $row['parent_path'] . '/' . $row['name']);
|
||||
if ($fileId > 0) {
|
||||
$output->writeln("Cache entry has already be recreated with id $fileId, deleting instead");
|
||||
$this->deleteById($row['fileid']);
|
||||
} else {
|
||||
$query->setParameters([
|
||||
'fileid' => $row['fileid'],
|
||||
'path' => $row['parent_path'] . '/' . $row['name'],
|
||||
'storage' => $row['parent_storage'],
|
||||
]);
|
||||
$query->execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +91,22 @@ class RepairTree extends Command {
|
|||
return 0;
|
||||
}
|
||||
|
||||
private function getFileId(int $storage, string $path) {
|
||||
$query = $this->connection->getQueryBuilder();
|
||||
$query->select('fileid')
|
||||
->from('filecache')
|
||||
->where($query->expr()->eq('storage', $query->createNamedParameter($storage)))
|
||||
->andWhere($query->expr()->eq('path_hash', $query->createNamedParameter(md5($path))));
|
||||
return $query->execute()->fetch(\PDO::FETCH_COLUMN);
|
||||
}
|
||||
|
||||
private function deleteById(int $fileId) {
|
||||
$query = $this->connection->getQueryBuilder();
|
||||
$query->delete('filecache')
|
||||
->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId)));
|
||||
$query->execute();
|
||||
}
|
||||
|
||||
private function findBrokenTreeBits(): array {
|
||||
$query = $this->connection->getQueryBuilder();
|
||||
|
||||
|
|
Loading…
Reference in New Issue