diff options
author | Justin Clark-Casey (justincc) | 2012-11-15 03:29:55 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-11-15 03:29:55 +0000 |
commit | 1aa027123982b710313ea0e15efe7fc85db1c9ea (patch) | |
tree | 75106a9369d6453eaa96fb4a1b2093ccf231fb72 /OpenSim/Data/SQLite/SQLiteXInventoryData.cs | |
parent | Handle Map block requests on a separate thread rather than the main packet ha... (diff) | |
download | opensim-SC-1aa027123982b710313ea0e15efe7fc85db1c9ea.zip opensim-SC-1aa027123982b710313ea0e15efe7fc85db1c9ea.tar.gz opensim-SC-1aa027123982b710313ea0e15efe7fc85db1c9ea.tar.bz2 opensim-SC-1aa027123982b710313ea0e15efe7fc85db1c9ea.tar.xz |
Implement folder version updating for the sqlite inventory plugin
Diffstat (limited to 'OpenSim/Data/SQLite/SQLiteXInventoryData.cs')
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteXInventoryData.cs | 139 |
1 files changed, 137 insertions, 2 deletions
diff --git a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs index 8eb1a63..87eb31e 100644 --- a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs +++ b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs | |||
@@ -137,16 +137,72 @@ namespace OpenSim.Data.SQLite | |||
137 | { | 137 | { |
138 | } | 138 | } |
139 | 139 | ||
140 | public override bool Store(XInventoryItem item) | ||
141 | { | ||
142 | if (!base.Store(item)) | ||
143 | return false; | ||
144 | |||
145 | IncrementFolderVersion(item.parentFolderID); | ||
146 | |||
147 | return true; | ||
148 | } | ||
149 | |||
150 | public override bool Delete(string field, string val) | ||
151 | { | ||
152 | XInventoryItem[] retrievedItems = Get(new string[] { field }, new string[] { val }); | ||
153 | if (retrievedItems.Length == 0) | ||
154 | return false; | ||
155 | |||
156 | if (!base.Delete(field, val)) | ||
157 | return false; | ||
158 | |||
159 | // Don't increment folder version here since Delete(string, string) calls Delete(string[], string[]) | ||
160 | // IncrementFolderVersion(retrievedItems[0].parentFolderID); | ||
161 | |||
162 | return true; | ||
163 | } | ||
164 | |||
165 | public override bool Delete(string[] fields, string[] vals) | ||
166 | { | ||
167 | XInventoryItem[] retrievedItems = Get(fields, vals); | ||
168 | if (retrievedItems.Length == 0) | ||
169 | return false; | ||
170 | |||
171 | if (!base.Delete(fields, vals)) | ||
172 | return false; | ||
173 | |||
174 | HashSet<UUID> deletedItemFolderUUIDs = new HashSet<UUID>(); | ||
175 | |||
176 | Array.ForEach<XInventoryItem>(retrievedItems, i => deletedItemFolderUUIDs.Add(i.parentFolderID)); | ||
177 | |||
178 | foreach (UUID deletedItemFolderUUID in deletedItemFolderUUIDs) | ||
179 | IncrementFolderVersion(deletedItemFolderUUID); | ||
180 | |||
181 | return true; | ||
182 | } | ||
183 | |||
140 | public bool MoveItem(string id, string newParent) | 184 | public bool MoveItem(string id, string newParent) |
141 | { | 185 | { |
186 | XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id }); | ||
187 | if (retrievedItems.Length == 0) | ||
188 | return false; | ||
189 | |||
190 | UUID oldParent = retrievedItems[0].parentFolderID; | ||
191 | |||
142 | using (SqliteCommand cmd = new SqliteCommand()) | 192 | using (SqliteCommand cmd = new SqliteCommand()) |
143 | { | 193 | { |
144 | cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where inventoryID = :InventoryID", m_Realm); | 194 | cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where inventoryID = :InventoryID", m_Realm); |
145 | cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParent)); | 195 | cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParent)); |
146 | cmd.Parameters.Add(new SqliteParameter(":InventoryID", id)); | 196 | cmd.Parameters.Add(new SqliteParameter(":InventoryID", id)); |
147 | 197 | ||
148 | return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true; | 198 | if (ExecuteNonQuery(cmd, m_Connection) == 0) |
199 | return false; | ||
149 | } | 200 | } |
201 | |||
202 | IncrementFolderVersion(oldParent); | ||
203 | IncrementFolderVersion(newParent); | ||
204 | |||
205 | return true; | ||
150 | } | 206 | } |
151 | 207 | ||
152 | public XInventoryItem[] GetActiveGestures(UUID principalID) | 208 | public XInventoryItem[] GetActiveGestures(UUID principalID) |
@@ -187,6 +243,34 @@ namespace OpenSim.Data.SQLite | |||
187 | 243 | ||
188 | return perms; | 244 | return perms; |
189 | } | 245 | } |
246 | |||
247 | private bool IncrementFolderVersion(UUID folderID) | ||
248 | { | ||
249 | return IncrementFolderVersion(folderID.ToString()); | ||
250 | } | ||
251 | |||
252 | private bool IncrementFolderVersion(string folderID) | ||
253 | { | ||
254 | // m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID); | ||
255 | // Util.PrintCallStack(); | ||
256 | |||
257 | using (SqliteCommand cmd = new SqliteCommand()) | ||
258 | { | ||
259 | cmd.CommandText = "update inventoryfolders set version=version+1 where folderID = ?folderID"; | ||
260 | cmd.Parameters.Add(new SqliteParameter(":folderID", folderID)); | ||
261 | |||
262 | try | ||
263 | { | ||
264 | cmd.ExecuteNonQuery(); | ||
265 | } | ||
266 | catch (Exception) | ||
267 | { | ||
268 | return false; | ||
269 | } | ||
270 | } | ||
271 | |||
272 | return true; | ||
273 | } | ||
190 | } | 274 | } |
191 | 275 | ||
192 | public class SqliteFolderHandler : SQLiteGenericTableHandler<XInventoryFolder> | 276 | public class SqliteFolderHandler : SQLiteGenericTableHandler<XInventoryFolder> |
@@ -196,16 +280,67 @@ namespace OpenSim.Data.SQLite | |||
196 | { | 280 | { |
197 | } | 281 | } |
198 | 282 | ||
283 | public override bool Store(XInventoryFolder folder) | ||
284 | { | ||
285 | if (!base.Store(folder)) | ||
286 | return false; | ||
287 | |||
288 | IncrementFolderVersion(folder.parentFolderID); | ||
289 | |||
290 | return true; | ||
291 | } | ||
292 | |||
199 | public bool MoveFolder(string id, string newParentFolderID) | 293 | public bool MoveFolder(string id, string newParentFolderID) |
200 | { | 294 | { |
295 | XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id }); | ||
296 | |||
297 | if (folders.Length == 0) | ||
298 | return false; | ||
299 | |||
300 | UUID oldParentFolderUUID = folders[0].parentFolderID; | ||
301 | |||
201 | using (SqliteCommand cmd = new SqliteCommand()) | 302 | using (SqliteCommand cmd = new SqliteCommand()) |
202 | { | 303 | { |
203 | cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where folderID = :FolderID", m_Realm); | 304 | cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where folderID = :FolderID", m_Realm); |
204 | cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParentFolderID)); | 305 | cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParentFolderID)); |
205 | cmd.Parameters.Add(new SqliteParameter(":FolderID", id)); | 306 | cmd.Parameters.Add(new SqliteParameter(":FolderID", id)); |
206 | 307 | ||
207 | return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true; | 308 | if (ExecuteNonQuery(cmd, m_Connection) == 0) |
309 | return false; | ||
208 | } | 310 | } |
311 | |||
312 | IncrementFolderVersion(oldParentFolderUUID); | ||
313 | IncrementFolderVersion(newParentFolderID); | ||
314 | |||
315 | return true; | ||
316 | } | ||
317 | |||
318 | private bool IncrementFolderVersion(UUID folderID) | ||
319 | { | ||
320 | return IncrementFolderVersion(folderID.ToString()); | ||
321 | } | ||
322 | |||
323 | private bool IncrementFolderVersion(string folderID) | ||
324 | { | ||
325 | // m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID); | ||
326 | // Util.PrintCallStack(); | ||
327 | |||
328 | using (SqliteCommand cmd = new SqliteCommand()) | ||
329 | { | ||
330 | cmd.CommandText = "update inventoryfolders set version=version+1 where folderID = ?folderID"; | ||
331 | cmd.Parameters.Add(new SqliteParameter(":folderID", folderID)); | ||
332 | |||
333 | try | ||
334 | { | ||
335 | cmd.ExecuteNonQuery(); | ||
336 | } | ||
337 | catch (Exception) | ||
338 | { | ||
339 | return false; | ||
340 | } | ||
341 | } | ||
342 | |||
343 | return true; | ||
209 | } | 344 | } |
210 | } | 345 | } |
211 | } \ No newline at end of file | 346 | } \ No newline at end of file |