aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/NHibernate/NHibernateAssetData.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data/NHibernate/NHibernateAssetData.cs')
-rw-r--r--OpenSim/Data/NHibernate/NHibernateAssetData.cs29
1 files changed, 28 insertions, 1 deletions
diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs
index beac693..740868b 100644
--- a/OpenSim/Data/NHibernate/NHibernateAssetData.cs
+++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs
@@ -28,11 +28,13 @@
28using System; 28using System;
29using System.IO; 29using System.IO;
30using System.Reflection; 30using System.Reflection;
31using System.Text.RegularExpressions;
31using libsecondlife; 32using libsecondlife;
32using log4net; 33using log4net;
33using NHibernate; 34using NHibernate;
34using NHibernate.Cfg; 35using NHibernate.Cfg;
35using NHibernate.Mapping.Attributes; 36using NHibernate.Mapping.Attributes;
37using NHibernate.Tool.hbm2ddl;
36using OpenSim.Framework; 38using OpenSim.Framework;
37using Environment=NHibernate.Cfg.Environment; 39using Environment=NHibernate.Cfg.Environment;
38 40
@@ -58,6 +60,10 @@ namespace OpenSim.Data.NHibernate
58 // Split out the dialect, driver, and connect string 60 // Split out the dialect, driver, and connect string
59 char[] split = {';'}; 61 char[] split = {';'};
60 string[] parts = connect.Split(split); 62 string[] parts = connect.Split(split);
63 if (parts.Length != 3) {
64 // TODO: make this a real exception type
65 throw new Exception("Malformed Inventory connection string '" + connect + "'");
66 }
61 67
62 // NHibernate setup 68 // NHibernate setup
63 cfg = new Configuration(); 69 cfg = new Configuration();
@@ -75,13 +81,34 @@ namespace OpenSim.Data.NHibernate
75 HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly())) 81 HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
76 cfg.AddInputStream(stream); 82 cfg.AddInputStream(stream);
77 83
84 factory = cfg.BuildSessionFactory();
85
78 // If uncommented this will auto create tables, but it 86 // If uncommented this will auto create tables, but it
79 // does drops of the old tables, so we need a smarter way 87 // does drops of the old tables, so we need a smarter way
80 // to acturally manage this. 88 // to acturally manage this.
81 89
82 // new SchemaExport(cfg).Create(true, true); 90 // new SchemaExport(cfg).Create(true, true);
83 91
84 factory = cfg.BuildSessionFactory(); 92 InitDB();
93 }
94
95 private void InitDB()
96 {
97 string regex = @"no such table: Assets";
98 Regex RE = new Regex(regex, RegexOptions.Multiline);
99 try {
100 using(ISession session = factory.OpenSession()) {
101 session.Load(typeof(AssetBase), LLUUID.Zero);
102 }
103 } catch (ObjectNotFoundException e) {
104 // yes, we know it's not there, but that's ok
105 } catch (ADOException e) {
106 Match m = RE.Match(e.ToString());
107 if(m.Success) {
108 // We don't have this table, so create it.
109 new SchemaExport(cfg).Create(true, true);
110 }
111 }
85 } 112 }
86 113
87 override public AssetBase FetchAsset(LLUUID uuid) 114 override public AssetBase FetchAsset(LLUUID uuid)