diff options
Diffstat (limited to 'OpenSim/Data/MSSQL/MSSQLEstateData.cs')
-rw-r--r-- | OpenSim/Data/MSSQL/MSSQLEstateData.cs | 460 |
1 files changed, 334 insertions, 126 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLEstateData.cs b/OpenSim/Data/MSSQL/MSSQLEstateData.cs index c0c6349..1faa249 100644 --- a/OpenSim/Data/MSSQL/MSSQLEstateData.cs +++ b/OpenSim/Data/MSSQL/MSSQLEstateData.cs | |||
@@ -37,19 +37,28 @@ using OpenSim.Region.Framework.Interfaces; | |||
37 | 37 | ||
38 | namespace OpenSim.Data.MSSQL | 38 | namespace OpenSim.Data.MSSQL |
39 | { | 39 | { |
40 | public class MSSQLEstateData : IEstateDataStore | 40 | public class MSSQLEstateStore : IEstateDataStore |
41 | { | 41 | { |
42 | private const string _migrationStore = "EstateStore"; | 42 | private const string _migrationStore = "EstateStore"; |
43 | 43 | ||
44 | private static readonly ILog _Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
45 | 45 | ||
46 | private MSSQLManager _Database; | 46 | private MSSQLManager _Database; |
47 | 47 | private string m_connectionString; | |
48 | private FieldInfo[] _Fields; | 48 | private FieldInfo[] _Fields; |
49 | private Dictionary<string, FieldInfo> _FieldMap = new Dictionary<string, FieldInfo>(); | 49 | private Dictionary<string, FieldInfo> _FieldMap = new Dictionary<string, FieldInfo>(); |
50 | 50 | ||
51 | #region Public methods | 51 | #region Public methods |
52 | 52 | ||
53 | public MSSQLEstateStore() | ||
54 | { | ||
55 | } | ||
56 | |||
57 | public MSSQLEstateStore(string connectionString) | ||
58 | { | ||
59 | Initialise(connectionString); | ||
60 | } | ||
61 | |||
53 | /// <summary> | 62 | /// <summary> |
54 | /// Initialises the estatedata class. | 63 | /// Initialises the estatedata class. |
55 | /// </summary> | 64 | /// </summary> |
@@ -58,25 +67,17 @@ namespace OpenSim.Data.MSSQL | |||
58 | { | 67 | { |
59 | if (!string.IsNullOrEmpty(connectionString)) | 68 | if (!string.IsNullOrEmpty(connectionString)) |
60 | { | 69 | { |
70 | m_connectionString = connectionString; | ||
61 | _Database = new MSSQLManager(connectionString); | 71 | _Database = new MSSQLManager(connectionString); |
62 | } | 72 | } |
63 | else | ||
64 | { | ||
65 | //TODO when can this be deleted | ||
66 | IniFile iniFile = new IniFile("mssql_connection.ini"); | ||
67 | string settingDataSource = iniFile.ParseFileReadValue("data_source"); | ||
68 | string settingInitialCatalog = iniFile.ParseFileReadValue("initial_catalog"); | ||
69 | string settingPersistSecurityInfo = iniFile.ParseFileReadValue("persist_security_info"); | ||
70 | string settingUserId = iniFile.ParseFileReadValue("user_id"); | ||
71 | string settingPassword = iniFile.ParseFileReadValue("password"); | ||
72 | |||
73 | _Database = | ||
74 | new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId, | ||
75 | settingPassword); | ||
76 | } | ||
77 | 73 | ||
78 | //Migration settings | 74 | //Migration settings |
79 | _Database.CheckMigration(_migrationStore); | 75 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
76 | { | ||
77 | conn.Open(); | ||
78 | Migration m = new Migration(conn, GetType().Assembly, "EstateStore"); | ||
79 | m.Update(); | ||
80 | } | ||
80 | 81 | ||
81 | //Interesting way to get parameters! Maybe implement that also with other types | 82 | //Interesting way to get parameters! Maybe implement that also with other types |
82 | Type t = typeof(EstateSettings); | 83 | Type t = typeof(EstateSettings); |
@@ -96,40 +97,48 @@ namespace OpenSim.Data.MSSQL | |||
96 | /// </summary> | 97 | /// </summary> |
97 | /// <param name="regionID">region ID.</param> | 98 | /// <param name="regionID">region ID.</param> |
98 | /// <returns></returns> | 99 | /// <returns></returns> |
99 | public EstateSettings LoadEstateSettings(UUID regionID) | 100 | public EstateSettings LoadEstateSettings(UUID regionID, bool create) |
100 | { | 101 | { |
101 | EstateSettings es = new EstateSettings(); | 102 | EstateSettings es = new EstateSettings(); |
102 | 103 | ||
103 | string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = @RegionID"; | 104 | string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = @RegionID"; |
104 | 105 | ||
105 | bool insertEstate = false; | 106 | bool insertEstate = false; |
106 | 107 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | |
107 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 108 | using (SqlCommand cmd = new SqlCommand(sql, conn)) |
108 | { | 109 | { |
109 | cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID)); | 110 | cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID)); |
110 | 111 | conn.Open(); | |
111 | using (SqlDataReader reader = cmd.ExecuteReader()) | 112 | using (SqlDataReader reader = cmd.ExecuteReader()) |
112 | { | 113 | { |
113 | if (reader.Read()) | 114 | if (reader.Read()) |
114 | { | 115 | { |
115 | foreach (string name in FieldList) | 116 | foreach (string name in FieldList) |
116 | { | 117 | { |
117 | if (_FieldMap[name].GetValue(es) is bool) | 118 | FieldInfo f = _FieldMap[name]; |
119 | object v = reader[name]; | ||
120 | if (f.FieldType == typeof(bool)) | ||
118 | { | 121 | { |
119 | int v = Convert.ToInt32(reader[name]); | 122 | f.SetValue(es, Convert.ToInt32(v) != 0); |
120 | if (v != 0) | ||
121 | _FieldMap[name].SetValue(es, true); | ||
122 | else | ||
123 | _FieldMap[name].SetValue(es, false); | ||
124 | } | 123 | } |
125 | else if (_FieldMap[name].GetValue(es) is UUID) | 124 | else if (f.FieldType == typeof(UUID)) |
126 | { | 125 | { |
127 | _FieldMap[name].SetValue(es, new UUID((Guid) reader[name])); // uuid); | 126 | f.SetValue(es, new UUID((Guid)v)); // uuid); |
128 | } | 127 | } |
129 | else | 128 | else if (f.FieldType == typeof(string)) |
129 | { | ||
130 | f.SetValue(es, v.ToString()); | ||
131 | } | ||
132 | else if (f.FieldType == typeof(UInt32)) | ||
133 | { | ||
134 | f.SetValue(es, Convert.ToUInt32(v)); | ||
135 | } | ||
136 | else if (f.FieldType == typeof(Single)) | ||
130 | { | 137 | { |
131 | es.EstateID = Convert.ToUInt32(reader["EstateID"].ToString()); | 138 | f.SetValue(es, Convert.ToSingle(v)); |
132 | } | 139 | } |
140 | else | ||
141 | f.SetValue(es, v); | ||
133 | } | 142 | } |
134 | } | 143 | } |
135 | else | 144 | else |
@@ -139,81 +148,68 @@ namespace OpenSim.Data.MSSQL | |||
139 | } | 148 | } |
140 | } | 149 | } |
141 | 150 | ||
142 | 151 | if (insertEstate && create) | |
143 | if (insertEstate) | ||
144 | { | 152 | { |
145 | List<string> names = new List<string>(FieldList); | 153 | DoCreate(es); |
154 | LinkRegion(regionID, (int)es.EstateID); | ||
155 | } | ||
146 | 156 | ||
147 | names.Remove("EstateID"); | 157 | LoadBanList(es); |
148 | 158 | ||
149 | sql = string.Format("insert into estate_settings ({0}) values ( @{1})", String.Join(",", names.ToArray()), String.Join(", @", names.ToArray())); | 159 | es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers"); |
160 | es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users"); | ||
161 | es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups"); | ||
150 | 162 | ||
151 | //_Log.Debug("[DB ESTATE]: SQL: " + sql); | 163 | //Set event |
152 | using (SqlConnection connection = _Database.DatabaseConnection()) | 164 | es.OnSave += StoreEstateSettings; |
153 | { | 165 | return es; |
154 | using (SqlCommand insertCommand = connection.CreateCommand()) | 166 | } |
155 | { | ||
156 | insertCommand.CommandText = sql + " SET @ID = SCOPE_IDENTITY()"; | ||
157 | 167 | ||
158 | foreach (string name in names) | 168 | public EstateSettings CreateNewEstate() |
159 | { | 169 | { |
160 | insertCommand.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es))); | 170 | EstateSettings es = new EstateSettings(); |
161 | } | 171 | es.OnSave += StoreEstateSettings; |
162 | SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int); | ||
163 | idParameter.Direction = ParameterDirection.Output; | ||
164 | insertCommand.Parameters.Add(idParameter); | ||
165 | 172 | ||
166 | insertCommand.ExecuteNonQuery(); | 173 | DoCreate(es); |
167 | 174 | ||
168 | es.EstateID = Convert.ToUInt32(idParameter.Value); | 175 | LoadBanList(es); |
169 | } | ||
170 | } | ||
171 | 176 | ||
172 | using (AutoClosingSqlCommand cmd = _Database.Query("INSERT INTO [estate_map] ([RegionID] ,[EstateID]) VALUES (@RegionID, @EstateID)")) | 177 | es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers"); |
173 | { | 178 | es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users"); |
174 | cmd.Parameters.Add(_Database.CreateParameter("@RegionID", regionID)); | 179 | es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups"); |
175 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); | ||
176 | // This will throw on dupe key | ||
177 | try | ||
178 | { | ||
179 | cmd.ExecuteNonQuery(); | ||
180 | } | ||
181 | catch (Exception e) | ||
182 | { | ||
183 | _Log.DebugFormat("[ESTATE DB]: Error inserting regionID and EstateID in estate_map: {0}", e); | ||
184 | } | ||
185 | } | ||
186 | 180 | ||
187 | // Munge and transfer the ban list | 181 | return es; |
182 | } | ||
188 | 183 | ||
189 | sql = string.Format("insert into estateban select {0}, bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = @UUID", es.EstateID); | 184 | private void DoCreate(EstateSettings es) |
190 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 185 | { |
191 | { | 186 | List<string> names = new List<string>(FieldList); |
192 | cmd.Parameters.Add(_Database.CreateParameter("@UUID", regionID)); | ||
193 | try | ||
194 | { | ||
195 | 187 | ||
196 | cmd.ExecuteNonQuery(); | 188 | names.Remove("EstateID"); |
197 | } | ||
198 | catch (Exception) | ||
199 | { | ||
200 | _Log.Debug("[ESTATE DB]: Error setting up estateban from regionban"); | ||
201 | } | ||
202 | } | ||
203 | 189 | ||
204 | //TODO check if this is needed?? | 190 | string sql = string.Format("insert into estate_settings ({0}) values ( @{1})", String.Join(",", names.ToArray()), String.Join(", @", names.ToArray())); |
205 | es.Save(); | ||
206 | } | ||
207 | 191 | ||
208 | LoadBanList(es); | 192 | //_Log.Debug("[DB ESTATE]: SQL: " + sql); |
193 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
194 | using (SqlCommand insertCommand = new SqlCommand(sql, conn)) | ||
195 | { | ||
196 | insertCommand.CommandText = sql + " SET @ID = SCOPE_IDENTITY()"; | ||
209 | 197 | ||
210 | es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers"); | 198 | foreach (string name in names) |
211 | es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users"); | 199 | { |
212 | es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups"); | 200 | insertCommand.Parameters.Add(_Database.CreateParameter("@" + name, _FieldMap[name].GetValue(es))); |
201 | } | ||
202 | SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int); | ||
203 | idParameter.Direction = ParameterDirection.Output; | ||
204 | insertCommand.Parameters.Add(idParameter); | ||
205 | conn.Open(); | ||
206 | insertCommand.ExecuteNonQuery(); | ||
213 | 207 | ||
214 | //Set event | 208 | es.EstateID = Convert.ToUInt32(idParameter.Value); |
215 | es.OnSave += StoreEstateSettings; | 209 | } |
216 | return es; | 210 | |
211 | //TODO check if this is needed?? | ||
212 | es.Save(); | ||
217 | } | 213 | } |
218 | 214 | ||
219 | /// <summary> | 215 | /// <summary> |
@@ -226,7 +222,7 @@ namespace OpenSim.Data.MSSQL | |||
226 | 222 | ||
227 | names.Remove("EstateID"); | 223 | names.Remove("EstateID"); |
228 | 224 | ||
229 | string sql = string.Format("UPDATE estate_settings SET ") ; | 225 | string sql = string.Format("UPDATE estate_settings SET "); |
230 | foreach (string name in names) | 226 | foreach (string name in names) |
231 | { | 227 | { |
232 | sql += name + " = @" + name + ", "; | 228 | sql += name + " = @" + name + ", "; |
@@ -234,7 +230,8 @@ namespace OpenSim.Data.MSSQL | |||
234 | sql = sql.Remove(sql.LastIndexOf(",")); | 230 | sql = sql.Remove(sql.LastIndexOf(",")); |
235 | sql += " WHERE EstateID = @EstateID"; | 231 | sql += " WHERE EstateID = @EstateID"; |
236 | 232 | ||
237 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 233 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
234 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
238 | { | 235 | { |
239 | foreach (string name in names) | 236 | foreach (string name in names) |
240 | { | 237 | { |
@@ -242,6 +239,7 @@ namespace OpenSim.Data.MSSQL | |||
242 | } | 239 | } |
243 | 240 | ||
244 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); | 241 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); |
242 | conn.Open(); | ||
245 | cmd.ExecuteNonQuery(); | 243 | cmd.ExecuteNonQuery(); |
246 | } | 244 | } |
247 | 245 | ||
@@ -266,12 +264,13 @@ namespace OpenSim.Data.MSSQL | |||
266 | 264 | ||
267 | string sql = "select bannedUUID from estateban where EstateID = @EstateID"; | 265 | string sql = "select bannedUUID from estateban where EstateID = @EstateID"; |
268 | 266 | ||
269 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 267 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
268 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
270 | { | 269 | { |
271 | SqlParameter idParameter = new SqlParameter("@EstateID", SqlDbType.Int); | 270 | SqlParameter idParameter = new SqlParameter("@EstateID", SqlDbType.Int); |
272 | idParameter.Value = es.EstateID; | 271 | idParameter.Value = es.EstateID; |
273 | cmd.Parameters.Add(idParameter); | 272 | cmd.Parameters.Add(idParameter); |
274 | 273 | conn.Open(); | |
275 | using (SqlDataReader reader = cmd.ExecuteReader()) | 274 | using (SqlDataReader reader = cmd.ExecuteReader()) |
276 | { | 275 | { |
277 | while (reader.Read()) | 276 | while (reader.Read()) |
@@ -293,10 +292,11 @@ namespace OpenSim.Data.MSSQL | |||
293 | 292 | ||
294 | string sql = string.Format("select uuid from {0} where EstateID = @EstateID", table); | 293 | string sql = string.Format("select uuid from {0} where EstateID = @EstateID", table); |
295 | 294 | ||
296 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 295 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
296 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
297 | { | 297 | { |
298 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); | 298 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); |
299 | 299 | conn.Open(); | |
300 | using (SqlDataReader reader = cmd.ExecuteReader()) | 300 | using (SqlDataReader reader = cmd.ExecuteReader()) |
301 | { | 301 | { |
302 | while (reader.Read()) | 302 | while (reader.Read()) |
@@ -312,57 +312,265 @@ namespace OpenSim.Data.MSSQL | |||
312 | private void SaveBanList(EstateSettings es) | 312 | private void SaveBanList(EstateSettings es) |
313 | { | 313 | { |
314 | //Delete first | 314 | //Delete first |
315 | string sql = "delete from estateban where EstateID = @EstateID"; | 315 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
316 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | ||
317 | { | 316 | { |
318 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); | 317 | conn.Open(); |
319 | cmd.ExecuteNonQuery(); | 318 | using (SqlCommand cmd = conn.CreateCommand()) |
319 | { | ||
320 | cmd.CommandText = "delete from estateban where EstateID = @EstateID"; | ||
321 | cmd.Parameters.AddWithValue("@EstateID", (int)es.EstateID); | ||
322 | cmd.ExecuteNonQuery(); | ||
323 | |||
324 | //Insert after | ||
325 | cmd.CommandText = "insert into estateban (EstateID, bannedUUID,bannedIp, bannedIpHostMask, bannedNameMask) values ( @EstateID, @bannedUUID, '','','' )"; | ||
326 | cmd.Parameters.AddWithValue("@bannedUUID", Guid.Empty); | ||
327 | foreach (EstateBan b in es.EstateBans) | ||
328 | { | ||
329 | cmd.Parameters["@bannedUUID"].Value = b.BannedUserID.Guid; | ||
330 | cmd.ExecuteNonQuery(); | ||
331 | } | ||
332 | } | ||
320 | } | 333 | } |
334 | } | ||
321 | 335 | ||
322 | //Insert after | 336 | private void SaveUUIDList(uint estateID, string table, UUID[] data) |
323 | sql = "insert into estateban (EstateID, bannedUUID) values ( @EstateID, @bannedUUID )"; | 337 | { |
324 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 338 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
325 | { | 339 | { |
326 | foreach (EstateBan b in es.EstateBans) | 340 | conn.Open(); |
341 | using (SqlCommand cmd = conn.CreateCommand()) | ||
327 | { | 342 | { |
328 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", es.EstateID)); | 343 | cmd.Parameters.AddWithValue("@EstateID", (int)estateID); |
329 | cmd.Parameters.Add(_Database.CreateParameter("@bannedUUID", b.BannedUserID)); | 344 | cmd.CommandText = string.Format("delete from {0} where EstateID = @EstateID", table); |
330 | cmd.ExecuteNonQuery(); | 345 | cmd.ExecuteNonQuery(); |
331 | cmd.Parameters.Clear(); | 346 | |
347 | cmd.CommandText = string.Format("insert into {0} (EstateID, uuid) values ( @EstateID, @uuid )", table); | ||
348 | cmd.Parameters.AddWithValue("@uuid", Guid.Empty); | ||
349 | foreach (UUID uuid in data) | ||
350 | { | ||
351 | cmd.Parameters["@uuid"].Value = uuid.Guid; //.ToString(); //TODO check if this works | ||
352 | cmd.ExecuteNonQuery(); | ||
353 | } | ||
332 | } | 354 | } |
333 | } | 355 | } |
334 | } | 356 | } |
335 | 357 | ||
336 | private void SaveUUIDList(uint estateID, string table, UUID[] data) | 358 | public EstateSettings LoadEstateSettings(int estateID) |
337 | { | 359 | { |
338 | //Delete first | 360 | EstateSettings es = new EstateSettings(); |
339 | string sql = string.Format("delete from {0} where EstateID = @EstateID", table); | 361 | string sql = "select estate_settings." + String.Join(",estate_settings.", FieldList) + " from estate_settings where EstateID = @EstateID"; |
340 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 362 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
341 | { | 363 | { |
342 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); | 364 | conn.Open(); |
343 | cmd.ExecuteNonQuery(); | 365 | using (SqlCommand cmd = new SqlCommand(sql, conn)) |
366 | { | ||
367 | cmd.Parameters.AddWithValue("@EstateID", (int)estateID); | ||
368 | using (SqlDataReader reader = cmd.ExecuteReader()) | ||
369 | { | ||
370 | if (reader.Read()) | ||
371 | { | ||
372 | foreach (string name in FieldList) | ||
373 | { | ||
374 | FieldInfo f = _FieldMap[name]; | ||
375 | object v = reader[name]; | ||
376 | if (f.FieldType == typeof(bool)) | ||
377 | { | ||
378 | f.SetValue(es, Convert.ToInt32(v) != 0); | ||
379 | } | ||
380 | else if (f.FieldType == typeof(UUID)) | ||
381 | { | ||
382 | f.SetValue(es, new UUID((Guid)v)); // uuid); | ||
383 | } | ||
384 | else if (f.FieldType == typeof(string)) | ||
385 | { | ||
386 | f.SetValue(es, v.ToString()); | ||
387 | } | ||
388 | else if (f.FieldType == typeof(UInt32)) | ||
389 | { | ||
390 | f.SetValue(es, Convert.ToUInt32(v)); | ||
391 | } | ||
392 | else if (f.FieldType == typeof(Single)) | ||
393 | { | ||
394 | f.SetValue(es, Convert.ToSingle(v)); | ||
395 | } | ||
396 | else | ||
397 | f.SetValue(es, v); | ||
398 | } | ||
399 | } | ||
400 | |||
401 | } | ||
402 | } | ||
344 | } | 403 | } |
404 | LoadBanList(es); | ||
405 | |||
406 | es.EstateManagers = LoadUUIDList(es.EstateID, "estate_managers"); | ||
407 | es.EstateAccess = LoadUUIDList(es.EstateID, "estate_users"); | ||
408 | es.EstateGroups = LoadUUIDList(es.EstateID, "estate_groups"); | ||
409 | |||
410 | //Set event | ||
411 | es.OnSave += StoreEstateSettings; | ||
412 | return es; | ||
413 | |||
414 | } | ||
415 | |||
416 | public List<EstateSettings> LoadEstateSettingsAll() | ||
417 | { | ||
418 | List<EstateSettings> allEstateSettings = new List<EstateSettings>(); | ||
419 | |||
420 | List<int> allEstateIds = GetEstatesAll(); | ||
421 | |||
422 | foreach (int estateId in allEstateIds) | ||
423 | allEstateSettings.Add(LoadEstateSettings(estateId)); | ||
345 | 424 | ||
346 | sql = string.Format("insert into {0} (EstateID, uuid) values ( @EstateID, @uuid )", table); | 425 | return allEstateSettings; |
347 | using (AutoClosingSqlCommand cmd = _Database.Query(sql)) | 426 | } |
427 | |||
428 | public List<int> GetEstates(string search) | ||
429 | { | ||
430 | List<int> result = new List<int>(); | ||
431 | string sql = "select estateID from estate_settings where EstateName = @EstateName"; | ||
432 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
348 | { | 433 | { |
349 | cmd.Parameters.Add(_Database.CreateParameter("@EstateID", estateID)); | 434 | conn.Open(); |
435 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
436 | { | ||
437 | cmd.Parameters.AddWithValue("@EstateName", search); | ||
438 | |||
439 | using (IDataReader reader = cmd.ExecuteReader()) | ||
440 | { | ||
441 | while (reader.Read()) | ||
442 | { | ||
443 | result.Add(Convert.ToInt32(reader["EstateID"])); | ||
444 | } | ||
445 | reader.Close(); | ||
446 | } | ||
447 | } | ||
448 | } | ||
350 | 449 | ||
351 | bool createParamOnce = true; | 450 | return result; |
451 | } | ||
352 | 452 | ||
353 | foreach (UUID uuid in data) | 453 | public List<int> GetEstatesAll() |
454 | { | ||
455 | List<int> result = new List<int>(); | ||
456 | string sql = "select estateID from estate_settings"; | ||
457 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
458 | { | ||
459 | conn.Open(); | ||
460 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
354 | { | 461 | { |
355 | if (createParamOnce) | 462 | using (IDataReader reader = cmd.ExecuteReader()) |
356 | { | 463 | { |
357 | cmd.Parameters.Add(_Database.CreateParameter("@uuid", uuid)); | 464 | while (reader.Read()) |
358 | createParamOnce = false; | 465 | { |
466 | result.Add(Convert.ToInt32(reader["EstateID"])); | ||
467 | } | ||
468 | reader.Close(); | ||
359 | } | 469 | } |
360 | else | 470 | } |
361 | cmd.Parameters["@uuid"].Value = uuid.Guid; //.ToString(); //TODO check if this works | 471 | } |
362 | 472 | ||
363 | cmd.ExecuteNonQuery(); | 473 | return result; |
474 | } | ||
475 | |||
476 | public List<int> GetEstatesByOwner(UUID ownerID) | ||
477 | { | ||
478 | List<int> result = new List<int>(); | ||
479 | string sql = "select estateID from estate_settings where EstateOwner = @EstateOwner"; | ||
480 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
481 | { | ||
482 | conn.Open(); | ||
483 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
484 | { | ||
485 | cmd.Parameters.AddWithValue("@EstateOwner", ownerID); | ||
486 | |||
487 | using (IDataReader reader = cmd.ExecuteReader()) | ||
488 | { | ||
489 | while (reader.Read()) | ||
490 | { | ||
491 | result.Add(Convert.ToInt32(reader["EstateID"])); | ||
492 | } | ||
493 | reader.Close(); | ||
494 | } | ||
495 | } | ||
496 | } | ||
497 | |||
498 | return result; | ||
499 | } | ||
500 | |||
501 | public bool LinkRegion(UUID regionID, int estateID) | ||
502 | { | ||
503 | string deleteSQL = "delete from estate_map where RegionID = @RegionID"; | ||
504 | string insertSQL = "insert into estate_map values (@RegionID, @EstateID)"; | ||
505 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
506 | { | ||
507 | conn.Open(); | ||
508 | SqlTransaction transaction = conn.BeginTransaction(); | ||
509 | |||
510 | try | ||
511 | { | ||
512 | using (SqlCommand cmd = new SqlCommand(deleteSQL, conn)) | ||
513 | { | ||
514 | cmd.Transaction = transaction; | ||
515 | cmd.Parameters.AddWithValue("@RegionID", regionID.Guid); | ||
516 | |||
517 | cmd.ExecuteNonQuery(); | ||
518 | } | ||
519 | |||
520 | using (SqlCommand cmd = new SqlCommand(insertSQL, conn)) | ||
521 | { | ||
522 | cmd.Transaction = transaction; | ||
523 | cmd.Parameters.AddWithValue("@RegionID", regionID.Guid); | ||
524 | cmd.Parameters.AddWithValue("@EstateID", estateID); | ||
525 | |||
526 | int ret = cmd.ExecuteNonQuery(); | ||
527 | |||
528 | if (ret != 0) | ||
529 | transaction.Commit(); | ||
530 | else | ||
531 | transaction.Rollback(); | ||
532 | |||
533 | return (ret != 0); | ||
534 | } | ||
535 | } | ||
536 | catch (Exception ex) | ||
537 | { | ||
538 | m_log.Error("[REGION DB]: LinkRegion failed: " + ex.Message); | ||
539 | transaction.Rollback(); | ||
540 | } | ||
541 | } | ||
542 | return false; | ||
543 | } | ||
544 | |||
545 | public List<UUID> GetRegions(int estateID) | ||
546 | { | ||
547 | List<UUID> result = new List<UUID>(); | ||
548 | string sql = "select RegionID from estate_map where EstateID = @EstateID"; | ||
549 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
550 | { | ||
551 | conn.Open(); | ||
552 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | ||
553 | { | ||
554 | cmd.Parameters.AddWithValue("@EstateID", estateID); | ||
555 | |||
556 | using (IDataReader reader = cmd.ExecuteReader()) | ||
557 | { | ||
558 | while (reader.Read()) | ||
559 | { | ||
560 | result.Add(DBGuid.FromDB(reader["RegionID"])); | ||
561 | } | ||
562 | reader.Close(); | ||
563 | } | ||
364 | } | 564 | } |
365 | } | 565 | } |
566 | |||
567 | return result; | ||
568 | } | ||
569 | |||
570 | public bool DeleteEstate(int estateID) | ||
571 | { | ||
572 | // TODO: Implementation! | ||
573 | return false; | ||
366 | } | 574 | } |
367 | #endregion | 575 | #endregion |
368 | } | 576 | } |