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.cs214
1 files changed, 149 insertions, 65 deletions
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index de52623..537ec85 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
@@ -173,9 +173,10 @@ namespace OpenSim.Data.MySQL
173 "ParticleSystem, ClickAction, Material, " + 173 "ParticleSystem, ClickAction, Material, " +
174 "CollisionSound, CollisionSoundVolume, " + 174 "CollisionSound, CollisionSoundVolume, " +
175 "PassTouches, " + 175 "PassTouches, " +
176 "PassCollisions, " +
176 "LinkNumber, MediaURL, KeyframeMotion, " + 177 "LinkNumber, MediaURL, KeyframeMotion, " +
177 "PhysicsShapeType, Density, GravityModifier, " + 178 "PhysicsShapeType, Density, GravityModifier, " +
178 "Friction, Restitution, DynAttrs " + 179 "Friction, Restitution, Vehicle, DynAttrs " +
179 ") values (" + "?UUID, " + 180 ") values (" + "?UUID, " +
180 "?CreationDate, ?Name, ?Text, " + 181 "?CreationDate, ?Name, ?Text, " +
181 "?Description, ?SitName, ?TouchName, " + 182 "?Description, ?SitName, ?TouchName, " +
@@ -207,10 +208,10 @@ namespace OpenSim.Data.MySQL
207 "?SaleType, ?ColorR, ?ColorG, " + 208 "?SaleType, ?ColorR, ?ColorG, " +
208 "?ColorB, ?ColorA, ?ParticleSystem, " + 209 "?ColorB, ?ColorA, ?ParticleSystem, " +
209 "?ClickAction, ?Material, ?CollisionSound, " + 210 "?ClickAction, ?Material, ?CollisionSound, " +
210 "?CollisionSoundVolume, ?PassTouches, " + 211 "?CollisionSoundVolume, ?PassTouches, ?PassCollisions, " +
211 "?LinkNumber, ?MediaURL, ?KeyframeMotion, " + 212 "?LinkNumber, ?MediaURL, ?KeyframeMotion, " +
212 "?PhysicsShapeType, ?Density, ?GravityModifier, " + 213 "?PhysicsShapeType, ?Density, ?GravityModifier, " +
213 "?Friction, ?Restitution, ?DynAttrs)"; 214 "?Friction, ?Restitution, ?Vehicle, ?DynAttrs)";
214 215
215 FillPrimCommand(cmd, prim, obj.UUID, regionUUID); 216 FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
216 217
@@ -250,7 +251,7 @@ namespace OpenSim.Data.MySQL
250 } 251 }
251 } 252 }
252 253
253 public void RemoveObject(UUID obj, UUID regionUUID) 254 public virtual void RemoveObject(UUID obj, UUID regionUUID)
254 { 255 {
255// m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID); 256// m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID);
256 257
@@ -399,7 +400,7 @@ namespace OpenSim.Data.MySQL
399 } 400 }
400 } 401 }
401 402
402 public List<SceneObjectGroup> LoadObjects(UUID regionID) 403 public virtual List<SceneObjectGroup> LoadObjects(UUID regionID)
403 { 404 {
404 const int ROWS_PER_QUERY = 5000; 405 const int ROWS_PER_QUERY = 5000;
405 406
@@ -570,36 +571,51 @@ namespace OpenSim.Data.MySQL
570 } 571 }
571 } 572 }
572 573
573 public void StoreTerrain(double[,] ter, UUID regionID) 574 public virtual void StoreTerrain(double[,] ter, UUID regionID)
574 { 575 {
575 m_log.Info("[REGION DB]: Storing terrain"); 576 Util.FireAndForget(delegate(object x)
576
577 lock (m_dbLock)
578 { 577 {
579 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 578 double[,] oldTerrain = LoadTerrain(regionID);
580 {
581 dbcon.Open();
582 579
583 using (MySqlCommand cmd = dbcon.CreateCommand()) 580 m_log.Info("[REGION DB]: Storing terrain");
581
582 lock (m_dbLock)
583 {
584 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
584 { 585 {
585 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID"; 586 dbcon.Open();
586 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
587 587
588 ExecuteNonQuery(cmd); 588 using (MySqlCommand cmd = dbcon.CreateCommand())
589 {
590 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID";
591 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
592
593 using (MySqlCommand cmd2 = dbcon.CreateCommand())
594 {
595 try
596 {
597 cmd2.CommandText = "insert into terrain (RegionUUID, " +
598 "Revision, Heightfield) values (?RegionUUID, " +
599 "1, ?Heightfield)";
589 600
590 cmd.CommandText = "insert into terrain (RegionUUID, " + 601 cmd2.Parameters.AddWithValue("RegionUUID", regionID.ToString());
591 "Revision, Heightfield) values (?RegionUUID, " + 602 cmd2.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter, oldTerrain));
592 "1, ?Heightfield)";
593
594 cmd.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter));
595 603
596 ExecuteNonQuery(cmd); 604 ExecuteNonQuery(cmd);
605 ExecuteNonQuery(cmd2);
606 }
607 catch (Exception e)
608 {
609 m_log.ErrorFormat(e.ToString());
610 }
611 }
612 }
597 } 613 }
598 } 614 }
599 } 615 });
600 } 616 }
601 617
602 public double[,] LoadTerrain(UUID regionID) 618 public virtual double[,] LoadTerrain(UUID regionID)
603 { 619 {
604 double[,] terrain = null; 620 double[,] terrain = null;
605 621
@@ -649,7 +665,7 @@ namespace OpenSim.Data.MySQL
649 return terrain; 665 return terrain;
650 } 666 }
651 667
652 public void RemoveLandObject(UUID globalID) 668 public virtual void RemoveLandObject(UUID globalID)
653 { 669 {
654 lock (m_dbLock) 670 lock (m_dbLock)
655 { 671 {
@@ -668,7 +684,7 @@ namespace OpenSim.Data.MySQL
668 } 684 }
669 } 685 }
670 686
671 public void StoreLandObject(ILandObject parcel) 687 public virtual void StoreLandObject(ILandObject parcel)
672 { 688 {
673 lock (m_dbLock) 689 lock (m_dbLock)
674 { 690 {
@@ -725,7 +741,7 @@ namespace OpenSim.Data.MySQL
725 } 741 }
726 } 742 }
727 743
728 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID) 744 public virtual RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
729 { 745 {
730 RegionLightShareData nWP = new RegionLightShareData(); 746 RegionLightShareData nWP = new RegionLightShareData();
731 nWP.OnSave += StoreRegionWindlightSettings; 747 nWP.OnSave += StoreRegionWindlightSettings;
@@ -826,7 +842,7 @@ namespace OpenSim.Data.MySQL
826 return nWP; 842 return nWP;
827 } 843 }
828 844
829 public RegionSettings LoadRegionSettings(UUID regionUUID) 845 public virtual RegionSettings LoadRegionSettings(UUID regionUUID)
830 { 846 {
831 RegionSettings rs = null; 847 RegionSettings rs = null;
832 848
@@ -866,7 +882,7 @@ namespace OpenSim.Data.MySQL
866 return rs; 882 return rs;
867 } 883 }
868 884
869 public void StoreRegionWindlightSettings(RegionLightShareData wl) 885 public virtual void StoreRegionWindlightSettings(RegionLightShareData wl)
870 { 886 {
871 lock (m_dbLock) 887 lock (m_dbLock)
872 { 888 {
@@ -972,7 +988,7 @@ namespace OpenSim.Data.MySQL
972 } 988 }
973 } 989 }
974 990
975 public void RemoveRegionWindlightSettings(UUID regionID) 991 public virtual void RemoveRegionWindlightSettings(UUID regionID)
976 { 992 {
977 lock (m_dbLock) 993 lock (m_dbLock)
978 { 994 {
@@ -1061,7 +1077,7 @@ namespace OpenSim.Data.MySQL
1061 } 1077 }
1062 #endregion 1078 #endregion
1063 1079
1064 public void StoreRegionSettings(RegionSettings rs) 1080 public virtual void StoreRegionSettings(RegionSettings rs)
1065 { 1081 {
1066 lock (m_dbLock) 1082 lock (m_dbLock)
1067 { 1083 {
@@ -1088,7 +1104,7 @@ namespace OpenSim.Data.MySQL
1088 "use_estate_sun, fixed_sun, sun_position, " + 1104 "use_estate_sun, fixed_sun, sun_position, " +
1089 "covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " + 1105 "covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " +
1090 "sunvectorz, loaded_creation_datetime, " + 1106 "sunvectorz, loaded_creation_datetime, " +
1091 "loaded_creation_id, map_tile_ID, " + 1107 "loaded_creation_id, map_tile_ID, block_search, casino, " +
1092 "TelehubObject, parcel_tile_ID) " + 1108 "TelehubObject, parcel_tile_ID) " +
1093 "values (?RegionUUID, ?BlockTerraform, " + 1109 "values (?RegionUUID, ?BlockTerraform, " +
1094 "?BlockFly, ?AllowDamage, ?RestrictPushing, " + 1110 "?BlockFly, ?AllowDamage, ?RestrictPushing, " +
@@ -1105,7 +1121,7 @@ namespace OpenSim.Data.MySQL
1105 "?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " + 1121 "?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " +
1106 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " + 1122 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
1107 "?LoadedCreationDateTime, ?LoadedCreationID, " + 1123 "?LoadedCreationDateTime, ?LoadedCreationID, " +
1108 "?TerrainImageID, " + 1124 "?TerrainImageID, ?block_search, ?casino, " +
1109 "?TelehubObject, ?ParcelImageID)"; 1125 "?TelehubObject, ?ParcelImageID)";
1110 1126
1111 FillRegionSettingsCommand(cmd, rs); 1127 FillRegionSettingsCommand(cmd, rs);
@@ -1117,7 +1133,7 @@ namespace OpenSim.Data.MySQL
1117 SaveSpawnPoints(rs); 1133 SaveSpawnPoints(rs);
1118 } 1134 }
1119 1135
1120 public List<LandData> LoadLandObjects(UUID regionUUID) 1136 public virtual List<LandData> LoadLandObjects(UUID regionUUID)
1121 { 1137 {
1122 List<LandData> landData = new List<LandData>(); 1138 List<LandData> landData = new List<LandData>();
1123 1139
@@ -1299,6 +1315,7 @@ namespace OpenSim.Data.MySQL
1299 prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"]; 1315 prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"];
1300 1316
1301 prim.PassTouches = ((sbyte)row["PassTouches"] != 0); 1317 prim.PassTouches = ((sbyte)row["PassTouches"] != 0);
1318 prim.PassCollisions = ((sbyte)row["PassCollisions"] != 0);
1302 prim.LinkNum = (int)row["LinkNumber"]; 1319 prim.LinkNum = (int)row["LinkNumber"];
1303 1320
1304 if (!(row["MediaURL"] is System.DBNull)) 1321 if (!(row["MediaURL"] is System.DBNull))
@@ -1328,6 +1345,15 @@ namespace OpenSim.Data.MySQL
1328 prim.Friction = (float)(double)row["Friction"]; 1345 prim.Friction = (float)(double)row["Friction"];
1329 prim.Restitution = (float)(double)row["Restitution"]; 1346 prim.Restitution = (float)(double)row["Restitution"];
1330 1347
1348 SOPVehicle vehicle = null;
1349
1350 if (row["Vehicle"].ToString() != String.Empty)
1351 {
1352 vehicle = SOPVehicle.FromXml2(row["Vehicle"].ToString());
1353 if (vehicle != null)
1354 prim.VehicleParams = vehicle;
1355 }
1356
1331 return prim; 1357 return prim;
1332 } 1358 }
1333 1359
@@ -1338,32 +1364,40 @@ namespace OpenSim.Data.MySQL
1338 /// <returns></returns> 1364 /// <returns></returns>
1339 private static TaskInventoryItem BuildItem(IDataReader row) 1365 private static TaskInventoryItem BuildItem(IDataReader row)
1340 { 1366 {
1341 TaskInventoryItem taskItem = new TaskInventoryItem(); 1367 try
1342 1368 {
1343 taskItem.ItemID = DBGuid.FromDB(row["itemID"]); 1369 TaskInventoryItem taskItem = new TaskInventoryItem();
1344 taskItem.ParentPartID = DBGuid.FromDB(row["primID"]); 1370
1345 taskItem.AssetID = DBGuid.FromDB(row["assetID"]); 1371 taskItem.ItemID = DBGuid.FromDB(row["itemID"]);
1346 taskItem.ParentID = DBGuid.FromDB(row["parentFolderID"]); 1372 taskItem.ParentPartID = DBGuid.FromDB(row["primID"]);
1347 1373 taskItem.AssetID = DBGuid.FromDB(row["assetID"]);
1348 taskItem.InvType = Convert.ToInt32(row["invType"]); 1374 taskItem.ParentID = DBGuid.FromDB(row["parentFolderID"]);
1349 taskItem.Type = Convert.ToInt32(row["assetType"]); 1375
1350 1376 taskItem.InvType = Convert.ToInt32(row["invType"]);
1351 taskItem.Name = (String)row["name"]; 1377 taskItem.Type = Convert.ToInt32(row["assetType"]);
1352 taskItem.Description = (String)row["description"]; 1378
1353 taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]); 1379 taskItem.Name = (String)row["name"];
1354 taskItem.CreatorIdentification = (String)row["creatorID"]; 1380 taskItem.Description = (String)row["description"];
1355 taskItem.OwnerID = DBGuid.FromDB(row["ownerID"]); 1381 taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]);
1356 taskItem.LastOwnerID = DBGuid.FromDB(row["lastOwnerID"]); 1382 taskItem.CreatorIdentification = (String)row["creatorID"];
1357 taskItem.GroupID = DBGuid.FromDB(row["groupID"]); 1383 taskItem.OwnerID = DBGuid.FromDB(row["ownerID"]);
1358 1384 taskItem.LastOwnerID = DBGuid.FromDB(row["lastOwnerID"]);
1359 taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]); 1385 taskItem.GroupID = DBGuid.FromDB(row["groupID"]);
1360 taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]); 1386
1361 taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]); 1387 taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]);
1362 taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]); 1388 taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]);
1363 taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]); 1389 taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]);
1364 taskItem.Flags = Convert.ToUInt32(row["flags"]); 1390 taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]);
1365 1391 taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]);
1366 return taskItem; 1392 taskItem.Flags = Convert.ToUInt32(row["flags"]);
1393
1394 return taskItem;
1395 }
1396 catch
1397 {
1398 m_log.ErrorFormat("[MYSQL DB]: Error reading task inventory: itemID was {0}, primID was {1}", row["itemID"].ToString(), row["primID"].ToString());
1399 throw;
1400 }
1367 } 1401 }
1368 1402
1369 private static RegionSettings BuildRegionSettings(IDataReader row) 1403 private static RegionSettings BuildRegionSettings(IDataReader row)
@@ -1421,6 +1455,9 @@ namespace OpenSim.Data.MySQL
1421 newSettings.ParcelImageID = DBGuid.FromDB(row["parcel_tile_ID"]); 1455 newSettings.ParcelImageID = DBGuid.FromDB(row["parcel_tile_ID"]);
1422 newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]); 1456 newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]);
1423 1457
1458 newSettings.GodBlockSearch = Convert.ToBoolean(row["block_search"]);
1459 newSettings.Casino = Convert.ToBoolean(row["casino"]);
1460
1424 return newSettings; 1461 return newSettings;
1425 } 1462 }
1426 1463
@@ -1518,7 +1555,7 @@ namespace OpenSim.Data.MySQL
1518 /// </summary> 1555 /// </summary>
1519 /// <param name="val"></param> 1556 /// <param name="val"></param>
1520 /// <returns></returns> 1557 /// <returns></returns>
1521 private static Array SerializeTerrain(double[,] val) 1558 private static Array SerializeTerrain(double[,] val, double[,] oldTerrain)
1522 { 1559 {
1523 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double)); 1560 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double));
1524 BinaryWriter bw = new BinaryWriter(str); 1561 BinaryWriter bw = new BinaryWriter(str);
@@ -1527,7 +1564,11 @@ namespace OpenSim.Data.MySQL
1527 for (int x = 0; x < (int)Constants.RegionSize; x++) 1564 for (int x = 0; x < (int)Constants.RegionSize; x++)
1528 for (int y = 0; y < (int)Constants.RegionSize; y++) 1565 for (int y = 0; y < (int)Constants.RegionSize; y++)
1529 { 1566 {
1530 double height = val[x, y]; 1567 double height = 20.0;
1568 if (oldTerrain != null)
1569 height = oldTerrain[x, y];
1570 if (!double.IsNaN(val[x, y]))
1571 height = val[x, y];
1531 if (height == 0.0) 1572 if (height == 0.0)
1532 height = double.Epsilon; 1573 height = double.Epsilon;
1533 1574
@@ -1671,6 +1712,11 @@ namespace OpenSim.Data.MySQL
1671 else 1712 else
1672 cmd.Parameters.AddWithValue("PassTouches", 0); 1713 cmd.Parameters.AddWithValue("PassTouches", 0);
1673 1714
1715 if (prim.PassCollisions)
1716 cmd.Parameters.AddWithValue("PassCollisions", 1);
1717 else
1718 cmd.Parameters.AddWithValue("PassCollisions", 0);
1719
1674 cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum); 1720 cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum);
1675 cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl); 1721 cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl);
1676 1722
@@ -1679,6 +1725,11 @@ namespace OpenSim.Data.MySQL
1679 else 1725 else
1680 cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]); 1726 cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]);
1681 1727
1728 if (prim.VehicleParams != null)
1729 cmd.Parameters.AddWithValue("Vehicle", prim.VehicleParams.ToXml2());
1730 else
1731 cmd.Parameters.AddWithValue("Vehicle", String.Empty);
1732
1682 if (prim.DynAttrs.Count > 0) 1733 if (prim.DynAttrs.Count > 0)
1683 cmd.Parameters.AddWithValue("DynAttrs", prim.DynAttrs.ToXml()); 1734 cmd.Parameters.AddWithValue("DynAttrs", prim.DynAttrs.ToXml());
1684 else 1735 else
@@ -1767,6 +1818,8 @@ namespace OpenSim.Data.MySQL
1767 cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime); 1818 cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime);
1768 cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID); 1819 cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID);
1769 cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID); 1820 cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID);
1821 cmd.Parameters.AddWithValue("block_search", settings.GodBlockSearch);
1822 cmd.Parameters.AddWithValue("casino", settings.Casino);
1770 1823
1771 cmd.Parameters.AddWithValue("ParcelImageID", settings.ParcelImageID); 1824 cmd.Parameters.AddWithValue("ParcelImageID", settings.ParcelImageID);
1772 cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject); 1825 cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject);
@@ -1928,7 +1981,7 @@ namespace OpenSim.Data.MySQL
1928 cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml()); 1981 cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml());
1929 } 1982 }
1930 1983
1931 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) 1984 public virtual void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
1932 { 1985 {
1933 lock (m_dbLock) 1986 lock (m_dbLock)
1934 { 1987 {
@@ -1972,6 +2025,37 @@ namespace OpenSim.Data.MySQL
1972 } 2025 }
1973 } 2026 }
1974 2027
2028 public UUID[] GetObjectIDs(UUID regionID)
2029 {
2030 List<UUID> uuids = new List<UUID>();
2031
2032 lock (m_dbLock)
2033 {
2034 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
2035 {
2036 dbcon.Open();
2037
2038 using (MySqlCommand cmd = dbcon.CreateCommand())
2039 {
2040 cmd.CommandText = "select UUID from prims where RegionUUID = ?RegionUUID and SceneGroupID = UUID";
2041 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
2042
2043 using (IDataReader reader = ExecuteReader(cmd))
2044 {
2045 while (reader.Read())
2046 {
2047 UUID id = new UUID(reader["UUID"].ToString());
2048
2049 uuids.Add(id);
2050 }
2051 }
2052 }
2053 }
2054 }
2055
2056 return uuids.ToArray();
2057 }
2058
1975 private void LoadSpawnPoints(RegionSettings rs) 2059 private void LoadSpawnPoints(RegionSettings rs)
1976 { 2060 {
1977 rs.ClearSpawnPoints(); 2061 rs.ClearSpawnPoints();