From bb171717ceaef37b022a135209c2e0bf031d21f9 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 21 Feb 2010 15:38:52 -0800
Subject: Deleted obsolete files in the Data layer. Compiles.
---
OpenSim/Data/MySQL/MySQLGridData.cs | 422 --------
OpenSim/Data/MySQL/MySQLLogData.cs | 166 ----
OpenSim/Data/MySQL/MySQLManager.cs | 1248 ------------------------
OpenSim/Data/MySQL/MySQLSuperManager.cs | 52 -
OpenSim/Data/MySQL/MySQLUserData.cs | 766 ---------------
OpenSim/Data/MySQL/Tests/MySQLAssetTest.cs | 22 +-
OpenSim/Data/MySQL/Tests/MySQLEstateTest.cs | 54 +-
OpenSim/Data/MySQL/Tests/MySQLGridTest.cs | 94 --
OpenSim/Data/MySQL/Tests/MySQLInventoryTest.cs | 30 +-
OpenSim/Data/MySQL/Tests/MySQLRegionTest.cs | 53 +-
OpenSim/Data/MySQL/Tests/MySQLUserTest.cs | 85 --
11 files changed, 103 insertions(+), 2889 deletions(-)
delete mode 100644 OpenSim/Data/MySQL/MySQLGridData.cs
delete mode 100644 OpenSim/Data/MySQL/MySQLLogData.cs
delete mode 100644 OpenSim/Data/MySQL/MySQLManager.cs
delete mode 100644 OpenSim/Data/MySQL/MySQLSuperManager.cs
delete mode 100644 OpenSim/Data/MySQL/MySQLUserData.cs
delete mode 100644 OpenSim/Data/MySQL/Tests/MySQLGridTest.cs
delete mode 100644 OpenSim/Data/MySQL/Tests/MySQLUserTest.cs
(limited to 'OpenSim/Data/MySQL')
diff --git a/OpenSim/Data/MySQL/MySQLGridData.cs b/OpenSim/Data/MySQL/MySQLGridData.cs
deleted file mode 100644
index f4e7b85..0000000
--- a/OpenSim/Data/MySQL/MySQLGridData.cs
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Reflection;
-using System.Threading;
-using log4net;
-using MySql.Data.MySqlClient;
-using OpenMetaverse;
-using OpenSim.Framework;
-
-namespace OpenSim.Data.MySQL
-{
- ///
- /// A MySQL Interface for the Grid Server
- ///
- public class MySQLGridData : GridDataBase
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- private MySQLManager m_database;
- private object m_dbLock = new object();
- private string m_connectionString;
-
- override public void Initialise()
- {
- m_log.Info("[MySQLGridData]: " + Name + " cannot be default-initialized!");
- throw new PluginNotInitialisedException (Name);
- }
-
- ///
- /// Initialises Grid interface
- ///
- ///
- /// - Loads and initialises the MySQL storage plugin
- /// - Warns and uses the obsolete mysql_connection.ini if connect string is empty.
- /// - Check for migration
- ///
- ///
- ///
- /// connect string.
- override public void Initialise(string connect)
- {
- m_connectionString = connect;
- m_database = new MySQLManager(connect);
-
- // This actually does the roll forward assembly stuff
- Assembly assem = GetType().Assembly;
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- Migration m = new Migration(dbcon, assem, "GridStore");
- m.Update();
- }
- }
-
- ///
- /// Shuts down the grid interface
- ///
- override public void Dispose()
- {
- }
-
- ///
- /// Returns the plugin name
- ///
- /// Plugin name
- override public string Name
- {
- get { return "MySql OpenGridData"; }
- }
-
- ///
- /// Returns the plugin version
- ///
- /// Plugin version
- override public string Version
- {
- get { return "0.1"; }
- }
-
- ///
- /// Returns all the specified region profiles within coordates -- coordinates are inclusive
- ///
- /// Minimum X coordinate
- /// Minimum Y coordinate
- /// Maximum X coordinate
- /// Maximum Y coordinate
- /// Array of sim profiles
- override public RegionProfileData[] GetProfilesInRange(uint xmin, uint ymin, uint xmax, uint ymax)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?xmin"] = xmin.ToString();
- param["?ymin"] = ymin.ToString();
- param["?xmax"] = xmax.ToString();
- param["?ymax"] = ymax.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT * FROM regions WHERE locX >= ?xmin AND locX <= ?xmax AND locY >= ?ymin AND locY <= ?ymax",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- RegionProfileData row;
-
- List rows = new List();
-
- while ((row = m_database.readSimRow(reader)) != null)
- rows.Add(row);
-
- return rows.ToArray();
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Returns up to maxNum profiles of regions that have a name starting with namePrefix
- ///
- /// The name to match against
- /// Maximum number of profiles to return
- /// A list of sim profiles
- override public List GetRegionsByName(string namePrefix, uint maxNum)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?name"] = namePrefix + "%";
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT * FROM regions WHERE regionName LIKE ?name",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- RegionProfileData row;
-
- List rows = new List();
-
- while (rows.Count < maxNum && (row = m_database.readSimRow(reader)) != null)
- rows.Add(row);
-
- return rows;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Returns a sim profile from it's location
- ///
- /// Region location handle
- /// Sim profile
- override public RegionProfileData GetProfileByHandle(ulong handle)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?handle"] = handle.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM regions WHERE regionHandle = ?handle", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- RegionProfileData row = m_database.readSimRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Returns a sim profile from it's UUID
- ///
- /// The region UUID
- /// The sim profile
- override public RegionProfileData GetProfileByUUID(UUID uuid)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = uuid.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM regions WHERE uuid = ?uuid", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- RegionProfileData row = m_database.readSimRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Returns a sim profile from it's Region name string
- ///
- /// The sim profile
- override public RegionProfileData GetProfileByString(string regionName)
- {
- if (regionName.Length > 2)
- {
- try
- {
- Dictionary param = new Dictionary();
- // Add % because this is a like query.
- param["?regionName"] = regionName + "%";
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- // Order by statement will return shorter matches first. Only returns one record or no record.
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT * FROM regions WHERE regionName like ?regionName order by LENGTH(regionName) asc LIMIT 1",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- RegionProfileData row = m_database.readSimRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- m_log.Error("[GRID DB]: Searched for a Region Name shorter then 3 characters");
- return null;
- }
-
- ///
- /// Adds a new profile to the database
- ///
- /// The profile to add
- /// Successful?
- override public DataResponse StoreProfile(RegionProfileData profile)
- {
- try
- {
- if (m_database.insertRegion(profile))
- return DataResponse.RESPONSE_OK;
- else
- return DataResponse.RESPONSE_ERROR;
- }
- catch
- {
- return DataResponse.RESPONSE_ERROR;
- }
- }
-
- ///
- /// Deletes a sim profile from the database
- ///
- /// the sim UUID
- /// Successful?
- //public DataResponse DeleteProfile(RegionProfileData profile)
- override public DataResponse DeleteProfile(string uuid)
- {
- try
- {
- if (m_database.deleteRegion(uuid))
- return DataResponse.RESPONSE_OK;
- else
- return DataResponse.RESPONSE_ERROR;
- }
- catch
- {
- return DataResponse.RESPONSE_ERROR;
- }
- }
-
- ///
- /// DEPRECATED. Attempts to authenticate a region by comparing a shared secret.
- ///
- /// The UUID of the challenger
- /// The attempted regionHandle of the challenger
- /// The secret
- /// Whether the secret and regionhandle match the database entry for UUID
- override public bool AuthenticateSim(UUID uuid, ulong handle, string authkey)
- {
- bool throwHissyFit = false; // Should be true by 1.0
-
- if (throwHissyFit)
- throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential.");
-
- RegionProfileData data = GetProfileByUUID(uuid);
-
- return (handle == data.regionHandle && authkey == data.regionSecret);
- }
-
- ///
- /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region
- ///
- /// This requires a security audit.
- ///
- ///
- ///
- ///
- ///
- public bool AuthenticateSim(UUID uuid, ulong handle, string authhash, string challenge)
- {
- // SHA512Managed HashProvider = new SHA512Managed();
- // Encoding TextProvider = new UTF8Encoding();
-
- // byte[] stream = TextProvider.GetBytes(uuid.ToString() + ":" + handle.ToString() + ":" + challenge);
- // byte[] hash = HashProvider.ComputeHash(stream);
-
- return false;
- }
-
- ///
- /// Adds a location reservation
- ///
- /// x coordinate
- /// y coordinate
- ///
- override public ReservationData GetReservationAtPoint(uint x, uint y)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?x"] = x.ToString();
- param["?y"] = y.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- ReservationData row = m_database.readReservationRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
- }
-}
diff --git a/OpenSim/Data/MySQL/MySQLLogData.cs b/OpenSim/Data/MySQL/MySQLLogData.cs
deleted file mode 100644
index 304883c..0000000
--- a/OpenSim/Data/MySQL/MySQLLogData.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using log4net;
-using OpenSim.Framework;
-
-namespace OpenSim.Data.MySQL
-{
- ///
- /// An interface to the log database for MySQL
- ///
- internal class MySQLLogData : ILogDataPlugin
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- ///
- /// The database manager
- ///
- public MySQLManager database;
-
- public void Initialise()
- {
- m_log.Info("[MySQLLogData]: " + Name + " cannot be default-initialized!");
- throw new PluginNotInitialisedException (Name);
- }
-
- ///
- /// Artificial constructor called when the plugin is loaded
- /// Uses the obsolete mysql_connection.ini if connect string is empty.
- ///
- /// connect string
- public void Initialise(string connect)
- {
- if (connect != String.Empty)
- {
- database = new MySQLManager(connect);
- }
- else
- {
- m_log.Warn("Using deprecated mysql_connection.ini. Please update database_connect in GridServer_Config.xml and we'll use that instead");
-
- IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini");
- string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname");
- string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database");
- string settingUsername = GridDataMySqlFile.ParseFileReadValue("username");
- string settingPassword = GridDataMySqlFile.ParseFileReadValue("password");
- string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling");
- string settingPort = GridDataMySqlFile.ParseFileReadValue("port");
-
- database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword,
- settingPooling, settingPort);
- }
-
- // This actually does the roll forward assembly stuff
- Assembly assem = GetType().Assembly;
-
- using (MySql.Data.MySqlClient.MySqlConnection dbcon = new MySql.Data.MySqlClient.MySqlConnection(connect))
- {
- dbcon.Open();
-
- Migration m = new Migration(dbcon, assem, "LogStore");
-
- // TODO: After rev 6000, remove this. People should have
- // been rolled onto the new migration code by then.
- TestTables(m);
-
- m.Update();
- }
- }
-
- ///
- ///
- private void TestTables(Migration m)
- {
- // under migrations, bail
- if (m.Version > 0)
- return;
-
- Dictionary tableList = new Dictionary();
- tableList["logs"] = null;
- database.GetTableVersion(tableList);
-
- // migrations will handle it
- if (tableList["logs"] == null)
- return;
-
- // we have the table, so pretend like we did the first migration in the past
- if (m.Version == 0)
- m.Version = 1;
- }
-
- ///
- /// Saves a log item to the database
- ///
- /// The daemon triggering the event
- /// The target of the action (region / agent UUID, etc)
- /// The method call where the problem occured
- /// The arguments passed to the method
- /// How critical is this?
- /// The message to log
- public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority,
- string logMessage)
- {
- try
- {
- database.insertLogRow(serverDaemon, target, methodCall, arguments, priority, logMessage);
- }
- catch
- {
- }
- }
-
- ///
- /// Returns the name of this DB provider
- ///
- /// A string containing the DB provider name
- public string Name
- {
- get { return "MySQL Logdata Interface";}
- }
-
- ///
- /// Closes the database provider
- ///
- /// do nothing
- public void Dispose()
- {
- // Do nothing.
- }
-
- ///
- /// Returns the version of this DB provider
- ///
- /// A string containing the provider version
- public string Version
- {
- get { return "0.1"; }
- }
- }
-}
diff --git a/OpenSim/Data/MySQL/MySQLManager.cs b/OpenSim/Data/MySQL/MySQLManager.cs
deleted file mode 100644
index ace2027..0000000
--- a/OpenSim/Data/MySQL/MySQLManager.cs
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Data;
-using System.IO;
-using System.Reflection;
-using log4net;
-using MySql.Data.MySqlClient;
-using OpenMetaverse;
-using OpenSim.Framework;
-
-namespace OpenSim.Data.MySQL
-{
- ///
- /// A MySQL Database manager
- ///
- public class MySQLManager
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- ///
- /// Connection string for ADO.net
- ///
- private string connectionString;
-
- private object m_dbLock = new object();
-
- private const string m_waitTimeoutSelect = "select @@wait_timeout";
-
- ///
- /// Wait timeout for our connection in ticks.
- ///
- private long m_waitTimeout;
-
- ///
- /// Make our storage of the timeout this amount smaller than it actually is, to give us a margin on long
- /// running database operations.
- ///
- private long m_waitTimeoutLeeway = 60 * TimeSpan.TicksPerSecond;
-
- ///
- /// Holds the last tick time that the connection was used.
- ///
- private long m_lastConnectionUse;
-
- ///
- /// Initialises and creates a new MySQL connection and maintains it.
- ///
- /// The MySQL server being connected to
- /// The name of the MySQL database being used
- /// The username logging into the database
- /// The password for the user logging in
- /// Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.
- /// The MySQL server port
- public MySQLManager(string hostname, string database, string username, string password, string cpooling,
- string port)
- {
- string s = "Server=" + hostname + ";Port=" + port + ";Database=" + database + ";User ID=" +
- username + ";Password=" + password + ";Pooling=" + cpooling + ";";
-
- Initialise(s);
- }
-
- ///
- /// Initialises and creates a new MySQL connection and maintains it.
- ///
- /// connectionString
- public MySQLManager(String connect)
- {
- Initialise(connect);
- }
-
- ///
- /// Initialises and creates a new MySQL connection and maintains it.
- ///
- /// connectionString
- public void Initialise(String connect)
- {
- try
- {
- connectionString = connect;
- //dbcon = new MySqlConnection(connectionString);
-
- try
- {
- //dbcon.Open();
- }
- catch(Exception e)
- {
- throw new Exception("Connection error while using connection string ["+connectionString+"]", e);
- }
-
- m_log.Info("[MYSQL]: Connection established");
- GetWaitTimeout();
- }
- catch (Exception e)
- {
- throw new Exception("Error initialising MySql Database: " + e.ToString());
- }
- }
-
- ///
- /// Get the wait_timeout value for our connection
- ///
- protected void GetWaitTimeout()
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- using (MySqlCommand cmd = new MySqlCommand(m_waitTimeoutSelect, dbcon))
- {
- using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
- {
- if (dbReader.Read())
- {
- m_waitTimeout
- = Convert.ToInt32(dbReader["@@wait_timeout"]) * TimeSpan.TicksPerSecond + m_waitTimeoutLeeway;
- }
- }
- }
- }
-
- m_lastConnectionUse = DateTime.Now.Ticks;
-
- m_log.DebugFormat(
- "[REGION DB]: Connection wait timeout {0} seconds", m_waitTimeout / TimeSpan.TicksPerSecond);
- }
-
- public string ConnectionString
- {
- get { return connectionString; }
- }
-
- ///
- /// Returns the version of this DB provider
- ///
- /// A string containing the DB provider
- public string getVersion()
- {
- Module module = GetType().Module;
- // string dllName = module.Assembly.ManifestModule.Name;
- Version dllVersion = module.Assembly.GetName().Version;
-
- return
- string.Format("{0}.{1}.{2}.{3}", dllVersion.Major, dllVersion.Minor, dllVersion.Build,
- dllVersion.Revision);
- }
-
- ///
- /// Extract a named string resource from the embedded resources
- ///
- /// name of embedded resource
- /// string contained within the embedded resource
- private string getResourceString(string name)
- {
- Assembly assem = GetType().Assembly;
- string[] names = assem.GetManifestResourceNames();
-
- foreach (string s in names)
- {
- if (s.EndsWith(name))
- {
- using (Stream resource = assem.GetManifestResourceStream(s))
- {
- using (StreamReader resourceReader = new StreamReader(resource))
- {
- string resourceString = resourceReader.ReadToEnd();
- return resourceString;
- }
- }
- }
- }
- throw new Exception(string.Format("Resource '{0}' was not found", name));
- }
-
- ///
- /// Execute a SQL statement stored in a resource, as a string
- ///
- /// name of embedded resource
- public void ExecuteResourceSql(string name)
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- MySqlCommand cmd = new MySqlCommand(getResourceString(name), dbcon);
- cmd.ExecuteNonQuery();
- }
- }
-
- ///
- /// Execute a MySqlCommand
- ///
- /// sql string to execute
- public void ExecuteSql(string sql)
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- MySqlCommand cmd = new MySqlCommand(sql, dbcon);
- cmd.ExecuteNonQuery();
- }
- }
-
- public void ExecuteParameterizedSql(string sql, Dictionary parameters)
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- MySqlCommand cmd = (MySqlCommand)dbcon.CreateCommand();
- cmd.CommandText = sql;
- foreach (KeyValuePair param in parameters)
- {
- cmd.Parameters.AddWithValue(param.Key, param.Value);
- }
- cmd.ExecuteNonQuery();
- }
- }
-
- ///
- /// Given a list of tables, return the version of the tables, as seen in the database
- ///
- ///
- public void GetTableVersion(Dictionary tableList)
- {
- lock (m_dbLock)
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- using (MySqlCommand tablesCmd = new MySqlCommand(
- "SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=?dbname", dbcon))
- {
- tablesCmd.Parameters.AddWithValue("?dbname", dbcon.Database);
-
- using (MySqlDataReader tables = tablesCmd.ExecuteReader())
- {
- while (tables.Read())
- {
- try
- {
- string tableName = (string)tables["TABLE_NAME"];
- string comment = (string)tables["TABLE_COMMENT"];
- if (tableList.ContainsKey(tableName))
- {
- tableList[tableName] = comment;
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- }
- }
- }
- }
- }
- }
- }
-
- // TODO: at some time this code should be cleaned up
-
- ///
- /// Runs a query with protection against SQL Injection by using parameterised input.
- ///
- /// Database connection
- /// The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y
- /// The parameters - index so that @y is indexed as 'y'
- /// A MySQL DB Command
- public IDbCommand Query(MySqlConnection dbcon, string sql, Dictionary parameters)
- {
- try
- {
- MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
- dbcommand.CommandText = sql;
- foreach (KeyValuePair param in parameters)
- {
- dbcommand.Parameters.AddWithValue(param.Key, param.Value);
- }
-
- return (IDbCommand)dbcommand;
- }
- catch (Exception e)
- {
- // Return null if it fails.
- m_log.Error("Failed during Query generation: " + e.Message, e);
- return null;
- }
- }
-
- ///
- /// Reads a region row from a database reader
- ///
- /// An active database reader
- /// A region profile
- public RegionProfileData readSimRow(IDataReader reader)
- {
- RegionProfileData retval = new RegionProfileData();
-
- if (reader.Read())
- {
- // Region Main gotta-have-or-we-return-null parts
- UInt64 tmp64;
- if (!UInt64.TryParse(reader["regionHandle"].ToString(), out tmp64))
- {
- return null;
- }
- else
- {
- retval.regionHandle = tmp64;
- }
- UUID tmp_uuid;
- if (!UUID.TryParse((string)reader["uuid"], out tmp_uuid))
- {
- return null;
- }
- else
- {
- retval.UUID = tmp_uuid;
- }
-
- // non-critical parts
- retval.regionName = (string)reader["regionName"];
- retval.originUUID = new UUID((string) reader["originUUID"]);
-
- // Secrets
- retval.regionRecvKey = (string) reader["regionRecvKey"];
- retval.regionSecret = (string) reader["regionSecret"];
- retval.regionSendKey = (string) reader["regionSendKey"];
-
- // Region Server
- retval.regionDataURI = (string) reader["regionDataURI"];
- retval.regionOnline = false; // Needs to be pinged before this can be set.
- retval.serverIP = (string) reader["serverIP"];
- retval.serverPort = (uint) reader["serverPort"];
- retval.serverURI = (string) reader["serverURI"];
- retval.httpPort = Convert.ToUInt32(reader["serverHttpPort"].ToString());
- retval.remotingPort = Convert.ToUInt32(reader["serverRemotingPort"].ToString());
-
- // Location
- retval.regionLocX = Convert.ToUInt32(reader["locX"].ToString());
- retval.regionLocY = Convert.ToUInt32(reader["locY"].ToString());
- retval.regionLocZ = Convert.ToUInt32(reader["locZ"].ToString());
-
- // Neighbours - 0 = No Override
- retval.regionEastOverrideHandle = Convert.ToUInt64(reader["eastOverrideHandle"].ToString());
- retval.regionWestOverrideHandle = Convert.ToUInt64(reader["westOverrideHandle"].ToString());
- retval.regionSouthOverrideHandle = Convert.ToUInt64(reader["southOverrideHandle"].ToString());
- retval.regionNorthOverrideHandle = Convert.ToUInt64(reader["northOverrideHandle"].ToString());
-
- // Assets
- retval.regionAssetURI = (string) reader["regionAssetURI"];
- retval.regionAssetRecvKey = (string) reader["regionAssetRecvKey"];
- retval.regionAssetSendKey = (string) reader["regionAssetSendKey"];
-
- // Userserver
- retval.regionUserURI = (string) reader["regionUserURI"];
- retval.regionUserRecvKey = (string) reader["regionUserRecvKey"];
- retval.regionUserSendKey = (string) reader["regionUserSendKey"];
-
- // World Map Addition
- UUID.TryParse((string)reader["regionMapTexture"], out retval.regionMapTextureID);
- UUID.TryParse((string)reader["owner_uuid"], out retval.owner_uuid);
- retval.maturity = Convert.ToUInt32(reader["access"]);
- }
- else
- {
- return null;
- }
- return retval;
- }
-
- ///
- /// Reads a reservation row from a database reader
- ///
- /// An active database reader
- /// A reservation data object
- public ReservationData readReservationRow(IDataReader reader)
- {
- ReservationData retval = new ReservationData();
- if (reader.Read())
- {
- retval.gridRecvKey = (string) reader["gridRecvKey"];
- retval.gridSendKey = (string) reader["gridSendKey"];
- retval.reservationCompany = (string) reader["resCompany"];
- retval.reservationMaxX = Convert.ToInt32(reader["resXMax"].ToString());
- retval.reservationMaxY = Convert.ToInt32(reader["resYMax"].ToString());
- retval.reservationMinX = Convert.ToInt32(reader["resXMin"].ToString());
- retval.reservationMinY = Convert.ToInt32(reader["resYMin"].ToString());
- retval.reservationName = (string) reader["resName"];
- retval.status = Convert.ToInt32(reader["status"].ToString()) == 1;
- UUID tmp;
- UUID.TryParse((string) reader["userUUID"], out tmp);
- retval.userUUID = tmp;
- }
- else
- {
- return null;
- }
- return retval;
- }
-
- ///
- /// Reads an agent row from a database reader
- ///
- /// An active database reader
- /// A user session agent
- public UserAgentData readAgentRow(IDataReader reader)
- {
- UserAgentData retval = new UserAgentData();
-
- if (reader.Read())
- {
- // Agent IDs
- UUID tmp;
- if (!UUID.TryParse((string)reader["UUID"], out tmp))
- return null;
- retval.ProfileID = tmp;
-
- UUID.TryParse((string) reader["sessionID"], out tmp);
- retval.SessionID = tmp;
-
- UUID.TryParse((string)reader["secureSessionID"], out tmp);
- retval.SecureSessionID = tmp;
-
- // Agent Who?
- retval.AgentIP = (string) reader["agentIP"];
- retval.AgentPort = Convert.ToUInt32(reader["agentPort"].ToString());
- retval.AgentOnline = Convert.ToBoolean(Convert.ToInt16(reader["agentOnline"].ToString()));
-
- // Login/Logout times (UNIX Epoch)
- retval.LoginTime = Convert.ToInt32(reader["loginTime"].ToString());
- retval.LogoutTime = Convert.ToInt32(reader["logoutTime"].ToString());
-
- // Current position
- retval.Region = new UUID((string)reader["currentRegion"]);
- retval.Handle = Convert.ToUInt64(reader["currentHandle"].ToString());
- Vector3 tmp_v;
- Vector3.TryParse((string) reader["currentPos"], out tmp_v);
- retval.Position = tmp_v;
- Vector3.TryParse((string)reader["currentLookAt"], out tmp_v);
- retval.LookAt = tmp_v;
- }
- else
- {
- return null;
- }
- return retval;
- }
-
- ///
- /// Reads a user profile from an active data reader
- ///
- /// An active database reader
- /// A user profile
- public UserProfileData readUserRow(IDataReader reader)
- {
- UserProfileData retval = new UserProfileData();
-
- if (reader.Read())
- {
- UUID id;
- if (!UUID.TryParse((string)reader["UUID"], out id))
- return null;
-
- retval.ID = id;
- retval.FirstName = (string) reader["username"];
- retval.SurName = (string) reader["lastname"];
- retval.Email = (reader.IsDBNull(reader.GetOrdinal("email"))) ? "" : (string) reader["email"];
-
- retval.PasswordHash = (string) reader["passwordHash"];
- retval.PasswordSalt = (string) reader["passwordSalt"];
-
- retval.HomeRegion = Convert.ToUInt64(reader["homeRegion"].ToString());
- retval.HomeLocation = new Vector3(
- Convert.ToSingle(reader["homeLocationX"].ToString()),
- Convert.ToSingle(reader["homeLocationY"].ToString()),
- Convert.ToSingle(reader["homeLocationZ"].ToString()));
- retval.HomeLookAt = new Vector3(
- Convert.ToSingle(reader["homeLookAtX"].ToString()),
- Convert.ToSingle(reader["homeLookAtY"].ToString()),
- Convert.ToSingle(reader["homeLookAtZ"].ToString()));
-
- UUID regionID = UUID.Zero;
- UUID.TryParse(reader["homeRegionID"].ToString(), out regionID); // it's ok if it doesn't work; just use UUID.Zero
- retval.HomeRegionID = regionID;
-
- retval.Created = Convert.ToInt32(reader["created"].ToString());
- retval.LastLogin = Convert.ToInt32(reader["lastLogin"].ToString());
-
- retval.UserInventoryURI = (string) reader["userInventoryURI"];
- retval.UserAssetURI = (string) reader["userAssetURI"];
-
- retval.CanDoMask = Convert.ToUInt32(reader["profileCanDoMask"].ToString());
- retval.WantDoMask = Convert.ToUInt32(reader["profileWantDoMask"].ToString());
-
- if (reader.IsDBNull(reader.GetOrdinal("profileAboutText")))
- retval.AboutText = "";
- else
- retval.AboutText = (string) reader["profileAboutText"];
-
- if (reader.IsDBNull(reader.GetOrdinal("profileFirstText")))
- retval.FirstLifeAboutText = "";
- else
- retval.FirstLifeAboutText = (string)reader["profileFirstText"];
-
- if (reader.IsDBNull(reader.GetOrdinal("profileImage")))
- retval.Image = UUID.Zero;
- else {
- UUID tmp;
- UUID.TryParse((string)reader["profileImage"], out tmp);
- retval.Image = tmp;
- }
-
- if (reader.IsDBNull(reader.GetOrdinal("profileFirstImage")))
- retval.FirstLifeImage = UUID.Zero;
- else {
- UUID tmp;
- UUID.TryParse((string)reader["profileFirstImage"], out tmp);
- retval.FirstLifeImage = tmp;
- }
-
- if (reader.IsDBNull(reader.GetOrdinal("webLoginKey")))
- {
- retval.WebLoginKey = UUID.Zero;
- }
- else
- {
- UUID tmp;
- UUID.TryParse((string)reader["webLoginKey"], out tmp);
- retval.WebLoginKey = tmp;
- }
-
- retval.UserFlags = Convert.ToInt32(reader["userFlags"].ToString());
- retval.GodLevel = Convert.ToInt32(reader["godLevel"].ToString());
- if (reader.IsDBNull(reader.GetOrdinal("customType")))
- retval.CustomType = "";
- else
- retval.CustomType = reader["customType"].ToString();
-
- if (reader.IsDBNull(reader.GetOrdinal("partner")))
- {
- retval.Partner = UUID.Zero;
- }
- else
- {
- UUID tmp;
- UUID.TryParse((string)reader["partner"], out tmp);
- retval.Partner = tmp;
- }
- }
- else
- {
- return null;
- }
- return retval;
- }
-
- ///
- /// Reads an avatar appearence from an active data reader
- ///
- /// An active database reader
- /// An avatar appearence
- public AvatarAppearance readAppearanceRow(IDataReader reader)
- {
- AvatarAppearance appearance = null;
- if (reader.Read())
- {
- appearance = new AvatarAppearance();
- appearance.Owner = new UUID((string)reader["owner"]);
- appearance.Serial = Convert.ToInt32(reader["serial"]);
- appearance.VisualParams = (byte[])reader["visual_params"];
- appearance.Texture = new Primitive.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length);
- appearance.AvatarHeight = (float)Convert.ToDouble(reader["avatar_height"]);
- appearance.BodyItem = new UUID((string)reader["body_item"]);
- appearance.BodyAsset = new UUID((string)reader["body_asset"]);
- appearance.SkinItem = new UUID((string)reader["skin_item"]);
- appearance.SkinAsset = new UUID((string)reader["skin_asset"]);
- appearance.HairItem = new UUID((string)reader["hair_item"]);
- appearance.HairAsset = new UUID((string)reader["hair_asset"]);
- appearance.EyesItem = new UUID((string)reader["eyes_item"]);
- appearance.EyesAsset = new UUID((string)reader["eyes_asset"]);
- appearance.ShirtItem = new UUID((string)reader["shirt_item"]);
- appearance.ShirtAsset = new UUID((string)reader["shirt_asset"]);
- appearance.PantsItem = new UUID((string)reader["pants_item"]);
- appearance.PantsAsset = new UUID((string)reader["pants_asset"]);
- appearance.ShoesItem = new UUID((string)reader["shoes_item"]);
- appearance.ShoesAsset = new UUID((string)reader["shoes_asset"]);
- appearance.SocksItem = new UUID((string)reader["socks_item"]);
- appearance.SocksAsset = new UUID((string)reader["socks_asset"]);
- appearance.JacketItem = new UUID((string)reader["jacket_item"]);
- appearance.JacketAsset = new UUID((string)reader["jacket_asset"]);
- appearance.GlovesItem = new UUID((string)reader["gloves_item"]);
- appearance.GlovesAsset = new UUID((string)reader["gloves_asset"]);
- appearance.UnderShirtItem = new UUID((string)reader["undershirt_item"]);
- appearance.UnderShirtAsset = new UUID((string)reader["undershirt_asset"]);
- appearance.UnderPantsItem = new UUID((string)reader["underpants_item"]);
- appearance.UnderPantsAsset = new UUID((string)reader["underpants_asset"]);
- appearance.SkirtItem = new UUID((string)reader["skirt_item"]);
- appearance.SkirtAsset = new UUID((string)reader["skirt_asset"]);
- }
- return appearance;
- }
-
- // Read attachment list from data reader
- public Hashtable readAttachments(IDataReader r)
- {
- Hashtable ret = new Hashtable();
-
- while (r.Read())
- {
- int attachpoint = Convert.ToInt32(r["attachpoint"]);
- if (ret.ContainsKey(attachpoint))
- continue;
- Hashtable item = new Hashtable();
- item.Add("item", r["item"].ToString());
- item.Add("asset", r["asset"].ToString());
-
- ret.Add(attachpoint, item);
- }
-
- return ret;
- }
-
- ///
- /// Inserts a new row into the log database
- ///
- /// The daemon which triggered this event
- /// Who were we operating on when this occured (region UUID, user UUID, etc)
- /// The method call where the problem occured
- /// The arguments passed to the method
- /// How critical is this?
- /// Extra message info
- /// Saved successfully?
- public bool insertLogRow(string serverDaemon, string target, string methodCall, string arguments, int priority,
- string logMessage)
- {
- string sql = "INSERT INTO logs (`target`, `server`, `method`, `arguments`, `priority`, `message`) VALUES ";
- sql += "(?target, ?server, ?method, ?arguments, ?priority, ?message)";
-
- Dictionary parameters = new Dictionary();
- parameters["?server"] = serverDaemon;
- parameters["?target"] = target;
- parameters["?method"] = methodCall;
- parameters["?arguments"] = arguments;
- parameters["?priority"] = priority.ToString();
- parameters["?message"] = logMessage;
-
- bool returnval = false;
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- IDbCommand result = Query(dbcon, sql, parameters);
-
- if (result.ExecuteNonQuery() == 1)
- returnval = true;
-
- result.Dispose();
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- return returnval;
- }
-
- ///
- /// Creates a new user and inserts it into the database
- ///
- /// User ID
- /// First part of the login
- /// Second part of the login
- /// A salted hash of the users password
- /// The salt used for the password hash
- /// A regionHandle of the users home region
- /// The UUID of the user's home region
- /// Home region position vector
- /// Home region position vector
- /// Home region position vector
- /// Home region 'look at' vector
- /// Home region 'look at' vector
- /// Home region 'look at' vector
- /// Account created (unix timestamp)
- /// Last login (unix timestamp)
- /// Users inventory URI
- /// Users asset URI
- /// I can do mask
- /// I want to do mask
- /// Profile text
- /// Firstlife text
- /// UUID for profile image
- /// UUID for firstlife image
- /// Ignored
- /// Success?
- public bool insertUserRow(UUID uuid, string username, string lastname, string email, string passwordHash,
- string passwordSalt, UInt64 homeRegion, UUID homeRegionID, float homeLocX, float homeLocY, float homeLocZ,
- float homeLookAtX, float homeLookAtY, float homeLookAtZ, int created, int lastlogin,
- string inventoryURI, string assetURI, uint canDoMask, uint wantDoMask,
- string aboutText, string firstText,
- UUID profileImage, UUID firstImage, UUID webLoginKey, int userFlags, int godLevel, string customType, UUID partner)
- {
- m_log.Debug("[MySQLManager]: Creating profile for \"" + username + " " + lastname + "\" (" + uuid + ")");
- string sql =
- "INSERT INTO users (`UUID`, `username`, `lastname`, `email`, `passwordHash`, `passwordSalt`, `homeRegion`, `homeRegionID`, ";
- sql +=
- "`homeLocationX`, `homeLocationY`, `homeLocationZ`, `homeLookAtX`, `homeLookAtY`, `homeLookAtZ`, `created`, ";
- sql +=
- "`lastLogin`, `userInventoryURI`, `userAssetURI`, `profileCanDoMask`, `profileWantDoMask`, `profileAboutText`, ";
- sql += "`profileFirstText`, `profileImage`, `profileFirstImage`, `webLoginKey`, `userFlags`, `godLevel`, `customType`, `partner`) VALUES ";
-
- sql += "(?UUID, ?username, ?lastname, ?email, ?passwordHash, ?passwordSalt, ?homeRegion, ?homeRegionID, ";
- sql +=
- "?homeLocationX, ?homeLocationY, ?homeLocationZ, ?homeLookAtX, ?homeLookAtY, ?homeLookAtZ, ?created, ";
- sql +=
- "?lastLogin, ?userInventoryURI, ?userAssetURI, ?profileCanDoMask, ?profileWantDoMask, ?profileAboutText, ";
- sql += "?profileFirstText, ?profileImage, ?profileFirstImage, ?webLoginKey, ?userFlags, ?godLevel, ?customType, ?partner)";
-
- Dictionary parameters = new Dictionary();
- parameters["?UUID"] = uuid.ToString();
- parameters["?username"] = username;
- parameters["?lastname"] = lastname;
- parameters["?email"] = email;
- parameters["?passwordHash"] = passwordHash;
- parameters["?passwordSalt"] = passwordSalt;
- parameters["?homeRegion"] = homeRegion;
- parameters["?homeRegionID"] = homeRegionID.ToString();
- parameters["?homeLocationX"] = homeLocX;
- parameters["?homeLocationY"] = homeLocY;
- parameters["?homeLocationZ"] = homeLocZ;
- parameters["?homeLookAtX"] = homeLookAtX;
- parameters["?homeLookAtY"] = homeLookAtY;
- parameters["?homeLookAtZ"] = homeLookAtZ;
- parameters["?created"] = created;
- parameters["?lastLogin"] = lastlogin;
- parameters["?userInventoryURI"] = inventoryURI;
- parameters["?userAssetURI"] = assetURI;
- parameters["?profileCanDoMask"] = canDoMask;
- parameters["?profileWantDoMask"] = wantDoMask;
- parameters["?profileAboutText"] = aboutText;
- parameters["?profileFirstText"] = firstText;
- parameters["?profileImage"] = profileImage.ToString();
- parameters["?profileFirstImage"] = firstImage.ToString();
- parameters["?webLoginKey"] = webLoginKey.ToString();
- parameters["?userFlags"] = userFlags;
- parameters["?godLevel"] = godLevel;
- parameters["?customType"] = customType == null ? "" : customType;
- parameters["?partner"] = partner.ToString();
- bool returnval = false;
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- IDbCommand result = Query(dbcon, sql, parameters);
-
- if (result.ExecuteNonQuery() == 1)
- returnval = true;
-
- result.Dispose();
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- //m_log.Debug("[MySQLManager]: Fetch user retval == " + returnval.ToString());
- return returnval;
- }
-
- ///
- /// Update user data into the database where User ID = uuid
- ///
- /// User ID
- /// First part of the login
- /// Second part of the login
- /// A salted hash of the users password
- /// The salt used for the password hash
- /// A regionHandle of the users home region
- /// Home region position vector
- /// Home region position vector
- /// Home region position vector
- /// Home region 'look at' vector
- /// Home region 'look at' vector
- /// Home region 'look at' vector
- /// Account created (unix timestamp)
- /// Last login (unix timestamp)
- /// Users inventory URI
- /// Users asset URI
- /// I can do mask
- /// I want to do mask
- /// Profile text
- /// Firstlife text
- /// UUID for profile image
- /// UUID for firstlife image
- /// UUID for weblogin Key
- /// Success?
- public bool updateUserRow(UUID uuid, string username, string lastname, string email, string passwordHash,
- string passwordSalt, UInt64 homeRegion, UUID homeRegionID, float homeLocX, float homeLocY, float homeLocZ,
- float homeLookAtX, float homeLookAtY, float homeLookAtZ, int created, int lastlogin,
- string inventoryURI, string assetURI, uint canDoMask, uint wantDoMask,
- string aboutText, string firstText,
- UUID profileImage, UUID firstImage, UUID webLoginKey, int userFlags, int godLevel, string customType, UUID partner)
- {
- string sql = "UPDATE users SET `username` = ?username , `lastname` = ?lastname, `email` = ?email ";
- sql += ", `passwordHash` = ?passwordHash , `passwordSalt` = ?passwordSalt , ";
- sql += "`homeRegion` = ?homeRegion , `homeRegionID` = ?homeRegionID, `homeLocationX` = ?homeLocationX , ";
- sql += "`homeLocationY` = ?homeLocationY , `homeLocationZ` = ?homeLocationZ , ";
- sql += "`homeLookAtX` = ?homeLookAtX , `homeLookAtY` = ?homeLookAtY , ";
- sql += "`homeLookAtZ` = ?homeLookAtZ , `created` = ?created , `lastLogin` = ?lastLogin , ";
- sql += "`userInventoryURI` = ?userInventoryURI , `userAssetURI` = ?userAssetURI , ";
- sql += "`profileCanDoMask` = ?profileCanDoMask , `profileWantDoMask` = ?profileWantDoMask , ";
- sql += "`profileAboutText` = ?profileAboutText , `profileFirstText` = ?profileFirstText, ";
- sql += "`profileImage` = ?profileImage , `profileFirstImage` = ?profileFirstImage , ";
- sql += "`userFlags` = ?userFlags , `godLevel` = ?godLevel , ";
- sql += "`customType` = ?customType , `partner` = ?partner , ";
- sql += "`webLoginKey` = ?webLoginKey WHERE UUID = ?UUID";
-
- Dictionary parameters = new Dictionary();
- parameters["?UUID"] = uuid.ToString();
- parameters["?username"] = username;
- parameters["?lastname"] = lastname;
- parameters["?email"] = email;
- parameters["?passwordHash"] = passwordHash;
- parameters["?passwordSalt"] = passwordSalt;
- parameters["?homeRegion"] = homeRegion;
- parameters["?homeRegionID"] = homeRegionID.ToString();
- parameters["?homeLocationX"] = homeLocX;
- parameters["?homeLocationY"] = homeLocY;
- parameters["?homeLocationZ"] = homeLocZ;
- parameters["?homeLookAtX"] = homeLookAtX;
- parameters["?homeLookAtY"] = homeLookAtY;
- parameters["?homeLookAtZ"] = homeLookAtZ;
- parameters["?created"] = created;
- parameters["?lastLogin"] = lastlogin;
- parameters["?userInventoryURI"] = inventoryURI;
- parameters["?userAssetURI"] = assetURI;
- parameters["?profileCanDoMask"] = canDoMask;
- parameters["?profileWantDoMask"] = wantDoMask;
- parameters["?profileAboutText"] = aboutText;
- parameters["?profileFirstText"] = firstText;
- parameters["?profileImage"] = profileImage.ToString();
- parameters["?profileFirstImage"] = firstImage.ToString();
- parameters["?webLoginKey"] = webLoginKey.ToString();
- parameters["?userFlags"] = userFlags;
- parameters["?godLevel"] = godLevel;
- parameters["?customType"] = customType == null ? "" : customType;
- parameters["?partner"] = partner.ToString();
-
- bool returnval = false;
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- IDbCommand result = Query(dbcon, sql, parameters);
-
- if (result.ExecuteNonQuery() == 1)
- returnval = true;
-
- result.Dispose();
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- //m_log.Debug("[MySQLManager]: update user retval == " + returnval.ToString());
- return returnval;
- }
-
- ///
- /// Inserts a new region into the database
- ///
- /// The region to insert
- /// Success?
- public bool insertRegion(RegionProfileData regiondata)
- {
- bool GRID_ONLY_UPDATE_NECESSARY_DATA = false;
-
- string sql = String.Empty;
- if (GRID_ONLY_UPDATE_NECESSARY_DATA)
- {
- sql += "INSERT INTO ";
- }
- else
- {
- sql += "REPLACE INTO ";
- }
-
- sql += "regions (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";
- sql +=
- "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";
-
- // part of an initial brutish effort to provide accurate information (as per the xml region spec)
- // wrt the ownership of a given region
- // the (very bad) assumption is that this value is being read and handled inconsistently or
- // not at all. Current strategy is to put the code in place to support the validity of this information
- // and to roll forward debugging any issues from that point
- //
- // this particular section of the mod attempts to implement the commit of a supplied value
- // server for the UUID of the region's owner (master avatar). It consists of the addition of the column and value to the relevant sql,
- // as well as the related parameterization
- sql +=
- "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, regionMapTexture, serverHttpPort, serverRemotingPort, owner_uuid, originUUID, access) VALUES ";
-
- sql += "(?regionHandle, ?regionName, ?uuid, ?regionRecvKey, ?regionSecret, ?regionSendKey, ?regionDataURI, ";
- sql +=
- "?serverIP, ?serverPort, ?serverURI, ?locX, ?locY, ?locZ, ?eastOverrideHandle, ?westOverrideHandle, ?southOverrideHandle, ?northOverrideHandle, ?regionAssetURI, ?regionAssetRecvKey, ";
- sql +=
- "?regionAssetSendKey, ?regionUserURI, ?regionUserRecvKey, ?regionUserSendKey, ?regionMapTexture, ?serverHttpPort, ?serverRemotingPort, ?owner_uuid, ?originUUID, ?access)";
-
- if (GRID_ONLY_UPDATE_NECESSARY_DATA)
- {
- sql += "ON DUPLICATE KEY UPDATE serverIP = ?serverIP, serverPort = ?serverPort, serverURI = ?serverURI, owner_uuid - ?owner_uuid;";
- }
- else
- {
- sql += ";";
- }
-
- Dictionary parameters = new Dictionary();
-
- parameters["?regionHandle"] = regiondata.regionHandle.ToString();
- parameters["?regionName"] = regiondata.regionName.ToString();
- parameters["?uuid"] = regiondata.UUID.ToString();
- parameters["?regionRecvKey"] = regiondata.regionRecvKey.ToString();
- parameters["?regionSecret"] = regiondata.regionSecret.ToString();
- parameters["?regionSendKey"] = regiondata.regionSendKey.ToString();
- parameters["?regionDataURI"] = regiondata.regionDataURI.ToString();
- parameters["?serverIP"] = regiondata.serverIP.ToString();
- parameters["?serverPort"] = regiondata.serverPort.ToString();
- parameters["?serverURI"] = regiondata.serverURI.ToString();
- parameters["?locX"] = regiondata.regionLocX.ToString();
- parameters["?locY"] = regiondata.regionLocY.ToString();
- parameters["?locZ"] = regiondata.regionLocZ.ToString();
- parameters["?eastOverrideHandle"] = regiondata.regionEastOverrideHandle.ToString();
- parameters["?westOverrideHandle"] = regiondata.regionWestOverrideHandle.ToString();
- parameters["?northOverrideHandle"] = regiondata.regionNorthOverrideHandle.ToString();
- parameters["?southOverrideHandle"] = regiondata.regionSouthOverrideHandle.ToString();
- parameters["?regionAssetURI"] = regiondata.regionAssetURI.ToString();
- parameters["?regionAssetRecvKey"] = regiondata.regionAssetRecvKey.ToString();
- parameters["?regionAssetSendKey"] = regiondata.regionAssetSendKey.ToString();
- parameters["?regionUserURI"] = regiondata.regionUserURI.ToString();
- parameters["?regionUserRecvKey"] = regiondata.regionUserRecvKey.ToString();
- parameters["?regionUserSendKey"] = regiondata.regionUserSendKey.ToString();
- parameters["?regionMapTexture"] = regiondata.regionMapTextureID.ToString();
- parameters["?serverHttpPort"] = regiondata.httpPort.ToString();
- parameters["?serverRemotingPort"] = regiondata.remotingPort.ToString();
- parameters["?owner_uuid"] = regiondata.owner_uuid.ToString();
- parameters["?originUUID"] = regiondata.originUUID.ToString();
- parameters["?access"] = regiondata.maturity.ToString();
-
- bool returnval = false;
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- IDbCommand result = Query(dbcon, sql, parameters);
-
- // int x;
- // if ((x = result.ExecuteNonQuery()) > 0)
- // {
- // returnval = true;
- // }
- if (result.ExecuteNonQuery() > 0)
- {
- returnval = true;
- }
- result.Dispose();
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- return returnval;
- }
-
- ///
- /// Delete a region from the database
- ///
- /// The region to delete
- /// Success?
- //public bool deleteRegion(RegionProfileData regiondata)
- public bool deleteRegion(string uuid)
- {
- bool returnval = false;
-
- string sql = "DELETE FROM regions WHERE uuid = ?uuid;";
-
- Dictionary parameters = new Dictionary();
-
- try
- {
- parameters["?uuid"] = uuid;
-
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- IDbCommand result = Query(dbcon, sql, parameters);
-
- // int x;
- // if ((x = result.ExecuteNonQuery()) > 0)
- // {
- // returnval = true;
- // }
- if (result.ExecuteNonQuery() > 0)
- {
- returnval = true;
- }
- result.Dispose();
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- return returnval;
- }
-
- ///
- /// Creates a new agent and inserts it into the database
- ///
- /// The agent data to be inserted
- /// Success?
- public bool insertAgentRow(UserAgentData agentdata)
- {
- string sql = String.Empty;
- sql += "REPLACE INTO ";
- sql += "agents (UUID, sessionID, secureSessionID, agentIP, agentPort, agentOnline, loginTime, logoutTime, currentRegion, currentHandle, currentPos, currentLookAt) VALUES ";
- sql += "(?UUID, ?sessionID, ?secureSessionID, ?agentIP, ?agentPort, ?agentOnline, ?loginTime, ?logoutTime, ?currentRegion, ?currentHandle, ?currentPos, ?currentLookAt);";
- Dictionary parameters = new Dictionary();
-
- parameters["?UUID"] = agentdata.ProfileID.ToString();
- parameters["?sessionID"] = agentdata.SessionID.ToString();
- parameters["?secureSessionID"] = agentdata.SecureSessionID.ToString();
- parameters["?agentIP"] = agentdata.AgentIP.ToString();
- parameters["?agentPort"] = agentdata.AgentPort.ToString();
- parameters["?agentOnline"] = (agentdata.AgentOnline == true) ? "1" : "0";
- parameters["?loginTime"] = agentdata.LoginTime.ToString();
- parameters["?logoutTime"] = agentdata.LogoutTime.ToString();
- parameters["?currentRegion"] = agentdata.Region.ToString();
- parameters["?currentHandle"] = agentdata.Handle.ToString();
- parameters["?currentPos"] = "<" + (agentdata.Position.X).ToString().Replace(",", ".") + "," + (agentdata.Position.Y).ToString().Replace(",", ".") + "," + (agentdata.Position.Z).ToString().Replace(",", ".") + ">";
- parameters["?currentLookAt"] = "<" + (agentdata.LookAt.X).ToString().Replace(",", ".") + "," + (agentdata.LookAt.Y).ToString().Replace(",", ".") + "," + (agentdata.LookAt.Z).ToString().Replace(",", ".") + ">";
-
- bool returnval = false;
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- IDbCommand result = Query(dbcon, sql, parameters);
-
- // int x;
- // if ((x = result.ExecuteNonQuery()) > 0)
- // {
- // returnval = true;
- // }
- if (result.ExecuteNonQuery() > 0)
- {
- returnval = true;
- }
- result.Dispose();
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- return returnval;
- }
-
- ///
- /// Create (or replace if existing) an avatar appearence
- ///
- ///
- /// Succes?
- public bool insertAppearanceRow(AvatarAppearance appearance)
- {
- string sql = String.Empty;
- sql += "REPLACE INTO ";
- sql += "avatarappearance (owner, serial, visual_params, texture, avatar_height, ";
- sql += "body_item, body_asset, skin_item, skin_asset, hair_item, hair_asset, eyes_item, eyes_asset, ";
- sql += "shirt_item, shirt_asset, pants_item, pants_asset, shoes_item, shoes_asset, socks_item, socks_asset, ";
- sql += "jacket_item, jacket_asset, gloves_item, gloves_asset, undershirt_item, undershirt_asset, underpants_item, underpants_asset, ";
- sql += "skirt_item, skirt_asset) values (";
- sql += "?owner, ?serial, ?visual_params, ?texture, ?avatar_height, ";
- sql += "?body_item, ?body_asset, ?skin_item, ?skin_asset, ?hair_item, ?hair_asset, ?eyes_item, ?eyes_asset, ";
- sql += "?shirt_item, ?shirt_asset, ?pants_item, ?pants_asset, ?shoes_item, ?shoes_asset, ?socks_item, ?socks_asset, ";
- sql += "?jacket_item, ?jacket_asset, ?gloves_item, ?gloves_asset, ?undershirt_item, ?undershirt_asset, ?underpants_item, ?underpants_asset, ";
- sql += "?skirt_item, ?skirt_asset)";
-
- bool returnval = false;
-
- // we want to send in byte data, which means we can't just pass down strings
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- using (MySqlCommand cmd = (MySqlCommand)dbcon.CreateCommand())
- {
- cmd.CommandText = sql;
- cmd.Parameters.AddWithValue("?owner", appearance.Owner.ToString());
- cmd.Parameters.AddWithValue("?serial", appearance.Serial);
- cmd.Parameters.AddWithValue("?visual_params", appearance.VisualParams);
- cmd.Parameters.AddWithValue("?texture", appearance.Texture.GetBytes());
- cmd.Parameters.AddWithValue("?avatar_height", appearance.AvatarHeight);
- cmd.Parameters.AddWithValue("?body_item", appearance.BodyItem.ToString());
- cmd.Parameters.AddWithValue("?body_asset", appearance.BodyAsset.ToString());
- cmd.Parameters.AddWithValue("?skin_item", appearance.SkinItem.ToString());
- cmd.Parameters.AddWithValue("?skin_asset", appearance.SkinAsset.ToString());
- cmd.Parameters.AddWithValue("?hair_item", appearance.HairItem.ToString());
- cmd.Parameters.AddWithValue("?hair_asset", appearance.HairAsset.ToString());
- cmd.Parameters.AddWithValue("?eyes_item", appearance.EyesItem.ToString());
- cmd.Parameters.AddWithValue("?eyes_asset", appearance.EyesAsset.ToString());
- cmd.Parameters.AddWithValue("?shirt_item", appearance.ShirtItem.ToString());
- cmd.Parameters.AddWithValue("?shirt_asset", appearance.ShirtAsset.ToString());
- cmd.Parameters.AddWithValue("?pants_item", appearance.PantsItem.ToString());
- cmd.Parameters.AddWithValue("?pants_asset", appearance.PantsAsset.ToString());
- cmd.Parameters.AddWithValue("?shoes_item", appearance.ShoesItem.ToString());
- cmd.Parameters.AddWithValue("?shoes_asset", appearance.ShoesAsset.ToString());
- cmd.Parameters.AddWithValue("?socks_item", appearance.SocksItem.ToString());
- cmd.Parameters.AddWithValue("?socks_asset", appearance.SocksAsset.ToString());
- cmd.Parameters.AddWithValue("?jacket_item", appearance.JacketItem.ToString());
- cmd.Parameters.AddWithValue("?jacket_asset", appearance.JacketAsset.ToString());
- cmd.Parameters.AddWithValue("?gloves_item", appearance.GlovesItem.ToString());
- cmd.Parameters.AddWithValue("?gloves_asset", appearance.GlovesAsset.ToString());
- cmd.Parameters.AddWithValue("?undershirt_item", appearance.UnderShirtItem.ToString());
- cmd.Parameters.AddWithValue("?undershirt_asset", appearance.UnderShirtAsset.ToString());
- cmd.Parameters.AddWithValue("?underpants_item", appearance.UnderPantsItem.ToString());
- cmd.Parameters.AddWithValue("?underpants_asset", appearance.UnderPantsAsset.ToString());
- cmd.Parameters.AddWithValue("?skirt_item", appearance.SkirtItem.ToString());
- cmd.Parameters.AddWithValue("?skirt_asset", appearance.SkirtAsset.ToString());
-
- if (cmd.ExecuteNonQuery() > 0)
- returnval = true;
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.ToString());
- return false;
- }
-
- return returnval;
-
- }
-
- public void writeAttachments(UUID agentID, Hashtable data)
- {
- string sql = "delete from avatarattachments where UUID = ?uuid";
-
- using (MySqlConnection dbcon = new MySqlConnection(connectionString))
- {
- dbcon.Open();
-
- MySqlCommand cmd = (MySqlCommand)dbcon.CreateCommand();
- cmd.CommandText = sql;
- cmd.Parameters.AddWithValue("?uuid", agentID.ToString());
-
- cmd.ExecuteNonQuery();
-
- if (data == null)
- return;
-
- sql = "insert into avatarattachments (UUID, attachpoint, item, asset) values (?uuid, ?attachpoint, ?item, ?asset)";
-
- cmd = (MySqlCommand)dbcon.CreateCommand();
- cmd.CommandText = sql;
-
- foreach (DictionaryEntry e in data)
- {
- int attachpoint = Convert.ToInt32(e.Key);
-
- Hashtable item = (Hashtable)e.Value;
-
- cmd.Parameters.Clear();
- cmd.Parameters.AddWithValue("?uuid", agentID.ToString());
- cmd.Parameters.AddWithValue("?attachpoint", attachpoint);
- cmd.Parameters.AddWithValue("?item", item["item"]);
- cmd.Parameters.AddWithValue("?asset", item["asset"]);
-
- cmd.ExecuteNonQuery();
- }
- }
- }
- }
-}
diff --git a/OpenSim/Data/MySQL/MySQLSuperManager.cs b/OpenSim/Data/MySQL/MySQLSuperManager.cs
deleted file mode 100644
index c579432..0000000
--- a/OpenSim/Data/MySQL/MySQLSuperManager.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System.Threading;
-
-namespace OpenSim.Data.MySQL
-{
- public class MySQLSuperManager
- {
- public bool Locked;
- private readonly Mutex m_lock = new Mutex(false);
- public MySQLManager Manager;
- public string Running;
-
- public void GetLock()
- {
- Locked = true;
- m_lock.WaitOne();
- }
-
- public void Release()
- {
- m_lock.ReleaseMutex();
- Locked = false;
- }
-
- }
-}
diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs
deleted file mode 100644
index 0a9d2e3..0000000
--- a/OpenSim/Data/MySQL/MySQLUserData.cs
+++ /dev/null
@@ -1,766 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Data;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using System.Threading;
-using log4net;
-using MySql.Data.MySqlClient;
-using OpenMetaverse;
-using OpenSim.Framework;
-
-namespace OpenSim.Data.MySQL
-{
- ///
- /// A database interface class to a user profile storage system
- ///
- public class MySQLUserData : UserDataBase
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- private MySQLManager m_database;
- private string m_connectionString;
- private object m_dbLock = new object();
-
- public int m_maxConnections = 10;
- public int m_lastConnect;
-
- private string m_agentsTableName = "agents";
- private string m_usersTableName = "users";
- private string m_userFriendsTableName = "userfriends";
- private string m_appearanceTableName = "avatarappearance";
- private string m_attachmentsTableName = "avatarattachments";
-
- public override void Initialise()
- {
- m_log.Info("[MySQLUserData]: " + Name + " cannot be default-initialized!");
- throw new PluginNotInitialisedException(Name);
- }
-
- ///
- /// Initialise User Interface
- /// Loads and initialises the MySQL storage plugin
- /// Warns and uses the obsolete mysql_connection.ini if connect string is empty.
- /// Checks for migration
- ///
- /// connect string.
- public override void Initialise(string connect)
- {
- m_connectionString = connect;
- m_database = new MySQLManager(connect);
-
- // This actually does the roll forward assembly stuff
- Assembly assem = GetType().Assembly;
-
- using (MySql.Data.MySqlClient.MySqlConnection dbcon = new MySql.Data.MySqlClient.MySqlConnection(m_connectionString))
- {
- dbcon.Open();
- Migration m = new Migration(dbcon, assem, "UserStore");
- m.Update();
- }
- }
-
- public override void Dispose()
- {
- }
-
- // see IUserDataPlugin
- public override UserProfileData GetUserByName(string user, string last)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?first"] = user;
- param["?second"] = last;
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- UserProfileData row = m_database.readUserRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- #region User Friends List Data
-
- public override void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms)
- {
- int dtvalue = Util.UnixTimeSinceEpoch();
-
- Dictionary param = new Dictionary();
- param["?ownerID"] = friendlistowner.ToString();
- param["?friendID"] = friend.ToString();
- param["?friendPerms"] = perms.ToString();
- param["?datetimestamp"] = dtvalue.ToString();
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand adder = m_database.Query(dbcon,
- "INSERT INTO `" + m_userFriendsTableName + "` " +
- "(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
- "VALUES " +
- "(?ownerID,?friendID,?friendPerms,?datetimestamp)",
- param))
- {
- adder.ExecuteNonQuery();
- }
-
- using (IDbCommand adder = m_database.Query(dbcon,
- "INSERT INTO `" + m_userFriendsTableName + "` " +
- "(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
- "VALUES " +
- "(?friendID,?ownerID,?friendPerms,?datetimestamp)",
- param))
- {
- adder.ExecuteNonQuery();
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return;
- }
- }
-
- public override void RemoveUserFriend(UUID friendlistowner, UUID friend)
- {
- Dictionary param = new Dictionary();
- param["?ownerID"] = friendlistowner.ToString();
- param["?friendID"] = friend.ToString();
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand updater = m_database.Query(dbcon,
- "delete from " + m_userFriendsTableName + " where ownerID = ?ownerID and friendID = ?friendID",
- param))
- {
- updater.ExecuteNonQuery();
- }
-
- using (IDbCommand updater = m_database.Query(dbcon,
- "delete from " + m_userFriendsTableName + " where ownerID = ?friendID and friendID = ?ownerID",
- param))
- {
- updater.ExecuteNonQuery();
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return;
- }
- }
-
- public override void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
- {
- Dictionary param = new Dictionary();
- param["?ownerID"] = friendlistowner.ToString();
- param["?friendID"] = friend.ToString();
- param["?friendPerms"] = perms.ToString();
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand updater = m_database.Query(dbcon,
- "update " + m_userFriendsTableName +
- " SET friendPerms = ?friendPerms " +
- "where ownerID = ?ownerID and friendID = ?friendID",
- param))
- {
- updater.ExecuteNonQuery();
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return;
- }
- }
-
- public override List GetUserFriendList(UUID friendlistowner)
- {
- List Lfli = new List();
-
- Dictionary param = new Dictionary();
- param["?ownerID"] = friendlistowner.ToString();
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- //Left Join userfriends to itself
- using (IDbCommand result = m_database.Query(dbcon,
- "select a.ownerID,a.friendID,a.friendPerms,b.friendPerms as ownerperms from " +
- m_userFriendsTableName + " as a, " + m_userFriendsTableName + " as b" +
- " where a.ownerID = ?ownerID and b.ownerID = a.friendID and b.friendID = a.ownerID",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- while (reader.Read())
- {
- 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
- fli.FriendListOwnerPerms = (uint)Convert.ToInt32(reader["ownerperms"]);
-
- Lfli.Add(fli);
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return Lfli;
- }
-
- return Lfli;
- }
-
- override public Dictionary GetFriendRegionInfos (List uuids)
- {
- Dictionary infos = new Dictionary();
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- foreach (UUID uuid in uuids)
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = uuid.ToString();
-
- using (IDbCommand result = m_database.Query(dbcon, "select agentOnline,currentHandle from " + m_agentsTableName +
- " where UUID = ?uuid", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- while (reader.Read())
- {
- FriendRegionInfo fri = new FriendRegionInfo();
- fri.isOnline = (sbyte)reader["agentOnline"] != 0;
- fri.regionHandle = (ulong)reader["currentHandle"];
-
- infos[uuid] = fri;
- }
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Warn("[MYSQL]: Got exception on trying to find friends regions:", e);
- m_log.Error(e.Message, e);
- }
-
- return infos;
- }
-
- #endregion
-
- public override List GeneratePickerResults(UUID queryID, string query)
- {
- List returnlist = new List();
-
- Regex objAlphaNumericPattern = new Regex("[^a-zA-Z0-9]");
-
- string[] querysplit;
- querysplit = query.Split(' ');
- if (querysplit.Length > 1 && querysplit[1].Trim() != String.Empty)
- {
- Dictionary param = new Dictionary();
- param["?first"] = objAlphaNumericPattern.Replace(querysplit[0], String.Empty) + "%";
- param["?second"] = objAlphaNumericPattern.Replace(querysplit[1], String.Empty) + "%";
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT UUID,username,lastname FROM " + m_usersTableName +
- " WHERE username like ?first AND lastname like ?second LIMIT 100",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- while (reader.Read())
- {
- AvatarPickerAvatar user = new AvatarPickerAvatar();
- user.AvatarID = new UUID((string)reader["UUID"]);
- user.firstName = (string)reader["username"];
- user.lastName = (string)reader["lastname"];
- returnlist.Add(user);
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return returnlist;
- }
- }
- else
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?first"] = objAlphaNumericPattern.Replace(querysplit[0], String.Empty) + "%";
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT UUID,username,lastname FROM " + m_usersTableName +
- " WHERE username like ?first OR lastname like ?first LIMIT 100",
- param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- while (reader.Read())
- {
- AvatarPickerAvatar user = new AvatarPickerAvatar();
- user.AvatarID = new UUID((string)reader["UUID"]);
- user.firstName = (string)reader["username"];
- user.lastName = (string)reader["lastname"];
- returnlist.Add(user);
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return returnlist;
- }
- }
- return returnlist;
- }
-
- ///
- /// See IUserDataPlugin
- ///
- /// User UUID
- /// User profile data
- public override UserProfileData GetUserByUUID(UUID uuid)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = uuid.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM " + m_usersTableName + " WHERE UUID = ?uuid", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- UserProfileData row = m_database.readUserRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Returns a user session searching by name
- ///
- /// The account name : "Username Lastname"
- /// The users session
- public override UserAgentData GetAgentByName(string name)
- {
- return GetAgentByName(name.Split(' ')[0], name.Split(' ')[1]);
- }
-
- ///
- /// Returns a user session by account name
- ///
- /// First part of the users account name
- /// Second part of the users account name
- /// The users session
- public override UserAgentData GetAgentByName(string user, string last)
- {
- UserProfileData profile = GetUserByName(user, last);
- return GetAgentByUUID(profile.ID);
- }
-
- ///
- ///
- ///
- ///
- /// is it still used ?
- public override void StoreWebLoginKey(UUID AgentID, UUID WebLoginKey)
- {
- Dictionary param = new Dictionary();
- param["?UUID"] = AgentID.ToString();
- param["?webLoginKey"] = WebLoginKey.ToString();
-
- try
- {
- m_database.ExecuteParameterizedSql(
- "update " + m_usersTableName + " SET webLoginKey = ?webLoginKey " +
- "where UUID = ?UUID",
- param);
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return;
- }
- }
-
- ///
- /// Returns an agent session by account UUID
- ///
- /// The accounts UUID
- /// The users session
- public override UserAgentData GetAgentByUUID(UUID uuid)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = uuid.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- UserAgentData row = m_database.readAgentRow(reader);
- return row;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Creates a new users profile
- ///
- /// The user profile to create
- public override void AddNewUserProfile(UserProfileData user)
- {
- UUID zero = UUID.Zero;
- if (user.ID == zero)
- {
- return;
- }
-
- try
- {
- m_database.insertUserRow(
- user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
- user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
- user.HomeLocation.Z,
- user.HomeLookAt.X, user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created,
- user.LastLogin, user.UserInventoryURI, user.UserAssetURI,
- user.CanDoMask, user.WantDoMask,
- user.AboutText, user.FirstLifeAboutText, user.Image,
- user.FirstLifeImage, user.WebLoginKey, user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- }
- }
-
- ///
- /// Creates a new agent
- ///
- /// The agent to create
- public override void AddNewUserAgent(UserAgentData agent)
- {
- UUID zero = UUID.Zero;
- if (agent.ProfileID == zero || agent.SessionID == zero)
- return;
-
- try
- {
- m_database.insertAgentRow(agent);
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- }
- }
-
- ///
- /// Updates a user profile stored in the DB
- ///
- /// The profile data to use to update the DB
- public override bool UpdateUserProfile(UserProfileData user)
- {
- try
- {
- m_database.updateUserRow(
- user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
- user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
- user.HomeLocation.Z, user.HomeLookAt.X,
- user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created, user.LastLogin,
- user.UserInventoryURI,
- user.UserAssetURI, user.CanDoMask, user.WantDoMask, user.AboutText,
- user.FirstLifeAboutText, user.Image, user.FirstLifeImage, user.WebLoginKey,
- user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
-
- return true;
- }
- catch
- {
- return false;
- }
- }
-
- ///
- /// Performs a money transfer request between two accounts
- ///
- /// The senders account ID
- /// The receivers account ID
- /// The amount to transfer
- /// Success?
- public override bool MoneyTransferRequest(UUID from, UUID to, uint amount)
- {
- return false;
- }
-
- ///
- /// Performs an inventory transfer request between two accounts
- ///
- /// TODO: Move to inventory server
- /// The senders account ID
- /// The receivers account ID
- /// The item to transfer
- /// Success?
- public override bool InventoryTransferRequest(UUID from, UUID to, UUID item)
- {
- return false;
- }
-
- public override AvatarAppearance GetUserAppearance(UUID user)
- {
- try
- {
- Dictionary param = new Dictionary();
- param["?owner"] = user.ToString();
-
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- AvatarAppearance appearance = m_database.readAppearanceRow(reader);
-
- if (appearance == null)
- {
- m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString());
- return null;
- }
- else
- {
- appearance.SetAttachments(GetUserAttachments(user));
- return appearance;
- }
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- ///
- /// Updates an avatar appearence
- ///
- /// The user UUID
- /// The avatar appearance
- // override
- public override void UpdateUserAppearance(UUID user, AvatarAppearance appearance)
- {
- try
- {
- appearance.Owner = user;
- m_database.insertAppearanceRow(appearance);
-
- UpdateUserAttachments(user, appearance.GetAttachments());
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- }
- }
-
- ///
- /// Database provider name
- ///
- /// Provider name
- public override string Name
- {
- get { return "MySQL Userdata Interface"; }
- }
-
- ///
- /// Database provider version
- ///
- /// provider version
- public override string Version
- {
- get { return "0.1"; }
- }
-
- public Hashtable GetUserAttachments(UUID agentID)
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = agentID.ToString();
-
- try
- {
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
- {
- dbcon.Open();
-
- using (IDbCommand result = m_database.Query(dbcon,
- "SELECT attachpoint, item, asset from " + m_attachmentsTableName + " WHERE UUID = ?uuid", param))
- {
- using (IDataReader reader = result.ExecuteReader())
- {
- Hashtable ret = m_database.readAttachments(reader);
- return ret;
- }
- }
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return null;
- }
- }
-
- public void UpdateUserAttachments(UUID agentID, Hashtable data)
- {
- m_database.writeAttachments(agentID, data);
- }
-
- public override void ResetAttachments(UUID userID)
- {
- Dictionary param = new Dictionary();
- param["?uuid"] = userID.ToString();
-
- m_database.ExecuteParameterizedSql(
- "UPDATE " + m_attachmentsTableName +
- " SET asset = '00000000-0000-0000-0000-000000000000' WHERE UUID = ?uuid",
- param);
- }
-
- public override void LogoutUsers(UUID regionID)
- {
- Dictionary param = new Dictionary();
- param["?regionID"] = regionID.ToString();
-
- try
- {
- m_database.ExecuteParameterizedSql(
- "update " + m_agentsTableName + " SET agentOnline = 0 " +
- "where currentRegion = ?regionID",
- param);
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return;
- }
- }
- }
-}
diff --git a/OpenSim/Data/MySQL/Tests/MySQLAssetTest.cs b/OpenSim/Data/MySQL/Tests/MySQLAssetTest.cs
index e1d3f81..a46fdf8 100644
--- a/OpenSim/Data/MySQL/Tests/MySQLAssetTest.cs
+++ b/OpenSim/Data/MySQL/Tests/MySQLAssetTest.cs
@@ -31,6 +31,7 @@ using OpenSim.Data.Tests;
using log4net;
using System.Reflection;
using OpenSim.Tests.Common;
+using MySql.Data.MySqlClient;
namespace OpenSim.Data.MySQL.Tests
{
@@ -39,7 +40,7 @@ namespace OpenSim.Data.MySQL.Tests
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public string file;
- public MySQLManager database;
+ private string m_connectionString;
public string connect = "Server=localhost;Port=3306;Database=opensim-nunit;User ID=opensim-nunit;Password=opensim-nunit;Pooling=false;";
[TestFixtureSetUp]
@@ -52,7 +53,6 @@ namespace OpenSim.Data.MySQL.Tests
// tests.
try
{
- database = new MySQLManager(connect);
db = new MySQLAssetData();
db.Initialise(connect);
}
@@ -70,10 +70,22 @@ namespace OpenSim.Data.MySQL.Tests
{
db.Dispose();
}
- if (database != null)
+ ExecuteSql("drop table migrations");
+ ExecuteSql("drop table assets");
+ }
+
+ ///
+ /// Execute a MySqlCommand
+ ///
+ /// sql string to execute
+ private void ExecuteSql(string sql)
+ {
+ using (MySqlConnection dbcon = new MySqlConnection(connect))
{
- database.ExecuteSql("drop table migrations");
- database.ExecuteSql("drop table assets");
+ dbcon.Open();
+
+ MySqlCommand cmd = new MySqlCommand(sql, dbcon);
+ cmd.ExecuteNonQuery();
}
}
}
diff --git a/OpenSim/Data/MySQL/Tests/MySQLEstateTest.cs b/OpenSim/Data/MySQL/Tests/MySQLEstateTest.cs
index 48486b1..01afcae 100644
--- a/OpenSim/Data/MySQL/Tests/MySQLEstateTest.cs
+++ b/OpenSim/Data/MySQL/Tests/MySQLEstateTest.cs
@@ -31,6 +31,8 @@ using OpenSim.Data.Tests;
using log4net;
using System.Reflection;
using OpenSim.Tests.Common;
+using MySql.Data.MySqlClient;
+
namespace OpenSim.Data.MySQL.Tests
{
@@ -39,7 +41,6 @@ namespace OpenSim.Data.MySQL.Tests
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public string file;
- public MySQLManager database;
public string connect = "Server=localhost;Port=3306;Database=opensim-nunit;User ID=opensim-nunit;Password=opensim-nunit;Pooling=false;";
[TestFixtureSetUp]
@@ -52,9 +53,8 @@ namespace OpenSim.Data.MySQL.Tests
// tests.
try
{
- database = new MySQLManager(connect);
// clear db incase to ensure we are in a clean state
- ClearDB(database);
+ ClearDB();
regionDb = new MySQLDataStore();
regionDb.Initialise(connect);
@@ -75,29 +75,41 @@ namespace OpenSim.Data.MySQL.Tests
{
regionDb.Dispose();
}
- ClearDB(database);
+ ClearDB();
}
- private void ClearDB(MySQLManager manager)
+ private void ClearDB()
{
// if a new table is added, it has to be dropped here
- if (manager != null)
+ ExecuteSql("drop table if exists migrations");
+ ExecuteSql("drop table if exists prims");
+ ExecuteSql("drop table if exists primshapes");
+ ExecuteSql("drop table if exists primitems");
+ ExecuteSql("drop table if exists terrain");
+ ExecuteSql("drop table if exists land");
+ ExecuteSql("drop table if exists landaccesslist");
+ ExecuteSql("drop table if exists regionban");
+ ExecuteSql("drop table if exists regionsettings");
+ ExecuteSql("drop table if exists estate_managers");
+ ExecuteSql("drop table if exists estate_groups");
+ ExecuteSql("drop table if exists estate_users");
+ ExecuteSql("drop table if exists estateban");
+ ExecuteSql("drop table if exists estate_settings");
+ ExecuteSql("drop table if exists estate_map");
+ }
+
+ ///
+ /// Execute a MySqlCommand
+ ///
+ /// sql string to execute
+ private void ExecuteSql(string sql)
+ {
+ using (MySqlConnection dbcon = new MySqlConnection(connect))
{
- manager.ExecuteSql("drop table if exists migrations");
- manager.ExecuteSql("drop table if exists prims");
- manager.ExecuteSql("drop table if exists primshapes");
- manager.ExecuteSql("drop table if exists primitems");
- manager.ExecuteSql("drop table if exists terrain");
- manager.ExecuteSql("drop table if exists land");
- manager.ExecuteSql("drop table if exists landaccesslist");
- manager.ExecuteSql("drop table if exists regionban");
- manager.ExecuteSql("drop table if exists regionsettings");
- manager.ExecuteSql("drop table if exists estate_managers");
- manager.ExecuteSql("drop table if exists estate_groups");
- manager.ExecuteSql("drop table if exists estate_users");
- manager.ExecuteSql("drop table if exists estateban");
- manager.ExecuteSql("drop table if exists estate_settings");
- manager.ExecuteSql("drop table if exists estate_map");
+ dbcon.Open();
+
+ MySqlCommand cmd = new MySqlCommand(sql, dbcon);
+ cmd.ExecuteNonQuery();
}
}
}
diff --git a/OpenSim/Data/MySQL/Tests/MySQLGridTest.cs b/OpenSim/Data/MySQL/Tests/MySQLGridTest.cs
deleted file mode 100644
index 8272316..0000000
--- a/OpenSim/Data/MySQL/Tests/MySQLGridTest.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using NUnit.Framework;
-using OpenSim.Data.Tests;
-using log4net;
-using System.Reflection;
-using OpenSim.Tests.Common;
-using MySql.Data.MySqlClient;
-
-namespace OpenSim.Data.MySQL.Tests
-{
- [TestFixture, DatabaseTest]
- public class MySQLGridTest : BasicGridTest
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- public string file;
- public MySQLManager database;
- public string connect = "Server=localhost;Port=3306;Database=opensim-nunit;User ID=opensim-nunit;Password=opensim-nunit;Pooling=false;";
-
- [TestFixtureSetUp]
- public void Init()
- {
- SuperInit();
- // If we manage to connect to the database with the user
- // and password above it is our test database, and run
- // these tests. If anything goes wrong, ignore these
- // tests.
- try
- {
- database = new MySQLManager(connect);
- db = new MySQLGridData();
- db.Initialise(connect);
- }
- catch (Exception e)
- {
- m_log.Error("Exception {0}", e);
- Assert.Ignore();
- }
-
- // This actually does the roll forward assembly stuff
- Assembly assem = GetType().Assembly;
-
- using (MySqlConnection dbcon = new MySqlConnection(connect))
- {
- dbcon.Open();
- Migration m = new Migration(dbcon, assem, "AssetStore");
- m.Update();
- }
- }
-
- [TestFixtureTearDown]
- public void Cleanup()
- {
- m_log.Warn("Cleaning up.");
- if (db != null)
- {
- db.Dispose();
- }
- // if a new table is added, it has to be dropped here
- if (database != null)
- {
- database.ExecuteSql("drop table migrations");
- database.ExecuteSql("drop table regions");
- }
- }
- }
-}
diff --git a/OpenSim/Data/MySQL/Tests/MySQLInventoryTest.cs b/OpenSim/Data/MySQL/Tests/MySQLInventoryTest.cs
index a3a32dc..4575493 100644
--- a/OpenSim/Data/MySQL/Tests/MySQLInventoryTest.cs
+++ b/OpenSim/Data/MySQL/Tests/MySQLInventoryTest.cs
@@ -31,6 +31,8 @@ using OpenSim.Data.Tests;
using log4net;
using System.Reflection;
using OpenSim.Tests.Common;
+using MySql.Data.MySqlClient;
+
namespace OpenSim.Data.MySQL.Tests
{
@@ -39,7 +41,6 @@ namespace OpenSim.Data.MySQL.Tests
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public string file;
- public MySQLManager database;
public string connect = "Server=localhost;Port=3306;Database=opensim-nunit;User ID=opensim-nunit;Password=opensim-nunit;Pooling=false;";
[TestFixtureSetUp]
@@ -52,7 +53,6 @@ namespace OpenSim.Data.MySQL.Tests
// tests.
try
{
- database = new MySQLManager(connect);
DropTables();
db = new MySQLInventoryData();
db.Initialise(connect);
@@ -71,17 +71,29 @@ namespace OpenSim.Data.MySQL.Tests
{
db.Dispose();
}
- if (database != null)
- {
- DropTables();
- }
+ DropTables();
}
private void DropTables()
{
- database.ExecuteSql("drop table IF EXISTS inventoryitems");
- database.ExecuteSql("drop table IF EXISTS inventoryfolders");
- database.ExecuteSql("drop table IF EXISTS migrations");
+ ExecuteSql("drop table IF EXISTS inventoryitems");
+ ExecuteSql("drop table IF EXISTS inventoryfolders");
+ ExecuteSql("drop table IF EXISTS migrations");
+ }
+
+ ///
+ /// Execute a MySqlCommand
+ ///
+ /// sql string to execute
+ private void ExecuteSql(string sql)
+ {
+ using (MySqlConnection dbcon = new MySqlConnection(connect))
+ {
+ dbcon.Open();
+
+ MySqlCommand cmd = new MySqlCommand(sql, dbcon);
+ cmd.ExecuteNonQuery();
+ }
}
}
}
diff --git a/OpenSim/Data/MySQL/Tests/MySQLRegionTest.cs b/OpenSim/Data/MySQL/Tests/MySQLRegionTest.cs
index 0dc8b7d..e7e57e4 100644
--- a/OpenSim/Data/MySQL/Tests/MySQLRegionTest.cs
+++ b/OpenSim/Data/MySQL/Tests/MySQLRegionTest.cs
@@ -31,6 +31,7 @@ using OpenSim.Data.Tests;
using log4net;
using System.Reflection;
using OpenSim.Tests.Common;
+using MySql.Data.MySqlClient;
namespace OpenSim.Data.MySQL.Tests
{
@@ -39,7 +40,6 @@ namespace OpenSim.Data.MySQL.Tests
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public string file;
- public MySQLManager database;
public string connect = "Server=localhost;Port=3306;Database=opensim-nunit;User ID=opensim-nunit;Password=opensim-nunit;Pooling=false;";
[TestFixtureSetUp]
@@ -52,9 +52,8 @@ namespace OpenSim.Data.MySQL.Tests
// tests.
try
{
- database = new MySQLManager(connect);
// this is important in case a previous run ended badly
- ClearDB(database);
+ ClearDB();
db = new MySQLDataStore();
db.Initialise(connect);
@@ -73,28 +72,40 @@ namespace OpenSim.Data.MySQL.Tests
{
db.Dispose();
}
- ClearDB(database);
+ ClearDB();
}
- private void ClearDB(MySQLManager manager)
+ private void ClearDB()
{
- if (manager != null)
+ ExecuteSql("drop table if exists migrations");
+ ExecuteSql("drop table if exists prims");
+ ExecuteSql("drop table if exists primshapes");
+ ExecuteSql("drop table if exists primitems");
+ ExecuteSql("drop table if exists terrain");
+ ExecuteSql("drop table if exists land");
+ ExecuteSql("drop table if exists landaccesslist");
+ ExecuteSql("drop table if exists regionban");
+ ExecuteSql("drop table if exists regionsettings");
+ ExecuteSql("drop table if exists estate_managers");
+ ExecuteSql("drop table if exists estate_groups");
+ ExecuteSql("drop table if exists estate_users");
+ ExecuteSql("drop table if exists estateban");
+ ExecuteSql("drop table if exists estate_settings");
+ ExecuteSql("drop table if exists estate_map");
+ }
+
+ ///
+ /// Execute a MySqlCommand
+ ///
+ /// sql string to execute
+ private void ExecuteSql(string sql)
+ {
+ using (MySqlConnection dbcon = new MySqlConnection(connect))
{
- manager.ExecuteSql("drop table if exists migrations");
- manager.ExecuteSql("drop table if exists prims");
- manager.ExecuteSql("drop table if exists primshapes");
- manager.ExecuteSql("drop table if exists primitems");
- manager.ExecuteSql("drop table if exists terrain");
- manager.ExecuteSql("drop table if exists land");
- manager.ExecuteSql("drop table if exists landaccesslist");
- manager.ExecuteSql("drop table if exists regionban");
- manager.ExecuteSql("drop table if exists regionsettings");
- manager.ExecuteSql("drop table if exists estate_managers");
- manager.ExecuteSql("drop table if exists estate_groups");
- manager.ExecuteSql("drop table if exists estate_users");
- manager.ExecuteSql("drop table if exists estateban");
- manager.ExecuteSql("drop table if exists estate_settings");
- manager.ExecuteSql("drop table if exists estate_map");
+ dbcon.Open();
+
+ MySqlCommand cmd = new MySqlCommand(sql, dbcon);
+ cmd.ExecuteNonQuery();
}
}
}
diff --git a/OpenSim/Data/MySQL/Tests/MySQLUserTest.cs b/OpenSim/Data/MySQL/Tests/MySQLUserTest.cs
deleted file mode 100644
index cf8139a..0000000
--- a/OpenSim/Data/MySQL/Tests/MySQLUserTest.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using NUnit.Framework;
-using OpenSim.Data.Tests;
-using log4net;
-using System.Reflection;
-using OpenSim.Tests.Common;
-
-namespace OpenSim.Data.MySQL.Tests
-{
- [TestFixture, DatabaseTest]
- public class MySQLUserTest : BasicUserTest
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- public string file;
- public MySQLManager database;
- public string connect = "Server=localhost;Port=3306;Database=opensim-nunit;User ID=opensim-nunit;Password=opensim-nunit;Pooling=false;";
-
- [TestFixtureSetUp]
- public void Init()
- {
- SuperInit();
- // If we manage to connect to the database with the user
- // and password above it is our test database, and run
- // these tests. If anything goes wrong, ignore these
- // tests.
- try
- {
- database = new MySQLManager(connect);
- db = new MySQLUserData();
- db.Initialise(connect);
- }
- catch (Exception e)
- {
- m_log.Error("Exception {0}", e);
- Assert.Ignore();
- }
- }
-
- [TestFixtureTearDown]
- public void Cleanup()
- {
- if (db != null)
- {
- db.Dispose();
- }
- // if a new table is added, it has to be dropped here
- if (database != null)
- {
- database.ExecuteSql("drop table migrations");
- database.ExecuteSql("drop table users");
- database.ExecuteSql("drop table userfriends");
- database.ExecuteSql("drop table agents");
- database.ExecuteSql("drop table avatarappearance");
- database.ExecuteSql("drop table avatarattachments");
- }
- }
- }
-}
--
cgit v1.1