@@ -80,38 +80,19 @@ class ItemMetadataDBManager: ItemMetadataManager {
8080 }
8181 }
8282
83+ // TODO: Optimize Code and/or DB Scheme
8384 func cacheMetadata( _ itemMetadataList: [ ItemMetadata ] ) throws {
8485 try database. write { db in
8586 for metadata in itemMetadataList {
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
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+ }
11596 }
11697 }
11798 }
0 commit comments