auto table creation for nhibernate backends
parent
2a2ef42e64
commit
56ef67ec6d
|
@ -28,11 +28,13 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
using libsecondlife;
|
||||
using log4net;
|
||||
using NHibernate;
|
||||
using NHibernate.Cfg;
|
||||
using NHibernate.Mapping.Attributes;
|
||||
using NHibernate.Tool.hbm2ddl;
|
||||
using OpenSim.Framework;
|
||||
using Environment=NHibernate.Cfg.Environment;
|
||||
|
||||
|
@ -58,6 +60,10 @@ namespace OpenSim.Data.NHibernate
|
|||
// Split out the dialect, driver, and connect string
|
||||
char[] split = {';'};
|
||||
string[] parts = connect.Split(split);
|
||||
if (parts.Length != 3) {
|
||||
// TODO: make this a real exception type
|
||||
throw new Exception("Malformed Inventory connection string '" + connect + "'");
|
||||
}
|
||||
|
||||
// NHibernate setup
|
||||
cfg = new Configuration();
|
||||
|
@ -75,13 +81,34 @@ namespace OpenSim.Data.NHibernate
|
|||
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
|
||||
cfg.AddInputStream(stream);
|
||||
|
||||
factory = cfg.BuildSessionFactory();
|
||||
|
||||
// If uncommented this will auto create tables, but it
|
||||
// does drops of the old tables, so we need a smarter way
|
||||
// to acturally manage this.
|
||||
|
||||
// new SchemaExport(cfg).Create(true, true);
|
||||
|
||||
factory = cfg.BuildSessionFactory();
|
||||
InitDB();
|
||||
}
|
||||
|
||||
private void InitDB()
|
||||
{
|
||||
string regex = @"no such table: Assets";
|
||||
Regex RE = new Regex(regex, RegexOptions.Multiline);
|
||||
try {
|
||||
using(ISession session = factory.OpenSession()) {
|
||||
session.Load(typeof(AssetBase), LLUUID.Zero);
|
||||
}
|
||||
} catch (ObjectNotFoundException e) {
|
||||
// yes, we know it's not there, but that's ok
|
||||
} catch (ADOException e) {
|
||||
Match m = RE.Match(e.ToString());
|
||||
if(m.Success) {
|
||||
// We don't have this table, so create it.
|
||||
new SchemaExport(cfg).Create(true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override public AssetBase FetchAsset(LLUUID uuid)
|
||||
|
|
|
@ -29,12 +29,14 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
using libsecondlife;
|
||||
using log4net;
|
||||
using NHibernate;
|
||||
using NHibernate.Cfg;
|
||||
using NHibernate.Expression;
|
||||
using NHibernate.Mapping.Attributes;
|
||||
using NHibernate.Tool.hbm2ddl;
|
||||
using OpenSim.Framework;
|
||||
using Environment=NHibernate.Cfg.Environment;
|
||||
|
||||
|
@ -55,6 +57,10 @@ namespace OpenSim.Data.NHibernate
|
|||
// Split out the dialect, driver, and connect string
|
||||
char[] split = {';'};
|
||||
string[] parts = connect.Split(split);
|
||||
if (parts.Length != 3) {
|
||||
// TODO: make this a real exception type
|
||||
throw new Exception("Malformed Inventory connection string '" + connect + "'");
|
||||
}
|
||||
|
||||
// Establish NHibernate Connection
|
||||
cfg = new Configuration();
|
||||
|
@ -79,8 +85,31 @@ namespace OpenSim.Data.NHibernate
|
|||
// new SchemaExport(cfg).Create(true, true);
|
||||
|
||||
factory = cfg.BuildSessionFactory();
|
||||
|
||||
InitDB();
|
||||
}
|
||||
|
||||
|
||||
private void InitDB()
|
||||
{
|
||||
string regex = @"no such table: Inventory";
|
||||
Regex RE = new Regex(regex, RegexOptions.Multiline);
|
||||
try {
|
||||
using(ISession session = factory.OpenSession()) {
|
||||
session.Load(typeof(InventoryItemBase), LLUUID.Zero);
|
||||
}
|
||||
} catch (ObjectNotFoundException e) {
|
||||
// yes, we know it's not there, but that's ok
|
||||
} catch (ADOException e) {
|
||||
Match m = RE.Match(e.ToString());
|
||||
if(m.Success) {
|
||||
// We don't have this table, so create it.
|
||||
new SchemaExport(cfg).Create(true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
*
|
||||
* Basic CRUD operations on Data
|
||||
|
|
Loading…
Reference in New Issue