diff options
Diffstat (limited to 'OpenSim/Data/MySQL/MySQLXInventoryData.cs')
-rw-r--r-- | OpenSim/Data/MySQL/MySQLXInventoryData.cs | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/OpenSim/Data/MySQL/MySQLXInventoryData.cs b/OpenSim/Data/MySQL/MySQLXInventoryData.cs index 189ee5e..cccc500 100644 --- a/OpenSim/Data/MySQL/MySQLXInventoryData.cs +++ b/OpenSim/Data/MySQL/MySQLXInventoryData.cs | |||
@@ -26,9 +26,10 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | ||
29 | using System.Data; | 30 | using System.Data; |
31 | using System.Linq; | ||
30 | using System.Reflection; | 32 | using System.Reflection; |
31 | using System.Collections.Generic; | ||
32 | using log4net; | 33 | using log4net; |
33 | using MySql.Data.MySqlClient; | 34 | using MySql.Data.MySqlClient; |
34 | using OpenMetaverse; | 35 | using OpenMetaverse; |
@@ -118,6 +119,8 @@ namespace OpenSim.Data.MySQL | |||
118 | 119 | ||
119 | public class MySqlItemHandler : MySQLGenericTableHandler<XInventoryItem> | 120 | public class MySqlItemHandler : MySQLGenericTableHandler<XInventoryItem> |
120 | { | 121 | { |
122 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
123 | |||
121 | public MySqlItemHandler(string c, string t, string m) : | 124 | public MySqlItemHandler(string c, string t, string m) : |
122 | base(c, t, m) | 125 | base(c, t, m) |
123 | { | 126 | { |
@@ -132,21 +135,53 @@ namespace OpenSim.Data.MySQL | |||
132 | if (!base.Delete(field, val)) | 135 | if (!base.Delete(field, val)) |
133 | return false; | 136 | return false; |
134 | 137 | ||
135 | IncrementFolderVersion(retrievedItems[0].parentFolderID); | 138 | // Don't increment folder version here since Delete(string, string) calls Delete(string[], string[]) |
139 | // IncrementFolderVersion(retrievedItems[0].parentFolderID); | ||
140 | |||
141 | return true; | ||
142 | } | ||
143 | |||
144 | public override bool Delete(string[] fields, string[] vals) | ||
145 | { | ||
146 | XInventoryItem[] retrievedItems = Get(fields, vals); | ||
147 | if (retrievedItems.Length == 0) | ||
148 | return false; | ||
149 | |||
150 | if (!base.Delete(fields, vals)) | ||
151 | return false; | ||
152 | |||
153 | HashSet<UUID> deletedItemFolderUUIDs = new HashSet<UUID>(); | ||
154 | |||
155 | Array.ForEach<XInventoryItem>(retrievedItems, i => deletedItemFolderUUIDs.Add(i.parentFolderID)); | ||
156 | |||
157 | foreach (UUID deletedItemFolderUUID in deletedItemFolderUUIDs) | ||
158 | IncrementFolderVersion(deletedItemFolderUUID); | ||
136 | 159 | ||
137 | return true; | 160 | return true; |
138 | } | 161 | } |
139 | 162 | ||
140 | public bool MoveItem(string id, string newParent) | 163 | public bool MoveItem(string id, string newParent) |
141 | { | 164 | { |
165 | XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id }); | ||
166 | if (retrievedItems.Length == 0) | ||
167 | return false; | ||
168 | |||
169 | UUID oldParent = retrievedItems[0].parentFolderID; | ||
170 | |||
142 | using (MySqlCommand cmd = new MySqlCommand()) | 171 | using (MySqlCommand cmd = new MySqlCommand()) |
143 | { | 172 | { |
144 | cmd.CommandText = String.Format("update {0} set parentFolderID = ?ParentFolderID where inventoryID = ?InventoryID", m_Realm); | 173 | cmd.CommandText = String.Format("update {0} set parentFolderID = ?ParentFolderID where inventoryID = ?InventoryID", m_Realm); |
145 | cmd.Parameters.AddWithValue("?ParentFolderID", newParent); | 174 | cmd.Parameters.AddWithValue("?ParentFolderID", newParent); |
146 | cmd.Parameters.AddWithValue("?InventoryID", id); | 175 | cmd.Parameters.AddWithValue("?InventoryID", id); |
147 | 176 | ||
148 | return ExecuteNonQuery(cmd) == 0 ? false : true; | 177 | if (ExecuteNonQuery(cmd) == 0) |
178 | return false; | ||
149 | } | 179 | } |
180 | |||
181 | IncrementFolderVersion(oldParent); | ||
182 | IncrementFolderVersion(newParent); | ||
183 | |||
184 | return true; | ||
150 | } | 185 | } |
151 | 186 | ||
152 | public XInventoryItem[] GetActiveGestures(UUID principalID) | 187 | public XInventoryItem[] GetActiveGestures(UUID principalID) |
@@ -204,6 +239,14 @@ namespace OpenSim.Data.MySQL | |||
204 | 239 | ||
205 | private bool IncrementFolderVersion(UUID folderID) | 240 | private bool IncrementFolderVersion(UUID folderID) |
206 | { | 241 | { |
242 | return IncrementFolderVersion(folderID.ToString()); | ||
243 | } | ||
244 | |||
245 | private bool IncrementFolderVersion(string folderID) | ||
246 | { | ||
247 | // m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID); | ||
248 | // Util.PrintCallStack(); | ||
249 | |||
207 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | 250 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) |
208 | { | 251 | { |
209 | dbcon.Open(); | 252 | dbcon.Open(); |
@@ -213,7 +256,7 @@ namespace OpenSim.Data.MySQL | |||
213 | cmd.Connection = dbcon; | 256 | cmd.Connection = dbcon; |
214 | 257 | ||
215 | cmd.CommandText = String.Format("update inventoryfolders set version=version+1 where folderID = ?folderID"); | 258 | cmd.CommandText = String.Format("update inventoryfolders set version=version+1 where folderID = ?folderID"); |
216 | cmd.Parameters.AddWithValue("?folderID", folderID.ToString()); | 259 | cmd.Parameters.AddWithValue("?folderID", folderID); |
217 | 260 | ||
218 | try | 261 | try |
219 | { | 262 | { |