aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MySQL
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-11-09 00:59:18 +0000
committerJustin Clark-Casey (justincc)2012-11-09 01:13:19 +0000
commit75c880a6f3631a527b532773a8a493309a96028e (patch)
treed07023ef4a277420b66f3b144df3be1287c26d92 /OpenSim/Data/MySQL
parentODECharacter overrides TargetVelocity. No change to existing behavior (diff)
downloadopensim-SC-75c880a6f3631a527b532773a8a493309a96028e.zip
opensim-SC-75c880a6f3631a527b532773a8a493309a96028e.tar.gz
opensim-SC-75c880a6f3631a527b532773a8a493309a96028e.tar.bz2
opensim-SC-75c880a6f3631a527b532773a8a493309a96028e.tar.xz
Update parent inventory folder version numbers when folders are moved/created/deleted to match version numbers cached by viewers.
This is done in the way that one would expect (e.g. moving a folder increments version number on both source and destination parent folders). This should hopefully improve viewer reuse of its cached inventory information. Currently MySQL only but will be implement for SQLite/MSSQL if there are no issues.
Diffstat (limited to 'OpenSim/Data/MySQL')
-rw-r--r--OpenSim/Data/MySQL/MySQLXInventoryData.cs94
1 files changed, 92 insertions, 2 deletions
diff --git a/OpenSim/Data/MySQL/MySQLXInventoryData.cs b/OpenSim/Data/MySQL/MySQLXInventoryData.cs
index cccc500..7a3b5b4 100644
--- a/OpenSim/Data/MySQL/MySQLXInventoryData.cs
+++ b/OpenSim/Data/MySQL/MySQLXInventoryData.cs
@@ -42,12 +42,12 @@ namespace OpenSim.Data.MySQL
42 /// </summary> 42 /// </summary>
43 public class MySQLXInventoryData : IXInventoryData 43 public class MySQLXInventoryData : IXInventoryData
44 { 44 {
45 private MySQLGenericTableHandler<XInventoryFolder> m_Folders; 45 private MySqlFolderHandler m_Folders;
46 private MySqlItemHandler m_Items; 46 private MySqlItemHandler m_Items;
47 47
48 public MySQLXInventoryData(string conn, string realm) 48 public MySQLXInventoryData(string conn, string realm)
49 { 49 {
50 m_Folders = new MySQLGenericTableHandler<XInventoryFolder>( 50 m_Folders = new MySqlFolderHandler(
51 conn, "inventoryfolders", "InventoryStore"); 51 conn, "inventoryfolders", "InventoryStore");
52 m_Items = new MySqlItemHandler( 52 m_Items = new MySqlItemHandler(
53 conn, "inventoryitems", String.Empty); 53 conn, "inventoryitems", String.Empty);
@@ -106,6 +106,11 @@ namespace OpenSim.Data.MySQL
106 return m_Items.MoveItem(id, newParent); 106 return m_Items.MoveItem(id, newParent);
107 } 107 }
108 108
109 public bool MoveFolder(string id, string newParent)
110 {
111 return m_Folders.MoveFolder(id, newParent);
112 }
113
109 public XInventoryItem[] GetActiveGestures(UUID principalID) 114 public XInventoryItem[] GetActiveGestures(UUID principalID)
110 { 115 {
111 return m_Items.GetActiveGestures(principalID); 116 return m_Items.GetActiveGestures(principalID);
@@ -275,4 +280,89 @@ namespace OpenSim.Data.MySQL
275 return true; 280 return true;
276 } 281 }
277 } 282 }
283
284 public class MySqlFolderHandler : MySQLGenericTableHandler<XInventoryFolder>
285 {
286// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
287
288 public MySqlFolderHandler(string c, string t, string m) :
289 base(c, t, m)
290 {
291 }
292
293 public bool MoveFolder(string id, string newParentFolderID)
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
302 using (MySqlCommand cmd = new MySqlCommand())
303 {
304 cmd.CommandText
305 = String.Format(
306 "update {0} set parentFolderID = ?ParentFolderID where folderID = ?folderID", m_Realm);
307 cmd.Parameters.AddWithValue("?ParentFolderID", newParentFolderID);
308 cmd.Parameters.AddWithValue("?folderID", id);
309
310 if (ExecuteNonQuery(cmd) == 0)
311 return false;
312 }
313
314 IncrementFolderVersion(oldParentFolderUUID);
315 IncrementFolderVersion(newParentFolderID);
316
317 return true;
318 }
319
320 public override bool Store(XInventoryFolder folder)
321 {
322 if (!base.Store(folder))
323 return false;
324
325 IncrementFolderVersion(folder.parentFolderID);
326
327 return true;
328 }
329
330 private bool IncrementFolderVersion(UUID folderID)
331 {
332 return IncrementFolderVersion(folderID.ToString());
333 }
334
335 private bool IncrementFolderVersion(string folderID)
336 {
337// m_log.DebugFormat("[MYSQL FOLDER HANDLER]: Incrementing version on folder {0}", folderID);
338// Util.PrintCallStack();
339
340 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
341 {
342 dbcon.Open();
343
344 using (MySqlCommand cmd = new MySqlCommand())
345 {
346 cmd.Connection = dbcon;
347
348 cmd.CommandText = String.Format("update inventoryfolders set version=version+1 where folderID = ?folderID");
349 cmd.Parameters.AddWithValue("?folderID", folderID);
350
351 try
352 {
353 cmd.ExecuteNonQuery();
354 }
355 catch (Exception)
356 {
357 return false;
358 }
359 cmd.Dispose();
360 }
361
362 dbcon.Close();
363 }
364
365 return true;
366 }
367 }
278} \ No newline at end of file 368} \ No newline at end of file