aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
diff options
context:
space:
mode:
authorJohn Hurliman2009-10-04 13:57:51 -0700
committerJohn Hurliman2009-10-04 13:57:51 -0700
commit29a4614529bbda02b9c690d2d1812be1d1e7bbae (patch)
tree89725829b37d502158a114c862a56a075b005b1b /OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
parentGuarding a line that is sometimes throwing a null pointer exception. (diff)
downloadopensim-SC_OLD-29a4614529bbda02b9c690d2d1812be1d1e7bbae.zip
opensim-SC_OLD-29a4614529bbda02b9c690d2d1812be1d1e7bbae.tar.gz
opensim-SC_OLD-29a4614529bbda02b9c690d2d1812be1d1e7bbae.tar.bz2
opensim-SC_OLD-29a4614529bbda02b9c690d2d1812be1d1e7bbae.tar.xz
* MySQL data tests now pass by fixing a bad fix for a bad cast on the asset Local member in MySQLAssetData
* First pass at applying the using(){} pattern to IDisposable objects. Always use the using pattern on IDisposable objects whenever possible, do not manually call .Close() or .Dispose() unless there is no other way to write the code. This pass mostly covers OpenSim.Data.MySQL, and should have no functional change (tests still pass)
Diffstat (limited to '')
-rw-r--r--OpenSim/Data/MySQL/MySQLLegacyRegionData.cs531
1 files changed, 234 insertions, 297 deletions
diff --git a/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs b/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
index f25bfd7..fe0914b 100644
--- a/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
+++ b/OpenSim/Data/MySQL/MySQLLegacyRegionData.cs
@@ -268,6 +268,8 @@ namespace OpenSim.Data.MySQL
268 268
269 public void RemoveObject(UUID obj, UUID regionUUID) 269 public void RemoveObject(UUID obj, UUID regionUUID)
270 { 270 {
271 List<UUID> uuids = new List<UUID>();
272
271 // Formerly, this used to check the region UUID. 273 // Formerly, this used to check the region UUID.
272 // That makes no sense, as we remove the contents of a prim 274 // That makes no sense, as we remove the contents of a prim
273 // unconditionally, but the prim dependent on the region ID. 275 // unconditionally, but the prim dependent on the region ID.
@@ -278,43 +280,31 @@ namespace OpenSim.Data.MySQL
278 // 280 //
279 lock (m_Connection) 281 lock (m_Connection)
280 { 282 {
281 MySqlCommand cmd = m_Connection.CreateCommand(); 283 using (MySqlCommand cmd = m_Connection.CreateCommand())
282
283 cmd.CommandText = "select UUID from prims where "+
284 "SceneGroupID= ?UUID";
285
286 cmd.Parameters.AddWithValue("UUID", obj.ToString());
287
288 List<UUID> uuids = new List<UUID>();
289
290 IDataReader reader = ExecuteReader(cmd);
291
292 try
293 { 284 {
294 while (reader.Read()) 285 cmd.CommandText = "select UUID from prims where SceneGroupID= ?UUID";
286 cmd.Parameters.AddWithValue("UUID", obj.ToString());
287
288 using (IDataReader reader = ExecuteReader(cmd))
295 { 289 {
296 uuids.Add(new UUID(reader["UUID"].ToString())); 290 while (reader.Read())
291 uuids.Add(new UUID(reader["UUID"].ToString()));
297 } 292 }
298 }
299 finally
300 {
301 reader.Close();
302 }
303
304 // delete the main prims
305 cmd.CommandText = "delete from prims where SceneGroupID= ?UUID";
306 ExecuteNonQuery(cmd);
307 cmd.Dispose();
308 293
309 // there is no way this should be < 1 unless there is 294 // delete the main prims
310 // a very corrupt database, but in that case be extra 295 cmd.CommandText = "delete from prims where SceneGroupID= ?UUID";
311 // safe anyway. 296 ExecuteNonQuery(cmd);
312 if (uuids.Count > 0)
313 {
314 RemoveShapes(uuids);
315 RemoveItems(uuids);
316 } 297 }
317 } 298 }
299
300 // there is no way this should be < 1 unless there is
301 // a very corrupt database, but in that case be extra
302 // safe anyway.
303 if (uuids.Count > 0)
304 {
305 RemoveShapes(uuids);
306 RemoveItems(uuids);
307 }
318 } 308 }
319 309
320 /// <summary> 310 /// <summary>
@@ -326,19 +316,16 @@ namespace OpenSim.Data.MySQL
326 { 316 {
327 lock (m_Connection) 317 lock (m_Connection)
328 { 318 {
329 MySqlCommand cmd = m_Connection.CreateCommand(); 319 using (MySqlCommand cmd = m_Connection.CreateCommand())
330 320 {
331 cmd.CommandText = "delete from primitems where " + 321 cmd.CommandText = "delete from primitems where PrimID = ?PrimID";
332 "PrimID = ?PrimID"; 322 cmd.Parameters.AddWithValue("PrimID", uuid.ToString());
333
334 cmd.Parameters.AddWithValue("PrimID", uuid.ToString());
335 323
336 ExecuteNonQuery(cmd); 324 ExecuteNonQuery(cmd);
337 cmd.Dispose(); 325 }
338 } 326 }
339 } 327 }
340 328
341
342 /// <summary> 329 /// <summary>
343 /// Remove all persisted shapes for a list of prims 330 /// Remove all persisted shapes for a list of prims
344 /// The caller must acquire the necessrary synchronization locks 331 /// The caller must acquire the necessrary synchronization locks
@@ -349,28 +336,27 @@ namespace OpenSim.Data.MySQL
349 lock (m_Connection) 336 lock (m_Connection)
350 { 337 {
351 string sql = "delete from primshapes where "; 338 string sql = "delete from primshapes where ";
352 MySqlCommand cmd = m_Connection.CreateCommand(); 339
353 340 using (MySqlCommand cmd = m_Connection.CreateCommand())
354 for (int i = 0; i < uuids.Count; i++)
355 { 341 {
356 if ((i + 1) == uuids.Count) 342 for (int i = 0; i < uuids.Count; i++)
357 {// end of the list
358 sql += "(UUID = ?UUID" + i + ")";
359 }
360 else
361 { 343 {
362 sql += "(UUID = ?UUID" + i + ") or "; 344 if ((i + 1) == uuids.Count)
345 {// end of the list
346 sql += "(UUID = ?UUID" + i + ")";
347 }
348 else
349 {
350 sql += "(UUID = ?UUID" + i + ") or ";
351 }
363 } 352 }
364 } 353 cmd.CommandText = sql;
365 cmd.CommandText = sql;
366 354
367 for (int i = 0; i < uuids.Count; i++) 355 for (int i = 0; i < uuids.Count; i++)
368 { 356 cmd.Parameters.AddWithValue("UUID" + i, uuids[i].ToString());
369 cmd.Parameters.AddWithValue("UUID" + i, uuids[i].ToString());
370 }
371 357
372 ExecuteNonQuery(cmd); 358 ExecuteNonQuery(cmd);
373 cmd.Dispose(); 359 }
374 } 360 }
375 } 361 }
376 362
@@ -384,28 +370,28 @@ namespace OpenSim.Data.MySQL
384 lock (m_Connection) 370 lock (m_Connection)
385 { 371 {
386 string sql = "delete from primitems where "; 372 string sql = "delete from primitems where ";
387 MySqlCommand cmd = m_Connection.CreateCommand(); 373
388 374 using (MySqlCommand cmd = m_Connection.CreateCommand())
389 for (int i = 0; i < uuids.Count; i++)
390 { 375 {
391 if ((i + 1) == uuids.Count) 376 for (int i = 0; i < uuids.Count; i++)
392 {// end of the list
393 sql += "(PrimID = ?PrimID" + i + ")";
394 }
395 else
396 { 377 {
397 sql += "(PrimID = ?PrimID" + i + ") or "; 378 if ((i + 1) == uuids.Count)
379 {
380 // end of the list
381 sql += "(PrimID = ?PrimID" + i + ")";
382 }
383 else
384 {
385 sql += "(PrimID = ?PrimID" + i + ") or ";
386 }
398 } 387 }
399 } 388 cmd.CommandText = sql;
400 cmd.CommandText = sql;
401 389
402 for (int i = 0; i < uuids.Count; i++) 390 for (int i = 0; i < uuids.Count; i++)
403 { 391 cmd.Parameters.AddWithValue("PrimID" + i, uuids[i].ToString());
404 cmd.Parameters.AddWithValue("PrimID" + i, uuids[i].ToString());
405 }
406 392
407 ExecuteNonQuery(cmd); 393 ExecuteNonQuery(cmd);
408 cmd.Dispose(); 394 }
409 } 395 }
410 } 396 }
411 397
@@ -418,77 +404,71 @@ namespace OpenSim.Data.MySQL
418 404
419 lock (m_Connection) 405 lock (m_Connection)
420 { 406 {
421 MySqlCommand cmd = m_Connection.CreateCommand(); 407 using (MySqlCommand cmd = m_Connection.CreateCommand())
422 408 {
423 cmd.CommandText = "select *, " + 409 cmd.CommandText = "select *, " +
424 "case when prims.UUID = SceneGroupID " + 410 "case when prims.UUID = SceneGroupID " +
425 "then 0 else 1 end as sort from prims " + 411 "then 0 else 1 end as sort from prims " +
426 "left join primshapes on prims.UUID = primshapes.UUID "+ 412 "left join primshapes on prims.UUID = primshapes.UUID " +
427 "where RegionUUID = ?RegionUUID " + 413 "where RegionUUID = ?RegionUUID " +
428 "order by SceneGroupID asc, sort asc, LinkNumber asc"; 414 "order by SceneGroupID asc, sort asc, LinkNumber asc";
429
430 cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString());
431 415
432 IDataReader reader = ExecuteReader(cmd); 416 cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString());
433 417
434 try 418 using (IDataReader reader = ExecuteReader(cmd))
435 {
436 while (reader.Read())
437 { 419 {
438 SceneObjectPart prim = BuildPrim(reader); 420 while (reader.Read())
439 if (reader["Shape"] is DBNull) 421 {
440 prim.Shape = PrimitiveBaseShape.Default; 422 SceneObjectPart prim = BuildPrim(reader);
441 else 423 if (reader["Shape"] is DBNull)
442 prim.Shape = BuildShape(reader); 424 prim.Shape = PrimitiveBaseShape.Default;
425 else
426 prim.Shape = BuildShape(reader);
443 427
444 prims[prim.UUID] = prim; 428 prims[prim.UUID] = prim;
445 429
446 UUID groupID = new UUID(reader["SceneGroupID"].ToString()); 430 UUID groupID = new UUID(reader["SceneGroupID"].ToString());
447 431
448 if (groupID != lastGroupID) // New SOG 432 if (groupID != lastGroupID) // New SOG
449 {
450 if (grp != null)
451 objects[grp.UUID] = grp;
452
453 lastGroupID = groupID;
454
455 // There sometimes exist OpenSim bugs that 'orphan groups' so that none of the prims are
456 // recorded as the root prim (for which the UUID must equal the persisted group UUID). In
457 // this case, force the UUID to be the same as the group UUID so that at least these can be
458 // deleted (we need to change the UUID so that any other prims in the linkset can also be
459 // deleted).
460 if (prim.UUID != groupID && groupID != UUID.Zero)
461 { 433 {
462 m_log.WarnFormat( 434 if (grp != null)
463 "[REGION DB]: Found root prim {0} {1} at {2} where group was actually {3}. Forcing UUID to group UUID", 435 objects[grp.UUID] = grp;
464 prim.Name, prim.UUID, prim.GroupPosition, groupID); 436
465 437 lastGroupID = groupID;
466 prim.UUID = groupID; 438
439 // There sometimes exist OpenSim bugs that 'orphan groups' so that none of the prims are
440 // recorded as the root prim (for which the UUID must equal the persisted group UUID). In
441 // this case, force the UUID to be the same as the group UUID so that at least these can be
442 // deleted (we need to change the UUID so that any other prims in the linkset can also be
443 // deleted).
444 if (prim.UUID != groupID && groupID != UUID.Zero)
445 {
446 m_log.WarnFormat(
447 "[REGION DB]: Found root prim {0} {1} at {2} where group was actually {3}. Forcing UUID to group UUID",
448 prim.Name, prim.UUID, prim.GroupPosition, groupID);
449
450 prim.UUID = groupID;
451 }
452
453 grp = new SceneObjectGroup(prim);
467 } 454 }
455 else
456 {
457 // Black magic to preserve link numbers
458 //
459 int link = prim.LinkNum;
468 460
469 grp = new SceneObjectGroup(prim); 461 grp.AddPart(prim);
470 }
471 else
472 {
473 // Black magic to preserve link numbers
474 //
475 int link = prim.LinkNum;
476
477 grp.AddPart(prim);
478 462
479 if (link != 0) 463 if (link != 0)
480 prim.LinkNum = link; 464 prim.LinkNum = link;
465 }
481 } 466 }
482 } 467 }
483 }
484 finally
485 {
486 reader.Close();
487 }
488 468
489 if (grp != null) 469 if (grp != null)
490 objects[grp.UUID] = grp; 470 objects[grp.UUID] = grp;
491 cmd.Dispose(); 471 }
492 } 472 }
493 473
494 // Instead of attempting to LoadItems on every prim, 474 // Instead of attempting to LoadItems on every prim,
@@ -498,34 +478,29 @@ namespace OpenSim.Data.MySQL
498 List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>(); 478 List<SceneObjectPart> primsWithInventory = new List<SceneObjectPart>();
499 lock (m_Connection) 479 lock (m_Connection)
500 { 480 {
501 MySqlCommand itemCmd = m_Connection.CreateCommand(); 481 using (MySqlCommand itemCmd = m_Connection.CreateCommand())
502 itemCmd.CommandText = "select distinct primID from primitems";
503 IDataReader itemReader = ExecuteReader(itemCmd);
504 try
505 { 482 {
506 while (itemReader.Read()) 483 itemCmd.CommandText = "select distinct primID from primitems";
484 using (IDataReader itemReader = ExecuteReader(itemCmd))
507 { 485 {
508 if (!(itemReader["primID"] is DBNull)) 486 while (itemReader.Read())
509 { 487 {
510 UUID primID = new UUID(itemReader["primID"].ToString()); 488 if (!(itemReader["primID"] is DBNull))
511 if (prims.ContainsKey(primID))
512 { 489 {
513 primsWithInventory.Add(prims[primID]); 490 UUID primID = new UUID(itemReader["primID"].ToString());
491 if (prims.ContainsKey(primID))
492 {
493 primsWithInventory.Add(prims[primID]);
494 }
514 } 495 }
515 } 496 }
516 } 497 }
517 } 498 }
518 finally
519 {
520 itemReader.Close();
521 }
522 itemCmd.Dispose();
523 } 499 }
524 500
525 foreach (SceneObjectPart prim in primsWithInventory) 501 foreach (SceneObjectPart prim in primsWithInventory)
526 {
527 LoadItems(prim); 502 LoadItems(prim);
528 } 503
529 m_log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", objects.Count, prims.Count); 504 m_log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", objects.Count, prims.Count);
530 return new List<SceneObjectGroup>(objects.Values); 505 return new List<SceneObjectGroup>(objects.Values);
531 } 506 }
@@ -538,34 +513,25 @@ namespace OpenSim.Data.MySQL
538 { 513 {
539 lock (m_Connection) 514 lock (m_Connection)
540 { 515 {
541 MySqlCommand cmd = m_Connection.CreateCommand(); 516 List<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
542
543 cmd.CommandText = "select * from primitems where "+
544 "PrimID = ?PrimID";
545 517
546 cmd.Parameters.AddWithValue("PrimID", prim.UUID.ToString()); 518 using (MySqlCommand cmd = m_Connection.CreateCommand())
547
548 IDataReader reader = ExecuteReader(cmd);
549 List<TaskInventoryItem> inventory =
550 new List<TaskInventoryItem>();
551
552 try
553 { 519 {
554 while (reader.Read()) 520 cmd.CommandText = "select * from primitems where PrimID = ?PrimID";
521 cmd.Parameters.AddWithValue("PrimID", prim.UUID.ToString());
522
523 using (IDataReader reader = ExecuteReader(cmd))
555 { 524 {
556 TaskInventoryItem item = BuildItem(reader); 525 while (reader.Read())
526 {
527 TaskInventoryItem item = BuildItem(reader);
557 528
558 item.ParentID = prim.UUID; // Values in database are 529 item.ParentID = prim.UUID; // Values in database are often wrong
559 // often wrong 530 inventory.Add(item);
560 inventory.Add(item); 531 }
561 } 532 }
562 } 533 }
563 finally
564 {
565 reader.Close();
566 }
567 534
568 cmd.Dispose();
569 prim.Inventory.RestoreInventoryItems(inventory); 535 prim.Inventory.RestoreInventoryItems(inventory);
570 } 536 }
571 } 537 }
@@ -576,23 +542,21 @@ namespace OpenSim.Data.MySQL
576 542
577 lock (m_Connection) 543 lock (m_Connection)
578 { 544 {
579 MySqlCommand cmd = m_Connection.CreateCommand(); 545 using (MySqlCommand cmd = m_Connection.CreateCommand())
546 {
547 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID";
548 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
580 549
581 cmd.CommandText = "delete from terrain where " + 550 ExecuteNonQuery(cmd);
582 "RegionUUID = ?RegionUUID";
583 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
584 551
585 ExecuteNonQuery(cmd); 552 cmd.CommandText = "insert into terrain (RegionUUID, " +
586
587 cmd.CommandText = "insert into terrain (RegionUUID, " +
588 "Revision, Heightfield) values (?RegionUUID, " + 553 "Revision, Heightfield) values (?RegionUUID, " +
589 "1, ?Heightfield)"; 554 "1, ?Heightfield)";
590 555
591 cmd.Parameters.AddWithValue("Heightfield", 556 cmd.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter));
592 SerializeTerrain(ter)); 557
593 558 ExecuteNonQuery(cmd);
594 ExecuteNonQuery(cmd); 559 }
595 cmd.Dispose();
596 } 560 }
597 } 561 }
598 562
@@ -602,42 +566,40 @@ namespace OpenSim.Data.MySQL
602 566
603 lock (m_Connection) 567 lock (m_Connection)
604 { 568 {
605 MySqlCommand cmd = m_Connection.CreateCommand(); 569 using (MySqlCommand cmd = m_Connection.CreateCommand())
606 cmd.CommandText = "select RegionUUID, Revision, Heightfield " + 570 {
607 "from terrain where RegionUUID = ?RegionUUID "+ 571 cmd.CommandText = "select RegionUUID, Revision, Heightfield " +
572 "from terrain where RegionUUID = ?RegionUUID " +
608 "order by Revision desc limit 1"; 573 "order by Revision desc limit 1";
609 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString()); 574 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
610
611 IDataReader reader = ExecuteReader(cmd);
612 575
613 try 576 using (IDataReader reader = ExecuteReader(cmd))
614 {
615 while (reader.Read())
616 { 577 {
617 terrain = new double[(int)Constants.RegionSize, (int)Constants.RegionSize]; 578 while (reader.Read())
618 terrain.Initialize(); 579 {
580 int rev = Convert.ToInt32(reader["Revision"]);
619 581
620 MemoryStream mstr = new MemoryStream((byte[]) reader["Heightfield"]); 582 terrain = new double[(int)Constants.RegionSize, (int)Constants.RegionSize];
621 int rev = 0; 583 terrain.Initialize();
622 584
623 BinaryReader br = new BinaryReader(mstr); 585 using (MemoryStream mstr = new MemoryStream((byte[])reader["Heightfield"]))
624 for (int x = 0; x < (int)Constants.RegionSize; x++)
625 {
626 for (int y = 0; y < (int)Constants.RegionSize; y++)
627 { 586 {
628 terrain[x, y] = br.ReadDouble(); 587 using (BinaryReader br = new BinaryReader(mstr))
588 {
589 for (int x = 0; x < (int)Constants.RegionSize; x++)
590 {
591 for (int y = 0; y < (int)Constants.RegionSize; y++)
592 {
593 terrain[x, y] = br.ReadDouble();
594 }
595 }
596 }
597
598 m_log.InfoFormat("[REGION DB]: Loaded terrain revision r{0}", rev);
629 } 599 }
630 rev = Convert.ToInt32(reader["Revision"]);
631 } 600 }
632 m_log.InfoFormat("[REGION DB]: Loaded terrain " +
633 "revision r{0}", rev);
634 } 601 }
635 } 602 }
636 finally
637 {
638 reader.Close();
639 }
640 cmd.Dispose();
641 } 603 }
642 604
643 return terrain; 605 return terrain;
@@ -647,14 +609,13 @@ namespace OpenSim.Data.MySQL
647 { 609 {
648 lock (m_Connection) 610 lock (m_Connection)
649 { 611 {
650 MySqlCommand cmd = m_Connection.CreateCommand(); 612 using (MySqlCommand cmd = m_Connection.CreateCommand())
651 613 {
652 cmd.CommandText = "delete from land where UUID = ?UUID"; 614 cmd.CommandText = "delete from land where UUID = ?UUID";
653 615 cmd.Parameters.AddWithValue("UUID", globalID.ToString());
654 cmd.Parameters.AddWithValue("UUID", globalID.ToString());
655 616
656 ExecuteNonQuery(cmd); 617 ExecuteNonQuery(cmd);
657 cmd.Dispose(); 618 }
658 } 619 }
659 } 620 }
660 621
@@ -662,9 +623,9 @@ namespace OpenSim.Data.MySQL
662 { 623 {
663 lock (m_Connection) 624 lock (m_Connection)
664 { 625 {
665 MySqlCommand cmd = m_Connection.CreateCommand(); 626 using (MySqlCommand cmd = m_Connection.CreateCommand())
666 627 {
667 cmd.CommandText = "replace into land (UUID, RegionUUID, " + 628 cmd.CommandText = "replace into land (UUID, RegionUUID, " +
668 "LocalLandID, Bitmap, Name, Description, " + 629 "LocalLandID, Bitmap, Name, Description, " +
669 "OwnerUUID, IsGroupOwned, Area, AuctionID, " + 630 "OwnerUUID, IsGroupOwned, Area, AuctionID, " +
670 "Category, ClaimDate, ClaimPrice, GroupUUID, " + 631 "Category, ClaimDate, ClaimPrice, GroupUUID, " +
@@ -685,28 +646,26 @@ namespace OpenSim.Data.MySQL
685 "?UserLookAtX, ?UserLookAtY, ?UserLookAtZ, " + 646 "?UserLookAtX, ?UserLookAtY, ?UserLookAtZ, " +
686 "?AuthbuyerID, ?OtherCleanTime, ?Dwell)"; 647 "?AuthbuyerID, ?OtherCleanTime, ?Dwell)";
687 648
688 FillLandCommand(cmd, parcel.LandData, parcel.RegionUUID); 649 FillLandCommand(cmd, parcel.LandData, parcel.RegionUUID);
689 650
690 ExecuteNonQuery(cmd); 651 ExecuteNonQuery(cmd);
691
692 cmd.CommandText = "delete from landaccesslist where " +
693 "LandUUID = ?UUID";
694
695 ExecuteNonQuery(cmd);
696 652
697 cmd.Parameters.Clear(); 653 cmd.CommandText = "delete from landaccesslist where LandUUID = ?UUID";
698 cmd.CommandText = "insert into landaccesslist (LandUUID, " +
699 "AccessUUID, Flags) values (?LandUUID, ?AccessUUID, " +
700 "?Flags)";
701 654
702 foreach (ParcelManager.ParcelAccessEntry entry in
703 parcel.LandData.ParcelAccessList)
704 {
705 FillLandAccessCommand(cmd, entry, parcel.LandData.GlobalID);
706 ExecuteNonQuery(cmd); 655 ExecuteNonQuery(cmd);
656
707 cmd.Parameters.Clear(); 657 cmd.Parameters.Clear();
658 cmd.CommandText = "insert into landaccesslist (LandUUID, " +
659 "AccessUUID, Flags) values (?LandUUID, ?AccessUUID, " +
660 "?Flags)";
661
662 foreach (ParcelManager.ParcelAccessEntry entry in parcel.LandData.ParcelAccessList)
663 {
664 FillLandAccessCommand(cmd, entry, parcel.LandData.GlobalID);
665 ExecuteNonQuery(cmd);
666 cmd.Parameters.Clear();
667 }
708 } 668 }
709 cmd.Dispose();
710 } 669 }
711 } 670 }
712 671
@@ -716,35 +675,28 @@ namespace OpenSim.Data.MySQL
716 675
717 lock (m_Connection) 676 lock (m_Connection)
718 { 677 {
719 MySqlCommand cmd = m_Connection.CreateCommand(); 678 using (MySqlCommand cmd = m_Connection.CreateCommand())
720
721 cmd.CommandText = "select * from regionsettings where " +
722 "regionUUID = ?RegionUUID";
723 cmd.Parameters.AddWithValue("regionUUID", regionUUID);
724
725 IDataReader reader = ExecuteReader(cmd);
726
727 try
728 { 679 {
729 if (reader.Read()) 680 cmd.CommandText = "select * from regionsettings where regionUUID = ?RegionUUID";
730 { 681 cmd.Parameters.AddWithValue("regionUUID", regionUUID);
731 rs = BuildRegionSettings(reader); 682
732 rs.OnSave += StoreRegionSettings; 683 using (IDataReader reader = ExecuteReader(cmd))
733 }
734 else
735 { 684 {
736 rs = new RegionSettings(); 685 if (reader.Read())
737 rs.RegionUUID = regionUUID; 686 {
738 rs.OnSave += StoreRegionSettings; 687 rs = BuildRegionSettings(reader);
688 rs.OnSave += StoreRegionSettings;
689 }
690 else
691 {
692 rs = new RegionSettings();
693 rs.RegionUUID = regionUUID;
694 rs.OnSave += StoreRegionSettings;
739 695
740 StoreRegionSettings(rs); 696 StoreRegionSettings(rs);
697 }
741 } 698 }
742 } 699 }
743 finally
744 {
745 reader.Close();
746 }
747 cmd.Dispose();
748 } 700 }
749 701
750 return rs; 702 return rs;
@@ -754,9 +706,9 @@ namespace OpenSim.Data.MySQL
754 { 706 {
755 lock (m_Connection) 707 lock (m_Connection)
756 { 708 {
757 MySqlCommand cmd = m_Connection.CreateCommand(); 709 using (MySqlCommand cmd = m_Connection.CreateCommand())
758 710 {
759 cmd.CommandText = "replace into regionsettings (regionUUID, " + 711 cmd.CommandText = "replace into regionsettings (regionUUID, " +
760 "block_terraform, block_fly, allow_damage, " + 712 "block_terraform, block_fly, allow_damage, " +
761 "restrict_pushing, allow_land_resell, " + 713 "restrict_pushing, allow_land_resell, " +
762 "allow_land_join_divide, block_show_in_search, " + 714 "allow_land_join_divide, block_show_in_search, " +
@@ -766,8 +718,8 @@ namespace OpenSim.Data.MySQL
766 "terrain_texture_2, terrain_texture_3, " + 718 "terrain_texture_2, terrain_texture_3, " +
767 "terrain_texture_4, elevation_1_nw, " + 719 "terrain_texture_4, elevation_1_nw, " +
768 "elevation_2_nw, elevation_1_ne, " + 720 "elevation_2_nw, elevation_1_ne, " +
769 "elevation_2_ne, elevation_1_se, "+ 721 "elevation_2_ne, elevation_1_se, " +
770 "elevation_2_se, elevation_1_sw, "+ 722 "elevation_2_se, elevation_1_sw, " +
771 "elevation_2_sw, water_height, " + 723 "elevation_2_sw, water_height, " +
772 "terrain_raise_limit, terrain_lower_limit, " + 724 "terrain_raise_limit, terrain_lower_limit, " +
773 "use_estate_sun, fixed_sun, sun_position, " + 725 "use_estate_sun, fixed_sun, sun_position, " +
@@ -789,11 +741,10 @@ namespace OpenSim.Data.MySQL
789 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " + 741 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
790 "?LoadedCreationDateTime, ?LoadedCreationID)"; 742 "?LoadedCreationDateTime, ?LoadedCreationID)";
791 743
792 FillRegionSettingsCommand(cmd, rs); 744 FillRegionSettingsCommand(cmd, rs);
793
794 ExecuteNonQuery(cmd);
795 cmd.Dispose();
796 745
746 ExecuteNonQuery(cmd);
747 }
797 } 748 }
798 } 749 }
799 750
@@ -803,52 +754,38 @@ namespace OpenSim.Data.MySQL
803 754
804 lock (m_Connection) 755 lock (m_Connection)
805 { 756 {
806 MySqlCommand cmd = m_Connection.CreateCommand(); 757 using (MySqlCommand cmd = m_Connection.CreateCommand())
807
808 cmd.CommandText = "select * from land where " +
809 "RegionUUID = ?RegionUUID";
810
811 cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString());
812
813 IDataReader reader = ExecuteReader(cmd);
814
815 try
816 { 758 {
817 while (reader.Read()) 759 cmd.CommandText = "select * from land where RegionUUID = ?RegionUUID";
760 cmd.Parameters.AddWithValue("RegionUUID", regionUUID.ToString());
761
762 using (IDataReader reader = ExecuteReader(cmd))
818 { 763 {
819 LandData newLand = BuildLandData(reader); 764 while (reader.Read())
820 landData.Add(newLand); 765 {
766 LandData newLand = BuildLandData(reader);
767 landData.Add(newLand);
768 }
821 } 769 }
822 } 770 }
823 finally
824 {
825 reader.Close();
826 }
827 771
828 foreach (LandData land in landData) 772 using (MySqlCommand cmd = m_Connection.CreateCommand())
829 { 773 {
830 cmd.Parameters.Clear(); 774 foreach (LandData land in landData)
831
832 cmd.CommandText = "select * from landaccesslist " +
833 "where LandUUID = ?LandUUID";
834
835 cmd.Parameters.AddWithValue("LandUUID", land.GlobalID.ToString());
836
837 reader = ExecuteReader(cmd);
838
839 try
840 { 775 {
841 while (reader.Read()) 776 cmd.Parameters.Clear();
777 cmd.CommandText = "select * from landaccesslist where LandUUID = ?LandUUID";
778 cmd.Parameters.AddWithValue("LandUUID", land.GlobalID.ToString());
779
780 using (IDataReader reader = ExecuteReader(cmd))
842 { 781 {
843 land.ParcelAccessList.Add(BuildLandAccessData(reader)); 782 while (reader.Read())
783 {
784 land.ParcelAccessList.Add(BuildLandAccessData(reader));
785 }
844 } 786 }
845 } 787 }
846 finally
847 {
848 reader.Close();
849 }
850 } 788 }
851 cmd.Dispose();
852 } 789 }
853 790
854 return landData; 791 return landData;