aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MSSQL/MSSQLEstateData.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data/MSSQL/MSSQLEstateData.cs')
-rw-r--r--OpenSim/Data/MSSQL/MSSQLEstateData.cs460
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
38namespace OpenSim.Data.MSSQL 38namespace 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 }