aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MySQL/MySQLSimulationData.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data/MySQL/MySQLSimulationData.cs')
-rw-r--r--OpenSim/Data/MySQL/MySQLSimulationData.cs98
1 files changed, 62 insertions, 36 deletions
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 31d17f1..a346548 100644
--- a/OpenSim/Data/MySQL/MySQLSimulationData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -66,7 +66,7 @@ namespace OpenSim.Data.MySQL
66 Initialise(connectionString); 66 Initialise(connectionString);
67 } 67 }
68 68
69 public void Initialise(string connectionString) 69 public virtual void Initialise(string connectionString)
70 { 70 {
71 m_connectionString = connectionString; 71 m_connectionString = connectionString;
72 72
@@ -113,7 +113,7 @@ namespace OpenSim.Data.MySQL
113 113
114 public void Dispose() {} 114 public void Dispose() {}
115 115
116 public void StoreObject(SceneObjectGroup obj, UUID regionUUID) 116 public virtual void StoreObject(SceneObjectGroup obj, UUID regionUUID)
117 { 117 {
118 uint flags = obj.RootPart.GetEffectiveObjectFlags(); 118 uint flags = obj.RootPart.GetEffectiveObjectFlags();
119 119
@@ -241,7 +241,7 @@ namespace OpenSim.Data.MySQL
241 } 241 }
242 } 242 }
243 243
244 public void RemoveObject(UUID obj, UUID regionUUID) 244 public virtual void RemoveObject(UUID obj, UUID regionUUID)
245 { 245 {
246// m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID); 246// m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID);
247 247
@@ -390,7 +390,7 @@ namespace OpenSim.Data.MySQL
390 } 390 }
391 } 391 }
392 392
393 public List<SceneObjectGroup> LoadObjects(UUID regionID) 393 public virtual List<SceneObjectGroup> LoadObjects(UUID regionID)
394 { 394 {
395 const int ROWS_PER_QUERY = 5000; 395 const int ROWS_PER_QUERY = 5000;
396 396
@@ -559,36 +559,51 @@ namespace OpenSim.Data.MySQL
559 } 559 }
560 } 560 }
561 561
562 public void StoreTerrain(double[,] ter, UUID regionID) 562 public virtual void StoreTerrain(double[,] ter, UUID regionID)
563 { 563 {
564 m_log.Info("[REGION DB]: Storing terrain"); 564 Util.FireAndForget(delegate(object x)
565
566 lock (m_dbLock)
567 { 565 {
568 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 566 double[,] oldTerrain = LoadTerrain(regionID);
569 {
570 dbcon.Open();
571 567
572 using (MySqlCommand cmd = dbcon.CreateCommand()) 568 m_log.Info("[REGION DB]: Storing terrain");
569
570 lock (m_dbLock)
571 {
572 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
573 { 573 {
574 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID"; 574 dbcon.Open();
575 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
576 575
577 ExecuteNonQuery(cmd); 576 using (MySqlCommand cmd = dbcon.CreateCommand())
577 {
578 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID";
579 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
578 580
579 cmd.CommandText = "insert into terrain (RegionUUID, " + 581 using (MySqlCommand cmd2 = dbcon.CreateCommand())
580 "Revision, Heightfield) values (?RegionUUID, " + 582 {
581 "1, ?Heightfield)"; 583 try
584 {
585 cmd2.CommandText = "insert into terrain (RegionUUID, " +
586 "Revision, Heightfield) values (?RegionUUID, " +
587 "1, ?Heightfield)";
582 588
583 cmd.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter)); 589 cmd2.Parameters.AddWithValue("RegionUUID", regionID.ToString());
590 cmd2.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter, oldTerrain));
584 591
585 ExecuteNonQuery(cmd); 592 ExecuteNonQuery(cmd);
593 ExecuteNonQuery(cmd2);
594 }
595 catch (Exception e)
596 {
597 m_log.ErrorFormat(e.ToString());
598 }
599 }
600 }
586 } 601 }
587 } 602 }
588 } 603 });
589 } 604 }
590 605
591 public double[,] LoadTerrain(UUID regionID) 606 public virtual double[,] LoadTerrain(UUID regionID)
592 { 607 {
593 double[,] terrain = null; 608 double[,] terrain = null;
594 609
@@ -638,7 +653,7 @@ namespace OpenSim.Data.MySQL
638 return terrain; 653 return terrain;
639 } 654 }
640 655
641 public void RemoveLandObject(UUID globalID) 656 public virtual void RemoveLandObject(UUID globalID)
642 { 657 {
643 lock (m_dbLock) 658 lock (m_dbLock)
644 { 659 {
@@ -657,7 +672,7 @@ namespace OpenSim.Data.MySQL
657 } 672 }
658 } 673 }
659 674
660 public void StoreLandObject(ILandObject parcel) 675 public virtual void StoreLandObject(ILandObject parcel)
661 { 676 {
662 lock (m_dbLock) 677 lock (m_dbLock)
663 { 678 {
@@ -714,7 +729,7 @@ namespace OpenSim.Data.MySQL
714 } 729 }
715 } 730 }
716 731
717 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID) 732 public virtual RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
718 { 733 {
719 RegionLightShareData nWP = new RegionLightShareData(); 734 RegionLightShareData nWP = new RegionLightShareData();
720 nWP.OnSave += StoreRegionWindlightSettings; 735 nWP.OnSave += StoreRegionWindlightSettings;
@@ -736,7 +751,7 @@ namespace OpenSim.Data.MySQL
736 { 751 {
737 //No result, so store our default windlight profile and return it 752 //No result, so store our default windlight profile and return it
738 nWP.regionID = regionUUID; 753 nWP.regionID = regionUUID;
739 StoreRegionWindlightSettings(nWP); 754 // StoreRegionWindlightSettings(nWP);
740 return nWP; 755 return nWP;
741 } 756 }
742 else 757 else
@@ -811,7 +826,7 @@ namespace OpenSim.Data.MySQL
811 return nWP; 826 return nWP;
812 } 827 }
813 828
814 public RegionSettings LoadRegionSettings(UUID regionUUID) 829 public virtual RegionSettings LoadRegionSettings(UUID regionUUID)
815 { 830 {
816 RegionSettings rs = null; 831 RegionSettings rs = null;
817 832
@@ -851,7 +866,7 @@ namespace OpenSim.Data.MySQL
851 return rs; 866 return rs;
852 } 867 }
853 868
854 public void StoreRegionWindlightSettings(RegionLightShareData wl) 869 public virtual void StoreRegionWindlightSettings(RegionLightShareData wl)
855 { 870 {
856 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 871 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
857 { 872 {
@@ -954,7 +969,7 @@ namespace OpenSim.Data.MySQL
954 } 969 }
955 } 970 }
956 971
957 public void RemoveRegionWindlightSettings(UUID regionID) 972 public virtual void RemoveRegionWindlightSettings(UUID regionID)
958 { 973 {
959 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 974 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
960 { 975 {
@@ -969,7 +984,7 @@ namespace OpenSim.Data.MySQL
969 } 984 }
970 } 985 }
971 986
972 public void StoreRegionSettings(RegionSettings rs) 987 public virtual void StoreRegionSettings(RegionSettings rs)
973 { 988 {
974 lock (m_dbLock) 989 lock (m_dbLock)
975 { 990 {
@@ -996,7 +1011,7 @@ namespace OpenSim.Data.MySQL
996 "use_estate_sun, fixed_sun, sun_position, " + 1011 "use_estate_sun, fixed_sun, sun_position, " +
997 "covenant, Sandbox, sunvectorx, sunvectory, " + 1012 "covenant, Sandbox, sunvectorx, sunvectory, " +
998 "sunvectorz, loaded_creation_datetime, " + 1013 "sunvectorz, loaded_creation_datetime, " +
999 "loaded_creation_id, map_tile_ID, " + 1014 "loaded_creation_id, map_tile_ID, block_search, casino, " +
1000 "TelehubObject) " + 1015 "TelehubObject) " +
1001 "values (?RegionUUID, ?BlockTerraform, " + 1016 "values (?RegionUUID, ?BlockTerraform, " +
1002 "?BlockFly, ?AllowDamage, ?RestrictPushing, " + 1017 "?BlockFly, ?AllowDamage, ?RestrictPushing, " +
@@ -1013,7 +1028,8 @@ namespace OpenSim.Data.MySQL
1013 "?SunPosition, ?Covenant, ?Sandbox, " + 1028 "?SunPosition, ?Covenant, ?Sandbox, " +
1014 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " + 1029 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
1015 "?LoadedCreationDateTime, ?LoadedCreationID, " + 1030 "?LoadedCreationDateTime, ?LoadedCreationID, " +
1016 "?TerrainImageID, ?TelehubObject) "; 1031 "?TerrainImageID, ?block_search, ?casino, " +
1032 "?TelehubObject, " +
1017 1033
1018 FillRegionSettingsCommand(cmd, rs); 1034 FillRegionSettingsCommand(cmd, rs);
1019 1035
@@ -1024,7 +1040,7 @@ namespace OpenSim.Data.MySQL
1024 SaveSpawnPoints(rs); 1040 SaveSpawnPoints(rs);
1025 } 1041 }
1026 1042
1027 public List<LandData> LoadLandObjects(UUID regionUUID) 1043 public virtual List<LandData> LoadLandObjects(UUID regionUUID)
1028 { 1044 {
1029 List<LandData> landData = new List<LandData>(); 1045 List<LandData> landData = new List<LandData>();
1030 1046
@@ -1303,6 +1319,9 @@ namespace OpenSim.Data.MySQL
1303 newSettings.TerrainImageID = DBGuid.FromDB(row["map_tile_ID"]); 1319 newSettings.TerrainImageID = DBGuid.FromDB(row["map_tile_ID"]);
1304 newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]); 1320 newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]);
1305 1321
1322 newSettings.GodBlockSearch = Convert.ToBoolean(row["block_search"]);
1323 newSettings.Casino = Convert.ToBoolean(row["casino"]);
1324
1306 return newSettings; 1325 return newSettings;
1307 } 1326 }
1308 1327
@@ -1400,7 +1419,7 @@ namespace OpenSim.Data.MySQL
1400 /// </summary> 1419 /// </summary>
1401 /// <param name="val"></param> 1420 /// <param name="val"></param>
1402 /// <returns></returns> 1421 /// <returns></returns>
1403 private static Array SerializeTerrain(double[,] val) 1422 private static Array SerializeTerrain(double[,] val, double[,] oldTerrain)
1404 { 1423 {
1405 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double)); 1424 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double));
1406 BinaryWriter bw = new BinaryWriter(str); 1425 BinaryWriter bw = new BinaryWriter(str);
@@ -1409,7 +1428,11 @@ namespace OpenSim.Data.MySQL
1409 for (int x = 0; x < (int)Constants.RegionSize; x++) 1428 for (int x = 0; x < (int)Constants.RegionSize; x++)
1410 for (int y = 0; y < (int)Constants.RegionSize; y++) 1429 for (int y = 0; y < (int)Constants.RegionSize; y++)
1411 { 1430 {
1412 double height = val[x, y]; 1431 double height = 20.0;
1432 if (oldTerrain != null)
1433 height = oldTerrain[x, y];
1434 if (!double.IsNaN(val[x, y]))
1435 height = val[x, y];
1413 if (height == 0.0) 1436 if (height == 0.0)
1414 height = double.Epsilon; 1437 height = double.Epsilon;
1415 1438
@@ -1632,6 +1655,9 @@ namespace OpenSim.Data.MySQL
1632 cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime); 1655 cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime);
1633 cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID); 1656 cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID);
1634 cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID); 1657 cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID);
1658 cmd.Parameters.AddWithValue("block_search", settings.GodBlockSearch);
1659 cmd.Parameters.AddWithValue("casino", settings.Casino);
1660
1635 cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject); 1661 cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject);
1636 } 1662 }
1637 1663
@@ -1790,7 +1816,7 @@ namespace OpenSim.Data.MySQL
1790 cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml()); 1816 cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml());
1791 } 1817 }
1792 1818
1793 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) 1819 public virtual void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
1794 { 1820 {
1795 lock (m_dbLock) 1821 lock (m_dbLock)
1796 { 1822 {