Skip to content

Commit 281ac50

Browse files
authored
Merge pull request #41442 from nextcloud/fix/noid/no-join-before-migration
ignore metadata if migration to 28 is not done
2 parents a2770e0 + 761a688 commit 281ac50

5 files changed

Lines changed: 29 additions & 9 deletions

File tree

lib/private/Files/Cache/Cache.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public function get($file) {
178178
} elseif (!$data) {
179179
return $data;
180180
} else {
181-
$data['metadata'] = $metadataQuery->extractMetadata($data)->asArray();
181+
$data['metadata'] = $metadataQuery?->extractMetadata($data)->asArray() ?? [];
182182
return self::cacheEntryFromData($data, $this->mimetypeLoader);
183183
}
184184
}
@@ -250,7 +250,7 @@ public function getFolderContentsById($fileId) {
250250
$result->closeCursor();
251251

252252
return array_map(function (array $data) use ($metadataQuery) {
253-
$data['metadata'] = $metadataQuery->extractMetadata($data)->asArray();
253+
$data['metadata'] = $metadataQuery?->extractMetadata($data)->asArray() ?? [];
254254
return self::cacheEntryFromData($data, $this->mimetypeLoader);
255255
}, $files);
256256
}

lib/private/Files/Cache/CacheQueryBuilder.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,14 @@ public function whereParentInParameter(string $parameter) {
135135
return $this;
136136
}
137137

138-
public function selectMetadata(): IMetadataQuery {
138+
/**
139+
* join metadata to current query builder and returns an helper
140+
*
141+
* @return IMetadataQuery|null NULL if no metadata have never been generated
142+
*/
143+
public function selectMetadata(): ?IMetadataQuery {
139144
$metadataQuery = $this->filesMetadataManager->getMetadataQuery($this, $this->alias, 'fileid');
140-
$metadataQuery->retrieveMetadata();
145+
$metadataQuery?->retrieveMetadata();
141146
return $metadataQuery;
142147
}
143148
}

lib/private/Files/Cache/QuerySearchHelper.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ protected function getQueryBuilder() {
6767
);
6868
}
6969

70+
/**
71+
* @param CacheQueryBuilder $query
72+
* @param ISearchQuery $searchQuery
73+
* @param array $caches
74+
* @param IMetadataQuery|null $metadataQuery
75+
*/
7076
protected function applySearchConstraints(
7177
CacheQueryBuilder $query,
7278
ISearchQuery $searchQuery,
@@ -189,7 +195,12 @@ public function searchInCaches(ISearchQuery $searchQuery, array $caches): array
189195
$files = $result->fetchAll();
190196

191197
$rawEntries = array_map(function (array $data) use ($metadataQuery) {
192-
$data['metadata'] = $metadataQuery->extractMetadata($data)->asArray();
198+
// migrate to null safe ...
199+
if ($metadataQuery === null) {
200+
$data['metadata'] = [];
201+
} else {
202+
$data['metadata'] = $metadataQuery->extractMetadata($data)->asArray();
203+
}
193204
return Cache::cacheEntryFromData($data, $this->mimetypeLoader);
194205
}, $files);
195206

lib/private/FilesMetadata/FilesMetadataManager.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,15 +213,19 @@ public function deleteMetadata(int $fileId): void {
213213
* @param string $fileIdField alias of the field that contains file ids
214214
*
215215
* @inheritDoc
216-
* @return IMetadataQuery
216+
* @return IMetadataQuery|null
217217
* @see IMetadataQuery
218218
* @since 28.0.0
219219
*/
220220
public function getMetadataQuery(
221221
IQueryBuilder $qb,
222222
string $fileTableAlias,
223223
string $fileIdField
224-
): IMetadataQuery {
224+
): ?IMetadataQuery {
225+
// we don't want to join metadata table if never filled
226+
if ($this->config->getAppValue('core', self::CONFIG_KEY, '') === '') {
227+
return null;
228+
}
225229
return new MetadataQuery($qb, $this->getKnownMetadata(), $fileTableAlias, $fileIdField);
226230
}
227231

lib/public/FilesMetadata/IFilesMetadataManager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,15 @@ public function deleteMetadata(int $fileId): void;
105105
* @param string $fileTableAlias alias of the table that contains data about files
106106
* @param string $fileIdField alias of the field that contains file ids
107107
*
108-
* @return IMetadataQuery
108+
* @return IMetadataQuery|null NULL if table are not set yet or never used
109109
* @see IMetadataQuery
110110
* @since 28.0.0
111111
*/
112112
public function getMetadataQuery(
113113
IQueryBuilder $qb,
114114
string $fileTableAlias,
115115
string $fileIdField
116-
): IMetadataQuery;
116+
): ?IMetadataQuery;
117117

118118
/**
119119
* returns all type of metadata currently available.

0 commit comments

Comments
 (0)