* Added competely untested MSSQLMapper

* Added the new mapper to the mapper factory
* Made choice of mapper configurable
* This means, in hteory, that we can persist avatar appearance on MSSQL as well
0.6.0-stable
lbsa71 2008-03-30 21:04:45 +00:00
parent 8aa4308097
commit f52886f8f5
5 changed files with 99 additions and 8 deletions

View File

@ -0,0 +1,52 @@
/*
* 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 OpenSim 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.Data.Common;
using System.Data.SqlClient;
using OpenSim.Framework.Data;
namespace OpenSim.Framework.Data.MSSQLMapper
{
public class MSSQLDatabaseMapper : OpenSimDatabaseConnector
{
public MSSQLDatabaseMapper(string connectionString)
: base(connectionString)
{
}
public override DbConnection GetNewConnection()
{
SqlConnection connection = new SqlConnection(m_connectionString);
return connection;
}
public override string CreateParamName(string fieldName)
{
return "@" + fieldName;
}
}
}

View File

@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic;
using OpenSim.Framework;
using OpenSim.Framework.Data;
using OpenSim.Framework.Data.Base; using OpenSim.Framework.Data.Base;
using OpenSim.Framework.Data.MSSQLMapper;
using OpenSim.Framework.Data.MySQLMapper; using OpenSim.Framework.Data.MySQLMapper;
namespace OpenSim.Framework.Data.MapperFactory namespace OpenSim.Framework.Data.MapperFactory
@ -10,16 +8,19 @@ namespace OpenSim.Framework.Data.MapperFactory
public class DataMapperFactory public class DataMapperFactory
{ {
public enum MAPPER_TYPE { public enum MAPPER_TYPE {
MYSQL, MySQL,
MSSQL,
}; };
static public BaseDatabaseConnector GetDataBaseMapper(MAPPER_TYPE type, string connectionString) static public BaseDatabaseConnector GetDataBaseMapper(MAPPER_TYPE type, string connectionString)
{ {
switch (type) { switch (type) {
case MAPPER_TYPE.MYSQL: case MAPPER_TYPE.MySQL:
return new MySQLDatabaseMapper(connectionString); return new MySQLDatabaseMapper(connectionString);
case MAPPER_TYPE.MSSQL:
return new MSSQLDatabaseMapper(connectionString);
default: default:
return null; throw new ArgumentException("Unknown Database Mapper type [" + type + "].");
} }
} }
} }

View File

@ -220,14 +220,22 @@ namespace OpenSim.Region.Modules.AvatarFactory
try try
{ {
m_enablePersist = source.Configs["Startup"].GetBoolean("appearance_persist", false); m_enablePersist = source.Configs["Startup"].GetBoolean("appearance_persist", false);
m_connectionString = source.Configs["Startup"].GetString("appearance_connection_string", "");
} }
catch (Exception) catch (Exception)
{ {
} }
if (m_enablePersist) if (m_enablePersist)
{ {
m_databaseMapper = DataMapperFactory.GetDataBaseMapper(DataMapperFactory.MAPPER_TYPE.MYSQL, m_connectionString); m_connectionString = source.Configs["Startup"].GetString("appearance_connection_string", "");
string mapperTypeStr = source.Configs["Startup"].GetString("appearance_database", "MYSQL");
DataMapperFactory.MAPPER_TYPE mapperType =
(DataMapperFactory.MAPPER_TYPE)
Enum.Parse(typeof (DataMapperFactory.MAPPER_TYPE), mapperTypeStr);
m_databaseMapper = DataMapperFactory.GetDataBaseMapper(mapperType, m_connectionString);
m_appearanceMapper = new AppearanceTableMapper(m_databaseMapper, "AvatarAppearance"); m_appearanceMapper = new AppearanceTableMapper(m_databaseMapper, "AvatarAppearance");
} }
} }

View File

@ -30,6 +30,7 @@ storage_prim_inventories = true
; Avatar appearance persistence ; Avatar appearance persistence
appearance_persist = false appearance_persist = false
appearance_database = "MySQL"
appearance_connection_string = "Data Source=localhost;Database=avatar_appearance;User ID=root;Password=xxxx;pooling=false;" appearance_connection_string = "Data Source=localhost;Database=avatar_appearance;User ID=root;Password=xxxx;pooling=false;"
; Select whether you want to use local or grid asset storage. ; Select whether you want to use local or grid asset storage.

View File

@ -234,6 +234,34 @@
</Files> </Files>
</Project> </Project>
<Project name="OpenSim.Framework.Data.MSSQLMapper" path="OpenSim/Framework/Data.MSSQLMapper" type="Library">
<Configuration name="Debug">
<Options>
<OutputPath>../../../bin/</OutputPath>
</Options>
</Configuration>
<Configuration name="Release">
<Options>
<OutputPath>../../../bin/</OutputPath>
</Options>
</Configuration>
<ReferencePath>../../../bin/</ReferencePath>
<Reference name="System" localCopy="false"/>
<Reference name="System.Xml"/>
<Reference name="System.Data"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Data"/>
<Reference name="OpenSim.Framework.Data.Base"/>
<Reference name="libsecondlife.dll"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="log4net"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project name="OpenSim.Framework.Data.MapperFactory" path="OpenSim/Framework/Data.MapperFactory" type="Library"> <Project name="OpenSim.Framework.Data.MapperFactory" path="OpenSim/Framework/Data.MapperFactory" type="Library">
<Configuration name="Debug"> <Configuration name="Debug">
<Options> <Options>
@ -254,6 +282,7 @@
<Reference name="OpenSim.Framework.Data"/> <Reference name="OpenSim.Framework.Data"/>
<Reference name="OpenSim.Framework.Data.Base"/> <Reference name="OpenSim.Framework.Data.Base"/>
<Reference name="OpenSim.Framework.Data.MySQLMapper"/> <Reference name="OpenSim.Framework.Data.MySQLMapper"/>
<Reference name="OpenSim.Framework.Data.MSSQLMapper"/>
<Files> <Files>
<Match pattern="*.cs" recurse="true"/> <Match pattern="*.cs" recurse="true"/>