From 4880bd121e737e0a5c384fddf61bd220c77ef88a Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Wed, 13 Feb 2008 13:39:51 +0000 Subject: * Split out MSSQLManager Test/Init into each provider. * Made regions table name configurable (MSSQL only) * Added a note in ini.example pointing out that the sql resources have to change if you change table names * Removed duplicate picker method from GridData interface [Provided by openlifegrid.com] --- OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs | 127 ++++++--------------- OpenSim/Framework/Data.MSSQL/MSSQLLogData.cs | 15 +++ OpenSim/Framework/Data.MSSQL/MSSQLManager.cs | 67 +---------- OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs | 54 +++++++-- .../Data.MSSQL/Resources/Mssql-regions.sql | 41 +++++++ 5 files changed, 137 insertions(+), 167 deletions(-) create mode 100644 OpenSim/Framework/Data.MSSQL/Resources/Mssql-regions.sql (limited to 'OpenSim/Framework/Data.MSSQL') diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs index 28eec3e..0df88b6 100644 --- a/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs +++ b/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs @@ -47,21 +47,48 @@ namespace OpenSim.Framework.Data.MSSQL /// private MSSQLManager database; + private string m_regionsTableName; + /// /// Initialises the Grid Interface /// public void Initialise() { - IniFile GridDataMySqlFile = new IniFile("mssql_connection.ini"); - string settingDataSource = GridDataMySqlFile.ParseFileReadValue("data_source"); - string settingInitialCatalog = GridDataMySqlFile.ParseFileReadValue("initial_catalog"); - string settingPersistSecurityInfo = GridDataMySqlFile.ParseFileReadValue("persist_security_info"); - string settingUserId = GridDataMySqlFile.ParseFileReadValue("user_id"); - string settingPassword = GridDataMySqlFile.ParseFileReadValue("password"); + IniFile iniFile = new IniFile("mssql_connection.ini"); + + string settingDataSource = iniFile.ParseFileReadValue("data_source"); + string settingInitialCatalog = iniFile.ParseFileReadValue("initial_catalog"); + string settingPersistSecurityInfo = iniFile.ParseFileReadValue("persist_security_info"); + string settingUserId = iniFile.ParseFileReadValue("user_id"); + string settingPassword = iniFile.ParseFileReadValue("password"); + + m_regionsTableName = iniFile.ParseFileReadValue("regionstablename"); + if (m_regionsTableName == null) + { + m_regionsTableName = "regions"; + } database = new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId, settingPassword); + + TestTables(); + } + + private void TestTables() + { + IDbCommand cmd = database.Query("SELECT * FROM "+m_regionsTableName, new Dictionary()); + + try + { + cmd.ExecuteNonQuery(); + cmd.Dispose(); + } + catch (Exception) + { + m_log.Info("[DATASTORE]: MSSQL Database doesn't exist... creating"); + database.ExecuteResourceSql("Mssql-regions.sql"); + } } /// @@ -115,7 +142,7 @@ namespace OpenSim.Framework.Data.MSSQL { Dictionary param = new Dictionary(); param["handle"] = handle.ToString(); - IDbCommand result = database.Query("SELECT * FROM regions WHERE regionHandle = @handle", param); + IDbCommand result = database.Query("SELECT * FROM " + m_regionsTableName + " WHERE regionHandle = @handle", param); reader = result.ExecuteReader(); RegionProfileData row = database.getRegionRow(reader); @@ -134,89 +161,7 @@ namespace OpenSim.Framework.Data.MSSQL return null; } - /// - /// // Returns a list of avatar and UUIDs that match the query - /// - public List GeneratePickerResults(LLUUID queryID, string query) - { - List returnlist = new List(); - string[] querysplit; - querysplit = query.Split(' '); - if (querysplit.Length == 2) - { - try - { - lock (database) - { - Dictionary param = new Dictionary(); - param["first"] = querysplit[0]; - param["second"] = querysplit[1]; - - IDbCommand result = - database.Query( - "SELECT UUID,username,surname FROM users WHERE username = @first AND lastname = @second", - param); - IDataReader reader = result.ExecuteReader(); - - - while (reader.Read()) - { - AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); - user.firstName = (string) reader["username"]; - user.lastName = (string) reader["surname"]; - returnlist.Add(user); - } - reader.Close(); - result.Dispose(); - } - } - catch (Exception e) - { - database.Reconnect(); - m_log.Error(e.ToString()); - return returnlist; - } - } - else if (querysplit.Length == 1) - { - try - { - lock (database) - { - Dictionary param = new Dictionary(); - param["first"] = querysplit[0]; - param["second"] = querysplit[1]; - - IDbCommand result = - database.Query( - "SELECT UUID,username,surname FROM users WHERE username = @first OR lastname = @second", - param); - IDataReader reader = result.ExecuteReader(); - - - while (reader.Read()) - { - AvatarPickerAvatar user = new AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); - user.firstName = (string) reader["username"]; - user.lastName = (string) reader["surname"]; - returnlist.Add(user); - } - reader.Close(); - result.Dispose(); - } - } - catch (Exception e) - { - database.Reconnect(); - m_log.Error(e.ToString()); - return returnlist; - } - } - return returnlist; - } - + /// /// Returns a sim profile from it's UUID /// @@ -226,7 +171,7 @@ namespace OpenSim.Framework.Data.MSSQL { Dictionary param = new Dictionary(); param["uuid"] = uuid.ToString(); - IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = @uuid", param); + IDbCommand result = database.Query("SELECT * FROM " + m_regionsTableName + " WHERE uuid = @uuid", param); IDataReader reader = result.ExecuteReader(); RegionProfileData row = database.getRegionRow(reader); diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLLogData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLLogData.cs index c3ec7c6..1e83496 100644 --- a/OpenSim/Framework/Data.MSSQL/MSSQLLogData.cs +++ b/OpenSim/Framework/Data.MSSQL/MSSQLLogData.cs @@ -25,6 +25,9 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ +using System.Collections.Generic; +using System.Data; + namespace OpenSim.Framework.Data.MSSQL { /// @@ -52,6 +55,18 @@ namespace OpenSim.Framework.Data.MSSQL database = new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId, settingPassword); + + IDbCommand cmd = database.Query("select top 1 * from logs", new Dictionary()); + try + { + cmd.ExecuteNonQuery(); + cmd.Dispose(); + } + catch + { + database.ExecuteResourceSql("Mssql-logs.sql"); + } + } /// diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs b/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs index e54cde1..5c3e94f 100644 --- a/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs +++ b/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs @@ -52,16 +52,8 @@ namespace OpenSim.Framework.Data.MSSQL /// /// Connection string for ADO.net /// - private string connectionString; + private readonly string connectionString; - /// - /// Initialises and creates a new Sql connection and maintains it. - /// - /// The Sql server being connected to - /// The name of the Sql 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'. public MSSQLManager(string dataSource, string initialCatalog, string persistSecurityInfo, string userId, string password) { @@ -71,7 +63,6 @@ namespace OpenSim.Framework.Data.MSSQL ";Persist Security Info=" + persistSecurityInfo + ";User ID=" + userId + ";Password=" + password + ";"; dbcon = new SqlConnection(connectionString); - TestTables(dbcon); dbcon.Open(); } catch (Exception e) @@ -80,61 +71,6 @@ namespace OpenSim.Framework.Data.MSSQL } } - private bool TestTables(IDbConnection conn) - { - IDbCommand cmd = Query("SELECT * FROM regions", new Dictionary()); - //SqlCommand cmd = (SqlCommand)dbcon.CreateCommand(); - //cmd.CommandText = "SELECT * FROM regions"; - try - { - conn.Open(); - cmd.ExecuteNonQuery(); - cmd.Dispose(); - conn.Close(); - } - catch (Exception) - { - m_log.Info("[DATASTORE]: MSSQL Database doesn't exist... creating"); - InitDB(conn); - } - cmd = Query("select top 1 webLoginKey from users", new Dictionary()); - try - { - conn.Open(); - cmd.ExecuteNonQuery(); - cmd.Dispose(); - conn.Close(); - } - catch (Exception) - { - conn.Open(); - cmd = Query("alter table users add column [webLoginKey] varchar(36) default NULL", new Dictionary()); - cmd.ExecuteNonQuery(); - cmd.Dispose(); - conn.Close(); - } - return true; - } - - private void InitDB(IDbConnection conn) - { - string createRegions = defineTable(createRegionsTable()); - Dictionary param = new Dictionary(); - IDbCommand pcmd = Query(createRegions, param); - if (conn.State == ConnectionState.Closed) - { - conn.Open(); - } - pcmd.ExecuteNonQuery(); - pcmd.Dispose(); - - ExecuteResourceSql("Mssql-users.sql"); - ExecuteResourceSql("Mssql-agents.sql"); - ExecuteResourceSql("Mssql-logs.sql"); - - conn.Close(); - } - private DataTable createRegionsTable() { DataTable regions = new DataTable("regions"); @@ -253,7 +189,6 @@ namespace OpenSim.Framework.Data.MSSQL { try { - //string connectionString = "Data Source=WRK-OU-738\\SQLEXPRESS;Initial Catalog=rex;Persist Security Info=True;User ID=sa;Password=rex"; // Close the DB connection dbcon.Close(); // Try reopen it diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs index 60e6df4..aacbb2d 100644 --- a/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs +++ b/OpenSim/Framework/Data.MSSQL/MSSQLUserData.cs @@ -85,8 +85,42 @@ namespace OpenSim.Framework.Data.MSSQL database = new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId, settingPassword); + + if (!TestTables()) + { + database.ExecuteResourceSql("Mssql-agents.sql"); + database.ExecuteResourceSql("Mssql-users.sql"); + database.ExecuteResourceSql("Mssql-userfriends.sql"); + } } + private bool TestTables() + { + IDbCommand cmd = database.Query("select top 1 webLoginKey from "+m_usersTableName, new Dictionary()); + try + { + cmd.ExecuteNonQuery(); + cmd.Dispose(); + } + catch + { + database.Query("alter table "+m_usersTableName+" add column [webLoginKey] varchar(36) default NULL", new Dictionary()); + cmd.ExecuteNonQuery(); + cmd.Dispose(); + } + + cmd = database.Query("select top 1 * from "+m_usersTableName, new Dictionary()); + try + { + cmd.ExecuteNonQuery(); + } + catch + { + return false; + } + + return true; + } /// /// Searches the database for a specified user profile by name components /// @@ -104,7 +138,7 @@ namespace OpenSim.Framework.Data.MSSQL param["second"] = last; IDbCommand result = - database.Query("SELECT * FROM "+m_usersTableName+" WHERE username = @first AND lastname = @second", param); + database.Query("SELECT * FROM " + m_usersTableName + " WHERE username = @first AND lastname = @second", param); IDataReader reader = result.ExecuteReader(); UserProfileData row = database.readUserRow(reader); @@ -153,7 +187,7 @@ namespace OpenSim.Framework.Data.MSSQL m_log.Info("[USER]: Stub UpdateUserCUrrentRegion called"); } - + public List GeneratePickerResults(LLUUID queryID, string query) { @@ -180,9 +214,9 @@ namespace OpenSim.Framework.Data.MSSQL while (reader.Read()) { Framework.AvatarPickerAvatar user = new Framework.AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); - user.firstName = (string) reader["username"]; - user.lastName = (string) reader["surname"]; + user.AvatarID = new LLUUID((string)reader["UUID"]); + user.firstName = (string)reader["username"]; + user.lastName = (string)reader["surname"]; returnlist.Add(user); } reader.Close(); @@ -216,9 +250,9 @@ namespace OpenSim.Framework.Data.MSSQL while (reader.Read()) { Framework.AvatarPickerAvatar user = new Framework.AvatarPickerAvatar(); - user.AvatarID = new LLUUID((string) reader["UUID"]); - user.firstName = (string) reader["username"]; - user.lastName = (string) reader["surname"]; + user.AvatarID = new LLUUID((string)reader["UUID"]); + user.firstName = (string)reader["username"]; + user.lastName = (string)reader["surname"]; returnlist.Add(user); } reader.Close(); @@ -323,7 +357,7 @@ namespace OpenSim.Framework.Data.MSSQL UserProfileData user = GetUserByUUID(AgentID); user.webLoginKey = WebLoginKey; UpdateUserProfile(user); - + } /// /// Creates a new users profile @@ -342,7 +376,7 @@ namespace OpenSim.Framework.Data.MSSQL user.lastLogin, user.userInventoryURI, user.userAssetURI, user.profileCanDoMask, user.profileWantDoMask, user.profileAboutText, user.profileFirstText, user.profileImage, - user.profileFirstImage,user.webLoginKey); + user.profileFirstImage, user.webLoginKey); } } catch (Exception e) diff --git a/OpenSim/Framework/Data.MSSQL/Resources/Mssql-regions.sql b/OpenSim/Framework/Data.MSSQL/Resources/Mssql-regions.sql new file mode 100644 index 0000000..b46da16 --- /dev/null +++ b/OpenSim/Framework/Data.MSSQL/Resources/Mssql-regions.sql @@ -0,0 +1,41 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [db_owner].[regions]( + [regionHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionName] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [uuid] [varchar](255) COLLATE Latin1_General_CI_AS NOT NULL, + [regionRecvKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionSecret] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionSendKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionDataURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [serverIP] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [serverPort] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [serverURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [locX] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [locY] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [locZ] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [eastOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [westOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [southOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [northOverrideHandle] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionAssetURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionAssetRecvKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionAssetSendKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionUserURI] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionUserRecvKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionUserSendKey] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [regionMapTexture] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [serverHttpPort] [varchar](255) COLLATE Latin1_General_CI_AS NULL, + [serverRemotingPort] [varchar](255) COLLATE Latin1_General_CI_AS NULL, +PRIMARY KEY CLUSTERED +( + [uuid] ASC +)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] + +GO +SET ANSI_PADDING OFF -- cgit v1.1