Skip to content

Commit 1ca83ff

Browse files
authored
Merge pull request #243 from cryptomator/feature/item-metadata-manager-db-improvements
`ItemMetadataDBManager` improvements
2 parents 3b1a315 + 1f8ff7f commit 1ca83ff

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

CryptomatorFileProvider/DB/ItemMetadataDBManager.swift

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,19 +80,38 @@ class ItemMetadataDBManager: ItemMetadataManager {
8080
}
8181
}
8282

83-
// TODO: Optimize Code and/or DB Scheme
8483
func cacheMetadata(_ itemMetadataList: [ItemMetadata]) throws {
8584
try database.write { db in
8685
for metadata in itemMetadataList {
87-
if let cachedMetadata = try ItemMetadata.fetchOne(db, key: ["cloudPath": metadata.cloudPath]) {
88-
metadata.id = cachedMetadata.id
89-
metadata.statusCode = cachedMetadata.statusCode
90-
metadata.tagData = cachedMetadata.tagData
91-
metadata.favoriteRank = cachedMetadata.favoriteRank
92-
try metadata.update(db)
93-
} else {
94-
try metadata.insert(db)
95-
}
86+
try db.execute(
87+
sql: """
88+
INSERT INTO \(ItemMetadata.databaseTableName)
89+
(\(ItemMetadata.Columns.name), \(ItemMetadata.Columns.type), \(ItemMetadata.Columns.size), \(ItemMetadata.Columns.parentID), \(ItemMetadata.Columns.lastModifiedDate), \(ItemMetadata.Columns.statusCode), \(ItemMetadata.Columns.cloudPath), \(ItemMetadata.Columns.isPlaceholderItem), \(ItemMetadata.Columns.isMaybeOutdated), \(ItemMetadata.Columns.favoriteRank), \(ItemMetadata.Columns.tagData)) VALUES
90+
(:name, :type, :size, :parentID, :lastModifiedDate, :statusCode, :cloudPath, :isPlaceholderItem, :isMaybeOutdated, :favoriteRank, :tagData)
91+
ON CONFLICT (\(ItemMetadata.Columns.cloudPath))
92+
DO UPDATE SET \(ItemMetadata.Columns.name) = excluded.\(ItemMetadata.Columns.name),
93+
\(ItemMetadata.Columns.type) = excluded.\(ItemMetadata.Columns.type),
94+
\(ItemMetadata.Columns.size) = excluded.\(ItemMetadata.Columns.size),
95+
\(ItemMetadata.Columns.parentID) = excluded.\(ItemMetadata.Columns.parentID),
96+
\(ItemMetadata.Columns.lastModifiedDate) = excluded.\(ItemMetadata.Columns.lastModifiedDate),
97+
\(ItemMetadata.Columns.cloudPath) = excluded.\(ItemMetadata.Columns.cloudPath),
98+
\(ItemMetadata.Columns.isPlaceholderItem) = excluded.\(ItemMetadata.Columns.isPlaceholderItem),
99+
\(ItemMetadata.Columns.isMaybeOutdated) = excluded.\(ItemMetadata.Columns.isMaybeOutdated)
100+
""",
101+
arguments: ["name": metadata.name,
102+
"type": metadata.type,
103+
"size": metadata.size,
104+
"parentID": metadata.parentID,
105+
"lastModifiedDate": metadata.lastModifiedDate,
106+
"statusCode": metadata.statusCode,
107+
"cloudPath": metadata.cloudPath,
108+
"isPlaceholderItem": metadata.isPlaceholderItem,
109+
"isMaybeOutdated": metadata.isMaybeOutdated,
110+
"favoriteRank": metadata.favoriteRank,
111+
"tagData": metadata.tagData]
112+
)
113+
let metadataID = db.lastInsertedRowID
114+
metadata.id = metadataID
96115
}
97116
}
98117
}
@@ -134,11 +153,7 @@ class ItemMetadataDBManager: ItemMetadataManager {
134153
_ = try database.write { db in
135154
try ItemMetadata
136155
.filter(ItemMetadata.Columns.parentID == parentId && !ItemMetadata.Columns.isPlaceholderItem)
137-
.fetchAll(db)
138-
.forEach {
139-
$0.isMaybeOutdated = true
140-
try $0.save(db)
141-
}
156+
.updateAll(db, ItemMetadata.Columns.isMaybeOutdated.set(to: true))
142157
}
143158
}
144159

0 commit comments

Comments
 (0)