aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MySQL
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data/MySQL')
-rw-r--r--OpenSim/Data/MySQL/MySQLAssetData.cs6
-rw-r--r--OpenSim/Data/MySQL/MySQLGenericTableHandler.cs7
-rw-r--r--OpenSim/Data/MySQL/MySQLSimulationData.cs274
-rw-r--r--OpenSim/Data/MySQL/MySQLUserAccountData.cs46
-rw-r--r--OpenSim/Data/MySQL/MySQLXAssetData.cs2
-rw-r--r--OpenSim/Data/MySQL/Resources/RegionStore.migrations2
6 files changed, 246 insertions, 91 deletions
diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs
index 73de64b..20df234 100644
--- a/OpenSim/Data/MySQL/MySQLAssetData.cs
+++ b/OpenSim/Data/MySQL/MySQLAssetData.cs
@@ -155,7 +155,7 @@ namespace OpenSim.Data.MySQL
155 /// </summary> 155 /// </summary>
156 /// <param name="asset">Asset UUID to create</param> 156 /// <param name="asset">Asset UUID to create</param>
157 /// <remarks>On failure : Throw an exception and attempt to reconnect to database</remarks> 157 /// <remarks>On failure : Throw an exception and attempt to reconnect to database</remarks>
158 override public void StoreAsset(AssetBase asset) 158 override public bool StoreAsset(AssetBase asset)
159 { 159 {
160 lock (m_dbLock) 160 lock (m_dbLock)
161 { 161 {
@@ -201,12 +201,14 @@ namespace OpenSim.Data.MySQL
201 cmd.Parameters.AddWithValue("?asset_flags", (int)asset.Flags); 201 cmd.Parameters.AddWithValue("?asset_flags", (int)asset.Flags);
202 cmd.Parameters.AddWithValue("?data", asset.Data); 202 cmd.Parameters.AddWithValue("?data", asset.Data);
203 cmd.ExecuteNonQuery(); 203 cmd.ExecuteNonQuery();
204 return true;
204 } 205 }
205 } 206 }
206 catch (Exception e) 207 catch (Exception e)
207 { 208 {
208 m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}", 209 m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
209 asset.FullID, asset.Name, e.Message); 210 asset.FullID, asset.Name, e.Message);
211 return false;
210 } 212 }
211 } 213 }
212 } 214 }
@@ -370,4 +372,4 @@ namespace OpenSim.Data.MySQL
370 372
371 #endregion 373 #endregion
372 } 374 }
373} \ No newline at end of file 375}
diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
index da8e958..86367a1 100644
--- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
+++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
@@ -175,6 +175,11 @@ namespace OpenSim.Data.MySQL
175 int v = Convert.ToInt32(reader[name]); 175 int v = Convert.ToInt32(reader[name]);
176 m_Fields[name].SetValue(row, v); 176 m_Fields[name].SetValue(row, v);
177 } 177 }
178 else if (m_Fields[name].FieldType == typeof(uint))
179 {
180 uint v = Convert.ToUInt32(reader[name]);
181 m_Fields[name].SetValue(row, v);
182 }
178 else 183 else
179 { 184 {
180 m_Fields[name].SetValue(row, reader[name]); 185 m_Fields[name].SetValue(row, reader[name]);
@@ -296,4 +301,4 @@ namespace OpenSim.Data.MySQL
296 } 301 }
297 } 302 }
298 } 303 }
299} \ No newline at end of file 304}
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 1a2e113..29bd6b6 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();
diff --git a/OpenSim/Data/MySQL/MySQLUserAccountData.cs b/OpenSim/Data/MySQL/MySQLUserAccountData.cs
index e964295..4ff3175 100644
--- a/OpenSim/Data/MySQL/MySQLUserAccountData.cs
+++ b/OpenSim/Data/MySQL/MySQLUserAccountData.cs
@@ -46,17 +46,21 @@ namespace OpenSim.Data.MySQL
46 { 46 {
47 string[] words = query.Split(new char[] {' '}); 47 string[] words = query.Split(new char[] {' '});
48 48
49 bool valid = false;
50
49 for (int i = 0 ; i < words.Length ; i++) 51 for (int i = 0 ; i < words.Length ; i++)
50 { 52 {
51 if (words[i].Length < 3) 53 if (words[i].Length > 2)
52 { 54 valid = true;
53 if (i != words.Length - 1) 55// if (words[i].Length < 3)
54 Array.Copy(words, i + 1, words, i, words.Length - i - 1); 56// {
55 Array.Resize(ref words, words.Length - 1); 57// if (i != words.Length - 1)
56 } 58// Array.Copy(words, i + 1, words, i, words.Length - i - 1);
59// Array.Resize(ref words, words.Length - 1);
60// }
57 } 61 }
58 62
59 if (words.Length == 0) 63 if ((!valid) || words.Length == 0)
60 return new UserAccountData[0]; 64 return new UserAccountData[0];
61 65
62 if (words.Length > 2) 66 if (words.Length > 2)
@@ -66,20 +70,36 @@ namespace OpenSim.Data.MySQL
66 { 70 {
67 if (words.Length == 1) 71 if (words.Length == 1)
68 { 72 {
69 cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?search or LastName like ?search)", m_Realm); 73 cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?search or LastName like ?search) and active=1", m_Realm);
70 cmd.Parameters.AddWithValue("?search", "%" + words[0] + "%"); 74 cmd.Parameters.AddWithValue("?search", words[0] + "%");
71 cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); 75 cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString());
72 } 76 }
73 else 77 else
74 { 78 {
75 cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?searchFirst or LastName like ?searchLast)", m_Realm); 79 cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?searchFirst and LastName like ?searchLast) and active=1", m_Realm);
76 cmd.Parameters.AddWithValue("?searchFirst", "%" + words[0] + "%"); 80 cmd.Parameters.AddWithValue("?searchFirst", words[0] + "%");
77 cmd.Parameters.AddWithValue("?searchLast", "%" + words[1] + "%"); 81 cmd.Parameters.AddWithValue("?searchLast", words[1] + "%");
78 cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); 82 cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString());
79 } 83 }
80 84
81 return DoQuery(cmd); 85 return DoQuery(cmd);
82 } 86 }
83 } 87 }
88
89 public UserAccountData[] GetUsersWhere(UUID scopeID, string where)
90 {
91 using (MySqlCommand cmd = new MySqlCommand())
92 {
93 if (scopeID != UUID.Zero)
94 {
95 where = "(ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (" + where + ")";
96 cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString());
97 }
98
99 cmd.CommandText = String.Format("select * from {0} where " + where, m_Realm);
100
101 return DoQuery(cmd);
102 }
103 }
84 } 104 }
85} \ No newline at end of file 105}
diff --git a/OpenSim/Data/MySQL/MySQLXAssetData.cs b/OpenSim/Data/MySQL/MySQLXAssetData.cs
index e6ac22e..9a50373 100644
--- a/OpenSim/Data/MySQL/MySQLXAssetData.cs
+++ b/OpenSim/Data/MySQL/MySQLXAssetData.cs
@@ -497,4 +497,4 @@ namespace OpenSim.Data.MySQL
497 497
498 #endregion 498 #endregion
499 } 499 }
500} \ No newline at end of file 500}
diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
index 4a925fb..db0d0ec 100644
--- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
@@ -717,7 +717,7 @@ ALTER TABLE regionsettings ADD COLUMN loaded_creation_datetime int unsigned NOT
717 717
718COMMIT; 718COMMIT;
719 719
720:VERSION 32 720:VERSION 32 #---------------------
721 721
722BEGIN; 722BEGIN;
723CREATE TABLE `regionwindlight` ( 723CREATE TABLE `regionwindlight` (