@@ -80,19 +80,38 @@ class ItemMetadataDBManager: ItemMetadataManager {
80
80
}
81
81
}
82
82
83
- // TODO: Optimize Code and/or DB Scheme
84
83
func cacheMetadata( _ itemMetadataList: [ ItemMetadata ] ) throws {
85
84
try database. write { db in
86
85
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
96
115
}
97
116
}
98
117
}
@@ -134,11 +153,7 @@ class ItemMetadataDBManager: ItemMetadataManager {
134
153
_ = try database. write { db in
135
154
try ItemMetadata
136
155
. 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 ) )
142
157
}
143
158
}
144
159
0 commit comments