Reverting the memory leak patch for MySQL. Problems have been reported with the grid server after running for several hours
parent
f4e9809b7d
commit
6309fcc5b4
|
@ -197,11 +197,20 @@ namespace OpenSim.Data.MSSQL
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
SqlConnection conn = realCommand.Connection;
|
SqlConnection conn = realCommand.Connection;
|
||||||
try { realCommand.Dispose(); }
|
try
|
||||||
|
{
|
||||||
|
realCommand.Dispose();
|
||||||
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
try { conn.Dispose(); }
|
try
|
||||||
finally { }
|
{
|
||||||
|
conn.Close();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
conn.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -348,6 +348,8 @@ 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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -340,6 +340,8 @@ namespace OpenSim.Data.MSSQL
|
||||||
MSSQLMigration migration = new MSSQLMigration(connection, assem, migrationStore);
|
MSSQLMigration migration = new MSSQLMigration(connection, assem, migrationStore);
|
||||||
|
|
||||||
migration.Update();
|
migration.Update();
|
||||||
|
|
||||||
|
connection.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -383,7 +385,9 @@ namespace OpenSim.Data.MSSQL
|
||||||
m_log.Error(e.ToString());
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tables.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -56,6 +56,7 @@ namespace OpenSim.Data.MSSQL
|
||||||
{
|
{
|
||||||
version = Convert.ToInt32(reader["version"]);
|
version = Convert.ToInt32(reader["version"]);
|
||||||
}
|
}
|
||||||
|
reader.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|
|
@ -131,26 +131,25 @@ 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!");
|
||||||
|
|
||||||
using (DbCommand cmd = _conn.CreateCommand())
|
DbCommand cmd = _conn.CreateCommand();
|
||||||
|
foreach (KeyValuePair<int, string> kvp in migrations)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<int, string> kvp in migrations)
|
int newversion = kvp.Key;
|
||||||
{
|
cmd.CommandText = kvp.Value;
|
||||||
int newversion = kvp.Key;
|
// we need to up the command timeout to infinite as we might be doing long migrations.
|
||||||
cmd.CommandText = kvp.Value;
|
cmd.CommandTimeout = 0;
|
||||||
// we need to up the command timeout to infinite as we might be doing long migrations.
|
cmd.ExecuteNonQuery();
|
||||||
cmd.CommandTimeout = 0;
|
|
||||||
cmd.ExecuteNonQuery();
|
|
||||||
|
|
||||||
if (version == 0)
|
if (version == 0)
|
||||||
{
|
{
|
||||||
InsertVersion(_type, newversion);
|
InsertVersion(_type, newversion);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UpdateVersion(_type, newversion);
|
|
||||||
}
|
|
||||||
version = newversion;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UpdateVersion(_type, newversion);
|
||||||
|
}
|
||||||
|
version = newversion;
|
||||||
|
cmd.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,45 +189,43 @@ 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";
|
||||||
|
using (IDataReader reader = cmd.ExecuteReader())
|
||||||
{
|
{
|
||||||
cmd.CommandText = "select version from migrations where name='" + type + "' order by version desc";
|
if (reader.Read())
|
||||||
using (IDataReader reader = cmd.ExecuteReader())
|
|
||||||
{
|
{
|
||||||
if (reader.Read())
|
version = Convert.ToInt32(reader["version"]);
|
||||||
version = Convert.ToInt32(reader["version"]);
|
|
||||||
}
|
}
|
||||||
}
|
reader.Close();
|
||||||
catch
|
|
||||||
{
|
|
||||||
// Something went wrong, so we're version 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// 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)
|
||||||
{
|
{
|
||||||
using (DbCommand cmd = _conn.CreateCommand())
|
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)
|
||||||
{
|
{
|
||||||
using (DbCommand cmd = _conn.CreateCommand())
|
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()
|
||||||
|
|
|
@ -139,42 +139,45 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
_dbConnection.CheckConnection();
|
_dbConnection.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand(
|
MySqlCommand cmd =
|
||||||
"SELECT name, description, assetType, local, temporary, data FROM assets WHERE id=?id",
|
new MySqlCommand(
|
||||||
_dbConnection.Connection))
|
"SELECT name, description, assetType, local, temporary, data FROM assets WHERE id=?id",
|
||||||
|
_dbConnection.Connection);
|
||||||
|
cmd.Parameters.AddWithValue("?id", assetID.ToString());
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
cmd.Parameters.AddWithValue("?id", assetID.ToString());
|
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
|
if (dbReader.Read())
|
||||||
{
|
{
|
||||||
if (dbReader.Read())
|
asset = new AssetBase();
|
||||||
{
|
asset.Data = (byte[]) dbReader["data"];
|
||||||
asset = new AssetBase();
|
asset.Description = (string) dbReader["description"];
|
||||||
asset.Data = (byte[])dbReader["data"];
|
asset.FullID = assetID;
|
||||||
asset.Description = (string)dbReader["description"];
|
|
||||||
asset.FullID = assetID;
|
|
||||||
|
|
||||||
string local = dbReader["local"].ToString();
|
string local = dbReader["local"].ToString();
|
||||||
if (local.Equals("1") || local.Equals("true", StringComparison.InvariantCultureIgnoreCase))
|
if (local.Equals("1") || local.Equals("true", StringComparison.InvariantCultureIgnoreCase))
|
||||||
asset.Local = true;
|
asset.Local = true;
|
||||||
else
|
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();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
if (asset != null)
|
||||||
{
|
UpdateAccessTime(asset);
|
||||||
m_log.ErrorFormat(
|
}
|
||||||
"[ASSETS DB]: MySql failure fetching asset {0}" + Environment.NewLine + e.ToString()
|
catch (Exception e)
|
||||||
+ Environment.NewLine + "Reconnecting", assetID);
|
{
|
||||||
_dbConnection.Reconnect();
|
m_log.ErrorFormat(
|
||||||
}
|
"[ASSETS DB]: MySql failure fetching asset {0}" + Environment.NewLine + e.ToString()
|
||||||
|
+ Environment.NewLine + "Reconnecting", assetID);
|
||||||
|
_dbConnection.Reconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return asset;
|
return asset;
|
||||||
|
@ -291,27 +294,32 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
_dbConnection.CheckConnection();
|
_dbConnection.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand(
|
MySqlCommand cmd =
|
||||||
"SELECT id FROM assets WHERE id=?id",
|
new MySqlCommand(
|
||||||
_dbConnection.Connection))
|
"SELECT id FROM assets WHERE id=?id",
|
||||||
{
|
_dbConnection.Connection);
|
||||||
cmd.Parameters.AddWithValue("?id", uuid.ToString());
|
|
||||||
|
|
||||||
try
|
cmd.Parameters.AddWithValue("?id", uuid.ToString());
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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)
|
||||||
m_log.ErrorFormat(
|
{
|
||||||
"[ASSETS DB]: MySql failure fetching asset {0}" + Environment.NewLine + e.ToString()
|
m_log.ErrorFormat(
|
||||||
+ Environment.NewLine + "Attempting reconnection", uuid);
|
"[ASSETS DB]: MySql failure fetching asset {0}" + Environment.NewLine + e.ToString()
|
||||||
_dbConnection.Reconnect();
|
+ Environment.NewLine + "Attempting reconnection", uuid);
|
||||||
}
|
_dbConnection.Reconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,9 @@ 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("select * from `" + m_Realm + "` where UUID = ?principalID");
|
MySqlCommand cmd = new MySqlCommand(
|
||||||
|
"select * from `"+m_Realm+"` where UUID = ?principalID"
|
||||||
|
);
|
||||||
|
|
||||||
cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
|
cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
|
||||||
|
|
||||||
|
@ -82,14 +84,16 @@ namespace OpenSim.Data.MySQL
|
||||||
ret.Data[s] = result[s].ToString();
|
ret.Data[s] = result[s].ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseDBConnection(result, cmd);
|
result.Close();
|
||||||
|
CloseReaderCommand(cmd);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
result.Close();
|
||||||
CloseDBConnection(result, cmd);
|
CloseReaderCommand(cmd);
|
||||||
return null;
|
|
||||||
}
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Store(AuthenticationData data)
|
public bool Store(AuthenticationData data)
|
||||||
|
|
|
@ -95,17 +95,21 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
protected void GetWaitTimeout()
|
protected void GetWaitTimeout()
|
||||||
{
|
{
|
||||||
using (MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, m_connection))
|
MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect,
|
||||||
|
m_connection);
|
||||||
|
|
||||||
|
using (MySqlDataReader dbReader =
|
||||||
|
cmd.ExecuteReader(CommandBehavior.SingleRow))
|
||||||
{
|
{
|
||||||
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
|
if (dbReader.Read())
|
||||||
{
|
{
|
||||||
if (dbReader.Read())
|
m_waitTimeout
|
||||||
{
|
= Convert.ToInt32(dbReader["@@wait_timeout"]) *
|
||||||
m_waitTimeout
|
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;
|
||||||
|
@ -143,122 +147,53 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|
||||||
bool migration = true;
|
MySqlCommand cmd = m_connection.CreateCommand();
|
||||||
|
|
||||||
using (MySqlCommand cmd = m_connection.CreateCommand())
|
cmd.CommandText = sql;
|
||||||
|
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
|
||||||
|
|
||||||
|
IDataReader r = cmd.ExecuteReader();
|
||||||
|
|
||||||
|
if (r.Read())
|
||||||
{
|
{
|
||||||
cmd.CommandText = sql;
|
foreach (string name in FieldList)
|
||||||
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
|
|
||||||
|
|
||||||
using (IDataReader r = cmd.ExecuteReader())
|
|
||||||
{
|
{
|
||||||
if (r.Read())
|
if (m_FieldMap[name].GetValue(es) is bool)
|
||||||
{
|
{
|
||||||
migration = false;
|
int v = Convert.ToInt32(r[name]);
|
||||||
|
if (v != 0)
|
||||||
|
m_FieldMap[name].SetValue(es, true);
|
||||||
|
else
|
||||||
|
m_FieldMap[name].SetValue(es, false);
|
||||||
|
}
|
||||||
|
else if (m_FieldMap[name].GetValue(es) is UUID)
|
||||||
|
{
|
||||||
|
UUID uuid = UUID.Zero;
|
||||||
|
|
||||||
foreach (string name in FieldList)
|
UUID.TryParse(r[name].ToString(), out uuid);
|
||||||
{
|
m_FieldMap[name].SetValue(es, uuid);
|
||||||
if (m_FieldMap[name].GetValue(es) is bool)
|
}
|
||||||
{
|
else
|
||||||
int v = Convert.ToInt32(r[name]);
|
{
|
||||||
if (v != 0)
|
m_FieldMap[name].SetValue(es, r[name]);
|
||||||
m_FieldMap[name].SetValue(es, true);
|
|
||||||
else
|
|
||||||
m_FieldMap[name].SetValue(es, false);
|
|
||||||
}
|
|
||||||
else if (m_FieldMap[name].GetValue(es) is UUID)
|
|
||||||
{
|
|
||||||
UUID uuid = UUID.Zero;
|
|
||||||
|
|
||||||
UUID.TryParse(r[name].ToString(), out uuid);
|
|
||||||
m_FieldMap[name].SetValue(es, uuid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
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.Parameters.Clear();
|
|
||||||
|
|
||||||
foreach (string name in FieldList)
|
|
||||||
{
|
|
||||||
if (m_FieldMap[name].GetValue(es) is bool)
|
|
||||||
{
|
|
||||||
if ((bool)m_FieldMap[name].GetValue(es))
|
|
||||||
cmd.Parameters.AddWithValue("?" + name, "1");
|
|
||||||
else
|
|
||||||
cmd.Parameters.AddWithValue("?" + name, "0");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?" + name, m_FieldMap[name].GetValue(es).ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
|
||||||
|
|
||||||
cmd.CommandText = "select LAST_INSERT_ID() as id";
|
|
||||||
cmd.Parameters.Clear();
|
|
||||||
|
|
||||||
using (IDataReader r = cmd.ExecuteReader())
|
|
||||||
{
|
|
||||||
r.Read();
|
|
||||||
es.EstateID = Convert.ToUInt32(r["id"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.CommandText = "insert into estate_map values (?RegionID, ?EstateID)";
|
|
||||||
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
|
|
||||||
|
|
||||||
// This will throw on dupe key
|
|
||||||
try { cmd.ExecuteNonQuery(); }
|
|
||||||
catch (Exception) { }
|
|
||||||
|
|
||||||
// Munge and transfer the ban list
|
|
||||||
cmd.Parameters.Clear();
|
|
||||||
cmd.CommandText = "insert into estateban select " + es.EstateID.ToString() + ", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = ?UUID";
|
|
||||||
cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
|
|
||||||
|
|
||||||
try { cmd.ExecuteNonQuery(); }
|
|
||||||
catch (Exception) { }
|
|
||||||
|
|
||||||
es.Save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadBanList(es);
|
|
||||||
|
|
||||||
es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
|
|
||||||
es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users");
|
|
||||||
es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups");
|
|
||||||
return es;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void StoreEstateSettings(EstateSettings es)
|
|
||||||
{
|
|
||||||
string sql = "replace into estate_settings (" + String.Join(",", FieldList) + ") values ( ?" + String.Join(", ?", FieldList) + ")";
|
|
||||||
|
|
||||||
CheckConnection();
|
|
||||||
|
|
||||||
using (MySqlCommand cmd = m_connection.CreateCommand())
|
|
||||||
{
|
|
||||||
cmd.CommandText = sql;
|
cmd.CommandText = sql;
|
||||||
|
cmd.Parameters.Clear();
|
||||||
|
|
||||||
foreach (string name in FieldList)
|
foreach (string name in FieldList)
|
||||||
{
|
{
|
||||||
|
@ -276,8 +211,83 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
cmd.CommandText = "select LAST_INSERT_ID() as id";
|
||||||
|
cmd.Parameters.Clear();
|
||||||
|
|
||||||
|
r = cmd.ExecuteReader();
|
||||||
|
|
||||||
|
r.Read();
|
||||||
|
|
||||||
|
es.EstateID = Convert.ToUInt32(r["id"]);
|
||||||
|
|
||||||
|
r.Close();
|
||||||
|
|
||||||
|
cmd.CommandText = "insert into estate_map values (?RegionID, ?EstateID)";
|
||||||
|
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
|
||||||
|
|
||||||
|
// This will throw on dupe key
|
||||||
|
try
|
||||||
|
{
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Munge and transfer the ban list
|
||||||
|
//
|
||||||
|
cmd.Parameters.Clear();
|
||||||
|
cmd.CommandText = "insert into estateban select " + es.EstateID.ToString() + ", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = ?UUID";
|
||||||
|
cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
es.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadBanList(es);
|
||||||
|
|
||||||
|
es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers");
|
||||||
|
es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users");
|
||||||
|
es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups");
|
||||||
|
return es;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StoreEstateSettings(EstateSettings es)
|
||||||
|
{
|
||||||
|
string sql = "replace into estate_settings (" + String.Join(",", FieldList) + ") values ( ?" + String.Join(", ?", FieldList) + ")";
|
||||||
|
|
||||||
|
CheckConnection();
|
||||||
|
|
||||||
|
MySqlCommand cmd = m_connection.CreateCommand();
|
||||||
|
|
||||||
|
cmd.CommandText = sql;
|
||||||
|
|
||||||
|
foreach (string name in FieldList)
|
||||||
|
{
|
||||||
|
if (m_FieldMap[name].GetValue(es) is bool)
|
||||||
|
{
|
||||||
|
if ((bool)m_FieldMap[name].GetValue(es))
|
||||||
|
cmd.Parameters.AddWithValue("?" + name, "1");
|
||||||
|
else
|
||||||
|
cmd.Parameters.AddWithValue("?" + name, "0");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmd.Parameters.AddWithValue("?" + name, m_FieldMap[name].GetValue(es).ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
SaveBanList(es);
|
SaveBanList(es);
|
||||||
SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers);
|
SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers);
|
||||||
SaveUUIDList(es.EstateID, "estate_users", es.EstateAccess);
|
SaveUUIDList(es.EstateID, "estate_users", es.EstateAccess);
|
||||||
|
@ -290,52 +300,50 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = m_connection.CreateCommand())
|
MySqlCommand cmd = m_connection.CreateCommand();
|
||||||
|
|
||||||
|
cmd.CommandText = "select bannedUUID from estateban where EstateID = ?EstateID";
|
||||||
|
cmd.Parameters.AddWithValue("?EstateID", es.EstateID);
|
||||||
|
|
||||||
|
IDataReader r = cmd.ExecuteReader();
|
||||||
|
|
||||||
|
while (r.Read())
|
||||||
{
|
{
|
||||||
cmd.CommandText = "select bannedUUID from estateban where EstateID = ?EstateID";
|
EstateBan eb = new EstateBan();
|
||||||
cmd.Parameters.AddWithValue("?EstateID", es.EstateID);
|
|
||||||
|
|
||||||
using (IDataReader r = cmd.ExecuteReader())
|
UUID uuid = new UUID();
|
||||||
{
|
UUID.TryParse(r["bannedUUID"].ToString(), out uuid);
|
||||||
while (r.Read())
|
|
||||||
{
|
|
||||||
EstateBan eb = new EstateBan();
|
|
||||||
|
|
||||||
UUID uuid = new UUID();
|
eb.BannedUserID = uuid;
|
||||||
UUID.TryParse(r["bannedUUID"].ToString(), out uuid);
|
eb.BannedHostAddress = "0.0.0.0";
|
||||||
|
eb.BannedHostIPMask = "0.0.0.0";
|
||||||
eb.BannedUserID = uuid;
|
es.AddBan(eb);
|
||||||
eb.BannedHostAddress = "0.0.0.0";
|
|
||||||
eb.BannedHostIPMask = "0.0.0.0";
|
|
||||||
es.AddBan(eb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
r.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveBanList(EstateSettings es)
|
private void SaveBanList(EstateSettings es)
|
||||||
{
|
{
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = m_connection.CreateCommand())
|
MySqlCommand cmd = m_connection.CreateCommand();
|
||||||
|
|
||||||
|
cmd.CommandText = "delete from estateban where EstateID = ?EstateID";
|
||||||
|
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
|
||||||
|
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
cmd.Parameters.Clear();
|
||||||
|
|
||||||
|
cmd.CommandText = "insert into estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask) values ( ?EstateID, ?bannedUUID, '', '', '' )";
|
||||||
|
|
||||||
|
foreach (EstateBan b in es.EstateBans)
|
||||||
{
|
{
|
||||||
cmd.CommandText = "delete from estateban where EstateID = ?EstateID";
|
|
||||||
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
|
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("?bannedUUID", b.BannedUserID.ToString());
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
cmd.Parameters.Clear();
|
cmd.Parameters.Clear();
|
||||||
|
|
||||||
cmd.CommandText = "insert into estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask) values ( ?EstateID, ?bannedUUID, '', '', '' )";
|
|
||||||
|
|
||||||
foreach (EstateBan b in es.EstateBans)
|
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?EstateID", es.EstateID.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?bannedUUID", b.BannedUserID.ToString());
|
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
|
||||||
cmd.Parameters.Clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,25 +351,24 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = m_connection.CreateCommand())
|
MySqlCommand cmd = m_connection.CreateCommand();
|
||||||
|
|
||||||
|
cmd.CommandText = "delete from " + table + " where EstateID = ?EstateID";
|
||||||
|
cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString());
|
||||||
|
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
|
cmd.Parameters.Clear();
|
||||||
|
|
||||||
|
cmd.CommandText = "insert into " + table + " (EstateID, uuid) values ( ?EstateID, ?uuid )";
|
||||||
|
|
||||||
|
foreach (UUID uuid in data)
|
||||||
{
|
{
|
||||||
cmd.CommandText = "delete from " + table + " where EstateID = ?EstateID";
|
|
||||||
cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString());
|
cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("?uuid", uuid.ToString());
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
|
|
||||||
cmd.Parameters.Clear();
|
cmd.Parameters.Clear();
|
||||||
|
|
||||||
cmd.CommandText = "insert into " + table + " (EstateID, uuid) values ( ?EstateID, ?uuid )";
|
|
||||||
|
|
||||||
foreach (UUID uuid in data)
|
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?EstateID", EstateID.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?uuid", uuid.ToString());
|
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
|
||||||
cmd.Parameters.Clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,24 +378,23 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = m_connection.CreateCommand())
|
MySqlCommand cmd = m_connection.CreateCommand();
|
||||||
|
|
||||||
|
cmd.CommandText = "select uuid from " + table + " where EstateID = ?EstateID";
|
||||||
|
cmd.Parameters.AddWithValue("?EstateID", EstateID);
|
||||||
|
|
||||||
|
IDataReader r = cmd.ExecuteReader();
|
||||||
|
|
||||||
|
while (r.Read())
|
||||||
{
|
{
|
||||||
cmd.CommandText = "select uuid from " + table + " where EstateID = ?EstateID";
|
// EstateBan eb = new EstateBan();
|
||||||
cmd.Parameters.AddWithValue("?EstateID", EstateID);
|
|
||||||
|
|
||||||
using (IDataReader r = cmd.ExecuteReader())
|
UUID uuid = new UUID();
|
||||||
{
|
UUID.TryParse(r["uuid"].ToString(), out uuid);
|
||||||
while (r.Read())
|
|
||||||
{
|
|
||||||
// EstateBan eb = new EstateBan();
|
|
||||||
|
|
||||||
UUID uuid = new UUID();
|
uuids.Add(uuid);
|
||||||
UUID.TryParse(r["uuid"].ToString(), out uuid);
|
|
||||||
|
|
||||||
uuids.Add(uuid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
r.Close();
|
||||||
|
|
||||||
return uuids.ToArray();
|
return uuids.ToArray();
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,10 +40,6 @@ 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)
|
||||||
|
@ -73,11 +69,12 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
catch (MySqlException e)
|
catch (MySqlException e)
|
||||||
{
|
{
|
||||||
m_log.Error(e.Message, e);
|
Console.WriteLine(e.ToString());
|
||||||
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;
|
||||||
|
@ -96,7 +93,7 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error(e.Message, e);
|
Console.WriteLine(e.ToString());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,11 +110,11 @@ namespace OpenSim.Data.MySQL
|
||||||
return cmd.ExecuteReader();
|
return cmd.ExecuteReader();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void CloseDBConnection(IDataReader reader, MySqlCommand cmd)
|
protected void CloseReaderCommand(MySqlCommand cmd)
|
||||||
{
|
{
|
||||||
reader.Close();
|
|
||||||
cmd.Connection.Close();
|
cmd.Connection.Close();
|
||||||
cmd.Connection.Dispose();
|
cmd.Connection.Dispose();
|
||||||
|
cmd.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,27 +197,29 @@ namespace OpenSim.Data.MySQL
|
||||||
param["?xmax"] = xmax.ToString();
|
param["?xmax"] = xmax.ToString();
|
||||||
param["?ymax"] = ymax.ToString();
|
param["?ymax"] = ymax.ToString();
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
|
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();
|
||||||
|
|
||||||
|
RegionProfileData row;
|
||||||
|
|
||||||
|
List<RegionProfileData> rows = new List<RegionProfileData>();
|
||||||
|
|
||||||
|
while ((row = dbm.Manager.readSimRow(reader)) != null)
|
||||||
{
|
{
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
rows.Add(row);
|
||||||
{
|
|
||||||
RegionProfileData row;
|
|
||||||
|
|
||||||
List<RegionProfileData> rows = new List<RegionProfileData>();
|
|
||||||
|
|
||||||
while ((row = dbm.Manager.readSimRow(reader)) != null)
|
|
||||||
rows.Add(row);
|
|
||||||
|
|
||||||
return rows.ToArray();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
reader.Close();
|
||||||
|
result.Dispose();
|
||||||
|
|
||||||
|
return rows.ToArray();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -241,27 +243,29 @@ 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 + "%";
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"SELECT * FROM regions WHERE regionName LIKE ?name",
|
dbm.Manager.Query(
|
||||||
param))
|
"SELECT * FROM regions WHERE regionName LIKE ?name",
|
||||||
|
param);
|
||||||
|
IDataReader reader = result.ExecuteReader();
|
||||||
|
|
||||||
|
RegionProfileData row;
|
||||||
|
|
||||||
|
List<RegionProfileData> rows = new List<RegionProfileData>();
|
||||||
|
|
||||||
|
while (rows.Count < maxNum && (row = dbm.Manager.readSimRow(reader)) != null)
|
||||||
{
|
{
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
rows.Add(row);
|
||||||
{
|
|
||||||
RegionProfileData row;
|
|
||||||
|
|
||||||
List<RegionProfileData> rows = new List<RegionProfileData>();
|
|
||||||
|
|
||||||
while (rows.Count < maxNum && (row = dbm.Manager.readSimRow(reader)) != null)
|
|
||||||
rows.Add(row);
|
|
||||||
|
|
||||||
return rows;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
reader.Close();
|
||||||
|
result.Dispose();
|
||||||
|
|
||||||
|
return rows;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -282,21 +286,21 @@ namespace OpenSim.Data.MySQL
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Dictionary<string, object> param = new Dictionary<string, object>();
|
Dictionary<string, object> param = new Dictionary<string, object>();
|
||||||
param["?handle"] = handle.ToString();
|
param["?handle"] = handle.ToString();
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query("SELECT * FROM regions WHERE regionHandle = ?handle", param))
|
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();
|
||||||
return row;
|
result.Dispose();
|
||||||
}
|
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -317,24 +321,23 @@ namespace OpenSim.Data.MySQL
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Dictionary<string, object> param = new Dictionary<string, object>();
|
Dictionary<string, object> param = new Dictionary<string, object>();
|
||||||
param["?uuid"] = uuid.ToString();
|
param["?uuid"] = uuid.ToString();
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query("SELECT * FROM regions WHERE uuid = ?uuid", param))
|
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();
|
||||||
return row;
|
result.Dispose();
|
||||||
}
|
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
} finally
|
||||||
finally
|
|
||||||
{
|
{
|
||||||
dbm.Release();
|
dbm.Release();
|
||||||
}
|
}
|
||||||
|
@ -356,21 +359,22 @@ 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.
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"SELECT * FROM regions WHERE regionName like ?regionName order by LENGTH(regionName) asc LIMIT 1",
|
dbm.Manager.Query(
|
||||||
param))
|
"SELECT * FROM regions WHERE regionName like ?regionName order by LENGTH(regionName) asc LIMIT 1",
|
||||||
{
|
param);
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
IDataReader reader = result.ExecuteReader();
|
||||||
{
|
|
||||||
RegionProfileData row = dbm.Manager.readSimRow(reader);
|
RegionProfileData row = dbm.Manager.readSimRow(reader);
|
||||||
return row;
|
reader.Close();
|
||||||
}
|
result.Dispose();
|
||||||
}
|
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -378,7 +382,6 @@ 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;
|
||||||
}
|
}
|
||||||
|
@ -391,12 +394,12 @@ 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
|
||||||
{
|
{
|
||||||
|
@ -414,14 +417,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();
|
||||||
}
|
}
|
||||||
|
@ -479,26 +482,26 @@ namespace OpenSim.Data.MySQL
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
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();
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y",
|
dbm.Manager.Query(
|
||||||
param))
|
"SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y",
|
||||||
{
|
param);
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
IDataReader reader = result.ExecuteReader();
|
||||||
{
|
|
||||||
ReservationData row = dbm.Manager.readReservationRow(reader);
|
ReservationData row = dbm.Manager.readReservationRow(reader);
|
||||||
return row;
|
reader.Close();
|
||||||
}
|
result.Dispose();
|
||||||
}
|
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
} finally
|
||||||
finally
|
|
||||||
{
|
{
|
||||||
dbm.Release();
|
dbm.Release();
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,30 +135,30 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid",
|
MySqlCommand result =
|
||||||
database.Connection))
|
new MySqlCommand("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid",
|
||||||
|
database.Connection);
|
||||||
|
result.Parameters.AddWithValue("?uuid", folderID.ToString());
|
||||||
|
MySqlDataReader reader = result.ExecuteReader();
|
||||||
|
|
||||||
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
result.Parameters.AddWithValue("?uuid", folderID.ToString());
|
// A null item (because something went wrong) breaks everything in the folder
|
||||||
|
InventoryItemBase item = readInventoryItem(reader);
|
||||||
using (MySqlDataReader reader = result.ExecuteReader())
|
if (item != null)
|
||||||
{
|
items.Add(item);
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
// A null item (because something went wrong) breaks everything in the folder
|
|
||||||
InventoryItemBase item = readInventoryItem(reader);
|
|
||||||
if (item != null)
|
|
||||||
items.Add(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reader.Close();
|
||||||
|
result.Dispose();
|
||||||
|
|
||||||
|
return items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,28 +176,29 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand result = new MySqlCommand(
|
MySqlCommand result =
|
||||||
"SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid",
|
new MySqlCommand(
|
||||||
database.Connection))
|
"SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid",
|
||||||
{
|
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>();
|
||||||
{
|
while (reader.Read())
|
||||||
List<InventoryFolderBase> items = new List<InventoryFolderBase>();
|
items.Add(readInventoryFolder(reader));
|
||||||
while (reader.Read())
|
|
||||||
items.Add(readInventoryFolder(reader));
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
reader.Close();
|
||||||
}
|
result.Dispose();
|
||||||
|
|
||||||
|
return items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -216,38 +217,41 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand result = new MySqlCommand(
|
MySqlCommand result =
|
||||||
"SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid",
|
new MySqlCommand(
|
||||||
database.Connection))
|
"SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid",
|
||||||
|
database.Connection);
|
||||||
|
result.Parameters.AddWithValue("?uuid", user.ToString());
|
||||||
|
result.Parameters.AddWithValue("?zero", UUID.Zero.ToString());
|
||||||
|
|
||||||
|
MySqlDataReader reader = result.ExecuteReader();
|
||||||
|
|
||||||
|
List<InventoryFolderBase> items = new List<InventoryFolderBase>();
|
||||||
|
while (reader.Read())
|
||||||
|
items.Add(readInventoryFolder(reader));
|
||||||
|
|
||||||
|
InventoryFolderBase rootFolder = null;
|
||||||
|
|
||||||
|
// There should only ever be one root folder for a user. However, if there's more
|
||||||
|
// than one we'll simply use the first one rather than failing. It would be even
|
||||||
|
// nicer to print some message to this effect, but this feels like it's too low a
|
||||||
|
// to put such a message out, and it's too minor right now to spare the time to
|
||||||
|
// suitably refactor.
|
||||||
|
if (items.Count > 0)
|
||||||
{
|
{
|
||||||
result.Parameters.AddWithValue("?uuid", user.ToString());
|
rootFolder = items[0];
|
||||||
result.Parameters.AddWithValue("?zero", UUID.Zero.ToString());
|
|
||||||
|
|
||||||
using (MySqlDataReader reader = result.ExecuteReader())
|
|
||||||
{
|
|
||||||
List<InventoryFolderBase> items = new List<InventoryFolderBase>();
|
|
||||||
while (reader.Read())
|
|
||||||
items.Add(readInventoryFolder(reader));
|
|
||||||
|
|
||||||
InventoryFolderBase rootFolder = null;
|
|
||||||
|
|
||||||
// There should only ever be one root folder for a user. However, if there's more
|
|
||||||
// than one we'll simply use the first one rather than failing. It would be even
|
|
||||||
// nicer to print some message to this effect, but this feels like it's too low a
|
|
||||||
// to put such a message out, and it's too minor right now to spare the time to
|
|
||||||
// suitably refactor.
|
|
||||||
if (items.Count > 0)
|
|
||||||
rootFolder = items[0];
|
|
||||||
|
|
||||||
return rootFolder;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reader.Close();
|
||||||
|
result.Dispose();
|
||||||
|
|
||||||
|
return rootFolder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -267,26 +271,27 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid",
|
MySqlCommand result =
|
||||||
database.Connection))
|
new MySqlCommand("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid",
|
||||||
{
|
database.Connection);
|
||||||
result.Parameters.AddWithValue("?uuid", parentID.ToString());
|
result.Parameters.AddWithValue("?uuid", parentID.ToString());
|
||||||
using (MySqlDataReader reader = result.ExecuteReader())
|
MySqlDataReader reader = result.ExecuteReader();
|
||||||
{
|
|
||||||
List<InventoryFolderBase> items = new List<InventoryFolderBase>();
|
|
||||||
|
|
||||||
while (reader.Read())
|
List<InventoryFolderBase> items = new List<InventoryFolderBase>();
|
||||||
items.Add(readInventoryFolder(reader));
|
|
||||||
|
|
||||||
return items;
|
while (reader.Read())
|
||||||
}
|
items.Add(readInventoryFolder(reader));
|
||||||
}
|
|
||||||
|
reader.Close();
|
||||||
|
result.Dispose();
|
||||||
|
|
||||||
|
return items;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -365,25 +370,25 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", database.Connection))
|
MySqlCommand result =
|
||||||
{
|
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;
|
||||||
{
|
if (reader.Read())
|
||||||
InventoryItemBase item = null;
|
item = readInventoryItem(reader);
|
||||||
if (reader.Read())
|
|
||||||
item = readInventoryItem(reader);
|
|
||||||
|
|
||||||
return item;
|
reader.Close();
|
||||||
}
|
result.Dispose();
|
||||||
}
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -408,7 +413,7 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -428,25 +433,24 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection))
|
MySqlCommand result =
|
||||||
{
|
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;
|
||||||
{
|
if (reader.Read())
|
||||||
InventoryFolderBase folder = null;
|
folder = readInventoryFolder(reader);
|
||||||
if (reader.Read())
|
reader.Close();
|
||||||
folder = readInventoryFolder(reader);
|
result.Dispose();
|
||||||
|
|
||||||
return folder;
|
return folder;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -694,73 +698,69 @@ namespace OpenSim.Data.MySQL
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
|
List<InventoryFolderBase> folders = new List<InventoryFolderBase>();
|
||||||
Dictionary<UUID, List<InventoryFolderBase>> hashtable = new Dictionary<UUID, List<InventoryFolderBase>>(); ;
|
Dictionary<UUID, List<InventoryFolderBase>> hashtable
|
||||||
|
= new Dictionary<UUID, List<InventoryFolderBase>>(); ;
|
||||||
List<InventoryFolderBase> parentFolder = new List<InventoryFolderBase>();
|
List<InventoryFolderBase> parentFolder = new List<InventoryFolderBase>();
|
||||||
bool buildResultsFromHashTable = false;
|
|
||||||
|
|
||||||
lock (database)
|
lock (database)
|
||||||
{
|
{
|
||||||
|
MySqlCommand result;
|
||||||
|
MySqlDataReader reader;
|
||||||
|
bool buildResultsFromHashTable = false;
|
||||||
|
|
||||||
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 */
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", database.Connection))
|
result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE folderID = ?uuid",
|
||||||
{
|
database.Connection);
|
||||||
result.Parameters.AddWithValue("?uuid", parentID.ToString());
|
result.Parameters.AddWithValue("?uuid", parentID.ToString());
|
||||||
|
reader = result.ExecuteReader();
|
||||||
using (MySqlDataReader reader = result.ExecuteReader())
|
while (reader.Read()) // Should be at most 1 result
|
||||||
{
|
parentFolder.Add(readInventoryFolder(reader));
|
||||||
// Should be at most 1 result
|
reader.Close();
|
||||||
while (reader.Read())
|
result.Dispose();
|
||||||
parentFolder.Add(readInventoryFolder(reader));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 */
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", database.Connection))
|
result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid",
|
||||||
|
database.Connection);
|
||||||
|
result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString());
|
||||||
|
reader = result.ExecuteReader();
|
||||||
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString());
|
InventoryFolderBase curFolder = readInventoryFolder(reader);
|
||||||
|
if (curFolder.ID != parentID) // Do not need to add the root node of the tree to the list
|
||||||
using (MySqlDataReader reader = result.ExecuteReader())
|
folders.Add(curFolder);
|
||||||
{
|
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
InventoryFolderBase curFolder = readInventoryFolder(reader);
|
|
||||||
if (curFolder.ID != parentID) // Do not need to add the root node of the tree to the list
|
|
||||||
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 */
|
||||||
using (MySqlCommand result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid", database.Connection))
|
result = new MySqlCommand("SELECT * FROM inventoryfolders WHERE agentID = ?uuid",
|
||||||
|
database.Connection);
|
||||||
|
result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString());
|
||||||
|
reader = result.ExecuteReader();
|
||||||
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
result.Parameters.AddWithValue("?uuid", parentFolder[0].Owner.ToString());
|
InventoryFolderBase curFolder = readInventoryFolder(reader);
|
||||||
|
if (hashtable.ContainsKey(curFolder.ParentID)) // Current folder already has a sibling
|
||||||
using (MySqlDataReader reader = result.ExecuteReader())
|
hashtable[curFolder.ParentID].Add(curFolder); // append to sibling list
|
||||||
|
else // else current folder has no known (yet) siblings
|
||||||
{
|
{
|
||||||
while (reader.Read())
|
List<InventoryFolderBase> siblingList = new List<InventoryFolderBase>();
|
||||||
{
|
siblingList.Add(curFolder);
|
||||||
InventoryFolderBase curFolder = readInventoryFolder(reader);
|
// Current folder has no known (yet) siblings
|
||||||
if (hashtable.ContainsKey(curFolder.ParentID)) // Current folder already has a sibling
|
hashtable.Add(curFolder.ParentID, siblingList);
|
||||||
hashtable[curFolder.ParentID].Add(curFolder); // append to sibling list
|
|
||||||
else // else current folder has no known (yet) siblings
|
|
||||||
{
|
|
||||||
List<InventoryFolderBase> siblingList = new List<InventoryFolderBase>();
|
|
||||||
siblingList.Add(curFolder);
|
|
||||||
// Current folder has no known (yet) siblings
|
|
||||||
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,13 +781,12 @@ 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.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -802,18 +801,19 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryfolders WHERE folderID=?uuid", database.Connection))
|
MySqlCommand cmd =
|
||||||
{
|
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.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -827,12 +827,13 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
database.CheckConnection();
|
database.CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE parentFolderID=?uuid", database.Connection))
|
MySqlCommand cmd =
|
||||||
{
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (MySqlException e)
|
catch (MySqlException e)
|
||||||
|
@ -864,38 +865,40 @@ 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>();
|
||||||
{
|
while (result.Read())
|
||||||
List<InventoryItemBase> list = new List<InventoryItemBase>();
|
{
|
||||||
while (result.Read())
|
InventoryItemBase item = readInventoryItem(result);
|
||||||
{
|
if (item != null)
|
||||||
InventoryItemBase item = readInventoryItem(result);
|
list.Add(item);
|
||||||
if (item != null)
|
|
||||||
list.Add(item);
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return list;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
database.Reconnect();
|
database.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (result != null) result.Close();
|
||||||
|
if (sqlCmd != null) sqlCmd.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,16 +134,18 @@ namespace OpenSim.Data.MySQL
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected void GetWaitTimeout()
|
protected void GetWaitTimeout()
|
||||||
{
|
{
|
||||||
using (MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, dbcon))
|
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())
|
m_waitTimeout
|
||||||
{
|
= Convert.ToInt32(dbReader["@@wait_timeout"]) * TimeSpan.TicksPerSecond + m_waitTimeoutLeeway;
|
||||||
m_waitTimeout
|
|
||||||
= Convert.ToInt32(dbReader["@@wait_timeout"]) * TimeSpan.TicksPerSecond + m_waitTimeoutLeeway;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbReader.Close();
|
||||||
|
cmd.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastConnectionUse = DateTime.Now.Ticks;
|
m_lastConnectionUse = DateTime.Now.Ticks;
|
||||||
|
@ -301,31 +303,31 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|
||||||
using (MySqlCommand tablesCmd = new MySqlCommand(
|
MySqlCommand tablesCmd =
|
||||||
"SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=?dbname",
|
new MySqlCommand(
|
||||||
dbcon))
|
"SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=?dbname",
|
||||||
{
|
dbcon);
|
||||||
tablesCmd.Parameters.AddWithValue("?dbname", dbcon.Database);
|
tablesCmd.Parameters.AddWithValue("?dbname", dbcon.Database);
|
||||||
|
|
||||||
using (MySqlDataReader tables = tablesCmd.ExecuteReader())
|
using (MySqlDataReader tables = tablesCmd.ExecuteReader())
|
||||||
|
{
|
||||||
|
while (tables.Read())
|
||||||
{
|
{
|
||||||
while (tables.Read())
|
try
|
||||||
{
|
{
|
||||||
try
|
string tableName = (string) tables["TABLE_NAME"];
|
||||||
|
string comment = (string) tables["TABLE_COMMENT"];
|
||||||
|
if (tableList.ContainsKey(tableName))
|
||||||
{
|
{
|
||||||
string tableName = (string)tables["TABLE_NAME"];
|
tableList[tableName] = comment;
|
||||||
string comment = (string)tables["TABLE_COMMENT"];
|
|
||||||
if (tableList.ContainsKey(tableName))
|
|
||||||
{
|
|
||||||
tableList[tableName] = comment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.Error(e.Message, e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Error(e.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
tables.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,19 +346,19 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
CheckConnection(); // Not sure if this one is necessary
|
CheckConnection(); // Not sure if this one is necessary
|
||||||
|
|
||||||
MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
|
MySqlCommand dbcommand = (MySqlCommand) dbcon.CreateCommand();
|
||||||
dbcommand.CommandText = sql;
|
dbcommand.CommandText = sql;
|
||||||
foreach (KeyValuePair<string, object> param in parameters)
|
foreach (KeyValuePair<string, object> param in parameters)
|
||||||
{
|
{
|
||||||
dbcommand.Parameters.AddWithValue(param.Key, param.Value);
|
dbcommand.Parameters.AddWithValue(param.Key, param.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (IDbCommand)dbcommand;
|
return (IDbCommand) dbcommand;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// Return null if it fails.
|
// Return null if it fails.
|
||||||
m_log.Error("Failed during Query generation: " + e.Message, e);
|
m_log.Error("Failed during Query generation: " + e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -692,6 +694,8 @@ namespace OpenSim.Data.MySQL
|
||||||
ret.Add(attachpoint, item);
|
ret.Add(attachpoint, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r.Close();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,13 +56,12 @@ namespace OpenSim.Data.MySQL
|
||||||
if (scopeID != UUID.Zero)
|
if (scopeID != UUID.Zero)
|
||||||
command += " and ScopeID = ?scopeID";
|
command += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand(command))
|
MySqlCommand cmd = new MySqlCommand(command);
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?regionName", regionName);
|
|
||||||
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
|
||||||
|
|
||||||
return RunCommand(cmd);
|
cmd.Parameters.AddWithValue("?regionName", regionName);
|
||||||
}
|
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
||||||
|
|
||||||
|
return RunCommand(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegionData Get(int posX, int posY, UUID scopeID)
|
public RegionData Get(int posX, int posY, UUID scopeID)
|
||||||
|
@ -71,18 +70,17 @@ namespace OpenSim.Data.MySQL
|
||||||
if (scopeID != UUID.Zero)
|
if (scopeID != UUID.Zero)
|
||||||
command += " and ScopeID = ?scopeID";
|
command += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand(command))
|
MySqlCommand cmd = new MySqlCommand(command);
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?posX", posX.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?posY", posY.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
|
||||||
|
|
||||||
List<RegionData> ret = RunCommand(cmd);
|
cmd.Parameters.AddWithValue("?posX", posX.ToString());
|
||||||
if (ret.Count == 0)
|
cmd.Parameters.AddWithValue("?posY", posY.ToString());
|
||||||
return null;
|
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
||||||
|
|
||||||
return ret[0];
|
List<RegionData> ret = RunCommand(cmd);
|
||||||
}
|
if (ret.Count == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return ret[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegionData Get(UUID regionID, UUID scopeID)
|
public RegionData Get(UUID regionID, UUID scopeID)
|
||||||
|
@ -91,17 +89,16 @@ namespace OpenSim.Data.MySQL
|
||||||
if (scopeID != UUID.Zero)
|
if (scopeID != UUID.Zero)
|
||||||
command += " and ScopeID = ?scopeID";
|
command += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand(command))
|
MySqlCommand cmd = new MySqlCommand(command);
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?regionID", regionID.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
|
||||||
|
|
||||||
List<RegionData> ret = RunCommand(cmd);
|
cmd.Parameters.AddWithValue("?regionID", regionID.ToString());
|
||||||
if (ret.Count == 0)
|
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
||||||
return null;
|
|
||||||
|
|
||||||
return ret[0];
|
List<RegionData> ret = RunCommand(cmd);
|
||||||
}
|
if (ret.Count == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
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)
|
||||||
|
@ -110,44 +107,43 @@ namespace OpenSim.Data.MySQL
|
||||||
if (scopeID != UUID.Zero)
|
if (scopeID != UUID.Zero)
|
||||||
command += " and ScopeID = ?scopeID";
|
command += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand(command))
|
MySqlCommand cmd = new MySqlCommand(command);
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?startX", startX.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?startY", startY.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?endX", endX.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?endY", endY.ToString());
|
|
||||||
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
|
||||||
|
|
||||||
return RunCommand(cmd);
|
cmd.Parameters.AddWithValue("?startX", startX.ToString());
|
||||||
}
|
cmd.Parameters.AddWithValue("?startY", startY.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("?endX", endX.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("?endY", endY.ToString());
|
||||||
|
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
|
||||||
|
|
||||||
|
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>();
|
||||||
|
|
||||||
using (IDataReader result = ExecuteReader(cmd))
|
IDataReader result = ExecuteReader(cmd);
|
||||||
|
|
||||||
|
while (result.Read())
|
||||||
{
|
{
|
||||||
while (result.Read())
|
RegionData ret = new RegionData();
|
||||||
|
ret.Data = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
UUID regionID;
|
||||||
|
UUID.TryParse(result["uuid"].ToString(), out regionID);
|
||||||
|
ret.RegionID = regionID;
|
||||||
|
UUID scope;
|
||||||
|
UUID.TryParse(result["ScopeID"].ToString(), out scope);
|
||||||
|
ret.ScopeID = scope;
|
||||||
|
ret.RegionName = result["regionName"].ToString();
|
||||||
|
ret.posX = Convert.ToInt32(result["locX"]);
|
||||||
|
ret.posY = Convert.ToInt32(result["locY"]);
|
||||||
|
ret.sizeX = Convert.ToInt32(result["sizeX"]);
|
||||||
|
ret.sizeY = Convert.ToInt32(result["sizeY"]);
|
||||||
|
|
||||||
|
if (m_ColumnNames == null)
|
||||||
{
|
{
|
||||||
RegionData ret = new RegionData();
|
m_ColumnNames = new List<string>();
|
||||||
ret.Data = new Dictionary<string, object>();
|
|
||||||
|
|
||||||
UUID regionID;
|
|
||||||
UUID.TryParse(result["uuid"].ToString(), out regionID);
|
|
||||||
ret.RegionID = regionID;
|
|
||||||
UUID scope;
|
|
||||||
UUID.TryParse(result["ScopeID"].ToString(), out scope);
|
|
||||||
ret.ScopeID = scope;
|
|
||||||
ret.RegionName = result["regionName"].ToString();
|
|
||||||
ret.posX = Convert.ToInt32(result["locX"]);
|
|
||||||
ret.posY = Convert.ToInt32(result["locY"]);
|
|
||||||
ret.sizeX = Convert.ToInt32(result["sizeX"]);
|
|
||||||
ret.sizeY = Convert.ToInt32(result["sizeY"]);
|
|
||||||
|
|
||||||
if (m_ColumnNames == null)
|
|
||||||
{
|
|
||||||
m_ColumnNames = new List<string>();
|
|
||||||
|
|
||||||
DataTable schemaTable = result.GetSchemaTable();
|
DataTable schemaTable = result.GetSchemaTable();
|
||||||
foreach (DataRow row in schemaTable.Rows)
|
foreach (DataRow row in schemaTable.Rows)
|
||||||
|
@ -157,28 +153,28 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (string s in m_ColumnNames)
|
foreach (string s in m_ColumnNames)
|
||||||
{
|
{
|
||||||
if (s == "uuid")
|
if (s == "uuid")
|
||||||
continue;
|
continue;
|
||||||
if (s == "ScopeID")
|
if (s == "ScopeID")
|
||||||
continue;
|
continue;
|
||||||
if (s == "regionName")
|
if (s == "regionName")
|
||||||
continue;
|
continue;
|
||||||
if (s == "locX")
|
if (s == "locX")
|
||||||
continue;
|
continue;
|
||||||
if (s == "locY")
|
if (s == "locY")
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret.Data[s] = result[s].ToString();
|
ret.Data[s] = result[s].ToString();
|
||||||
}
|
|
||||||
|
|
||||||
retList.Add(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseDBConnection(result, cmd);
|
retList.Add(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result.Close();
|
||||||
|
CloseReaderCommand(cmd);
|
||||||
|
|
||||||
return retList;
|
return retList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,72 +201,76 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
string[] fields = new List<string>(data.Data.Keys).ToArray();
|
string[] fields = new List<string>(data.Data.Keys).ToArray();
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand())
|
MySqlCommand cmd = new MySqlCommand();
|
||||||
|
|
||||||
|
string update = "update `"+m_Realm+"` set locX=?posX, locY=?posY, sizeX=?sizeX, sizeY=?sizeY";
|
||||||
|
foreach (string field in fields)
|
||||||
{
|
{
|
||||||
string update = "update `" + m_Realm + "` set locX=?posX, locY=?posY, sizeX=?sizeX, sizeY=?sizeY";
|
update += ", ";
|
||||||
foreach (string field in fields)
|
update += "`" + field + "` = ?"+field;
|
||||||
{
|
|
||||||
update += ", ";
|
|
||||||
update += "`" + field + "` = ?" + field;
|
|
||||||
|
|
||||||
cmd.Parameters.AddWithValue("?" + field, data.Data[field]);
|
cmd.Parameters.AddWithValue("?"+field, data.Data[field]);
|
||||||
}
|
}
|
||||||
|
|
||||||
update += " where uuid = ?regionID";
|
update += " where uuid = ?regionID";
|
||||||
|
|
||||||
if (data.ScopeID != UUID.Zero)
|
if (data.ScopeID != UUID.Zero)
|
||||||
update += " and ScopeID = ?scopeID";
|
update += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
cmd.CommandText = update;
|
cmd.CommandText = update;
|
||||||
cmd.Parameters.AddWithValue("?regionID", data.RegionID.ToString());
|
cmd.Parameters.AddWithValue("?regionID", data.RegionID.ToString());
|
||||||
cmd.Parameters.AddWithValue("?regionName", data.RegionName);
|
cmd.Parameters.AddWithValue("?regionName", data.RegionName);
|
||||||
cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString());
|
cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString());
|
||||||
cmd.Parameters.AddWithValue("?posX", data.posX.ToString());
|
cmd.Parameters.AddWithValue("?posX", data.posX.ToString());
|
||||||
cmd.Parameters.AddWithValue("?posY", data.posY.ToString());
|
cmd.Parameters.AddWithValue("?posY", data.posY.ToString());
|
||||||
cmd.Parameters.AddWithValue("?sizeX", data.sizeX.ToString());
|
cmd.Parameters.AddWithValue("?sizeX", data.sizeX.ToString());
|
||||||
cmd.Parameters.AddWithValue("?sizeY", data.sizeY.ToString());
|
cmd.Parameters.AddWithValue("?sizeY", data.sizeY.ToString());
|
||||||
|
|
||||||
|
if (ExecuteNonQuery(cmd) < 1)
|
||||||
|
{
|
||||||
|
string insert = "insert into `" + m_Realm + "` (`uuid`, `ScopeID`, `locX`, `locY`, `sizeX`, `sizeY`, `regionName`, `" +
|
||||||
|
String.Join("`, `", fields) +
|
||||||
|
"`) values ( ?regionID, ?scopeID, ?posX, ?posY, ?sizeX, ?sizeY, ?regionName, ?" + String.Join(", ?", fields) + ")";
|
||||||
|
|
||||||
|
cmd.CommandText = insert;
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) < 1)
|
if (ExecuteNonQuery(cmd) < 1)
|
||||||
{
|
{
|
||||||
string insert = "insert into `" + m_Realm + "` (`uuid`, `ScopeID`, `locX`, `locY`, `sizeX`, `sizeY`, `regionName`, `" +
|
cmd.Dispose();
|
||||||
String.Join("`, `", fields) +
|
return false;
|
||||||
"`) values ( ?regionID, ?scopeID, ?posX, ?posY, ?sizeX, ?sizeY, ?regionName, ?" + String.Join(", ?", fields) + ")";
|
|
||||||
|
|
||||||
cmd.CommandText = insert;
|
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) < 1)
|
|
||||||
{
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
using (MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + "` set `" + item + "` = ?" + item + " where uuid = ?UUID"))
|
MySqlCommand cmd = new MySqlCommand("update `" + m_Realm +
|
||||||
{
|
"` set `" + item + "` = ?" + item + " where uuid = ?UUID");
|
||||||
cmd.Parameters.AddWithValue("?" + item, value);
|
|
||||||
cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
|
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) > 0)
|
|
||||||
return true;
|
cmd.Parameters.AddWithValue("?"+item, value);
|
||||||
}
|
cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
|
||||||
|
|
||||||
|
if (ExecuteNonQuery(cmd) > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Delete(UUID regionID)
|
public bool Delete(UUID regionID)
|
||||||
{
|
{
|
||||||
using (MySqlCommand cmd = new MySqlCommand("delete from `" + m_Realm + "` where uuid = ?UUID"))
|
MySqlCommand cmd = new MySqlCommand("delete from `" + m_Realm +
|
||||||
{
|
"` where uuid = ?UUID");
|
||||||
cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
|
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) > 0)
|
|
||||||
return true;
|
cmd.Parameters.AddWithValue("?UUID", regionID.ToString());
|
||||||
}
|
|
||||||
|
if (ExecuteNonQuery(cmd) > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,14 +97,16 @@ namespace OpenSim.Data.MySQL
|
||||||
ret.Data[s] = result[s].ToString();
|
ret.Data[s] = result[s].ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseDBConnection(result, cmd);
|
result.Close();
|
||||||
|
CloseReaderCommand(cmd);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
result.Close();
|
||||||
CloseDBConnection(result, cmd);
|
CloseReaderCommand(cmd);
|
||||||
return null;
|
|
||||||
}
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Store(UserAccountData data)
|
public bool Store(UserAccountData data)
|
||||||
|
@ -116,60 +118,61 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
string[] fields = new List<string>(data.Data.Keys).ToArray();
|
string[] fields = new List<string>(data.Data.Keys).ToArray();
|
||||||
|
|
||||||
using (MySqlCommand cmd = new MySqlCommand())
|
MySqlCommand cmd = new MySqlCommand();
|
||||||
|
|
||||||
|
string update = "update `"+m_Realm+"` set ";
|
||||||
|
bool first = true;
|
||||||
|
foreach (string field in fields)
|
||||||
{
|
{
|
||||||
string update = "update `" + m_Realm + "` set ";
|
if (!first)
|
||||||
bool first = true;
|
update += ", ";
|
||||||
foreach (string field in fields)
|
update += "`" + field + "` = ?"+field;
|
||||||
{
|
|
||||||
if (!first)
|
|
||||||
update += ", ";
|
|
||||||
update += "`" + field + "` = ?" + field;
|
|
||||||
|
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
cmd.Parameters.AddWithValue("?" + field, data.Data[field]);
|
cmd.Parameters.AddWithValue("?"+field, data.Data[field]);
|
||||||
}
|
}
|
||||||
|
|
||||||
update += " where UUID = ?principalID";
|
update += " where UUID = ?principalID";
|
||||||
|
|
||||||
if (data.ScopeID != UUID.Zero)
|
if (data.ScopeID != UUID.Zero)
|
||||||
update += " and ScopeID = ?scopeID";
|
update += " and ScopeID = ?scopeID";
|
||||||
|
|
||||||
cmd.CommandText = update;
|
cmd.CommandText = update;
|
||||||
cmd.Parameters.AddWithValue("?principalID", data.PrincipalID.ToString());
|
cmd.Parameters.AddWithValue("?principalID", data.PrincipalID.ToString());
|
||||||
cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString());
|
cmd.Parameters.AddWithValue("?scopeID", data.ScopeID.ToString());
|
||||||
|
|
||||||
|
if (ExecuteNonQuery(cmd) < 1)
|
||||||
|
{
|
||||||
|
string insert = "insert into `" + m_Realm + "` (`UUID`, `ScopeID`, `" +
|
||||||
|
String.Join("`, `", fields) +
|
||||||
|
"`) values (?principalID, ?scopeID, ?" + String.Join(", ?", fields) + ")";
|
||||||
|
|
||||||
|
cmd.CommandText = insert;
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) < 1)
|
if (ExecuteNonQuery(cmd) < 1)
|
||||||
{
|
{
|
||||||
string insert = "insert into `" + m_Realm + "` (`UUID`, `ScopeID`, `" +
|
cmd.Dispose();
|
||||||
String.Join("`, `", fields) +
|
return false;
|
||||||
"`) values (?principalID, ?scopeID, ?" + String.Join(", ?", fields) + ")";
|
|
||||||
|
|
||||||
cmd.CommandText = insert;
|
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) < 1)
|
|
||||||
{
|
|
||||||
cmd.Dispose();
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
using (MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + "` set `" +
|
MySqlCommand cmd = new MySqlCommand("update `" + m_Realm +
|
||||||
item + "` = ?" + item + " where UUID = ?UUID"))
|
"` set `" + item + "` = ?" + item + " where UUID = ?UUID");
|
||||||
{
|
|
||||||
cmd.Parameters.AddWithValue("?" + item, value);
|
|
||||||
cmd.Parameters.AddWithValue("?UUID", principalID.ToString());
|
|
||||||
|
|
||||||
if (ExecuteNonQuery(cmd) > 0)
|
|
||||||
return true;
|
cmd.Parameters.AddWithValue("?"+item, value);
|
||||||
}
|
cmd.Parameters.AddWithValue("?UUID", principalID.ToString());
|
||||||
|
|
||||||
|
if (ExecuteNonQuery(cmd) > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,20 +181,21 @@ namespace OpenSim.Data.MySQL
|
||||||
param["?first"] = user;
|
param["?first"] = user;
|
||||||
param["?second"] = last;
|
param["?second"] = last;
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param))
|
dbm.Manager.Query(
|
||||||
{
|
"SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param);
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
IDataReader reader = result.ExecuteReader();
|
||||||
{
|
|
||||||
UserProfileData row = dbm.Manager.readUserRow(reader);
|
UserProfileData row = dbm.Manager.readUserRow(reader);
|
||||||
return row;
|
|
||||||
}
|
reader.Dispose();
|
||||||
}
|
result.Dispose();
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -219,30 +220,28 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (IDbCommand adder = dbm.Manager.Query(
|
IDbCommand adder =
|
||||||
"INSERT INTO `" + m_userFriendsTableName + "` " +
|
dbm.Manager.Query(
|
||||||
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
|
"INSERT INTO `" + m_userFriendsTableName + "` " +
|
||||||
"VALUES " +
|
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
|
||||||
"(?ownerID,?friendID,?friendPerms,?datetimestamp)",
|
"VALUES " +
|
||||||
param))
|
"(?ownerID,?friendID,?friendPerms,?datetimestamp)",
|
||||||
{
|
param);
|
||||||
adder.ExecuteNonQuery();
|
adder.ExecuteNonQuery();
|
||||||
}
|
|
||||||
|
|
||||||
using (IDbCommand adder = dbm.Manager.Query(
|
adder =
|
||||||
"INSERT INTO `" + m_userFriendsTableName + "` " +
|
dbm.Manager.Query(
|
||||||
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
|
"INSERT INTO `" + m_userFriendsTableName + "` " +
|
||||||
"VALUES " +
|
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
|
||||||
"(?friendID,?ownerID,?friendPerms,?datetimestamp)",
|
"VALUES " +
|
||||||
param))
|
"(?friendID,?ownerID,?friendPerms,?datetimestamp)",
|
||||||
{
|
param);
|
||||||
adder.ExecuteNonQuery();
|
adder.ExecuteNonQuery();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -261,24 +260,22 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (IDbCommand updater = dbm.Manager.Query(
|
IDbCommand updater =
|
||||||
|
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
using (IDbCommand updater = dbm.Manager.Query(
|
updater =
|
||||||
|
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.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -298,19 +295,18 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (IDbCommand updater = dbm.Manager.Query(
|
IDbCommand updater =
|
||||||
|
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.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -331,33 +327,34 @@ namespace OpenSim.Data.MySQL
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//Left Join userfriends to itself
|
//Left Join userfriends to itself
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"select a.ownerID,a.friendID,a.friendPerms,b.friendPerms as ownerperms from " +
|
dbm.Manager.Query(
|
||||||
m_userFriendsTableName + " as a, " + m_userFriendsTableName + " as b" +
|
"select a.ownerID,a.friendID,a.friendPerms,b.friendPerms as ownerperms from " +
|
||||||
" where a.ownerID = ?ownerID and b.ownerID = a.friendID and b.friendID = a.ownerID",
|
m_userFriendsTableName + " as a, " + m_userFriendsTableName + " as b" +
|
||||||
param))
|
" where a.ownerID = ?ownerID and b.ownerID = a.friendID and b.friendID = a.ownerID",
|
||||||
|
param);
|
||||||
|
IDataReader reader = result.ExecuteReader();
|
||||||
|
|
||||||
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
FriendListItem fli = new FriendListItem();
|
||||||
{
|
fli.FriendListOwner = new UUID((string) reader["ownerID"]);
|
||||||
while (reader.Read())
|
fli.Friend = new UUID((string) reader["friendID"]);
|
||||||
{
|
fli.FriendPerms = (uint) Convert.ToInt32(reader["friendPerms"]);
|
||||||
FriendListItem fli = new FriendListItem();
|
|
||||||
fli.FriendListOwner = new UUID((string)reader["ownerID"]);
|
|
||||||
fli.Friend = new UUID((string)reader["friendID"]);
|
|
||||||
fli.FriendPerms = (uint)Convert.ToInt32(reader["friendPerms"]);
|
|
||||||
|
|
||||||
// This is not a real column in the database table, it's a joined column from the opposite record
|
// This is not a real column in the database table, it's a joined column from the opposite record
|
||||||
fli.FriendListOwnerPerms = (uint)Convert.ToInt32(reader["ownerperms"]);
|
fli.FriendListOwnerPerms = (uint) Convert.ToInt32(reader["ownerperms"]);
|
||||||
|
|
||||||
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.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return Lfli;
|
return Lfli;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -379,29 +376,29 @@ 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);
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query("select agentOnline,currentHandle from " + m_agentsTableName +
|
IDataReader reader = result.ExecuteReader();
|
||||||
" where UUID = ?uuid", param))
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
FriendRegionInfo fri = new FriendRegionInfo();
|
||||||
{
|
fri.isOnline = (sbyte)reader["agentOnline"] != 0;
|
||||||
while (reader.Read())
|
fri.regionHandle = (ulong)reader["currentHandle"];
|
||||||
{
|
|
||||||
FriendRegionInfo fri = new FriendRegionInfo();
|
|
||||||
fri.isOnline = (sbyte)reader["agentOnline"] != 0;
|
|
||||||
fri.regionHandle = (ulong)reader["currentHandle"];
|
|
||||||
|
|
||||||
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.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -430,28 +427,28 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"SELECT UUID,username,lastname FROM " + m_usersTableName +
|
dbm.Manager.Query(
|
||||||
" WHERE username like ?first AND lastname like ?second LIMIT 100",
|
"SELECT UUID,username,lastname FROM " + m_usersTableName +
|
||||||
param))
|
" WHERE username like ?first AND lastname like ?second LIMIT 100",
|
||||||
|
param);
|
||||||
|
IDataReader reader = result.ExecuteReader();
|
||||||
|
|
||||||
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
AvatarPickerAvatar user = new AvatarPickerAvatar();
|
||||||
{
|
user.AvatarID = new UUID((string) reader["UUID"]);
|
||||||
while (reader.Read())
|
user.firstName = (string) reader["username"];
|
||||||
{
|
user.lastName = (string) reader["lastname"];
|
||||||
AvatarPickerAvatar user = new AvatarPickerAvatar();
|
returnlist.Add(user);
|
||||||
user.AvatarID = new UUID((string)reader["UUID"]);
|
|
||||||
user.firstName = (string)reader["username"];
|
|
||||||
user.lastName = (string)reader["lastname"];
|
|
||||||
returnlist.Add(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
reader.Dispose();
|
||||||
|
result.Dispose();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return returnlist;
|
return returnlist;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -468,28 +465,28 @@ 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) + "%";
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
IDbCommand result =
|
||||||
"SELECT UUID,username,lastname FROM " + m_usersTableName +
|
dbm.Manager.Query(
|
||||||
" WHERE username like ?first OR lastname like ?first LIMIT 100",
|
"SELECT UUID,username,lastname FROM " + m_usersTableName +
|
||||||
param))
|
" WHERE username like ?first OR lastname like ?first LIMIT 100",
|
||||||
|
param);
|
||||||
|
IDataReader reader = result.ExecuteReader();
|
||||||
|
|
||||||
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
AvatarPickerAvatar user = new AvatarPickerAvatar();
|
||||||
{
|
user.AvatarID = new UUID((string) reader["UUID"]);
|
||||||
while (reader.Read())
|
user.firstName = (string) reader["username"];
|
||||||
{
|
user.lastName = (string) reader["lastname"];
|
||||||
AvatarPickerAvatar user = new AvatarPickerAvatar();
|
returnlist.Add(user);
|
||||||
user.AvatarID = new UUID((string)reader["UUID"]);
|
|
||||||
user.firstName = (string)reader["username"];
|
|
||||||
user.lastName = (string)reader["lastname"];
|
|
||||||
returnlist.Add(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
reader.Dispose();
|
||||||
|
result.Dispose();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return returnlist;
|
return returnlist;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -513,19 +510,20 @@ 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();
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_usersTableName + " WHERE UUID = ?uuid", param))
|
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);
|
|
||||||
return row;
|
reader.Dispose();
|
||||||
}
|
result.Dispose();
|
||||||
}
|
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -571,15 +569,15 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
dbm.Manager.ExecuteParameterizedSql(
|
dbm.Manager.ExecuteParameterizedSql(
|
||||||
"update " + m_usersTableName + " SET webLoginKey = ?webLoginKey " +
|
"update " + m_usersTableName + " SET webLoginKey = ?webLoginKey " +
|
||||||
"where UUID = ?UUID",
|
"where UUID = ?UUID",
|
||||||
param);
|
param);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -602,19 +600,21 @@ 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();
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid", param))
|
IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid",
|
||||||
{
|
param);
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
IDataReader reader = result.ExecuteReader();
|
||||||
{
|
|
||||||
UserAgentData row = dbm.Manager.readAgentRow(reader);
|
UserAgentData row = dbm.Manager.readAgentRow(reader);
|
||||||
return row;
|
|
||||||
}
|
reader.Dispose();
|
||||||
}
|
result.Dispose();
|
||||||
|
|
||||||
|
return row;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -638,20 +638,19 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
dbm.Manager.insertUserRow(
|
dbm.Manager.insertUserRow(user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
|
||||||
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,
|
user.LastLogin, user.UserInventoryURI, user.UserAssetURI,
|
||||||
user.LastLogin, user.UserInventoryURI, user.UserAssetURI,
|
user.CanDoMask, user.WantDoMask,
|
||||||
user.CanDoMask, user.WantDoMask,
|
user.AboutText, user.FirstLifeAboutText, user.Image,
|
||||||
user.AboutText, user.FirstLifeAboutText, user.Image,
|
user.FirstLifeImage, user.WebLoginKey, user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
|
||||||
user.FirstLifeImage, user.WebLoginKey, user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -677,7 +676,7 @@ namespace OpenSim.Data.MySQL
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -694,15 +693,14 @@ namespace OpenSim.Data.MySQL
|
||||||
MySQLSuperManager dbm = GetLockedConnection("UpdateUserProfile");
|
MySQLSuperManager dbm = GetLockedConnection("UpdateUserProfile");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
dbm.Manager.updateUserRow(
|
dbm.Manager.updateUserRow(user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
|
||||||
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,
|
user.UserInventoryURI,
|
||||||
user.UserInventoryURI,
|
user.UserAssetURI, user.CanDoMask, user.WantDoMask, user.AboutText,
|
||||||
user.UserAssetURI, user.CanDoMask, user.WantDoMask, user.AboutText,
|
user.FirstLifeAboutText, user.Image, user.FirstLifeImage, user.WebLoginKey,
|
||||||
user.FirstLifeAboutText, user.Image, user.FirstLifeImage, user.WebLoginKey,
|
user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
|
||||||
user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -750,29 +748,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();
|
||||||
|
|
||||||
using (IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param))
|
IDbCommand result = dbm.Manager.Query(
|
||||||
{
|
"SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param);
|
||||||
using (IDataReader reader = result.ExecuteReader())
|
IDataReader reader = result.ExecuteReader();
|
||||||
{
|
|
||||||
AvatarAppearance appearance = dbm.Manager.readAppearanceRow(reader);
|
|
||||||
|
|
||||||
if (appearance == null)
|
AvatarAppearance appearance = dbm.Manager.readAppearanceRow(reader);
|
||||||
{
|
|
||||||
m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString());
|
reader.Dispose();
|
||||||
return null;
|
result.Dispose();
|
||||||
}
|
|
||||||
else
|
if (null == appearance)
|
||||||
{
|
{
|
||||||
appearance.SetAttachments(GetUserAttachments(user));
|
m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString());
|
||||||
return appearance;
|
return null;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appearance.SetAttachments(GetUserAttachments(user));
|
||||||
|
|
||||||
|
return appearance;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -800,7 +798,7 @@ namespace OpenSim.Data.MySQL
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -835,20 +833,20 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (IDbCommand result = dbm.Manager.Query(
|
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);
|
|
||||||
return ret;
|
reader.Dispose();
|
||||||
}
|
result.Dispose();
|
||||||
}
|
return ret;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -907,7 +905,7 @@ namespace OpenSim.Data.MySQL
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
dbm.Manager.Reconnect();
|
dbm.Manager.Reconnect();
|
||||||
m_log.Error(e.Message, e);
|
m_log.Error(e.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|
Loading…
Reference in New Issue