diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Data/MySQL/MySQLSimulationData.cs | 274 |
1 files changed, 201 insertions, 73 deletions
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs index 3fc04ee..4d7c0c9 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,14 +113,16 @@ 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 | ||
120 | // Eligibility check | 120 | // Eligibility check |
121 | // | 121 | // |
122 | if ((flags & (uint)PrimFlags.Temporary) != 0) | 122 | // PrimFlags.Temporary is not used in OpenSim code and cannot |
123 | return; | 123 | // be guaranteed to always be clear. Don't check it. |
124 | // if ((flags & (uint)PrimFlags.Temporary) != 0) | ||
125 | // return; | ||
124 | if ((flags & (uint)PrimFlags.TemporaryOnRez) != 0) | 126 | if ((flags & (uint)PrimFlags.TemporaryOnRez) != 0) |
125 | return; | 127 | return; |
126 | 128 | ||
@@ -135,7 +137,7 @@ namespace OpenSim.Data.MySQL | |||
135 | foreach (SceneObjectPart prim in obj.Parts) | 137 | foreach (SceneObjectPart prim in obj.Parts) |
136 | { | 138 | { |
137 | cmd.Parameters.Clear(); | 139 | cmd.Parameters.Clear(); |
138 | 140 | ||
139 | cmd.CommandText = "replace into prims (" + | 141 | cmd.CommandText = "replace into prims (" + |
140 | "UUID, CreationDate, " + | 142 | "UUID, CreationDate, " + |
141 | "Name, Text, Description, " + | 143 | "Name, Text, Description, " + |
@@ -171,7 +173,11 @@ namespace OpenSim.Data.MySQL | |||
171 | "ParticleSystem, ClickAction, Material, " + | 173 | "ParticleSystem, ClickAction, Material, " + |
172 | "CollisionSound, CollisionSoundVolume, " + | 174 | "CollisionSound, CollisionSoundVolume, " + |
173 | "PassTouches, " + | 175 | "PassTouches, " + |
174 | "LinkNumber, MediaURL) values (" + "?UUID, " + | 176 | "PassCollisions, " + |
177 | "LinkNumber, MediaURL, KeyframeMotion, " + | ||
178 | "PhysicsShapeType, Density, GravityModifier, " + | ||
179 | "Friction, Restitution, Vehicle " + | ||
180 | ") values (" + "?UUID, " + | ||
175 | "?CreationDate, ?Name, ?Text, " + | 181 | "?CreationDate, ?Name, ?Text, " + |
176 | "?Description, ?SitName, ?TouchName, " + | 182 | "?Description, ?SitName, ?TouchName, " + |
177 | "?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " + | 183 | "?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " + |
@@ -202,14 +208,17 @@ namespace OpenSim.Data.MySQL | |||
202 | "?SaleType, ?ColorR, ?ColorG, " + | 208 | "?SaleType, ?ColorR, ?ColorG, " + |
203 | "?ColorB, ?ColorA, ?ParticleSystem, " + | 209 | "?ColorB, ?ColorA, ?ParticleSystem, " + |
204 | "?ClickAction, ?Material, ?CollisionSound, " + | 210 | "?ClickAction, ?Material, ?CollisionSound, " + |
205 | "?CollisionSoundVolume, ?PassTouches, ?LinkNumber, ?MediaURL)"; | 211 | "?CollisionSoundVolume, ?PassTouches, ?PassCollisions, " + |
206 | 212 | "?LinkNumber, ?MediaURL, ?KeyframeMotion, " + | |
213 | "?PhysicsShapeType, ?Density, ?GravityModifier, " + | ||
214 | "?Friction, ?Restitution, ?Vehicle)"; | ||
215 | |||
207 | FillPrimCommand(cmd, prim, obj.UUID, regionUUID); | 216 | FillPrimCommand(cmd, prim, obj.UUID, regionUUID); |
208 | 217 | ||
209 | ExecuteNonQuery(cmd); | 218 | ExecuteNonQuery(cmd); |
210 | 219 | ||
211 | cmd.Parameters.Clear(); | 220 | cmd.Parameters.Clear(); |
212 | 221 | ||
213 | cmd.CommandText = "replace into primshapes (" + | 222 | cmd.CommandText = "replace into primshapes (" + |
214 | "UUID, Shape, ScaleX, ScaleY, " + | 223 | "UUID, Shape, ScaleX, ScaleY, " + |
215 | "ScaleZ, PCode, PathBegin, PathEnd, " + | 224 | "ScaleZ, PCode, PathBegin, PathEnd, " + |
@@ -231,9 +240,9 @@ namespace OpenSim.Data.MySQL | |||
231 | "?ProfileEnd, ?ProfileCurve, " + | 240 | "?ProfileEnd, ?ProfileCurve, " + |
232 | "?ProfileHollow, ?Texture, ?ExtraParams, " + | 241 | "?ProfileHollow, ?Texture, ?ExtraParams, " + |
233 | "?State, ?Media)"; | 242 | "?State, ?Media)"; |
234 | 243 | ||
235 | FillShapeCommand(cmd, prim); | 244 | FillShapeCommand(cmd, prim); |
236 | 245 | ||
237 | ExecuteNonQuery(cmd); | 246 | ExecuteNonQuery(cmd); |
238 | } | 247 | } |
239 | } | 248 | } |
@@ -241,7 +250,7 @@ namespace OpenSim.Data.MySQL | |||
241 | } | 250 | } |
242 | } | 251 | } |
243 | 252 | ||
244 | public void RemoveObject(UUID obj, UUID regionUUID) | 253 | public virtual void RemoveObject(UUID obj, UUID regionUUID) |
245 | { | 254 | { |
246 | // m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID); | 255 | // m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID); |
247 | 256 | ||
@@ -390,7 +399,7 @@ namespace OpenSim.Data.MySQL | |||
390 | } | 399 | } |
391 | } | 400 | } |
392 | 401 | ||
393 | public List<SceneObjectGroup> LoadObjects(UUID regionID) | 402 | public virtual List<SceneObjectGroup> LoadObjects(UUID regionID) |
394 | { | 403 | { |
395 | const int ROWS_PER_QUERY = 5000; | 404 | const int ROWS_PER_QUERY = 5000; |
396 | 405 | ||
@@ -446,7 +455,11 @@ namespace OpenSim.Data.MySQL | |||
446 | foreach (SceneObjectPart prim in prims.Values) | 455 | foreach (SceneObjectPart prim in prims.Values) |
447 | { | 456 | { |
448 | if (prim.ParentUUID == UUID.Zero) | 457 | if (prim.ParentUUID == UUID.Zero) |
458 | { | ||
449 | objects[prim.UUID] = new SceneObjectGroup(prim); | 459 | objects[prim.UUID] = new SceneObjectGroup(prim); |
460 | if (prim.KeyframeMotion != null) | ||
461 | prim.KeyframeMotion.UpdateSceneObject(objects[prim.UUID]); | ||
462 | } | ||
450 | } | 463 | } |
451 | 464 | ||
452 | // Add all of the children objects to the SOGs | 465 | // Add all of the children objects to the SOGs |
@@ -559,36 +572,51 @@ namespace OpenSim.Data.MySQL | |||
559 | } | 572 | } |
560 | } | 573 | } |
561 | 574 | ||
562 | public void StoreTerrain(double[,] ter, UUID regionID) | 575 | public virtual void StoreTerrain(double[,] ter, UUID regionID) |
563 | { | 576 | { |
564 | m_log.Info("[REGION DB]: Storing terrain"); | 577 | Util.FireAndForget(delegate(object x) |
565 | |||
566 | lock (m_dbLock) | ||
567 | { | 578 | { |
568 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | 579 | double[,] oldTerrain = LoadTerrain(regionID); |
569 | { | ||
570 | dbcon.Open(); | ||
571 | 580 | ||
572 | using (MySqlCommand cmd = dbcon.CreateCommand()) | 581 | m_log.Info("[REGION DB]: Storing terrain"); |
582 | |||
583 | lock (m_dbLock) | ||
584 | { | ||
585 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | ||
573 | { | 586 | { |
574 | cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID"; | 587 | dbcon.Open(); |
575 | cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString()); | ||
576 | 588 | ||
577 | ExecuteNonQuery(cmd); | 589 | using (MySqlCommand cmd = dbcon.CreateCommand()) |
590 | { | ||
591 | cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID"; | ||
592 | cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString()); | ||
578 | 593 | ||
579 | cmd.CommandText = "insert into terrain (RegionUUID, " + | 594 | using (MySqlCommand cmd2 = dbcon.CreateCommand()) |
580 | "Revision, Heightfield) values (?RegionUUID, " + | 595 | { |
581 | "1, ?Heightfield)"; | 596 | try |
597 | { | ||
598 | cmd2.CommandText = "insert into terrain (RegionUUID, " + | ||
599 | "Revision, Heightfield) values (?RegionUUID, " + | ||
600 | "1, ?Heightfield)"; | ||
582 | 601 | ||
583 | cmd.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter)); | 602 | cmd2.Parameters.AddWithValue("RegionUUID", regionID.ToString()); |
603 | cmd2.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter, oldTerrain)); | ||
584 | 604 | ||
585 | ExecuteNonQuery(cmd); | 605 | ExecuteNonQuery(cmd); |
606 | ExecuteNonQuery(cmd2); | ||
607 | } | ||
608 | catch (Exception e) | ||
609 | { | ||
610 | m_log.ErrorFormat(e.ToString()); | ||
611 | } | ||
612 | } | ||
613 | } | ||
586 | } | 614 | } |
587 | } | 615 | } |
588 | } | 616 | }); |
589 | } | 617 | } |
590 | 618 | ||
591 | public double[,] LoadTerrain(UUID regionID) | 619 | public virtual double[,] LoadTerrain(UUID regionID) |
592 | { | 620 | { |
593 | double[,] terrain = null; | 621 | double[,] terrain = null; |
594 | 622 | ||
@@ -638,7 +666,7 @@ namespace OpenSim.Data.MySQL | |||
638 | return terrain; | 666 | return terrain; |
639 | } | 667 | } |
640 | 668 | ||
641 | public void RemoveLandObject(UUID globalID) | 669 | public virtual void RemoveLandObject(UUID globalID) |
642 | { | 670 | { |
643 | lock (m_dbLock) | 671 | lock (m_dbLock) |
644 | { | 672 | { |
@@ -657,7 +685,7 @@ namespace OpenSim.Data.MySQL | |||
657 | } | 685 | } |
658 | } | 686 | } |
659 | 687 | ||
660 | public void StoreLandObject(ILandObject parcel) | 688 | public virtual void StoreLandObject(ILandObject parcel) |
661 | { | 689 | { |
662 | lock (m_dbLock) | 690 | lock (m_dbLock) |
663 | { | 691 | { |
@@ -714,7 +742,7 @@ namespace OpenSim.Data.MySQL | |||
714 | } | 742 | } |
715 | } | 743 | } |
716 | 744 | ||
717 | public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID) | 745 | public virtual RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID) |
718 | { | 746 | { |
719 | RegionLightShareData nWP = new RegionLightShareData(); | 747 | RegionLightShareData nWP = new RegionLightShareData(); |
720 | nWP.OnSave += StoreRegionWindlightSettings; | 748 | nWP.OnSave += StoreRegionWindlightSettings; |
@@ -736,7 +764,7 @@ namespace OpenSim.Data.MySQL | |||
736 | { | 764 | { |
737 | //No result, so store our default windlight profile and return it | 765 | //No result, so store our default windlight profile and return it |
738 | nWP.regionID = regionUUID; | 766 | nWP.regionID = regionUUID; |
739 | StoreRegionWindlightSettings(nWP); | 767 | // StoreRegionWindlightSettings(nWP); |
740 | return nWP; | 768 | return nWP; |
741 | } | 769 | } |
742 | else | 770 | else |
@@ -811,7 +839,7 @@ namespace OpenSim.Data.MySQL | |||
811 | return nWP; | 839 | return nWP; |
812 | } | 840 | } |
813 | 841 | ||
814 | public RegionSettings LoadRegionSettings(UUID regionUUID) | 842 | public virtual RegionSettings LoadRegionSettings(UUID regionUUID) |
815 | { | 843 | { |
816 | RegionSettings rs = null; | 844 | RegionSettings rs = null; |
817 | 845 | ||
@@ -851,7 +879,7 @@ namespace OpenSim.Data.MySQL | |||
851 | return rs; | 879 | return rs; |
852 | } | 880 | } |
853 | 881 | ||
854 | public void StoreRegionWindlightSettings(RegionLightShareData wl) | 882 | public virtual void StoreRegionWindlightSettings(RegionLightShareData wl) |
855 | { | 883 | { |
856 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | 884 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) |
857 | { | 885 | { |
@@ -954,7 +982,7 @@ namespace OpenSim.Data.MySQL | |||
954 | } | 982 | } |
955 | } | 983 | } |
956 | 984 | ||
957 | public void RemoveRegionWindlightSettings(UUID regionID) | 985 | public virtual void RemoveRegionWindlightSettings(UUID regionID) |
958 | { | 986 | { |
959 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | 987 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) |
960 | { | 988 | { |
@@ -1031,7 +1059,7 @@ namespace OpenSim.Data.MySQL | |||
1031 | } | 1059 | } |
1032 | #endregion | 1060 | #endregion |
1033 | 1061 | ||
1034 | public void StoreRegionSettings(RegionSettings rs) | 1062 | public virtual void StoreRegionSettings(RegionSettings rs) |
1035 | { | 1063 | { |
1036 | lock (m_dbLock) | 1064 | lock (m_dbLock) |
1037 | { | 1065 | { |
@@ -1058,7 +1086,7 @@ namespace OpenSim.Data.MySQL | |||
1058 | "use_estate_sun, fixed_sun, sun_position, " + | 1086 | "use_estate_sun, fixed_sun, sun_position, " + |
1059 | "covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " + | 1087 | "covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " + |
1060 | "sunvectorz, loaded_creation_datetime, " + | 1088 | "sunvectorz, loaded_creation_datetime, " + |
1061 | "loaded_creation_id, map_tile_ID, " + | 1089 | "loaded_creation_id, map_tile_ID, block_search, casino, " + |
1062 | "TelehubObject, parcel_tile_ID) " + | 1090 | "TelehubObject, parcel_tile_ID) " + |
1063 | "values (?RegionUUID, ?BlockTerraform, " + | 1091 | "values (?RegionUUID, ?BlockTerraform, " + |
1064 | "?BlockFly, ?AllowDamage, ?RestrictPushing, " + | 1092 | "?BlockFly, ?AllowDamage, ?RestrictPushing, " + |
@@ -1075,7 +1103,8 @@ namespace OpenSim.Data.MySQL | |||
1075 | "?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " + | 1103 | "?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " + |
1076 | "?SunVectorX, ?SunVectorY, ?SunVectorZ, " + | 1104 | "?SunVectorX, ?SunVectorY, ?SunVectorZ, " + |
1077 | "?LoadedCreationDateTime, ?LoadedCreationID, " + | 1105 | "?LoadedCreationDateTime, ?LoadedCreationID, " + |
1078 | "?TerrainImageID, ?TelehubObject, ?ParcelImageID) "; | 1106 | "?TerrainImageID, ?block_search, ?casino, " + |
1107 | "?TelehubObject, ?ParcelImageID)"; | ||
1079 | 1108 | ||
1080 | FillRegionSettingsCommand(cmd, rs); | 1109 | FillRegionSettingsCommand(cmd, rs); |
1081 | 1110 | ||
@@ -1086,7 +1115,7 @@ namespace OpenSim.Data.MySQL | |||
1086 | SaveSpawnPoints(rs); | 1115 | SaveSpawnPoints(rs); |
1087 | } | 1116 | } |
1088 | 1117 | ||
1089 | public List<LandData> LoadLandObjects(UUID regionUUID) | 1118 | public virtual List<LandData> LoadLandObjects(UUID regionUUID) |
1090 | { | 1119 | { |
1091 | List<LandData> landData = new List<LandData>(); | 1120 | List<LandData> landData = new List<LandData>(); |
1092 | 1121 | ||
@@ -1268,11 +1297,40 @@ namespace OpenSim.Data.MySQL | |||
1268 | prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"]; | 1297 | prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"]; |
1269 | 1298 | ||
1270 | prim.PassTouches = ((sbyte)row["PassTouches"] != 0); | 1299 | prim.PassTouches = ((sbyte)row["PassTouches"] != 0); |
1300 | prim.PassCollisions = ((sbyte)row["PassCollisions"] != 0); | ||
1271 | prim.LinkNum = (int)row["LinkNumber"]; | 1301 | prim.LinkNum = (int)row["LinkNumber"]; |
1272 | 1302 | ||
1273 | if (!(row["MediaURL"] is System.DBNull)) | 1303 | if (!(row["MediaURL"] is System.DBNull)) |
1274 | prim.MediaUrl = (string)row["MediaURL"]; | 1304 | prim.MediaUrl = (string)row["MediaURL"]; |
1275 | 1305 | ||
1306 | if (!(row["KeyframeMotion"] is DBNull)) | ||
1307 | { | ||
1308 | Byte[] data = (byte[])row["KeyframeMotion"]; | ||
1309 | if (data.Length > 0) | ||
1310 | prim.KeyframeMotion = KeyframeMotion.FromData(null, data); | ||
1311 | else | ||
1312 | prim.KeyframeMotion = null; | ||
1313 | } | ||
1314 | else | ||
1315 | { | ||
1316 | prim.KeyframeMotion = null; | ||
1317 | } | ||
1318 | |||
1319 | prim.PhysicsShapeType = (byte)Convert.ToInt32(row["PhysicsShapeType"].ToString()); | ||
1320 | prim.Density = (float)(double)row["Density"]; | ||
1321 | prim.GravityModifier = (float)(double)row["GravityModifier"]; | ||
1322 | prim.Friction = (float)(double)row["Friction"]; | ||
1323 | prim.Bounciness = (float)(double)row["Restitution"]; | ||
1324 | |||
1325 | SOPVehicle vehicle = null; | ||
1326 | |||
1327 | if (row["Vehicle"].ToString() != String.Empty) | ||
1328 | { | ||
1329 | vehicle = SOPVehicle.FromXml2(row["Vehicle"].ToString()); | ||
1330 | if (vehicle != null) | ||
1331 | prim.VehicleParams = vehicle; | ||
1332 | } | ||
1333 | |||
1276 | return prim; | 1334 | return prim; |
1277 | } | 1335 | } |
1278 | 1336 | ||
@@ -1283,32 +1341,40 @@ namespace OpenSim.Data.MySQL | |||
1283 | /// <returns></returns> | 1341 | /// <returns></returns> |
1284 | private static TaskInventoryItem BuildItem(IDataReader row) | 1342 | private static TaskInventoryItem BuildItem(IDataReader row) |
1285 | { | 1343 | { |
1286 | TaskInventoryItem taskItem = new TaskInventoryItem(); | 1344 | try |
1287 | 1345 | { | |
1288 | taskItem.ItemID = DBGuid.FromDB(row["itemID"]); | 1346 | TaskInventoryItem taskItem = new TaskInventoryItem(); |
1289 | taskItem.ParentPartID = DBGuid.FromDB(row["primID"]); | 1347 | |
1290 | taskItem.AssetID = DBGuid.FromDB(row["assetID"]); | 1348 | taskItem.ItemID = DBGuid.FromDB(row["itemID"]); |
1291 | taskItem.ParentID = DBGuid.FromDB(row["parentFolderID"]); | 1349 | taskItem.ParentPartID = DBGuid.FromDB(row["primID"]); |
1292 | 1350 | taskItem.AssetID = DBGuid.FromDB(row["assetID"]); | |
1293 | taskItem.InvType = Convert.ToInt32(row["invType"]); | 1351 | taskItem.ParentID = DBGuid.FromDB(row["parentFolderID"]); |
1294 | taskItem.Type = Convert.ToInt32(row["assetType"]); | 1352 | |
1295 | 1353 | taskItem.InvType = Convert.ToInt32(row["invType"]); | |
1296 | taskItem.Name = (String)row["name"]; | 1354 | taskItem.Type = Convert.ToInt32(row["assetType"]); |
1297 | taskItem.Description = (String)row["description"]; | 1355 | |
1298 | taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]); | 1356 | taskItem.Name = (String)row["name"]; |
1299 | taskItem.CreatorIdentification = (String)row["creatorID"]; | 1357 | taskItem.Description = (String)row["description"]; |
1300 | taskItem.OwnerID = DBGuid.FromDB(row["ownerID"]); | 1358 | taskItem.CreationDate = Convert.ToUInt32(row["creationDate"]); |
1301 | taskItem.LastOwnerID = DBGuid.FromDB(row["lastOwnerID"]); | 1359 | taskItem.CreatorIdentification = (String)row["creatorID"]; |
1302 | taskItem.GroupID = DBGuid.FromDB(row["groupID"]); | 1360 | taskItem.OwnerID = DBGuid.FromDB(row["ownerID"]); |
1303 | 1361 | taskItem.LastOwnerID = DBGuid.FromDB(row["lastOwnerID"]); | |
1304 | taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]); | 1362 | taskItem.GroupID = DBGuid.FromDB(row["groupID"]); |
1305 | taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]); | 1363 | |
1306 | taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]); | 1364 | taskItem.NextPermissions = Convert.ToUInt32(row["nextPermissions"]); |
1307 | taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]); | 1365 | taskItem.CurrentPermissions = Convert.ToUInt32(row["currentPermissions"]); |
1308 | taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]); | 1366 | taskItem.BasePermissions = Convert.ToUInt32(row["basePermissions"]); |
1309 | taskItem.Flags = Convert.ToUInt32(row["flags"]); | 1367 | taskItem.EveryonePermissions = Convert.ToUInt32(row["everyonePermissions"]); |
1310 | 1368 | taskItem.GroupPermissions = Convert.ToUInt32(row["groupPermissions"]); | |
1311 | return taskItem; | 1369 | taskItem.Flags = Convert.ToUInt32(row["flags"]); |
1370 | |||
1371 | return taskItem; | ||
1372 | } | ||
1373 | catch | ||
1374 | { | ||
1375 | m_log.ErrorFormat("[MYSQL DB]: Error reading task inventory: itemID was {0}, primID was {1}", row["itemID"].ToString(), row["primID"].ToString()); | ||
1376 | throw; | ||
1377 | } | ||
1312 | } | 1378 | } |
1313 | 1379 | ||
1314 | private static RegionSettings BuildRegionSettings(IDataReader row) | 1380 | private static RegionSettings BuildRegionSettings(IDataReader row) |
@@ -1366,6 +1432,9 @@ namespace OpenSim.Data.MySQL | |||
1366 | newSettings.ParcelImageID = DBGuid.FromDB(row["parcel_tile_ID"]); | 1432 | newSettings.ParcelImageID = DBGuid.FromDB(row["parcel_tile_ID"]); |
1367 | newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]); | 1433 | newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]); |
1368 | 1434 | ||
1435 | newSettings.GodBlockSearch = Convert.ToBoolean(row["block_search"]); | ||
1436 | newSettings.Casino = Convert.ToBoolean(row["casino"]); | ||
1437 | |||
1369 | return newSettings; | 1438 | return newSettings; |
1370 | } | 1439 | } |
1371 | 1440 | ||
@@ -1463,7 +1532,7 @@ namespace OpenSim.Data.MySQL | |||
1463 | /// </summary> | 1532 | /// </summary> |
1464 | /// <param name="val"></param> | 1533 | /// <param name="val"></param> |
1465 | /// <returns></returns> | 1534 | /// <returns></returns> |
1466 | private static Array SerializeTerrain(double[,] val) | 1535 | private static Array SerializeTerrain(double[,] val, double[,] oldTerrain) |
1467 | { | 1536 | { |
1468 | MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double)); | 1537 | MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double)); |
1469 | BinaryWriter bw = new BinaryWriter(str); | 1538 | BinaryWriter bw = new BinaryWriter(str); |
@@ -1472,7 +1541,11 @@ namespace OpenSim.Data.MySQL | |||
1472 | for (int x = 0; x < (int)Constants.RegionSize; x++) | 1541 | for (int x = 0; x < (int)Constants.RegionSize; x++) |
1473 | for (int y = 0; y < (int)Constants.RegionSize; y++) | 1542 | for (int y = 0; y < (int)Constants.RegionSize; y++) |
1474 | { | 1543 | { |
1475 | double height = val[x, y]; | 1544 | double height = 20.0; |
1545 | if (oldTerrain != null) | ||
1546 | height = oldTerrain[x, y]; | ||
1547 | if (!double.IsNaN(val[x, y])) | ||
1548 | height = val[x, y]; | ||
1476 | if (height == 0.0) | 1549 | if (height == 0.0) |
1477 | height = double.Epsilon; | 1550 | height = double.Epsilon; |
1478 | 1551 | ||
@@ -1616,8 +1689,29 @@ namespace OpenSim.Data.MySQL | |||
1616 | else | 1689 | else |
1617 | cmd.Parameters.AddWithValue("PassTouches", 0); | 1690 | cmd.Parameters.AddWithValue("PassTouches", 0); |
1618 | 1691 | ||
1692 | if (prim.PassCollisions) | ||
1693 | cmd.Parameters.AddWithValue("PassCollisions", 1); | ||
1694 | else | ||
1695 | cmd.Parameters.AddWithValue("PassCollisions", 0); | ||
1696 | |||
1619 | cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum); | 1697 | cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum); |
1620 | cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl); | 1698 | cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl); |
1699 | |||
1700 | if (prim.KeyframeMotion != null) | ||
1701 | cmd.Parameters.AddWithValue("KeyframeMotion", prim.KeyframeMotion.Serialize()); | ||
1702 | else | ||
1703 | cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]); | ||
1704 | |||
1705 | cmd.Parameters.AddWithValue("PhysicsShapeType", prim.PhysicsShapeType); | ||
1706 | cmd.Parameters.AddWithValue("Density", (double)prim.Density); | ||
1707 | cmd.Parameters.AddWithValue("GravityModifier", (double)prim.GravityModifier); | ||
1708 | cmd.Parameters.AddWithValue("Friction", (double)prim.Friction); | ||
1709 | cmd.Parameters.AddWithValue("Restitution", (double)prim.Bounciness); | ||
1710 | |||
1711 | if (prim.VehicleParams != null) | ||
1712 | cmd.Parameters.AddWithValue("Vehicle", prim.VehicleParams.ToXml2()); | ||
1713 | else | ||
1714 | cmd.Parameters.AddWithValue("Vehicle", String.Empty); | ||
1621 | } | 1715 | } |
1622 | 1716 | ||
1623 | /// <summary> | 1717 | /// <summary> |
@@ -1696,6 +1790,9 @@ namespace OpenSim.Data.MySQL | |||
1696 | cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime); | 1790 | cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime); |
1697 | cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID); | 1791 | cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID); |
1698 | cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID); | 1792 | cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID); |
1793 | cmd.Parameters.AddWithValue("block_search", settings.GodBlockSearch); | ||
1794 | cmd.Parameters.AddWithValue("casino", settings.Casino); | ||
1795 | |||
1699 | cmd.Parameters.AddWithValue("ParcelImageID", settings.ParcelImageID); | 1796 | cmd.Parameters.AddWithValue("ParcelImageID", settings.ParcelImageID); |
1700 | cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject); | 1797 | cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject); |
1701 | } | 1798 | } |
@@ -1856,7 +1953,7 @@ namespace OpenSim.Data.MySQL | |||
1856 | cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml()); | 1953 | cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml()); |
1857 | } | 1954 | } |
1858 | 1955 | ||
1859 | public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) | 1956 | public virtual void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) |
1860 | { | 1957 | { |
1861 | lock (m_dbLock) | 1958 | lock (m_dbLock) |
1862 | { | 1959 | { |
@@ -1900,6 +1997,37 @@ namespace OpenSim.Data.MySQL | |||
1900 | } | 1997 | } |
1901 | } | 1998 | } |
1902 | 1999 | ||
2000 | public UUID[] GetObjectIDs(UUID regionID) | ||
2001 | { | ||
2002 | List<UUID> uuids = new List<UUID>(); | ||
2003 | |||
2004 | lock (m_dbLock) | ||
2005 | { | ||
2006 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | ||
2007 | { | ||
2008 | dbcon.Open(); | ||
2009 | |||
2010 | using (MySqlCommand cmd = dbcon.CreateCommand()) | ||
2011 | { | ||
2012 | cmd.CommandText = "select UUID from prims where RegionUUID = ?RegionUUID"; | ||
2013 | cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString()); | ||
2014 | |||
2015 | using (IDataReader reader = ExecuteReader(cmd)) | ||
2016 | { | ||
2017 | while (reader.Read()) | ||
2018 | { | ||
2019 | UUID id = new UUID(reader["UUID"].ToString()); | ||
2020 | |||
2021 | uuids.Add(id); | ||
2022 | } | ||
2023 | } | ||
2024 | } | ||
2025 | } | ||
2026 | } | ||
2027 | |||
2028 | return uuids.ToArray(); | ||
2029 | } | ||
2030 | |||
1903 | private void LoadSpawnPoints(RegionSettings rs) | 2031 | private void LoadSpawnPoints(RegionSettings rs) |
1904 | { | 2032 | { |
1905 | rs.ClearSpawnPoints(); | 2033 | rs.ClearSpawnPoints(); |