diff options
author | Justin Clark-Casey (justincc) | 2011-05-17 21:49:38 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-05-17 22:31:16 +0100 |
commit | 491279f99afc65860d44765ee7829c7dd5e4e38e (patch) | |
tree | 3237395646d9fd92b2424df31bc8f6e8109c7f48 /OpenSim/Data/MySQL/MySQLGenericTableHandler.cs | |
parent | don't throw a null reference if an inventory link target doesn't exist when w... (diff) | |
download | opensim-SC-491279f99afc65860d44765ee7829c7dd5e4e38e.zip opensim-SC-491279f99afc65860d44765ee7829c7dd5e4e38e.tar.gz opensim-SC-491279f99afc65860d44765ee7829c7dd5e4e38e.tar.bz2 opensim-SC-491279f99afc65860d44765ee7829c7dd5e4e38e.tar.xz |
Allow item links to be deleted even when other deletes and purges are disabled.
If these links are not deleted, then they will build up in the player's inventory until they can no longer log in.
Accidental deletion of links due to bugs or other causes is potentially inconvenient but on a par with items being
accidentally moved. When a link is deleted, the target of the link is never touched.
This is a general solution that accounts for the use of links anywhere in the user's inventory.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Data/MySQL/MySQLGenericTableHandler.cs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs index cfffbd8..754cf72 100644 --- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs +++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs | |||
@@ -264,18 +264,33 @@ namespace OpenSim.Data.MySQL | |||
264 | } | 264 | } |
265 | } | 265 | } |
266 | 266 | ||
267 | public virtual bool Delete(string field, string val) | 267 | public virtual bool Delete(string field, string key) |
268 | { | 268 | { |
269 | return Delete(new string[] { field }, new string[] { key }); | ||
270 | } | ||
271 | |||
272 | public virtual bool Delete(string[] fields, string[] keys) | ||
273 | { | ||
274 | if (fields.Length != keys.Length) | ||
275 | return false; | ||
276 | |||
277 | List<string> terms = new List<string>(); | ||
278 | |||
269 | using (MySqlCommand cmd = new MySqlCommand()) | 279 | using (MySqlCommand cmd = new MySqlCommand()) |
270 | { | 280 | { |
281 | for (int i = 0 ; i < fields.Length ; i++) | ||
282 | { | ||
283 | cmd.Parameters.AddWithValue(fields[i], keys[i]); | ||
284 | terms.Add("`" + fields[i] + "` = ?" + fields[i]); | ||
285 | } | ||
271 | 286 | ||
272 | cmd.CommandText = String.Format("delete from {0} where `{1}` = ?{1}", m_Realm, field); | 287 | string where = String.Join(" and ", terms.ToArray()); |
273 | cmd.Parameters.AddWithValue(field, val); | ||
274 | 288 | ||
275 | if (ExecuteNonQuery(cmd) > 0) | 289 | string query = String.Format("delete from {0} where {1}", m_Realm, where); |
276 | return true; | ||
277 | 290 | ||
278 | return false; | 291 | cmd.CommandText = query; |
292 | |||
293 | return ExecuteNonQuery(cmd) > 0; | ||
279 | } | 294 | } |
280 | } | 295 | } |
281 | } | 296 | } |