diff --git a/OpenSim/Data/AssetDataBase.cs b/OpenSim/Data/AssetDataBase.cs index b30ae73dd6..e3b5c253bc 100644 --- a/OpenSim/Data/AssetDataBase.cs +++ b/OpenSim/Data/AssetDataBase.cs @@ -40,6 +40,7 @@ namespace OpenSim.Data public abstract string Version { get; } public abstract string Name { get; } + public abstract void Initialise(string connect); public abstract void Initialise(); } } diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs index 2029b80ffd..d837e4ee31 100644 --- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs +++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs @@ -191,6 +191,13 @@ namespace OpenSim.Data.MSSQL #region IPlugin Members + override public void Initialise(string connect) + { + // TODO: this would allow you to pass in connnect info as + // a string instead of file, if someone writes the support + Initialise(); + } + override public void Initialise() { IniFile GridDataMySqlFile = new IniFile("mssql_connection.ini"); diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs index 111f7d14f9..b6545d741d 100644 --- a/OpenSim/Data/MySQL/MySQLAssetData.cs +++ b/OpenSim/Data/MySQL/MySQLAssetData.cs @@ -170,6 +170,13 @@ namespace OpenSim.Data.MySQL #region IPlugin Members + override public void Initialise(string connect) + { + // TODO: This will let you pass in the connect string in + // the config, though someone will need to write that. + Initialise(); + } + override public void Initialise() { IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs index db90d09ba6..7bd4a0b899 100644 --- a/OpenSim/Data/NHibernate/NHibernateAssetData.cs +++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs @@ -50,18 +50,24 @@ namespace OpenSim.Data.NHibernate public override void Initialise() { - // TODO: hard coding for sqlite based stuff to begin with, just making it easier to test + Initialise("SQLiteDialect;SqliteClientDriver;URI=file:Asset.db,version=3"); + } + public override void Initialise(string connect) + { + // TODO: hard coding for sqlite based stuff to begin with, just making it easier to test + char[] split = {';'}; + string[] parts = connect.Split(split); + // This is stubbing for now, it will become dynamic later and support different db backends cfg = new Configuration(); cfg.SetProperty(Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider"); cfg.SetProperty(Environment.Dialect, - "NHibernate.Dialect.SQLiteDialect"); + "NHibernate.Dialect." + parts[0]); cfg.SetProperty(Environment.ConnectionDriver, - "NHibernate.Driver.SqliteClientDriver"); - cfg.SetProperty(Environment.ConnectionString, - "URI=file:Asset.db,version=3"); + "NHibernate.Driver." + parts[1]); + cfg.SetProperty(Environment.ConnectionString, parts[2]); cfg.AddAssembly("OpenSim.Data.NHibernate"); HbmSerializer.Default.Validate = true; diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs index 2b63d2be59..0d8b46870f 100644 --- a/OpenSim/Data/SQLite/SQLiteAssetData.cs +++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs @@ -56,9 +56,12 @@ namespace OpenSim.Data.SQLite private SqliteConnection m_conn; - public void Initialise(string dbfile, string dbname) + override public void Initialise(string dbconnect) { - m_conn = new SqliteConnection("URI=file:" + dbfile + ",version=3"); + if (dbconnect == string.Empty) { + dbconnect = "URI=file:AssetStorage.db,version=3"; + } + m_conn = new SqliteConnection(dbconnect); m_conn.Open(); TestTables(m_conn); return; @@ -289,7 +292,7 @@ namespace OpenSim.Data.SQLite override public void Initialise() { - Initialise("AssetStorage.db", ""); + Initialise("URI=file:AssetStorage.db,version=3"); } override public string Name diff --git a/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs b/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs index 1afec70b71..334c5bd48d 100644 --- a/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs +++ b/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs @@ -35,9 +35,9 @@ namespace OpenSim.Framework.Communications.Cache { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public SQLAssetServer(string pluginName) + public SQLAssetServer(string pluginName, string connect) { - AddPlugin(pluginName); + AddPlugin(pluginName, connect); } public SQLAssetServer(IAssetProvider assetProvider) @@ -45,7 +45,7 @@ namespace OpenSim.Framework.Communications.Cache m_assetProvider = assetProvider; } - public void AddPlugin(string FileName) + public void AddPlugin(string FileName, string connect) { m_log.Info("[SQLAssetServer]: AssetStorage: Attempting to load " + FileName); Assembly pluginAssembly = Assembly.LoadFrom(FileName); @@ -61,7 +61,7 @@ namespace OpenSim.Framework.Communications.Cache IAssetProvider plug = (IAssetProvider) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); m_assetProvider = plug; - m_assetProvider.Initialise(); + m_assetProvider.Initialise(connect); m_log.Info("[AssetStorage]: " + "Added " + m_assetProvider.Name + " " + diff --git a/OpenSim/Framework/IAssetProvider.cs b/OpenSim/Framework/IAssetProvider.cs index c9e4c8af37..dcb79ea6f1 100644 --- a/OpenSim/Framework/IAssetProvider.cs +++ b/OpenSim/Framework/IAssetProvider.cs @@ -36,5 +36,6 @@ namespace OpenSim.Framework void UpdateAsset(AssetBase asset); bool ExistsAsset(LLUUID uuid); void CommitAssets(); // force a sync to the database + void Initialise(string connect); } } diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index ad0ee45061..c01fc5a993 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -454,7 +454,7 @@ namespace OpenSim } else { - SQLAssetServer sqlAssetServer = new SQLAssetServer(m_standaloneAssetPlugin); + SQLAssetServer sqlAssetServer = new SQLAssetServer(m_standaloneAssetPlugin, m_standaloneAssetSource); sqlAssetServer.LoadDefaultAssets(); assetServer = sqlAssetServer; } diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index ab7dfe4cd3..bced39189a 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -104,6 +104,8 @@ welcome_message = "Welcome to OpenSim" ; Asset database provider asset_plugin = "OpenSim.Data.SQLite.dll" ; asset_plugin = "OpenSim.Data.MySQL.dll" +; the Asset DB source. This only works for sqlite and nhibernate for now +asset_source = "URI=file:Asset.db,version=3" ; Inventory database provider inventory_plugin = "OpenSim.Data.SQLite.dll"