diff options
Diffstat (limited to 'OpenSim/Data/NHibernate/NHibernateAssetData.cs')
-rw-r--r-- | OpenSim/Data/NHibernate/NHibernateAssetData.cs | 29 |
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 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.IO; | 29 | using System.IO; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Text.RegularExpressions; | ||
31 | using libsecondlife; | 32 | using libsecondlife; |
32 | using log4net; | 33 | using log4net; |
33 | using NHibernate; | 34 | using NHibernate; |
34 | using NHibernate.Cfg; | 35 | using NHibernate.Cfg; |
35 | using NHibernate.Mapping.Attributes; | 36 | using NHibernate.Mapping.Attributes; |
37 | using NHibernate.Tool.hbm2ddl; | ||
36 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
37 | using Environment=NHibernate.Cfg.Environment; | 39 | using 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) |