* MySQL data tests now pass by fixing a bad fix for a bad cast on the asset Local member in MySQLAssetData

* First pass at applying the using(){} pattern to IDisposable objects. Always use the using pattern on IDisposable objects whenever possible, do not manually call .Close() or .Dispose() unless there is no other way to write the code. This pass mostly covers OpenSim.Data.MySQL, and should have no functional change (tests still pass)
prioritization
John Hurliman 2009-10-04 13:57:51 -07:00
parent d93e0a0503
commit 29a4614529
18 changed files with 1193 additions and 1312 deletions

View File

@ -95,16 +95,15 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
ManagedImage tmp; ManagedImage tmp;
Image imgData; Image imgData;
byte[] jpegdata;
OpenJPEG.DecodeToImage(asset.Data, out tmp, out imgData); OpenJPEG.DecodeToImage(asset.Data, out tmp, out imgData);
MemoryStream ms = new MemoryStream(); using (MemoryStream ms = new MemoryStream())
{
imgData.Save(ms, ImageFormat.Jpeg); imgData.Save(ms, ImageFormat.Jpeg);
jpegdata = ms.GetBuffer();
byte[] jpegdata = ms.GetBuffer(); }
ms.Close();
resp.ContentType = "image/jpeg"; resp.ContentType = "image/jpeg";
resp.ContentLength = jpegdata.Length; resp.ContentLength = jpegdata.Length;

View File

@ -197,20 +197,11 @@ namespace OpenSim.Data.MSSQL
public void Dispose() public void Dispose()
{ {
SqlConnection conn = realCommand.Connection; SqlConnection conn = realCommand.Connection;
try try { realCommand.Dispose(); }
{
realCommand.Dispose();
}
finally finally
{ {
try try { conn.Dispose(); }
{ finally { }
conn.Close();
}
finally
{
conn.Dispose();
}
} }
} }

View File

@ -348,8 +348,6 @@ namespace OpenSim.Data.MSSQL
//Delete the actual row //Delete the actual row
DeleteOneFolder(folderID, connection); DeleteOneFolder(folderID, connection);
DeleteItemsInFolder(folderID, connection); DeleteItemsInFolder(folderID, connection);
connection.Close();
} }
} }

View File

@ -340,8 +340,6 @@ namespace OpenSim.Data.MSSQL
MSSQLMigration migration = new MSSQLMigration(connection, assem, migrationStore); MSSQLMigration migration = new MSSQLMigration(connection, assem, migrationStore);
migration.Update(); migration.Update();
connection.Close();
} }
} }
@ -385,9 +383,7 @@ namespace OpenSim.Data.MSSQL
m_log.Error(e.ToString()); m_log.Error(e.ToString());
} }
} }
tables.Close();
} }
} }
/// <summary> /// <summary>

View File

@ -56,7 +56,6 @@ namespace OpenSim.Data.MSSQL
{ {
version = Convert.ToInt32(reader["version"]); version = Convert.ToInt32(reader["version"]);
} }
reader.Close();
} }
} }
catch catch

View File

@ -131,7 +131,8 @@ namespace OpenSim.Data
m_log.InfoFormat("[MIGRATIONS] Upgrading {0} to latest revision.", _type); m_log.InfoFormat("[MIGRATIONS] Upgrading {0} to latest revision.", _type);
m_log.Info("[MIGRATIONS] NOTE: this may take a while, don't interupt this process!"); m_log.Info("[MIGRATIONS] NOTE: this may take a while, don't interupt this process!");
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
{
foreach (KeyValuePair<int, string> kvp in migrations) foreach (KeyValuePair<int, string> kvp in migrations)
{ {
int newversion = kvp.Key; int newversion = kvp.Key;
@ -149,7 +150,7 @@ namespace OpenSim.Data
UpdateVersion(_type, newversion); UpdateVersion(_type, newversion);
} }
version = newversion; version = newversion;
cmd.Dispose(); }
} }
} }
@ -189,43 +190,45 @@ namespace OpenSim.Data
protected virtual int FindVersion(DbConnection conn, string type) protected virtual int FindVersion(DbConnection conn, string type)
{ {
int version = 0; int version = 0;
DbCommand cmd = conn.CreateCommand();
using (DbCommand cmd = conn.CreateCommand())
{
try try
{ {
cmd.CommandText = "select version from migrations where name='" + type + "' order by version desc"; cmd.CommandText = "select version from migrations where name='" + type + "' order by version desc";
using (IDataReader reader = cmd.ExecuteReader()) using (IDataReader reader = cmd.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{
version = Convert.ToInt32(reader["version"]); version = Convert.ToInt32(reader["version"]);
} }
reader.Close();
}
} }
catch catch
{ {
// Something went wrong, so we're version 0 // Something went wrong, so we're version 0
} }
cmd.Dispose(); }
return version; return version;
} }
private void InsertVersion(string type, int version) private void InsertVersion(string type, int version)
{ {
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
{
cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")"; cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")";
m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version); m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Dispose(); }
} }
private void UpdateVersion(string type, int version) private void UpdateVersion(string type, int version)
{ {
DbCommand cmd = _conn.CreateCommand(); using (DbCommand cmd = _conn.CreateCommand())
{
cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'"; cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'";
m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version); m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Dispose(); }
} }
// private SortedList<int, string> GetAllMigrations() // private SortedList<int, string> GetAllMigrations()

View File

@ -142,10 +142,10 @@ namespace OpenSim.Data.MySQL
{ {
_dbConnection.CheckConnection(); _dbConnection.CheckConnection();
MySqlCommand cmd = using (MySqlCommand cmd = new MySqlCommand(
new MySqlCommand(
"SELECT name, description, assetType, local, temporary, data FROM assets WHERE id=?id", "SELECT name, description, assetType, local, temporary, data FROM assets WHERE id=?id",
_dbConnection.Connection); _dbConnection.Connection))
{
cmd.Parameters.AddWithValue("?id", assetID.ToString()); cmd.Parameters.AddWithValue("?id", assetID.ToString());
try try
@ -158,21 +158,19 @@ namespace OpenSim.Data.MySQL
asset.Data = (byte[])dbReader["data"]; asset.Data = (byte[])dbReader["data"];
asset.Description = (string)dbReader["description"]; asset.Description = (string)dbReader["description"];
asset.FullID = assetID; asset.FullID = assetID;
try
{ string local = dbReader["local"].ToString();
asset.Local = (bool)dbReader["local"]; if (local.Equals("1") || local.Equals("true", StringComparison.InvariantCultureIgnoreCase))
} asset.Local = true;
catch (InvalidCastException) else
{
asset.Local = false; asset.Local = false;
}
asset.Name = (string)dbReader["name"]; asset.Name = (string)dbReader["name"];
asset.Type = (sbyte)dbReader["assetType"]; asset.Type = (sbyte)dbReader["assetType"];
asset.Temporary = Convert.ToBoolean(dbReader["temporary"]); asset.Temporary = Convert.ToBoolean(dbReader["temporary"]);
} }
dbReader.Close();
cmd.Dispose();
} }
if (asset != null) if (asset != null)
UpdateAccessTime(asset); UpdateAccessTime(asset);
} }
@ -184,6 +182,7 @@ namespace OpenSim.Data.MySQL
_dbConnection.Reconnect(); _dbConnection.Reconnect();
} }
} }
}
return asset; return asset;
} }
@ -297,11 +296,10 @@ namespace OpenSim.Data.MySQL
{ {
_dbConnection.CheckConnection(); _dbConnection.CheckConnection();
MySqlCommand cmd = using (MySqlCommand cmd = new MySqlCommand(
new MySqlCommand(
"SELECT id FROM assets WHERE id=?id", "SELECT id FROM assets WHERE id=?id",
_dbConnection.Connection); _dbConnection.Connection))
{
cmd.Parameters.AddWithValue("?id", uuid.ToString()); cmd.Parameters.AddWithValue("?id", uuid.ToString());
try try
@ -309,13 +307,8 @@ namespace OpenSim.Data.MySQL
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow)) using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{ {
if (dbReader.Read()) if (dbReader.Read())
{
assetExists = true; assetExists = true;
} }
dbReader.Close();
cmd.Dispose();
}
} }
catch (Exception e) catch (Exception e)
{ {
@ -325,6 +318,7 @@ namespace OpenSim.Data.MySQL
_dbConnection.Reconnect(); _dbConnection.Reconnect();
} }
} }
}
return assetExists; return assetExists;
} }

View File

@ -55,14 +55,12 @@ namespace OpenSim.Data.MySQL
AuthenticationData ret = new AuthenticationData(); AuthenticationData ret = new AuthenticationData();
ret.Data = new Dictionary<string, object>(); ret.Data = new Dictionary<string, object>();
MySqlCommand cmd = new MySqlCommand( using (MySqlCommand cmd = new MySqlCommand("select * from `" + m_Realm + "` where UUID = ?principalID"))
"select * from `"+m_Realm+"` where UUID = ?principalID" {
);
cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
IDataReader result = ExecuteReader(cmd); using (IDataReader result = ExecuteReader(cmd))
{
if (result.Read()) if (result.Read())
{ {
ret.PrincipalID = principalID; ret.PrincipalID = principalID;
@ -84,14 +82,10 @@ namespace OpenSim.Data.MySQL
ret.Data[s] = result[s].ToString(); ret.Data[s] = result[s].ToString();
} }
result.Close();
CloseReaderCommand(cmd);
return ret; return ret;
} }
}
result.Close(); }
CloseReaderCommand(cmd);
return null; return null;
} }

View File

@ -95,11 +95,9 @@ namespace OpenSim.Data.MySQL
protected void GetWaitTimeout() protected void GetWaitTimeout()
{ {
MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, using (MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, m_connection))
m_connection); {
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
using (MySqlDataReader dbReader =
cmd.ExecuteReader(CommandBehavior.SingleRow))
{ {
if (dbReader.Read()) if (dbReader.Read())
{ {
@ -107,9 +105,7 @@ namespace OpenSim.Data.MySQL
= Convert.ToInt32(dbReader["@@wait_timeout"]) * = Convert.ToInt32(dbReader["@@wait_timeout"]) *
TimeSpan.TicksPerSecond + m_waitTimeoutLeeway; TimeSpan.TicksPerSecond + m_waitTimeoutLeeway;
} }
}
dbReader.Close();
cmd.Dispose();
} }
m_lastConnectionUse = DateTime.Now.Ticks; m_lastConnectionUse = DateTime.Now.Ticks;
@ -147,15 +143,19 @@ namespace OpenSim.Data.MySQL
CheckConnection(); CheckConnection();
MySqlCommand cmd = m_connection.CreateCommand(); bool migration = true;
using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = sql; cmd.CommandText = sql;
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString()); cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
IDataReader r = cmd.ExecuteReader(); using (IDataReader r = cmd.ExecuteReader())
{
if (r.Read()) if (r.Read())
{ {
migration = false;
foreach (string name in FieldList) foreach (string name in FieldList)
{ {
if (m_FieldMap[name].GetValue(es) is bool) if (m_FieldMap[name].GetValue(es) is bool)
@ -178,20 +178,21 @@ namespace OpenSim.Data.MySQL
m_FieldMap[name].SetValue(es, r[name]); m_FieldMap[name].SetValue(es, r[name]);
} }
} }
r.Close();
} }
else }
}
if (migration)
{ {
// Migration case // Migration case
//
r.Close();
List<string> names = new List<string>(FieldList); List<string> names = new List<string>(FieldList);
names.Remove("EstateID"); names.Remove("EstateID");
sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( ?" + String.Join(", ?", names.ToArray()) + ")"; sql = "insert into estate_settings (" + String.Join(",", names.ToArray()) + ") values ( ?" + String.Join(", ?", names.ToArray()) + ")";
using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = sql; cmd.CommandText = sql;
cmd.Parameters.Clear(); cmd.Parameters.Clear();
@ -215,43 +216,31 @@ namespace OpenSim.Data.MySQL
cmd.CommandText = "select LAST_INSERT_ID() as id"; cmd.CommandText = "select LAST_INSERT_ID() as id";
cmd.Parameters.Clear(); cmd.Parameters.Clear();
r = cmd.ExecuteReader(); using (IDataReader r = cmd.ExecuteReader())
{
r.Read(); r.Read();
es.EstateID = Convert.ToUInt32(r["id"]); es.EstateID = Convert.ToUInt32(r["id"]);
}
r.Close();
cmd.CommandText = "insert into estate_map values (?RegionID, ?EstateID)"; cmd.CommandText = "insert into estate_map values (?RegionID, ?EstateID)";
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString()); cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString()); cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
// This will throw on dupe key // This will throw on dupe key
try try { cmd.ExecuteNonQuery(); }
{ catch (Exception) { }
cmd.ExecuteNonQuery();
}
catch (Exception)
{
}
// Munge and transfer the ban list // Munge and transfer the ban list
//
cmd.Parameters.Clear(); cmd.Parameters.Clear();
cmd.CommandText = "insert into estateban select " + es.EstateID.ToString() + ", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = ?UUID"; cmd.CommandText = "insert into estateban select " + es.EstateID.ToString() + ", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = ?UUID";
cmd.Parameters.AddWithValue("?UUID", regionID.ToString()); cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
try try { cmd.ExecuteNonQuery(); }
{ catch (Exception) { }
cmd.ExecuteNonQuery();
}
catch (Exception)
{
}
es.Save(); es.Save();
} }
}
LoadBanList(es); LoadBanList(es);
@ -267,8 +256,8 @@ namespace OpenSim.Data.MySQL
CheckConnection(); CheckConnection();
MySqlCommand cmd = m_connection.CreateCommand(); using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = sql; cmd.CommandText = sql;
foreach (string name in FieldList) foreach (string name in FieldList)
@ -287,6 +276,7 @@ namespace OpenSim.Data.MySQL
} }
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
}
SaveBanList(es); SaveBanList(es);
SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers); SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers);
@ -300,13 +290,13 @@ namespace OpenSim.Data.MySQL
CheckConnection(); CheckConnection();
MySqlCommand cmd = m_connection.CreateCommand(); using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = "select bannedUUID from estateban where EstateID = ?EstateID"; cmd.CommandText = "select bannedUUID from estateban where EstateID = ?EstateID";
cmd.Parameters.AddWithValue("?EstateID", es.EstateID); cmd.Parameters.AddWithValue("?EstateID", es.EstateID);
IDataReader r = cmd.ExecuteReader(); using (IDataReader r = cmd.ExecuteReader())
{
while (r.Read()) while (r.Read())
{ {
EstateBan eb = new EstateBan(); EstateBan eb = new EstateBan();
@ -319,15 +309,16 @@ namespace OpenSim.Data.MySQL
eb.BannedHostIPMask = "0.0.0.0"; eb.BannedHostIPMask = "0.0.0.0";
es.AddBan(eb); es.AddBan(eb);
} }
r.Close(); }
}
} }
private void SaveBanList(EstateSettings es) private void SaveBanList(EstateSettings es)
{ {
CheckConnection(); CheckConnection();
MySqlCommand cmd = m_connection.CreateCommand(); using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = "delete from estateban where EstateID = ?EstateID"; cmd.CommandText = "delete from estateban where EstateID = ?EstateID";
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString()); cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
@ -346,13 +337,14 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.Clear(); cmd.Parameters.Clear();
} }
} }
}
void SaveUUIDList(uint EstateID, string table, UUID[] data) void SaveUUIDList(uint EstateID, string table, UUID[] data)
{ {
CheckConnection(); CheckConnection();
MySqlCommand cmd = m_connection.CreateCommand(); using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = "delete from " + table + " where EstateID = ?EstateID"; cmd.CommandText = "delete from " + table + " where EstateID = ?EstateID";
cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString()); cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString());
@ -371,6 +363,7 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.Clear(); cmd.Parameters.Clear();
} }
} }
}
UUID[] LoadUUIDList(uint EstateID, string table) UUID[] LoadUUIDList(uint EstateID, string table)
{ {
@ -378,13 +371,13 @@ namespace OpenSim.Data.MySQL
CheckConnection(); CheckConnection();
MySqlCommand cmd = m_connection.CreateCommand(); using (MySqlCommand cmd = m_connection.CreateCommand())
{
cmd.CommandText = "select uuid from " + table + " where EstateID = ?EstateID"; cmd.CommandText = "select uuid from " + table + " where EstateID = ?EstateID";
cmd.Parameters.AddWithValue("?EstateID", EstateID); cmd.Parameters.AddWithValue("?EstateID", EstateID);
IDataReader r = cmd.ExecuteReader(); using (IDataReader r = cmd.ExecuteReader())
{
while (r.Read()) while (r.Read())
{ {
// EstateBan eb = new EstateBan(); // EstateBan eb = new EstateBan();
@ -394,7 +387,8 @@ namespace OpenSim.Data.MySQL
uuids.Add(uuid); uuids.Add(uuid);
} }
r.Close(); }
}
return uuids.ToArray(); return uuids.ToArray();
} }

View File

@ -40,6 +40,8 @@ namespace OpenSim.Data.MySQL
/// </summary> /// </summary>
public class MySqlFramework public class MySqlFramework
{ {
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
protected MySqlConnection m_Connection; protected MySqlConnection m_Connection;
protected MySqlFramework(string connectionString) protected MySqlFramework(string connectionString)
@ -70,12 +72,11 @@ namespace OpenSim.Data.MySQL
} }
catch (MySqlException e) catch (MySqlException e)
{ {
Console.WriteLine(e.ToString()); m_log.Error(e.Message, e);
if (errorSeen) if (errorSeen)
throw; throw;
// This is "Server has gone away" and "Server lost" // This is "Server has gone away" and "Server lost"
//
if (e.Number == 2006 || e.Number == 2013) if (e.Number == 2006 || e.Number == 2013)
{ {
errorSeen = true; errorSeen = true;
@ -94,7 +95,7 @@ Console.WriteLine(e.ToString());
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.ToString()); m_log.Error(e.Message, e);
return 0; return 0;
} }
} }
@ -112,12 +113,5 @@ Console.WriteLine(e.ToString());
return cmd.ExecuteReader(); return cmd.ExecuteReader();
} }
protected void CloseReaderCommand(MySqlCommand cmd)
{
cmd.Connection.Close();
cmd.Connection.Dispose();
cmd.Dispose();
}
} }
} }

View File

@ -197,29 +197,27 @@ namespace OpenSim.Data.MySQL
param["?xmax"] = xmax.ToString(); param["?xmax"] = xmax.ToString();
param["?ymax"] = ymax.ToString(); param["?ymax"] = ymax.ToString();
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"SELECT * FROM regions WHERE locX >= ?xmin AND locX <= ?xmax AND locY >= ?ymin AND locY <= ?ymax", "SELECT * FROM regions WHERE locX >= ?xmin AND locX <= ?xmax AND locY >= ?ymin AND locY <= ?ymax",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
RegionProfileData row; RegionProfileData row;
List<RegionProfileData> rows = new List<RegionProfileData>(); List<RegionProfileData> rows = new List<RegionProfileData>();
while ((row = dbm.Manager.readSimRow(reader)) != null) while ((row = dbm.Manager.readSimRow(reader)) != null)
{
rows.Add(row); rows.Add(row);
}
reader.Close();
result.Dispose();
return rows.ToArray(); return rows.ToArray();
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -243,29 +241,27 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?name"] = namePrefix + "%"; param["?name"] = namePrefix + "%";
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"SELECT * FROM regions WHERE regionName LIKE ?name", "SELECT * FROM regions WHERE regionName LIKE ?name",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
RegionProfileData row; RegionProfileData row;
List<RegionProfileData> rows = new List<RegionProfileData>(); List<RegionProfileData> rows = new List<RegionProfileData>();
while (rows.Count < maxNum && (row = dbm.Manager.readSimRow(reader)) != null) while (rows.Count < maxNum && (row = dbm.Manager.readSimRow(reader)) != null)
{
rows.Add(row); rows.Add(row);
}
reader.Close();
result.Dispose();
return rows; return rows;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -288,19 +284,19 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?handle"] = handle.ToString(); param["?handle"] = handle.ToString();
IDbCommand result = dbm.Manager.Query("SELECT * FROM regions WHERE regionHandle = ?handle", param); using (IDbCommand result = dbm.Manager.Query("SELECT * FROM regions WHERE regionHandle = ?handle", param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
RegionProfileData row = dbm.Manager.readSimRow(reader); RegionProfileData row = dbm.Manager.readSimRow(reader);
reader.Close();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -323,21 +319,22 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?uuid"] = uuid.ToString(); param["?uuid"] = uuid.ToString();
IDbCommand result = dbm.Manager.Query("SELECT * FROM regions WHERE uuid = ?uuid", param); using (IDbCommand result = dbm.Manager.Query("SELECT * FROM regions WHERE uuid = ?uuid", param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
RegionProfileData row = dbm.Manager.readSimRow(reader); RegionProfileData row = dbm.Manager.readSimRow(reader);
reader.Close();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} finally }
finally
{ {
dbm.Release(); dbm.Release();
} }
@ -359,22 +356,21 @@ namespace OpenSim.Data.MySQL
// Add % because this is a like query. // Add % because this is a like query.
param["?regionName"] = regionName + "%"; param["?regionName"] = regionName + "%";
// Order by statement will return shorter matches first. Only returns one record or no record. // Order by statement will return shorter matches first. Only returns one record or no record.
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"SELECT * FROM regions WHERE regionName like ?regionName order by LENGTH(regionName) asc LIMIT 1", "SELECT * FROM regions WHERE regionName like ?regionName order by LENGTH(regionName) asc LIMIT 1",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
RegionProfileData row = dbm.Manager.readSimRow(reader); RegionProfileData row = dbm.Manager.readSimRow(reader);
reader.Close();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -382,6 +378,7 @@ namespace OpenSim.Data.MySQL
dbm.Release(); dbm.Release();
} }
} }
m_log.Error("[GRID DB]: Searched for a Region Name shorter then 3 characters"); m_log.Error("[GRID DB]: Searched for a Region Name shorter then 3 characters");
return null; return null;
} }
@ -394,11 +391,11 @@ namespace OpenSim.Data.MySQL
override public DataResponse StoreProfile(RegionProfileData profile) override public DataResponse StoreProfile(RegionProfileData profile)
{ {
MySQLSuperManager dbm = GetLockedConnection(); MySQLSuperManager dbm = GetLockedConnection();
try { try
if (dbm.Manager.insertRegion(profile))
{ {
if (dbm.Manager.insertRegion(profile))
return DataResponse.RESPONSE_OK; return DataResponse.RESPONSE_OK;
} else
return DataResponse.RESPONSE_ERROR; return DataResponse.RESPONSE_ERROR;
} }
finally finally
@ -417,14 +414,14 @@ namespace OpenSim.Data.MySQL
{ {
MySQLSuperManager dbm = GetLockedConnection(); MySQLSuperManager dbm = GetLockedConnection();
try
try {
if (dbm.Manager.deleteRegion(uuid))
{ {
if (dbm.Manager.deleteRegion(uuid))
return DataResponse.RESPONSE_OK; return DataResponse.RESPONSE_OK;
} else
return DataResponse.RESPONSE_ERROR; return DataResponse.RESPONSE_ERROR;
} finally }
finally
{ {
dbm.Release(); dbm.Release();
} }
@ -484,24 +481,24 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?x"] = x.ToString(); param["?x"] = x.ToString();
param["?y"] = y.ToString(); param["?y"] = y.ToString();
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y", "SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
ReservationData row = dbm.Manager.readReservationRow(reader); ReservationData row = dbm.Manager.readReservationRow(reader);
reader.Close();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} finally }
finally
{ {
dbm.Release(); dbm.Release();
} }

View File

@ -135,12 +135,13 @@ namespace OpenSim.Data.MySQL
database.CheckConnection(); database.CheckConnection();
MySqlCommand result = using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid",
new MySqlCommand("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", database.Connection))
database.Connection); {
result.Parameters.AddWithValue("?uuid", folderID.ToString()); result.Parameters.AddWithValue("?uuid", folderID.ToString());
MySqlDataReader reader = result.ExecuteReader();
using (MySqlDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
// A null item (because something went wrong) breaks everything in the folder // A null item (because something went wrong) breaks everything in the folder
@ -149,16 +150,15 @@ namespace OpenSim.Data.MySQL
items.Add(item); items.Add(item);
} }
reader.Close();
result.Dispose();
return items; return items;
} }
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
} }
@ -176,29 +176,28 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand result = using (MySqlCommand result = new MySqlCommand(
new MySqlCommand(
"SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", "SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid",
database.Connection); database.Connection))
{
result.Parameters.AddWithValue("?uuid", user.ToString()); result.Parameters.AddWithValue("?uuid", user.ToString());
result.Parameters.AddWithValue("?zero", UUID.Zero.ToString()); result.Parameters.AddWithValue("?zero", UUID.Zero.ToString());
MySqlDataReader reader = result.ExecuteReader();
using (MySqlDataReader reader = result.ExecuteReader())
{
List<InventoryFolderBase> items = new List<InventoryFolderBase>(); List<InventoryFolderBase> items = new List<InventoryFolderBase>();
while (reader.Read()) while (reader.Read())
items.Add(readInventoryFolder(reader)); items.Add(readInventoryFolder(reader));
reader.Close();
result.Dispose();
return items; return items;
} }
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
} }
@ -217,15 +216,15 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand result = using (MySqlCommand result = new MySqlCommand(
new MySqlCommand(
"SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", "SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid",
database.Connection); database.Connection))
{
result.Parameters.AddWithValue("?uuid", user.ToString()); result.Parameters.AddWithValue("?uuid", user.ToString());
result.Parameters.AddWithValue("?zero", UUID.Zero.ToString()); result.Parameters.AddWithValue("?zero", UUID.Zero.ToString());
MySqlDataReader reader = result.ExecuteReader(); using (MySqlDataReader reader = result.ExecuteReader())
{
List<InventoryFolderBase> items = new List<InventoryFolderBase>(); List<InventoryFolderBase> items = new List<InventoryFolderBase>();
while (reader.Read()) while (reader.Read())
items.Add(readInventoryFolder(reader)); items.Add(readInventoryFolder(reader));
@ -238,20 +237,17 @@ namespace OpenSim.Data.MySQL
// to put such a message out, and it's too minor right now to spare the time to // to put such a message out, and it's too minor right now to spare the time to
// suitably refactor. // suitably refactor.
if (items.Count > 0) if (items.Count > 0)
{
rootFolder = items[0]; rootFolder = items[0];
}
reader.Close();
result.Dispose();
return rootFolder; return rootFolder;
} }
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
} }
@ -271,27 +267,26 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand result = using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid",
new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", database.Connection))
database.Connection); {
result.Parameters.AddWithValue("?uuid", parentID.ToString()); result.Parameters.AddWithValue("?uuid", parentID.ToString());
MySqlDataReader reader = result.ExecuteReader(); using (MySqlDataReader reader = result.ExecuteReader())
{
List<InventoryFolderBase> items = new List<InventoryFolderBase>(); List<InventoryFolderBase> items = new List<InventoryFolderBase>();
while (reader.Read()) while (reader.Read())
items.Add(readInventoryFolder(reader)); items.Add(readInventoryFolder(reader));
reader.Close();
result.Dispose();
return items; return items;
} }
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
} }
@ -370,25 +365,25 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand result = using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", database.Connection))
new MySqlCommand("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", database.Connection); {
result.Parameters.AddWithValue("?uuid", itemID.ToString()); result.Parameters.AddWithValue("?uuid", itemID.ToString());
MySqlDataReader reader = result.ExecuteReader();
using (MySqlDataReader reader = result.ExecuteReader())
{
InventoryItemBase item = null; InventoryItemBase item = null;
if (reader.Read()) if (reader.Read())
item = readInventoryItem(reader); item = readInventoryItem(reader);
reader.Close();
result.Dispose();
return item; return item;
} }
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
return null; return null;
} }
@ -413,7 +408,7 @@ namespace OpenSim.Data.MySQL
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
return null; return null;
@ -433,24 +428,25 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand result = using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection))
new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection); {
result.Parameters.AddWithValue("?uuid", folderID.ToString()); result.Parameters.AddWithValue("?uuid", folderID.ToString());
MySqlDataReader reader = result.ExecuteReader();
using (MySqlDataReader reader = result.ExecuteReader())
{
InventoryFolderBase folder = null; InventoryFolderBase folder = null;
if (reader.Read()) if (reader.Read())
folder = readInventoryFolder(reader); folder = readInventoryFolder(reader);
reader.Close();
result.Dispose();
return folder; return folder;
} }
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
} }
@ -698,54 +694,58 @@ namespace OpenSim.Data.MySQL
try try
{ {
List<InventoryFolderBase> folders = new List<InventoryFolderBase>(); List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
Dictionary<UUID, List<InventoryFolderBase>> hashtable Dictionary<UUID, List<InventoryFolderBase>> hashtable = new Dictionary<UUID, List<InventoryFolderBase>>(); ;
= new Dictionary<UUID, List<InventoryFolderBase>>(); ;
List<InventoryFolderBase> parentFolder = new List<InventoryFolderBase>(); List<InventoryFolderBase> parentFolder = new List<InventoryFolderBase>();
lock (database)
{
MySqlCommand result;
MySqlDataReader reader;
bool buildResultsFromHashTable = false; bool buildResultsFromHashTable = false;
lock (database)
{
database.CheckConnection(); database.CheckConnection();
/* Fetch the parent folder from the database to determine the agent ID, and if /* Fetch the parent folder from the database to determine the agent ID, and if
* we're querying the root of the inventory folder tree */ * we're querying the root of the inventory folder tree */
result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection))
database.Connection); {
result.Parameters.AddWithValue("?uuid", parentID.ToString()); result.Parameters.AddWithValue("?uuid", parentID.ToString());
reader = result.ExecuteReader();
while (reader.Read()) // Should be at most 1 result using (MySqlDataReader reader = result.ExecuteReader())
{
// Should be at most 1 result
while (reader.Read())
parentFolder.Add(readInventoryFolder(reader)); parentFolder.Add(readInventoryFolder(reader));
reader.Close(); }
result.Dispose(); }
if (parentFolder.Count >= 1) // No result means parent folder does not exist if (parentFolder.Count >= 1) // No result means parent folder does not exist
{ {
if (parentFolder[0].ParentID == UUID.Zero) // We are querying the root folder if (parentFolder[0].ParentID == UUID.Zero) // We are querying the root folder
{ {
/* Get all of the agent's folders from the database, put them in a list and return it */ /* Get all of the agent's folders from the database, put them in a list and return it */
result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", database.Connection))
database.Connection); {
result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString()); result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString());
reader = result.ExecuteReader();
using (MySqlDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
InventoryFolderBase curFolder = readInventoryFolder(reader); InventoryFolderBase curFolder = readInventoryFolder(reader);
if (curFolder.ID != parentID) // Do not need to add the root node of the tree to the list if (curFolder.ID != parentID) // Do not need to add the root node of the tree to the list
folders.Add(curFolder); folders.Add(curFolder);
} }
reader.Close(); }
result.Dispose(); }
} // if we are querying the root folder } // if we are querying the root folder
else // else we are querying a subtree of the inventory folder tree else // else we are querying a subtree of the inventory folder tree
{ {
/* Get all of the agent's folders from the database, put them all in a hash table /* Get all of the agent's folders from the database, put them all in a hash table
* indexed by their parent ID */ * indexed by their parent ID */
result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", database.Connection))
database.Connection); {
result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString()); result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString());
reader = result.ExecuteReader();
using (MySqlDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
InventoryFolderBase curFolder = readInventoryFolder(reader); InventoryFolderBase curFolder = readInventoryFolder(reader);
@ -759,8 +759,8 @@ namespace OpenSim.Data.MySQL
hashtable.Add(curFolder.ParentID, siblingList); hashtable.Add(curFolder.ParentID, siblingList);
} }
} // while more items to read from the database } // while more items to read from the database
reader.Close(); }
result.Dispose(); }
// Set flag so we know we need to build the results from the hash table after // Set flag so we know we need to build the results from the hash table after
// we unlock the database // we unlock the database
@ -781,12 +781,13 @@ namespace OpenSim.Data.MySQL
folders.AddRange(hashtable[folders[i].ID]); folders.AddRange(hashtable[folders[i].ID]);
} }
} // lock (database) } // lock (database)
return folders; return folders;
} }
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
} }
@ -801,19 +802,18 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand cmd = using (MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryfolders WHERE folderID=?uuid", database.Connection))
new MySqlCommand("DELETE FROM inventoryfolders WHERE folderID=?uuid", database.Connection); {
cmd.Parameters.AddWithValue("?uuid", folderID.ToString()); cmd.Parameters.AddWithValue("?uuid", folderID.ToString());
lock (database) lock (database)
{
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
} }
catch (MySqlException e) catch (MySqlException e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
} }
@ -827,12 +827,11 @@ namespace OpenSim.Data.MySQL
{ {
database.CheckConnection(); database.CheckConnection();
MySqlCommand cmd = using (MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE parentFolderID=?uuid", database.Connection))
new MySqlCommand("DELETE FROM inventoryitems WHERE parentFolderID=?uuid", database.Connection); {
cmd.Parameters.AddWithValue("?uuid", folderID.ToString()); cmd.Parameters.AddWithValue("?uuid", folderID.ToString());
lock (database) lock (database)
{
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
} }
@ -865,20 +864,21 @@ namespace OpenSim.Data.MySQL
public List<InventoryItemBase> fetchActiveGestures(UUID avatarID) public List<InventoryItemBase> fetchActiveGestures(UUID avatarID)
{ {
MySqlDataReader result = null;
MySqlCommand sqlCmd = null;
lock (database) lock (database)
{ {
try try
{ {
database.CheckConnection(); database.CheckConnection();
sqlCmd = new MySqlCommand(
using (MySqlCommand sqlCmd = new MySqlCommand(
"SELECT * FROM inventoryitems WHERE avatarId = ?uuid AND assetType = ?type and flags = 1", "SELECT * FROM inventoryitems WHERE avatarId = ?uuid AND assetType = ?type and flags = 1",
database.Connection); database.Connection))
{
sqlCmd.Parameters.AddWithValue("?uuid", avatarID.ToString()); sqlCmd.Parameters.AddWithValue("?uuid", avatarID.ToString());
sqlCmd.Parameters.AddWithValue("?type", (int)AssetType.Gesture); sqlCmd.Parameters.AddWithValue("?type", (int)AssetType.Gesture);
result = sqlCmd.ExecuteReader();
using (MySqlDataReader result = sqlCmd.ExecuteReader())
{
List<InventoryItemBase> list = new List<InventoryItemBase>(); List<InventoryItemBase> list = new List<InventoryItemBase>();
while (result.Read()) while (result.Read())
{ {
@ -888,17 +888,14 @@ namespace OpenSim.Data.MySQL
} }
return list; return list;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
database.Reconnect(); database.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally
{
if (result != null) result.Close();
if (sqlCmd != null) sqlCmd.Dispose();
}
} }
} }
} }

View File

@ -268,6 +268,8 @@ namespace OpenSim.Data.MySQL
public void RemoveObject(UUID obj, UUID regionUUID) public void RemoveObject(UUID obj, UUID regionUUID)
{ {
List<UUID> uuids = new List<UUID>();
// Formerly, this used to check the region UUID. // Formerly, this used to check the region UUID.
// That makes no sense, as we remove the contents of a prim // That makes no sense, as we remove the contents of a prim
// unconditionally, but the prim dependent on the region ID. // unconditionally, but the prim dependent on the region ID.
@ -278,33 +280,22 @@ namespace OpenSim.Data.MySQL
// //
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "select UUID from prims where "+ cmd.CommandText = "select UUID from prims where SceneGroupID= ?UUID";
"SceneGroupID= ?UUID";
cmd.Parameters.AddWithValue("UUID", obj.ToString()); cmd.Parameters.AddWithValue("UUID", obj.ToString());
List<UUID> uuids = new List<UUID>(); using (IDataReader reader = ExecuteReader(cmd))
IDataReader reader = ExecuteReader(cmd);
try
{ {
while (reader.Read()) while (reader.Read())
{
uuids.Add(new UUID(reader["UUID"].ToString())); uuids.Add(new UUID(reader["UUID"].ToString()));
} }
}
finally
{
reader.Close();
}
// delete the main prims // delete the main prims
cmd.CommandText = "delete from prims where SceneGroupID= ?UUID"; cmd.CommandText = "delete from prims where SceneGroupID= ?UUID";
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose(); }
}
// there is no way this should be < 1 unless there is // there is no way this should be < 1 unless there is
// a very corrupt database, but in that case be extra // a very corrupt database, but in that case be extra
@ -315,7 +306,6 @@ namespace OpenSim.Data.MySQL
RemoveItems(uuids); RemoveItems(uuids);
} }
} }
}
/// <summary> /// <summary>
/// Remove all persisted items of the given prim. /// Remove all persisted items of the given prim.
@ -326,18 +316,15 @@ namespace OpenSim.Data.MySQL
{ {
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "delete from primitems where " + cmd.CommandText = "delete from primitems where PrimID = ?PrimID";
"PrimID = ?PrimID";
cmd.Parameters.AddWithValue("PrimID", uuid.ToString()); cmd.Parameters.AddWithValue("PrimID", uuid.ToString());
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose();
} }
} }
}
/// <summary> /// <summary>
/// Remove all persisted shapes for a list of prims /// Remove all persisted shapes for a list of prims
@ -349,8 +336,9 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
string sql = "delete from primshapes where "; string sql = "delete from primshapes where ";
MySqlCommand cmd = m_Connection.CreateCommand();
using (MySqlCommand cmd = m_Connection.CreateCommand())
{
for (int i = 0; i < uuids.Count; i++) for (int i = 0; i < uuids.Count; i++)
{ {
if ((i + 1) == uuids.Count) if ((i + 1) == uuids.Count)
@ -365,12 +353,10 @@ namespace OpenSim.Data.MySQL
cmd.CommandText = sql; cmd.CommandText = sql;
for (int i = 0; i < uuids.Count; i++) for (int i = 0; i < uuids.Count; i++)
{
cmd.Parameters.AddWithValue("UUID" + i, uuids[i].ToString()); cmd.Parameters.AddWithValue("UUID" + i, uuids[i].ToString());
}
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose(); }
} }
} }
@ -384,12 +370,14 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
string sql = "delete from primitems where "; string sql = "delete from primitems where ";
MySqlCommand cmd = m_Connection.CreateCommand();
using (MySqlCommand cmd = m_Connection.CreateCommand())
{
for (int i = 0; i < uuids.Count; i++) for (int i = 0; i < uuids.Count; i++)
{ {
if ((i + 1) == uuids.Count) if ((i + 1) == uuids.Count)
{// end of the list {
// end of the list
sql += "(PrimID = ?PrimID" + i + ")"; sql += "(PrimID = ?PrimID" + i + ")";
} }
else else
@ -400,12 +388,10 @@ namespace OpenSim.Data.MySQL
cmd.CommandText = sql; cmd.CommandText = sql;
for (int i = 0; i < uuids.Count; i++) for (int i = 0; i < uuids.Count; i++)
{
cmd.Parameters.AddWithValue("PrimID" + i, uuids[i].ToString()); cmd.Parameters.AddWithValue("PrimID" + i, uuids[i].ToString());
}
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose(); }
} }
} }
@ -418,8 +404,8 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "select *, " + cmd.CommandText = "select *, " +
"case when prims.UUID = SceneGroupID " + "case when prims.UUID = SceneGroupID " +
"then 0 else 1 end as sort from prims " + "then 0 else 1 end as sort from prims " +
@ -429,9 +415,7 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString()); cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString());
IDataReader reader = ExecuteReader(cmd); using (IDataReader reader = ExecuteReader(cmd))
try
{ {
while (reader.Read()) while (reader.Read())
{ {
@ -481,14 +465,10 @@ namespace OpenSim.Data.MySQL
} }
} }
} }
finally
{
reader.Close();
}
if (grp != null) if (grp != null)
objects[grp.UUID] = grp; objects[grp.UUID] = grp;
cmd.Dispose(); }
} }
// Instead of attempting to LoadItems on every prim, // Instead of attempting to LoadItems on every prim,
@ -498,10 +478,10 @@ namespace OpenSim.Data.MySQL
List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>(); List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>();
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand itemCmd = m_Connection.CreateCommand(); using (MySqlCommand itemCmd = m_Connection.CreateCommand())
{
itemCmd.CommandText = "select distinct primID from primitems"; itemCmd.CommandText = "select distinct primID from primitems";
IDataReader itemReader = ExecuteReader(itemCmd); using (IDataReader itemReader = ExecuteReader(itemCmd))
try
{ {
while (itemReader.Read()) while (itemReader.Read())
{ {
@ -515,17 +495,12 @@ namespace OpenSim.Data.MySQL
} }
} }
} }
finally
{
itemReader.Close();
} }
itemCmd.Dispose();
} }
foreach (SceneObjectPart prim in primsWithInventory) foreach (SceneObjectPart prim in primsWithInventory)
{
LoadItems(prim); LoadItems(prim);
}
m_log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", objects.Count, prims.Count); m_log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", objects.Count, prims.Count);
return new List<SceneObjectGroup>(objects.Values); return new List<SceneObjectGroup>(objects.Values);
} }
@ -538,34 +513,25 @@ namespace OpenSim.Data.MySQL
{ {
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); List<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
cmd.CommandText = "select * from primitems where "+
"PrimID = ?PrimID";
using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "select * from primitems where PrimID = ?PrimID";
cmd.Parameters.AddWithValue("PrimID", prim.UUID.ToString()); cmd.Parameters.AddWithValue("PrimID", prim.UUID.ToString());
IDataReader reader = ExecuteReader(cmd); using (IDataReader reader = ExecuteReader(cmd))
List<TaskInventoryItem> inventory =
new List<TaskInventoryItem>();
try
{ {
while (reader.Read()) while (reader.Read())
{ {
TaskInventoryItem item = BuildItem(reader); TaskInventoryItem item = BuildItem(reader);
item.ParentID = prim.UUID; // Values in database are item.ParentID = prim.UUID; // Values in database are often wrong
// often wrong
inventory.Add(item); inventory.Add(item);
} }
} }
finally
{
reader.Close();
} }
cmd.Dispose();
prim.Inventory.RestoreInventoryItems(inventory); prim.Inventory.RestoreInventoryItems(inventory);
} }
} }
@ -576,10 +542,9 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "delete from terrain where " + cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID";
"RegionUUID = ?RegionUUID";
cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString()); cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
@ -588,11 +553,10 @@ namespace OpenSim.Data.MySQL
"Revision, Heightfield) values (?RegionUUID, " + "Revision, Heightfield) values (?RegionUUID, " +
"1, ?Heightfield)"; "1, ?Heightfield)";
cmd.Parameters.AddWithValue("Heightfield", cmd.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter));
SerializeTerrain(ter));
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose(); }
} }
} }
@ -602,42 +566,40 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "select RegionUUID, Revision, Heightfield " + cmd.CommandText = "select RegionUUID, Revision, Heightfield " +
"from terrain where RegionUUID = ?RegionUUID " + "from terrain where RegionUUID = ?RegionUUID " +
"order by Revision desc limit 1"; "order by Revision desc limit 1";
cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString()); cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
IDataReader reader = ExecuteReader(cmd); using (IDataReader reader = ExecuteReader(cmd))
try
{ {
while (reader.Read()) while (reader.Read())
{ {
int rev = Convert.ToInt32(reader["Revision"]);
terrain = new double[(int)Constants.RegionSize, (int)Constants.RegionSize]; terrain = new double[(int)Constants.RegionSize, (int)Constants.RegionSize];
terrain.Initialize(); terrain.Initialize();
MemoryStream mstr = new MemoryStream((byte[]) reader["Heightfield"]); using (MemoryStream mstr = new MemoryStream((byte[])reader["Heightfield"]))
int rev = 0; {
using (BinaryReader br = new BinaryReader(mstr))
BinaryReader br = new BinaryReader(mstr); {
for (int x = 0; x < (int)Constants.RegionSize; x++) for (int x = 0; x < (int)Constants.RegionSize; x++)
{ {
for (int y = 0; y < (int)Constants.RegionSize; y++) for (int y = 0; y < (int)Constants.RegionSize; y++)
{ {
terrain[x, y] = br.ReadDouble(); terrain[x, y] = br.ReadDouble();
} }
rev = Convert.ToInt32(reader["Revision"]);
}
m_log.InfoFormat("[REGION DB]: Loaded terrain " +
"revision r{0}", rev);
} }
} }
finally
{ m_log.InfoFormat("[REGION DB]: Loaded terrain revision r{0}", rev);
reader.Close(); }
}
}
} }
cmd.Dispose();
} }
return terrain; return terrain;
@ -647,14 +609,13 @@ namespace OpenSim.Data.MySQL
{ {
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "delete from land where UUID = ?UUID"; cmd.CommandText = "delete from land where UUID = ?UUID";
cmd.Parameters.AddWithValue("UUID", globalID.ToString()); cmd.Parameters.AddWithValue("UUID", globalID.ToString());
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose(); }
} }
} }
@ -662,8 +623,8 @@ namespace OpenSim.Data.MySQL
{ {
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "replace into land (UUID, RegionUUID, " + cmd.CommandText = "replace into land (UUID, RegionUUID, " +
"LocalLandID, Bitmap, Name, Description, " + "LocalLandID, Bitmap, Name, Description, " +
"OwnerUUID, IsGroupOwned, Area, AuctionID, " + "OwnerUUID, IsGroupOwned, Area, AuctionID, " +
@ -689,8 +650,7 @@ namespace OpenSim.Data.MySQL
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.CommandText = "delete from landaccesslist where " + cmd.CommandText = "delete from landaccesslist where LandUUID = ?UUID";
"LandUUID = ?UUID";
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
@ -699,14 +659,13 @@ namespace OpenSim.Data.MySQL
"AccessUUID, Flags) values (?LandUUID, ?AccessUUID, " + "AccessUUID, Flags) values (?LandUUID, ?AccessUUID, " +
"?Flags)"; "?Flags)";
foreach (ParcelManager.ParcelAccessEntry entry in foreach (ParcelManager.ParcelAccessEntry entry in parcel.LandData.ParcelAccessList)
parcel.LandData.ParcelAccessList)
{ {
FillLandAccessCommand(cmd, entry, parcel.LandData.GlobalID); FillLandAccessCommand(cmd, entry, parcel.LandData.GlobalID);
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Parameters.Clear(); cmd.Parameters.Clear();
} }
cmd.Dispose(); }
} }
} }
@ -716,15 +675,12 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "select * from regionsettings where " + cmd.CommandText = "select * from regionsettings where regionUUID = ?RegionUUID";
"regionUUID = ?RegionUUID";
cmd.Parameters.AddWithValue("regionUUID", regionUUID); cmd.Parameters.AddWithValue("regionUUID", regionUUID);
IDataReader reader = ExecuteReader(cmd); using (IDataReader reader = ExecuteReader(cmd))
try
{ {
if (reader.Read()) if (reader.Read())
{ {
@ -740,11 +696,7 @@ namespace OpenSim.Data.MySQL
StoreRegionSettings(rs); StoreRegionSettings(rs);
} }
} }
finally
{
reader.Close();
} }
cmd.Dispose();
} }
return rs; return rs;
@ -754,8 +706,8 @@ namespace OpenSim.Data.MySQL
{ {
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "replace into regionsettings (regionUUID, " + cmd.CommandText = "replace into regionsettings (regionUUID, " +
"block_terraform, block_fly, allow_damage, " + "block_terraform, block_fly, allow_damage, " +
"restrict_pushing, allow_land_resell, " + "restrict_pushing, allow_land_resell, " +
@ -792,8 +744,7 @@ namespace OpenSim.Data.MySQL
FillRegionSettingsCommand(cmd, rs); FillRegionSettingsCommand(cmd, rs);
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Dispose(); }
} }
} }
@ -803,16 +754,12 @@ namespace OpenSim.Data.MySQL
lock (m_Connection) lock (m_Connection)
{ {
MySqlCommand cmd = m_Connection.CreateCommand(); using (MySqlCommand cmd = m_Connection.CreateCommand())
{
cmd.CommandText = "select * from land where " + cmd.CommandText = "select * from land where RegionUUID = ?RegionUUID";
"RegionUUID = ?RegionUUID";
cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString()); cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString());
IDataReader reader = ExecuteReader(cmd); using (IDataReader reader = ExecuteReader(cmd))
try
{ {
while (reader.Read()) while (reader.Read())
{ {
@ -820,35 +767,25 @@ namespace OpenSim.Data.MySQL
landData.Add(newLand); landData.Add(newLand);
} }
} }
finally
{
reader.Close();
} }
using (MySqlCommand cmd = m_Connection.CreateCommand())
{
foreach (LandData land in landData) foreach (LandData land in landData)
{ {
cmd.Parameters.Clear(); cmd.Parameters.Clear();
cmd.CommandText = "select * from landaccesslist where LandUUID = ?LandUUID";
cmd.CommandText = "select * from landaccesslist " +
"where LandUUID = ?LandUUID";
cmd.Parameters.AddWithValue("LandUUID", land.GlobalID.ToString()); cmd.Parameters.AddWithValue("LandUUID", land.GlobalID.ToString());
reader = ExecuteReader(cmd); using (IDataReader reader = ExecuteReader(cmd))
try
{ {
while (reader.Read()) while (reader.Read())
{ {
land.ParcelAccessList.Add(BuildLandAccessData(reader)); land.ParcelAccessList.Add(BuildLandAccessData(reader));
} }
} }
finally
{
reader.Close();
} }
} }
cmd.Dispose();
} }
return landData; return landData;

View File

@ -134,8 +134,8 @@ namespace OpenSim.Data.MySQL
/// </summary> /// </summary>
protected void GetWaitTimeout() protected void GetWaitTimeout()
{ {
MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, dbcon); using (MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, dbcon))
{
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow)) using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{ {
if (dbReader.Read()) if (dbReader.Read())
@ -143,9 +143,7 @@ namespace OpenSim.Data.MySQL
m_waitTimeout m_waitTimeout
= Convert.ToInt32(dbReader["@@wait_timeout"]) * TimeSpan.TicksPerSecond + m_waitTimeoutLeeway; = Convert.ToInt32(dbReader["@@wait_timeout"]) * TimeSpan.TicksPerSecond + m_waitTimeoutLeeway;
} }
}
dbReader.Close();
cmd.Dispose();
} }
m_lastConnectionUse = DateTime.Now.Ticks; m_lastConnectionUse = DateTime.Now.Ticks;
@ -303,10 +301,10 @@ namespace OpenSim.Data.MySQL
{ {
CheckConnection(); CheckConnection();
MySqlCommand tablesCmd = using (MySqlCommand tablesCmd = new MySqlCommand(
new MySqlCommand(
"SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=?dbname", "SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=?dbname",
dbcon); dbcon))
{
tablesCmd.Parameters.AddWithValue("?dbname", dbcon.Database); tablesCmd.Parameters.AddWithValue("?dbname", dbcon.Database);
using (MySqlDataReader tables = tablesCmd.ExecuteReader()) using (MySqlDataReader tables = tablesCmd.ExecuteReader())
@ -324,10 +322,10 @@ namespace OpenSim.Data.MySQL
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
}
} }
} }
tables.Close();
} }
} }
} }
@ -358,7 +356,7 @@ namespace OpenSim.Data.MySQL
catch (Exception e) catch (Exception e)
{ {
// Return null if it fails. // Return null if it fails.
m_log.Error("Failed during Query generation: " + e.ToString()); m_log.Error("Failed during Query generation: " + e.Message, e);
return null; return null;
} }
} }
@ -694,8 +692,6 @@ namespace OpenSim.Data.MySQL
ret.Add(attachpoint, item); ret.Add(attachpoint, item);
} }
r.Close();
return ret; return ret;
} }

View File

@ -56,13 +56,14 @@ namespace OpenSim.Data.MySQL
if (scopeID != UUID.Zero) if (scopeID != UUID.Zero)
command += " and ScopeID = ?scopeID"; command += " and ScopeID = ?scopeID";
MySqlCommand cmd = new MySqlCommand(command); using (MySqlCommand cmd = new MySqlCommand(command))
{
cmd.Parameters.AddWithValue("?regionName", regionName); cmd.Parameters.AddWithValue("?regionName", regionName);
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
return RunCommand(cmd); return RunCommand(cmd);
} }
}
public RegionData Get(int posX, int posY, UUID scopeID) public RegionData Get(int posX, int posY, UUID scopeID)
{ {
@ -70,8 +71,8 @@ namespace OpenSim.Data.MySQL
if (scopeID != UUID.Zero) if (scopeID != UUID.Zero)
command += " and ScopeID = ?scopeID"; command += " and ScopeID = ?scopeID";
MySqlCommand cmd = new MySqlCommand(command); using (MySqlCommand cmd = new MySqlCommand(command))
{
cmd.Parameters.AddWithValue("?posX", posX.ToString()); cmd.Parameters.AddWithValue("?posX", posX.ToString());
cmd.Parameters.AddWithValue("?posY", posY.ToString()); cmd.Parameters.AddWithValue("?posY", posY.ToString());
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
@ -82,6 +83,7 @@ namespace OpenSim.Data.MySQL
return ret[0]; return ret[0];
} }
}
public RegionData Get(UUID regionID, UUID scopeID) public RegionData Get(UUID regionID, UUID scopeID)
{ {
@ -89,8 +91,8 @@ namespace OpenSim.Data.MySQL
if (scopeID != UUID.Zero) if (scopeID != UUID.Zero)
command += " and ScopeID = ?scopeID"; command += " and ScopeID = ?scopeID";
MySqlCommand cmd = new MySqlCommand(command); using (MySqlCommand cmd = new MySqlCommand(command))
{
cmd.Parameters.AddWithValue("?regionID", regionID.ToString()); cmd.Parameters.AddWithValue("?regionID", regionID.ToString());
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
@ -100,6 +102,7 @@ namespace OpenSim.Data.MySQL
return ret[0]; return ret[0];
} }
}
public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID) public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID)
{ {
@ -107,8 +110,8 @@ namespace OpenSim.Data.MySQL
if (scopeID != UUID.Zero) if (scopeID != UUID.Zero)
command += " and ScopeID = ?scopeID"; command += " and ScopeID = ?scopeID";
MySqlCommand cmd = new MySqlCommand(command); using (MySqlCommand cmd = new MySqlCommand(command))
{
cmd.Parameters.AddWithValue("?startX", startX.ToString()); cmd.Parameters.AddWithValue("?startX", startX.ToString());
cmd.Parameters.AddWithValue("?startY", startY.ToString()); cmd.Parameters.AddWithValue("?startY", startY.ToString());
cmd.Parameters.AddWithValue("?endX", endX.ToString()); cmd.Parameters.AddWithValue("?endX", endX.ToString());
@ -117,13 +120,14 @@ namespace OpenSim.Data.MySQL
return RunCommand(cmd); return RunCommand(cmd);
} }
}
public List<RegionData> RunCommand(MySqlCommand cmd) public List<RegionData> RunCommand(MySqlCommand cmd)
{ {
List<RegionData> retList = new List<RegionData>(); List<RegionData> retList = new List<RegionData>();
IDataReader result = ExecuteReader(cmd); using (IDataReader result = ExecuteReader(cmd))
{
while (result.Read()) while (result.Read())
{ {
RegionData ret = new RegionData(); RegionData ret = new RegionData();
@ -168,9 +172,7 @@ namespace OpenSim.Data.MySQL
retList.Add(ret); retList.Add(ret);
} }
}
result.Close();
CloseReaderCommand(cmd);
return retList; return retList;
} }
@ -198,8 +200,8 @@ namespace OpenSim.Data.MySQL
string[] fields = new List<string>(data.Data.Keys).ToArray(); string[] fields = new List<string>(data.Data.Keys).ToArray();
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
string update = "update `" + m_Realm + "` set locX=?posX, locY=?posY, sizeX=?sizeX, sizeY=?sizeY"; string update = "update `" + m_Realm + "` set locX=?posX, locY=?posY, sizeX=?sizeX, sizeY=?sizeY";
foreach (string field in fields) foreach (string field in fields)
{ {
@ -233,41 +235,37 @@ namespace OpenSim.Data.MySQL
if (ExecuteNonQuery(cmd) < 1) if (ExecuteNonQuery(cmd) < 1)
{ {
cmd.Dispose();
return false; return false;
} }
} }
}
cmd.Dispose();
return true; return true;
} }
public bool SetDataItem(UUID regionID, string item, string value) public bool SetDataItem(UUID regionID, string item, string value)
{ {
MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + using (MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + "` set `" + item + "` = ?" + item + " where uuid = ?UUID"))
"` set `" + item + "` = ?" + item + " where uuid = ?UUID"); {
cmd.Parameters.AddWithValue("?" + item, value); cmd.Parameters.AddWithValue("?" + item, value);
cmd.Parameters.AddWithValue("?UUID", regionID.ToString()); cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
if (ExecuteNonQuery(cmd) > 0) if (ExecuteNonQuery(cmd) > 0)
return true; return true;
}
return false; return false;
} }
public bool Delete(UUID regionID) public bool Delete(UUID regionID)
{ {
MySqlCommand cmd = new MySqlCommand("delete from `" + m_Realm + using (MySqlCommand cmd = new MySqlCommand("delete from `" + m_Realm + "` where uuid = ?UUID"))
"` where uuid = ?UUID"); {
cmd.Parameters.AddWithValue("?UUID", regionID.ToString()); cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
if (ExecuteNonQuery(cmd) > 0) if (ExecuteNonQuery(cmd) > 0)
return true; return true;
}
return false; return false;
} }

View File

@ -64,13 +64,13 @@ namespace OpenSim.Data.MySQL
if (scopeID != UUID.Zero) if (scopeID != UUID.Zero)
command += " and ScopeID = ?scopeID"; command += " and ScopeID = ?scopeID";
MySqlCommand cmd = new MySqlCommand(command); using (MySqlCommand cmd = new MySqlCommand(command))
{
cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
IDataReader result = ExecuteReader(cmd); using (IDataReader result = ExecuteReader(cmd))
{
if (result.Read()) if (result.Read())
{ {
ret.PrincipalID = principalID; ret.PrincipalID = principalID;
@ -97,14 +97,10 @@ namespace OpenSim.Data.MySQL
ret.Data[s] = result[s].ToString(); ret.Data[s] = result[s].ToString();
} }
result.Close();
CloseReaderCommand(cmd);
return ret; return ret;
} }
}
result.Close(); }
CloseReaderCommand(cmd);
return null; return null;
} }
@ -118,8 +114,8 @@ namespace OpenSim.Data.MySQL
string[] fields = new List<string>(data.Data.Keys).ToArray(); string[] fields = new List<string>(data.Data.Keys).ToArray();
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
string update = "update `" + m_Realm + "` set "; string update = "update `" + m_Realm + "` set ";
bool first = true; bool first = true;
foreach (string field in fields) foreach (string field in fields)
@ -156,23 +152,22 @@ namespace OpenSim.Data.MySQL
return false; return false;
} }
} }
}
cmd.Dispose();
return true; return true;
} }
public bool SetDataItem(UUID principalID, string item, string value) public bool SetDataItem(UUID principalID, string item, string value)
{ {
MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + using (MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + "` set `" +
"` set `" + item + "` = ?" + item + " where UUID = ?UUID"); item + "` = ?" + item + " where UUID = ?UUID"))
{
cmd.Parameters.AddWithValue("?" + item, value); cmd.Parameters.AddWithValue("?" + item, value);
cmd.Parameters.AddWithValue("?UUID", principalID.ToString()); cmd.Parameters.AddWithValue("?UUID", principalID.ToString());
if (ExecuteNonQuery(cmd) > 0) if (ExecuteNonQuery(cmd) > 0)
return true; return true;
}
return false; return false;
} }

View File

@ -181,21 +181,20 @@ namespace OpenSim.Data.MySQL
param["?first"] = user; param["?first"] = user;
param["?second"] = last; param["?second"] = last;
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query( "SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param))
"SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param); {
IDataReader reader = result.ExecuteReader(); using (IDataReader reader = result.ExecuteReader())
{
UserProfileData row = dbm.Manager.readUserRow(reader); UserProfileData row = dbm.Manager.readUserRow(reader);
reader.Dispose();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -220,28 +219,30 @@ namespace OpenSim.Data.MySQL
try try
{ {
IDbCommand adder = using (IDbCommand adder = dbm.Manager.Query(
dbm.Manager.Query(
"INSERT INTO `" + m_userFriendsTableName + "` " + "INSERT INTO `" + m_userFriendsTableName + "` " +
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " + "(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
"VALUES " + "VALUES " +
"(?ownerID,?friendID,?friendPerms,?datetimestamp)", "(?ownerID,?friendID,?friendPerms,?datetimestamp)",
param); param))
{
adder.ExecuteNonQuery(); adder.ExecuteNonQuery();
}
adder = using (IDbCommand adder = dbm.Manager.Query(
dbm.Manager.Query(
"INSERT INTO `" + m_userFriendsTableName + "` " + "INSERT INTO `" + m_userFriendsTableName + "` " +
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " + "(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
"VALUES " + "VALUES " +
"(?friendID,?ownerID,?friendPerms,?datetimestamp)", "(?friendID,?ownerID,?friendPerms,?datetimestamp)",
param); param))
{
adder.ExecuteNonQuery(); adder.ExecuteNonQuery();
} }
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return; return;
} }
finally finally
@ -260,22 +261,24 @@ namespace OpenSim.Data.MySQL
try try
{ {
IDbCommand updater = using (IDbCommand updater = dbm.Manager.Query(
dbm.Manager.Query(
"delete from " + m_userFriendsTableName + " where ownerID = ?ownerID and friendID = ?friendID", "delete from " + m_userFriendsTableName + " where ownerID = ?ownerID and friendID = ?friendID",
param); param))
{
updater.ExecuteNonQuery(); updater.ExecuteNonQuery();
}
updater = using (IDbCommand updater = dbm.Manager.Query(
dbm.Manager.Query(
"delete from " + m_userFriendsTableName + " where ownerID = ?friendID and friendID = ?ownerID", "delete from " + m_userFriendsTableName + " where ownerID = ?friendID and friendID = ?ownerID",
param); param))
{
updater.ExecuteNonQuery(); updater.ExecuteNonQuery();
} }
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return; return;
} }
finally finally
@ -295,18 +298,19 @@ namespace OpenSim.Data.MySQL
try try
{ {
IDbCommand updater = using (IDbCommand updater = dbm.Manager.Query(
dbm.Manager.Query(
"update " + m_userFriendsTableName + "update " + m_userFriendsTableName +
" SET friendPerms = ?friendPerms " + " SET friendPerms = ?friendPerms " +
"where ownerID = ?ownerID and friendID = ?friendID", "where ownerID = ?ownerID and friendID = ?friendID",
param); param))
{
updater.ExecuteNonQuery(); updater.ExecuteNonQuery();
} }
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return; return;
} }
finally finally
@ -327,14 +331,14 @@ namespace OpenSim.Data.MySQL
try try
{ {
//Left Join userfriends to itself //Left Join userfriends to itself
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"select a.ownerID,a.friendID,a.friendPerms,b.friendPerms as ownerperms from " + "select a.ownerID,a.friendID,a.friendPerms,b.friendPerms as ownerperms from " +
m_userFriendsTableName + " as a, " + m_userFriendsTableName + " as b" + m_userFriendsTableName + " as a, " + m_userFriendsTableName + " as b" +
" where a.ownerID = ?ownerID and b.ownerID = a.friendID and b.friendID = a.ownerID", " where a.ownerID = ?ownerID and b.ownerID = a.friendID and b.friendID = a.ownerID",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
FriendListItem fli = new FriendListItem(); FriendListItem fli = new FriendListItem();
@ -347,14 +351,13 @@ namespace OpenSim.Data.MySQL
Lfli.Add(fli); Lfli.Add(fli);
} }
}
reader.Dispose(); }
result.Dispose();
} }
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return Lfli; return Lfli;
} }
finally finally
@ -376,11 +379,12 @@ namespace OpenSim.Data.MySQL
{ {
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?uuid"] = uuid.ToString(); param["?uuid"] = uuid.ToString();
IDbCommand result =
dbm.Manager.Query("select agentOnline,currentHandle from " + m_agentsTableName +
" where UUID = ?uuid", param);
IDataReader reader = result.ExecuteReader(); using (IDbCommand result = dbm.Manager.Query("select agentOnline,currentHandle from " + m_agentsTableName +
" where UUID = ?uuid", param))
{
using (IDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
FriendRegionInfo fri = new FriendRegionInfo(); FriendRegionInfo fri = new FriendRegionInfo();
@ -389,16 +393,15 @@ namespace OpenSim.Data.MySQL
infos[uuid] = fri; infos[uuid] = fri;
} }
}
reader.Dispose(); }
result.Dispose();
} }
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Warn("[MYSQL]: Got exception on trying to find friends regions:", e); m_log.Warn("[MYSQL]: Got exception on trying to find friends regions:", e);
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
finally finally
{ {
@ -427,13 +430,13 @@ namespace OpenSim.Data.MySQL
try try
{ {
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"SELECT UUID,username,lastname FROM " + m_usersTableName + "SELECT UUID,username,lastname FROM " + m_usersTableName +
" WHERE username like ?first AND lastname like ?second LIMIT 100", " WHERE username like ?first AND lastname like ?second LIMIT 100",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
AvatarPickerAvatar user = new AvatarPickerAvatar(); AvatarPickerAvatar user = new AvatarPickerAvatar();
@ -442,13 +445,13 @@ namespace OpenSim.Data.MySQL
user.lastName = (string)reader["lastname"]; user.lastName = (string)reader["lastname"];
returnlist.Add(user); returnlist.Add(user);
} }
reader.Dispose(); }
result.Dispose(); }
} }
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return returnlist; return returnlist;
} }
finally finally
@ -465,13 +468,13 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?first"] = objAlphaNumericPattern.Replace(querysplit[0], String.Empty) + "%"; param["?first"] = objAlphaNumericPattern.Replace(querysplit[0], String.Empty) + "%";
IDbCommand result = using (IDbCommand result = dbm.Manager.Query(
dbm.Manager.Query(
"SELECT UUID,username,lastname FROM " + m_usersTableName + "SELECT UUID,username,lastname FROM " + m_usersTableName +
" WHERE username like ?first OR lastname like ?first LIMIT 100", " WHERE username like ?first OR lastname like ?first LIMIT 100",
param); param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
while (reader.Read()) while (reader.Read())
{ {
AvatarPickerAvatar user = new AvatarPickerAvatar(); AvatarPickerAvatar user = new AvatarPickerAvatar();
@ -480,13 +483,13 @@ namespace OpenSim.Data.MySQL
user.lastName = (string)reader["lastname"]; user.lastName = (string)reader["lastname"];
returnlist.Add(user); returnlist.Add(user);
} }
reader.Dispose(); }
result.Dispose(); }
} }
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return returnlist; return returnlist;
} }
finally finally
@ -510,20 +513,19 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?uuid"] = uuid.ToString(); param["?uuid"] = uuid.ToString();
IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_usersTableName + " WHERE UUID = ?uuid", param); using (IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_usersTableName + " WHERE UUID = ?uuid", param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
UserProfileData row = dbm.Manager.readUserRow(reader); UserProfileData row = dbm.Manager.readUserRow(reader);
reader.Dispose();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -577,7 +579,7 @@ namespace OpenSim.Data.MySQL
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return; return;
} }
finally finally
@ -600,21 +602,19 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?uuid"] = uuid.ToString(); param["?uuid"] = uuid.ToString();
IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid", using (IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid", param))
param); {
IDataReader reader = result.ExecuteReader(); using (IDataReader reader = result.ExecuteReader())
{
UserAgentData row = dbm.Manager.readAgentRow(reader); UserAgentData row = dbm.Manager.readAgentRow(reader);
reader.Dispose();
result.Dispose();
return row; return row;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -638,7 +638,8 @@ namespace OpenSim.Data.MySQL
try try
{ {
dbm.Manager.insertUserRow(user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt, dbm.Manager.insertUserRow(
user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y, user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
user.HomeLocation.Z, user.HomeLocation.Z,
user.HomeLookAt.X, user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created, user.HomeLookAt.X, user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created,
@ -650,7 +651,7 @@ namespace OpenSim.Data.MySQL
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
finally finally
{ {
@ -676,7 +677,7 @@ namespace OpenSim.Data.MySQL
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
finally finally
{ {
@ -693,7 +694,8 @@ namespace OpenSim.Data.MySQL
MySQLSuperManager dbm = GetLockedConnection("UpdateUserProfile"); MySQLSuperManager dbm = GetLockedConnection("UpdateUserProfile");
try try
{ {
dbm.Manager.updateUserRow(user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt, dbm.Manager.updateUserRow(
user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y, user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
user.HomeLocation.Z, user.HomeLookAt.X, user.HomeLocation.Z, user.HomeLookAt.X,
user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created, user.LastLogin, user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created, user.LastLogin,
@ -748,29 +750,29 @@ namespace OpenSim.Data.MySQL
Dictionary<string, object> param = new Dictionary<string, object>(); Dictionary<string, object> param = new Dictionary<string, object>();
param["?owner"] = user.ToString(); param["?owner"] = user.ToString();
IDbCommand result = dbm.Manager.Query( using (IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param))
"SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param); {
IDataReader reader = result.ExecuteReader(); using (IDataReader reader = result.ExecuteReader())
{
AvatarAppearance appearance = dbm.Manager.readAppearanceRow(reader); AvatarAppearance appearance = dbm.Manager.readAppearanceRow(reader);
reader.Dispose(); if (appearance == null)
result.Dispose();
if (null == appearance)
{ {
m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString()); m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString());
return null; return null;
} }
else
{
appearance.SetAttachments(GetUserAttachments(user)); appearance.SetAttachments(GetUserAttachments(user));
return appearance; return appearance;
} }
}
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -798,7 +800,7 @@ namespace OpenSim.Data.MySQL
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
} }
finally finally
{ {
@ -833,20 +835,20 @@ namespace OpenSim.Data.MySQL
try try
{ {
IDbCommand result = dbm.Manager.Query( using (IDbCommand result = dbm.Manager.Query(
"SELECT attachpoint, item, asset from " + m_attachmentsTableName + " WHERE UUID = ?uuid", param); "SELECT attachpoint, item, asset from " + m_attachmentsTableName + " WHERE UUID = ?uuid", param))
IDataReader reader = result.ExecuteReader(); {
using (IDataReader reader = result.ExecuteReader())
{
Hashtable ret = dbm.Manager.readAttachments(reader); Hashtable ret = dbm.Manager.readAttachments(reader);
reader.Dispose();
result.Dispose();
return ret; return ret;
} }
}
}
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return null; return null;
} }
finally finally
@ -905,7 +907,7 @@ namespace OpenSim.Data.MySQL
catch (Exception e) catch (Exception e)
{ {
dbm.Manager.Reconnect(); dbm.Manager.Reconnect();
m_log.Error(e.ToString()); m_log.Error(e.Message, e);
return; return;
} }
finally finally

View File

@ -205,13 +205,10 @@ namespace OpenSim
Directory.CreateDirectory(m_crashDir); Directory.CreateDirectory(m_crashDir);
} }
string log = Util.GetUniqueFilename(ex.GetType() + ".txt"); string log = Util.GetUniqueFilename(ex.GetType() + ".txt");
StreamWriter m_crashLog = using (StreamWriter m_crashLog = new StreamWriter(Path.Combine(m_crashDir, log)))
new StreamWriter( {
Path.Combine(m_crashDir, log)
);
m_crashLog.WriteLine(msg); m_crashLog.WriteLine(msg);
m_crashLog.Close(); }
File.Copy("OpenSim.ini", Path.Combine(m_crashDir, log + "_OpenSim.ini"), true); File.Copy("OpenSim.ini", Path.Combine(m_crashDir, log + "_OpenSim.ini"), true);
} }