* This patch gets NHibernate working
*** PLEASE NOTE: This patch now requires the libmono-oracle2.0-cil library to be installed on Ubuntu (to stop the System.Data.Oracle missing failure) ***
* Not sure what the dependency is on other distros.  Adding this info to http://opensimulator.org/wiki/Build_Instructions would be most welcome
* Adds Castle.* libraries that were missing last time (note, dlls have been added from http://downloads.sourceforge.net/nhibernate/NHibernate-2.0.1.GA-bin.zip)
0.6.1-post-fixes
Justin Clarke Casey 2008-12-02 15:22:58 +00:00
parent 26fd6c741f
commit dde32f1130
24 changed files with 516 additions and 386 deletions

View File

@ -82,6 +82,7 @@ namespace OpenSim.Data
// private static readonly string _migrations_init = "insert into migrations values('migrations', 1)";
// private static readonly string _migrations_find = "select version from migrations where name='migrations'";
public Migration(DbConnection conn, Assembly assem, string type)
{
_type = type;
@ -112,6 +113,7 @@ namespace OpenSim.Data
DbCommand cmd = _conn.CreateCommand();
cmd.CommandText = _migrations_create;
cmd.ExecuteNonQuery();
cmd.Dispose();
InsertVersion("migrations", 1);
}
@ -135,7 +137,7 @@ namespace OpenSim.Data
int newversion = kvp.Key;
cmd.CommandText = kvp.Value;
// we need to up the command timeout to infinite as we might be doing long migrations.
cmd.CommandTimeout = 0;
//cmd.CommandTimeout = 0;
cmd.ExecuteNonQuery();
if (version == 0)
@ -147,6 +149,7 @@ namespace OpenSim.Data
UpdateVersion(_type, newversion);
}
version = newversion;
cmd.Dispose();
}
}
@ -189,7 +192,7 @@ namespace OpenSim.Data
DbCommand cmd = conn.CreateCommand();
try
{
cmd.CommandText = "select version from migrations where name='" + type + "' limit 1";
cmd.CommandText = "select version from migrations where name='" + type +"' order by version desc";
using (IDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
@ -203,6 +206,7 @@ namespace OpenSim.Data
{
// Something went wrong, so we're version 0
}
cmd.Dispose();
return version;
}
@ -212,6 +216,7 @@ namespace OpenSim.Data
cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")";
m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
private void UpdateVersion(string type, int version)
@ -220,6 +225,7 @@ namespace OpenSim.Data
cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'";
m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
// private SortedList<int, string> GetAllMigrations()

View File

@ -78,7 +78,11 @@ namespace OpenSim.Data.NHibernate
int w = rs.GetOrdinal(names[3]);
if (!rs.IsDBNull(x))
{
quat = new Quaternion((Single)rs[x], (Single)rs[y], (Single)rs[z], (Single)rs[w]);
float X = (Single)Convert.ToDouble(rs[x].ToString());
float Y = (Single)Convert.ToDouble(rs[y].ToString());
float Z = (Single)Convert.ToDouble(rs[z].ToString());
float W = (Single)Convert.ToDouble(rs[w].ToString());
quat = new Quaternion(X, Y, Z, W);
}
return quat;
}

View File

@ -74,9 +74,12 @@ namespace OpenSim.Data.NHibernate
int x = rs.GetOrdinal(names[0]);
int y = rs.GetOrdinal(names[1]);
int z = rs.GetOrdinal(names[2]);
if (!rs.IsDBNull(x))
if (!rs.IsDBNull(x) && !rs.IsDBNull(y) && !rs.IsDBNull(z))
{
vector = new Vector3((Single)rs[x], (Single)rs[y], (Single)rs[z]);
float X = (Single)Convert.ToDouble(rs[x].ToString());
float Y = (Single)Convert.ToDouble(rs[y].ToString());
float Z = (Single)Convert.ToDouble(rs[z].ToString());
vector = new Vector3(X, Y, Z);
}
return vector;
}

View File

@ -33,10 +33,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse;
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;
@ -49,9 +46,7 @@ namespace OpenSim.Data.NHibernate
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg;
private ISessionFactory factory;
private ISession session;
private NHibernateManager manager;
override public void Dispose() { }
@ -62,79 +57,23 @@ namespace OpenSim.Data.NHibernate
public override void Initialise(string connect)
{
// Split out the dialect, driver, and connect string
char[] split = {';'};
string[] parts = connect.Split(split, 3);
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Inventory connection string '" + connect + "'");
}
string dialect = parts[0];
// NHibernate setup
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + dialect);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
HbmSerializer.Default.Validate = true;
using (MemoryStream stream =
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
cfg.AddInputStream(stream);
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
// This actually does the roll forward assembly stuff
Assembly assem = GetType().Assembly;
Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, "AssetStore");
m.Update();
m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateAssetData");
manager = new NHibernateManager(connect, "AssetStore");
}
override public AssetBase FetchAsset(UUID uuid)
{
try
{
return session.Load(typeof(AssetBase), uuid) as AssetBase;
}
catch (ObjectNotFoundException)
{
m_log.ErrorFormat("[NHIBERNATE] no such asset {0}", uuid);
return null;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] unexpected exception: ", e);
return null;
}
return (AssetBase)manager.Load(typeof(AssetBase), uuid);
}
private void Save(AssetBase asset)
{
try
AssetBase temp = (AssetBase)manager.Load(typeof(AssetBase), asset.FullID);
if (temp == null)
{
// a is not used anywhere?
// AssetBase a = session.Load(typeof(AssetBase), asset.FullID) as AssetBase;
session.Load(typeof(AssetBase), asset.FullID);
}
catch (ObjectNotFoundException)
{
session.Save(asset);
session.Flush();
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue saving asset", e);
manager.Save(asset);
}
}
@ -147,7 +86,7 @@ namespace OpenSim.Data.NHibernate
override public void UpdateAsset(AssetBase asset)
{
m_log.InfoFormat("[NHIBERNATE] updating asset {0}", asset.FullID);
Save(asset);
manager.Update(asset);
}
// private void LogAssetLoad(AssetBase asset)

View File

@ -33,10 +33,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse;
using log4net;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using NHibernate.Criterion;
using OpenSim.Framework;
using Environment=NHibernate.Cfg.Environment;
@ -46,9 +43,7 @@ namespace OpenSim.Data.NHibernate
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg;
private ISessionFactory factory;
private ISession session;
private NHibernateManager manager;
public void Initialise()
{
@ -61,35 +56,8 @@ namespace OpenSim.Data.NHibernate
/// </summary>
public void Initialise(string connect)
{
// Split out the dialect, driver, and connect string
char[] split = {';'};
string[] parts = connect.Split(split, 3);
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Inventory connection string '" + connect + "'");
}
string dialect = parts[0];
// Establish NHibernate Connection
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + parts[0]);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
// This actually does the roll forward assembly stuff
Assembly assem = GetType().Assembly;
Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, "InventoryStore");
m.Update();
m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateInventoryData");
manager = new NHibernateManager(connect, "InventoryStore");
}
/*****************************************************************
@ -109,7 +77,8 @@ namespace OpenSim.Data.NHibernate
{
try
{
return session.Load(typeof(InventoryItemBase), item) as InventoryItemBase;
m_log.InfoFormat("[NHIBERNATE] getInventoryItem {0}", item);
return (InventoryItemBase)manager.Load(typeof(InventoryItemBase), item);
}
catch
{
@ -126,15 +95,11 @@ namespace OpenSim.Data.NHibernate
{
if (!ExistsItem(item.ID))
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(item);
transaction.Commit();
}
manager.Save(item);
}
else
{
m_log.ErrorFormat("Attempted to add Inventory Item {0} that already exists, updating instead", item.ID);
m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Item {0} that already exists, updating instead", item.ID);
updateInventoryItem(item);
}
}
@ -147,15 +112,11 @@ namespace OpenSim.Data.NHibernate
{
if (ExistsItem(item.ID))
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(item);
transaction.Commit();
}
manager.Update(item);
}
else
{
m_log.ErrorFormat("Attempted to add Inventory Item {0} that already exists", item.ID);
m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Item {0} that already exists", item.ID);
}
}
@ -165,11 +126,16 @@ namespace OpenSim.Data.NHibernate
/// <param name="item"></param>
public void deleteInventoryItem(UUID itemID)
{
using (ITransaction transaction = session.BeginTransaction())
InventoryItemBase item = (InventoryItemBase)manager.Load(typeof(InventoryItemBase), itemID);
if (item != null)
{
session.Delete(itemID);
transaction.Commit();
manager.Delete(item);
}
else
{
m_log.ErrorFormat("[NHIBERNATE] Error deleting InventoryItemBase {0}", itemID);
}
}
/// <summary>
@ -181,11 +147,11 @@ namespace OpenSim.Data.NHibernate
{
try
{
return session.Load(typeof(InventoryFolderBase), folder) as InventoryFolderBase;
return (InventoryFolderBase)manager.Load(typeof(InventoryFolderBase), folder);
}
catch
{
m_log.ErrorFormat("Couldn't find inventory item: {0}", folder);
m_log.ErrorFormat("[NHIBERNATE] Couldn't find inventory item: {0}", folder);
return null;
}
}
@ -198,15 +164,11 @@ namespace OpenSim.Data.NHibernate
{
if (!ExistsFolder(folder.ID))
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(folder);
transaction.Commit();
}
manager.Save(folder);
}
else
{
m_log.ErrorFormat("Attempted to add Inventory Folder {0} that already exists, updating instead", folder.ID);
m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Folder {0} that already exists, updating instead", folder.ID);
updateInventoryFolder(folder);
}
}
@ -219,15 +181,11 @@ namespace OpenSim.Data.NHibernate
{
if (ExistsFolder(folder.ID))
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(folder);
transaction.Commit();
}
manager.Update(folder);
}
else
{
m_log.ErrorFormat("Attempted to add Inventory Folder {0} that already exists", folder.ID);
m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Folder {0} that already exists", folder.ID);
}
}
@ -237,11 +195,16 @@ namespace OpenSim.Data.NHibernate
/// <param name="folder"></param>
public void deleteInventoryFolder(UUID folderID)
{
using (ITransaction transaction = session.BeginTransaction())
InventoryFolderBase item = (InventoryFolderBase)manager.Load(typeof(InventoryFolderBase), folderID);
if (item != null)
{
session.Delete(folderID.ToString());
transaction.Commit();
manager.Delete(item);
}
else
{
m_log.ErrorFormat("[NHIBERNATE] Error deleting InventoryFolderBase {0}", folderID);
}
manager.Delete(folderID);
}
// useful private methods
@ -317,7 +280,7 @@ namespace OpenSim.Data.NHibernate
public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
{
// try {
ICriteria criteria = session.CreateCriteria(typeof(InventoryItemBase));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryItemBase));
criteria.Add(Expression.Eq("Folder", folderID));
List<InventoryItemBase> list = new List<InventoryItemBase>();
foreach (InventoryItemBase item in criteria.List())
@ -340,7 +303,7 @@ namespace OpenSim.Data.NHibernate
// see InventoryItemBase.getUserRootFolder
public InventoryFolderBase getUserRootFolder(UUID user)
{
ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryFolderBase));
criteria.Add(Expression.Eq("ParentID", UUID.Zero));
criteria.Add(Expression.Eq("Owner", user));
foreach (InventoryFolderBase folder in criteria.List())
@ -358,7 +321,7 @@ namespace OpenSim.Data.NHibernate
/// <param name="parentID">ID of parent</param>
private void getInventoryFolders(ref List<InventoryFolderBase> folders, UUID parentID)
{
ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryFolderBase));
criteria.Add(Expression.Eq("ParentID", parentID));
foreach (InventoryFolderBase item in criteria.List())
{

View File

@ -25,35 +25,141 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Reflection;
using System.IO;
using log4net;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using OpenMetaverse;
using Environment = NHibernate.Cfg.Environment;
namespace OpenSim.Data.NHibernate
{
internal class NHibernateManager
public class NHibernateManager
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// private ISessionFactory factory;
// private ISession session;
// private ITransaction transaction;
private string dialect;
private Configuration cfg;
private ISessionFactory factory;
private ISession session;
public NHibernateManager()
public NHibernateManager(string connect, string store)
{
// This is stubbing for now, it will become dynamic later and support different db backends
// NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionProvider] =
// "NHibernate.Connection.DriverConnectionProvider";
// cfg.Properties[NHibernate.Cfg.Environment.Dialect] =
// "NHibernate.Dialect.SQLite";
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionDriver] =
// "NHibernate.Driver.SqliteClientDriver";
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionString] =
// "URI=file:opensim-nh.db,version=3";
// factory = cfg.BuildSessionFactory();
// Split out the dialect, driver, and connect string
char[] split = { ';' };
string[] parts = connect.Split(split, 3);
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Inventory connection string '" + connect + "'");
}
dialect = parts[0];
// NHibernate setup
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + dialect);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
//To create sql file uncomment code below and write the name of the file
//SchemaExport exp = new SchemaExport(cfg);
//exp.SetOutputFile("nameofthefile.sql");
//exp.Create(false, true);
HbmSerializer.Default.Validate = true;
using (MemoryStream stream =
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
cfg.AddInputStream(stream);
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
Assembly assem = GetType().Assembly;
Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, store);
m.Update();
}
public object Load(Type type, UUID uuid)
{
object obj = null;
try
{
obj = session.Load(type, uuid);
}
catch (Exception)
{
m_log.ErrorFormat("[NHIBERNATE] {0} not found with ID {1} ", type.Name, uuid);
}
return obj;
}
public bool Save(object obj)
{
try
{
session.BeginTransaction();
session.Save(obj);
session.Transaction.Commit();
session.Flush();
return true;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue saving object ", e);
}
return false;
}
public bool Update(object obj)
{
try
{
session.BeginTransaction();
session.Update(obj);
session.Transaction.Commit();
session.Flush();
return true;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue updating object ", e);
}
return false;
}
public bool Delete(object obj)
{
try
{
session.BeginTransaction();
session.Delete(obj);
session.Transaction.Commit();
session.Flush();
return true;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue deleting object ", e);
}
return false;
}
public ISession GetSession()
{
return session;
}
}
}

View File

@ -34,10 +34,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse;
using log4net;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using NHibernate.Criterion;
using OpenSim.Framework;
using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes;
@ -52,51 +49,12 @@ namespace OpenSim.Data.NHibernate
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg;
private ISessionFactory factory;
private ISession session;
// public void Initialise()
// {
// Initialise("SQLiteDialect;SqliteClientDriver;URI=file:OpenSim.db,version=3", true);
// }
private NHibernateManager manager;
public void Initialise(string connect)
{
// Split out the dialect, driver, and connect string
char[] split = {';'};
string[] parts = connect.Split(split, 3);
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Region connection string '" + connect + "'");
}
string dialect = parts[0];
// NHibernate setup
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + dialect);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
HbmSerializer.Default.Validate = true;
using (MemoryStream stream =
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
cfg.AddInputStream(stream);
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
// This actually does the roll forward assembly stuff
Assembly assem = GetType().Assembly;
Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, "RegionStore");
m.Update();
m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateRegionData");
manager = new NHibernateManager(connect, "RegionStore");
}
/***********************************************************************
@ -122,15 +80,18 @@ namespace OpenSim.Data.NHibernate
{
try
{
SceneObjectPart old = session.Load(typeof(SceneObjectPart), p.UUID) as SceneObjectPart;
session.Evict(old);
session.Update(p);
m_log.InfoFormat("[NHIBERNATE] updating object {0}", p.UUID);
}
catch (ObjectNotFoundException)
{
m_log.InfoFormat("[NHIBERNATE] saving object {0}", p.UUID);
session.Save(p);
SceneObjectPart old = (SceneObjectPart)manager.Load(typeof(SceneObjectPart), p.UUID);
if (old != null)
{
m_log.InfoFormat("[NHIBERNATE] updating object {0}", p.UUID);
manager.Update(old);
}
else
{
m_log.InfoFormat("[NHIBERNATE] saving object {0}", p.UUID);
manager.Save(p);
}
}
catch (Exception e)
{
@ -142,15 +103,19 @@ namespace OpenSim.Data.NHibernate
{
try
{
Terrain old = session.Load(typeof(Terrain), t.RegionID) as Terrain;
session.Evict(old);
session.Update(t);
session.Flush();
}
catch (ObjectNotFoundException)
{
session.Save(t);
session.Flush();
Terrain old = (Terrain)manager.Load(typeof(Terrain), t.RegionID);
if (old != null)
{
m_log.InfoFormat("[NHIBERNATE] updating terrain {0}", t.RegionID);
manager.Update(old);
}
else
{
m_log.InfoFormat("[NHIBERNATE] saving terrain {0}", t.RegionID);
manager.Save(t);
}
}
catch (Exception e)
{
@ -173,7 +138,6 @@ namespace OpenSim.Data.NHibernate
m_log.InfoFormat("Storing part {0}", part.UUID);
SaveOrUpdate(part);
}
session.Flush();
}
catch (Exception e)
{
@ -185,7 +149,7 @@ namespace OpenSim.Data.NHibernate
{
SceneObjectGroup group = new SceneObjectGroup();
ICriteria criteria = session.CreateCriteria(typeof(SceneObjectPart));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(SceneObjectPart));
criteria.Add(Expression.Eq("RegionID", region));
criteria.Add(Expression.Eq("ParentUUID", uuid));
criteria.AddOrder( Order.Asc("ParentID") );
@ -216,9 +180,8 @@ namespace OpenSim.Data.NHibernate
SceneObjectGroup g = LoadObject(obj, regionUUID);
foreach (SceneObjectPart p in g.Children.Values)
{
session.Delete(p);
manager.Delete(p);
}
session.Flush();
m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
@ -234,7 +197,7 @@ namespace OpenSim.Data.NHibernate
Dictionary<UUID, SceneObjectGroup> SOG = new Dictionary<UUID, SceneObjectGroup>();
List<SceneObjectGroup> ret = new List<SceneObjectGroup>();
ICriteria criteria = session.CreateCriteria(typeof(SceneObjectPart));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(SceneObjectPart));
criteria.Add(Expression.Eq("RegionID", regionUUID));
criteria.AddOrder( Order.Asc("ParentID") );
foreach (SceneObjectPart p in criteria.List())
@ -252,7 +215,7 @@ namespace OpenSim.Data.NHibernate
}
// get the inventory
ICriteria InvCriteria = session.CreateCriteria(typeof(TaskInventoryItem));
ICriteria InvCriteria = manager.GetSession().CreateCriteria(typeof(TaskInventoryItem));
InvCriteria.Add(Expression.Eq("ParentPartID", p.UUID));
IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
foreach (TaskInventoryItem i in InvCriteria.List())
@ -291,16 +254,14 @@ namespace OpenSim.Data.NHibernate
/// <returns>Heightfield data</returns>
public double[,] LoadTerrain(UUID regionID)
{
try
Terrain t = (Terrain)manager.Load(typeof(Terrain), regionID);
if (t != null)
{
Terrain t = session.Load(typeof(Terrain), regionID) as Terrain;
return t.Doubles;
}
catch (ObjectNotFoundException)
{
m_log.Info("No terrain yet");
return null;
}
m_log.Info("No terrain yet");
return null;
}
/// <summary>
@ -339,7 +300,7 @@ namespace OpenSim.Data.NHibernate
/// </summary>
public void Shutdown()
{
session.Flush();
//session.Flush();
}
/// <summary>
@ -397,21 +358,20 @@ namespace OpenSim.Data.NHibernate
/// <param name="items"></param>
public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
{
ICriteria criteria = session.CreateCriteria(typeof(TaskInventoryItem));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(TaskInventoryItem));
criteria.Add(Expression.Eq("ParentPartID", primID));
try
{
foreach (TaskInventoryItem i in criteria.List())
{
session.Delete(i);
manager.Delete(i);
}
foreach (TaskInventoryItem i in items)
{
session.Save(i);
manager.Save(i);
}
session.Flush();
}
catch (Exception e)
{

View File

@ -33,10 +33,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse;
using log4net;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using NHibernate.Criterion;
using OpenSim.Framework;
using Environment=NHibernate.Cfg.Environment;
@ -49,9 +46,7 @@ namespace OpenSim.Data.NHibernate
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg;
private ISessionFactory factory;
private ISession session;
private NHibernateManager manager;
public override void Initialise()
{
@ -61,62 +56,40 @@ namespace OpenSim.Data.NHibernate
public override void Initialise(string connect)
{
char[] split = {';'};
string[] parts = connect.Split(split, 3);
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Inventory connection string '" + connect + "'");
}
string dialect = parts[0];
// 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." + parts[0]);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
// This actually does the roll forward assembly stuff
Assembly assem = GetType().Assembly;
Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, "UserStore");
m.Update();
m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateUserData");
manager = new NHibernateManager(connect, "UserStore");
}
private bool ExistsUser(UUID uuid)
{
UserProfileData user = null;
try
m_log.InfoFormat("[NHIBERNATE] ExistsUser; {0}", uuid);
user = (UserProfileData)manager.Load(typeof(UserProfileData), uuid);
if (user == null)
{
user = session.Load(typeof(UserProfileData), uuid) as UserProfileData;
}
catch (ObjectNotFoundException)
{
user = null;
m_log.InfoFormat("[NHIBERNATE] User with given UUID does not exist {0} ", uuid);
return false;
}
return (user != null);
return true;
}
override public UserProfileData GetUserByUUID(UUID uuid)
{
UserProfileData user;
// TODO: I'm sure I'll have to do something silly here
try
m_log.InfoFormat("[NHIBERNATE] GetUserByUUID: {0} ", uuid);
user = (UserProfileData)manager.Load(typeof(UserProfileData), uuid);
if (user != null)
{
user = session.Load(typeof(UserProfileData), uuid) as UserProfileData;
user.CurrentAgent = GetAgentByUUID(uuid);
}
catch (ObjectNotFoundException)
{
user = null;
UserAgentData agent = GetAgentByUUID(uuid);
if (agent != null)
{
user.CurrentAgent = agent;
}
}
return user;
@ -126,33 +99,30 @@ namespace OpenSim.Data.NHibernate
{
if (!ExistsUser(profile.ID))
{
session.Save(profile);
m_log.InfoFormat("[NHIBERNATE] AddNewUserProfile {0}", profile.ID);
manager.Save(profile);
SetAgentData(profile.ID, profile.CurrentAgent);
}
else
{
m_log.ErrorFormat("Attempted to add User {0} {1} that already exists, updating instead", profile.FirstName, profile.SurName);
m_log.ErrorFormat("[NHIBERNATE] Attempted to add User {0} {1} that already exists, updating instead", profile.FirstName, profile.SurName);
UpdateUserProfile(profile);
}
}
private void SetAgentData(UUID uuid, UserAgentData agent)
{
if (agent == null)
UserAgentData old = (UserAgentData)manager.Load(typeof(UserAgentData), uuid);
if (old != null)
{
// TODO: got to figure out how to do a delete right
m_log.InfoFormat("[NHIBERNATE] SetAgentData deleting old: {0} ",uuid);
manager.Delete(old);
}
else
if (agent != null)
{
try
{
UserAgentData old = session.Load(typeof(UserAgentData), uuid) as UserAgentData;
session.Delete(old);
}
catch (ObjectNotFoundException)
{
}
session.Save(agent);
m_log.InfoFormat("[NHIBERNATE] SetAgentData: {0} ", agent.ProfileID);
manager.Save(agent);
}
}
@ -160,13 +130,13 @@ namespace OpenSim.Data.NHibernate
{
if (ExistsUser(profile.ID))
{
session.Update(profile);
manager.Update(profile);
SetAgentData(profile.ID, profile.CurrentAgent);
return true;
}
else
{
m_log.ErrorFormat("Attempted to update User {0} {1} that doesn't exist, updating instead", profile.FirstName, profile.SurName);
m_log.ErrorFormat("[NHIBERNATE] Attempted to update User {0} {1} that doesn't exist, updating instead", profile.FirstName, profile.SurName);
AddNewUserProfile(profile);
return true;
}
@ -174,37 +144,32 @@ namespace OpenSim.Data.NHibernate
override public void AddNewUserAgent(UserAgentData agent)
{
try
UserAgentData old = (UserAgentData)manager.Load(typeof(UserAgentData), agent.ProfileID);
if (old != null)
{
UserAgentData old = session.Load(typeof(UserAgentData), agent.ProfileID) as UserAgentData;
session.Delete(old);
manager.Delete(old);
}
catch (ObjectNotFoundException)
{
}
session.Save(agent);
manager.Save(agent);
}
public void UpdateUserAgent(UserAgentData agent)
{
session.Update(agent);
m_log.InfoFormat("[NHIBERNATE] UpdateUserAgent: {0} ", agent.ProfileID);
manager.Update(agent);
}
override public UserAgentData GetAgentByUUID(UUID uuid)
{
try
{
return session.Load(typeof(UserAgentData), uuid) as UserAgentData;
}
catch
{
return null;
}
m_log.InfoFormat("[NHIBERNATE] GetAgentByUUID: {0} ", uuid);
return (UserAgentData)manager.Load(typeof(UserAgentData), uuid);
}
override public UserProfileData GetUserByName(string fname, string lname)
{
ICriteria criteria = session.CreateCriteria(typeof(UserProfileData));
m_log.InfoFormat("[NHIBERNATE] GetUserByName: {0} {1} ", fname, lname);
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(UserProfileData));
criteria.Add(Expression.Eq("FirstName", fname));
criteria.Add(Expression.Eq("SurName", lname));
foreach (UserProfileData profile in criteria.List())
@ -233,7 +198,7 @@ namespace OpenSim.Data.NHibernate
if (querysplit.Length == 2)
{
ICriteria criteria = session.CreateCriteria(typeof(UserProfileData));
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(UserProfileData));
criteria.Add(Expression.Like("FirstName", querysplit[0]));
criteria.Add(Expression.Like("SurName", querysplit[1]));
foreach (UserProfileData profile in criteria.List())
@ -262,26 +227,18 @@ namespace OpenSim.Data.NHibernate
/// TODO: stubs for now to get us to a compiling state gently
public override AvatarAppearance GetUserAppearance(UUID user)
{
AvatarAppearance appearance;
// TODO: I'm sure I'll have to do something silly here
try {
appearance = session.Load(typeof(AvatarAppearance), user) as AvatarAppearance;
} catch (ObjectNotFoundException) {
appearance = null;
}
return appearance;
return (AvatarAppearance)manager.Load(typeof(AvatarAppearance), user);
}
private bool ExistsAppearance(UUID uuid)
{
AvatarAppearance appearance;
try {
appearance = session.Load(typeof(AvatarAppearance), uuid) as AvatarAppearance;
} catch (ObjectNotFoundException) {
appearance = null;
AvatarAppearance appearance = (AvatarAppearance)manager.Load(typeof(AvatarAppearance), uuid);
if (appearance == null)
{
return false;
}
return (appearance == null) ? false : true;
return true;
}
@ -295,11 +252,11 @@ namespace OpenSim.Data.NHibernate
bool exists = ExistsAppearance(user);
if (exists)
{
session.Update(appearance);
manager.Update(appearance);
}
else
{
session.Save(appearance);
manager.Save(appearance);
}
}

View File

@ -4,7 +4,7 @@
<id name="FullID" column="ID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" />
</id>
<property name="Type" type="System.SByte" />
<property name="Type" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="64" />
<property name="Description" type="String" length="64" />
<property name="Local" type="boolean" />

View File

@ -5,7 +5,7 @@
<generator class="assigned" />
</id>
<property name="Type" type="Int16" />
<property name="Version" type="System.UInt16" />
<property name="Version" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="ParentID" index="folder_parent_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="Owner" index="folder_owner_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="64" />

View File

@ -12,15 +12,15 @@
<property name="Creator" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="64" />
<property name="Description" type="String" length="64" />
<property name="NextPermissions" type="System.UInt32" />
<property name="CurrentPermissions" type="System.UInt32" />
<property name="BasePermissions" type="System.UInt32" />
<property name="EveryOnePermissions" type="System.UInt32" />
<property name="NextPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="CurrentPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="BasePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EveryOnePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="GroupID" index="item_group_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="GroupOwned" type="boolean" />
<property name="SalePrice" type="System.Int32" />
<property name="SaleType" type="System.Byte" />
<property name="Flags" type="System.UInt32" />
<property name="Flags" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="CreationDate" type="System.Int32" />
</class>
</hibernate-mapping>

View File

@ -2,8 +2,8 @@ BEGIN;
CREATE TABLE `Terrain` (
`RegionID` char(36) not null,
`Map` longblob,
`MapData` longblob,
PRIMARY KEY (`RegionID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
COMMIT;
COMMIT;

View File

@ -4,7 +4,7 @@
<id name="UUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" />
</id>
<property name="ParentID" type="System.UInt32"/>
<property name="ParentID" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate"/>
<property name="ParentUUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="RegionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="CreationDate" type="System.Int32" />
@ -14,17 +14,17 @@
<property name="SitName" type="String" length="255" />
<property name="TouchName" type="String" length="255" />
<property name="ObjectFlags" type="System.UInt32" />
<property name="ObjectFlags" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="CreatorID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="OwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="GroupID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="LastOwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="OwnerMask" type="System.UInt32" />
<property name="NextOwnerMask" type="System.UInt32" />
<property name="GroupMask" type="System.UInt32" />
<property name="EveryoneMask" type="System.UInt32" />
<property name="BaseMask" type="System.UInt32" />
<property name="OwnerMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="NextOwnerMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="GroupMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EveryoneMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="BaseMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="OffsetPosition" type="OpenSim.Data.NHibernate.Vector3UserType, OpenSim.Data.NHibernate" >
<column name="PositionX" />
@ -83,24 +83,24 @@
<column name="ScaleZ" />
</property>
<property name="PCode" type="System.Byte" />
<property name="PathBegin" type="System.UInt16" />
<property name="PathEnd" type="System.UInt16" />
<property name="PathBegin" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="PathEnd" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="PathScaleX" type="System.Byte" />
<property name="PathScaleY" type="System.Byte" />
<property name="PathShearX" type="System.Byte" />
<property name="PathShearY" type="System.Byte" />
<property name="PathSkew" type="System.SByte" />
<property name="PathSkew" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="PathCurve" type="System.Byte" />
<property name="PathRadiusOffset" type="System.SByte" />
<property name="PathRadiusOffset" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="PathRevolutions" type="System.Byte" />
<property name="PathTaperX" type="System.SByte" />
<property name="PathTwist" type="System.SByte" />
<property name="ProfileBegin" type="System.UInt16" />
<property name="ProfileEnd" type="System.UInt16" />
<property name="PathTaperX" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="PathTwist" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="ProfileBegin" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="ProfileEnd" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="ProfileCurve" type="System.Byte" />
<property name="ProfileHollow" type="System.UInt16" />
<property name="TextureEntry" column="Texture" type="System.Byte[]" />
<property name="ExtraParams" type="System.Byte[]" />
<property name="ProfileHollow" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="TextureEntry" column="Texture" type="binary" />
<property name="ExtraParams" type="binary" />
<property name="State" type="System.Byte" />
</component>
</class>
@ -108,7 +108,8 @@
<id name="RegionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" />
</id>
<property name="Map" type="System.Byte[]" />
<!-- <property name="MapData" type="OpenSim.Data.NHibernate.BlobType, OpenSim.Data.NHibernate" /> -->
<property name="MapData" type="binary" />
</class>
<class name="OpenSim.Framework.TaskInventoryItem, OpenSim.Framework" table="PrimItems" lazy="false">
<id name="ItemID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
@ -121,15 +122,47 @@
<property name="OwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="GroupID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="LastOwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="CurrentPermissions" type="System.UInt32" />
<property name="BasePermissions" type="System.UInt32" />
<property name="EveryonePermissions" type="System.UInt32" />
<property name="GroupPermissions" type="System.UInt32" />
<property name="NextPermissions" type="System.UInt32" />
<property name="CurrentPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="BasePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EveryonePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="GroupPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="NextPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="255" />
<property name="Description" type="String" length="255" />
<property name="CreationDate" type="System.UInt32" />
<property name="Flags" type="System.UInt32" />
<property name="CreationDate" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="Flags" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="InvType" type="System.Int32" />
</class>
<class name="OpenSim.Data.RegionProfileData, OpenSim.Data" table="Regions" lazy="false">
<id name="Uuid" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" />
</id>
<property name="RegionHandle" index="region_handle" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="RegionName" index="region_name" type="String" length="32"/>
<property name="RegionRecvKey" type="String" length="128"/>
<property name="RegionSendKey" type="String" length="128"/>
<property name="RegionSecret" type="String" length="128"/>
<property name="RegionDataURI" type="String" length="255"/>
<property name="ServerIP" type="String" length="64"/>
<property name="ServerPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="ServerURI" type="String" length="255"/>
<property name="RegionLocX" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="RegionLocY" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="RegionLocZ" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EastOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="WestOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="SouthOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="NorthOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="RegionAssetURI" type="String" length="255"/>
<property name="RegionAssetRecvKey" type="String" length="128"/>
<property name="RegionAssetSendKey" type="String" length="128"/>
<property name="RegionUserURI" type="String" length="255"/>
<property name="RegionUserRecvKey" type="String" length="128"/>
<property name="RegionUserSendKey" type="String" length="128"/>
<property name="ServerHttpPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="ServerRemotingPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="RegionMapTextureID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="Owner_uuid" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="OriginUUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
</class>
</hibernate-mapping>

View File

@ -5,7 +5,7 @@
<generator class="assigned" />
</id>
<property name="AgentIP" type="String" length="24" />
<property name="AgentPort" type="Int32" />
<property name="AgentPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="AgentOnline" type="boolean" />
<property name="SessionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="SecureSessionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
@ -13,9 +13,9 @@
<property name="Region" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="LoginTime" type="Int32" />
<property name="LogoutTime" type="Int32" />
<property name="Handle" type="Int64" />
<property name="PositionX" type="Single" />
<property name="Handle" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<!-- <property name="PositionX" type="Single" />
<property name="PositionY" type="Single" />
<property name="PositionZ" type="Single" />
<property name="PositionZ" type="Single" /> -->
</class>
</hibernate-mapping>

View File

@ -9,8 +9,8 @@
<property name="PasswordHash" type="String" length="32" />
<property name="PasswordSalt" type="String" length="32" />
<property name="WebLoginKey" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="HomeRegionX" type="System.UInt32" />
<property name="HomeRegionY" type="System.UInt32" />
<property name="HomeRegionX" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="HomeRegionY" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="HomeLocationX" type="Single" />
<property name="HomeLocationY" type="Single" />
<property name="HomeLocationZ" type="Single" />

View File

@ -60,7 +60,7 @@ namespace OpenSim.Data.NHibernate
set { regionID = value; }
}
public byte[] Map
public byte[] MapData
{
get { return serializeTerrain(map); }
set { map = parseTerrain(value); }

View File

@ -36,6 +36,7 @@ namespace OpenSim.Data
/// <summary>
/// A class which contains information known to the grid server about a region
/// </summary>
[Serializable]
public class RegionProfileData
{
/// <summary>
@ -210,5 +211,155 @@ namespace OpenSim.Data
{
return RequestSimData(gridserver_url, gridserver_sendkey, "region_name_search", regionName );
}
//Data Wrappers
public string RegionName
{
get { return regionName; }
set { regionName = value; }
}
public ulong RegionHandle
{
get { return regionHandle; }
set { regionHandle = value; }
}
public UUID Uuid
{
get { return UUID; }
set { UUID = value; }
}
public uint RegionLocX
{
get { return regionLocX; }
set { regionLocX = value; }
}
public uint RegionLocY
{
get { return regionLocY; }
set { regionLocY = value; }
}
public uint RegionLocZ
{
get { return regionLocZ; }
set { regionLocZ = value; }
}
public string RegionSendKey
{
get { return regionSendKey; }
set { regionSendKey = value; }
}
public string RegionRecvKey
{
get { return regionRecvKey; }
set { regionRecvKey = value; }
}
public string RegionSecret
{
get { return regionSecret; }
set { regionSecret = value; }
}
public bool RegionOnline
{
get { return regionOnline; }
set { regionOnline = value; }
}
public string ServerIP
{
get { return serverIP; }
set { serverIP = value; }
}
public uint ServerPort
{
get { return serverPort; }
set { serverPort = value; }
}
public string ServerURI
{
get { return serverURI; }
set { serverURI = value; }
}
public uint ServerHttpPort
{
get { return httpPort; }
set { httpPort = value; }
}
public uint ServerRemotingPort
{
get { return remotingPort; }
set { remotingPort = value; }
}
public ulong NorthOverrideHandle
{
get { return regionNorthOverrideHandle; }
set { regionNorthOverrideHandle = value; }
}
public ulong SouthOverrideHandle
{
get { return regionSouthOverrideHandle; }
set { regionSouthOverrideHandle = value; }
}
public ulong EastOverrideHandle
{
get { return regionEastOverrideHandle; }
set { regionEastOverrideHandle = value; }
}
public ulong WestOverrideHandle
{
get { return regionWestOverrideHandle; }
set { regionWestOverrideHandle = value; }
}
public string RegionDataURI
{
get { return regionDataURI; }
set { regionDataURI = value; }
}
public string RegionAssetURI
{
get { return regionAssetURI; }
set { regionAssetURI = value; }
}
public string RegionAssetSendKey
{
get { return regionAssetSendKey; }
set { regionAssetSendKey = value; }
}
public string RegionAssetRecvKey
{
get { return regionAssetRecvKey; }
set { regionAssetRecvKey = value; }
}
public string RegionUserURI
{
get { return regionUserURI; }
set { regionUserURI = value; }
}
public string RegionUserSendKey
{
get { return regionUserSendKey; }
set { regionUserSendKey = value; }
}
public string RegionUserRecvKey
{
get { return regionUserRecvKey; }
set { regionUserRecvKey = value; }
}
public UUID RegionMapTextureID
{
get { return regionMapTextureID; }
set { regionMapTextureID = value; }
}
public UUID Owner_uuid
{
get { return owner_uuid; }
set { owner_uuid = value; }
}
public UUID OriginUUID
{
get { return originUUID; }
set { originUUID = value; }
}
}
}

BIN
bin/Castle.Core.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -19,6 +19,12 @@
</layout>
</appender>
<!-- if you'd like to know what NHibernate is doing more set value="DEBUG" -->
<logger name="NHibernate" additivity="false">
<level value="INFO"/>
<appender-ref ref="NHibernateFileLog"/>
</logger>
<root>
<level value="DEBUG" />
<appender-ref ref="Console" />

View File

@ -1867,9 +1867,11 @@
<Files>
<Match pattern="*.cs" recurse="true"/>
<Match path="Resources" pattern="*.xml" buildAction="EmbeddedResource"/>
<Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/>
<!-- add more as you go -->
<Match path="Resources/SQLiteDialect" pattern="*.sql" buildAction="EmbeddedResource"/>
<Match path="Resources/MySQLDialect" pattern="*.sql" buildAction="EmbeddedResource"/>
<Match path="Resources/MsSql2005Dialect" pattern="*.sql" buildAction="EmbeddedResource"/>
</Files>
</Project>