aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data')
-rw-r--r--OpenSim/Data/AssetDataBase.cs2
-rw-r--r--OpenSim/Data/IAssetData.cs2
-rw-r--r--OpenSim/Data/IUserAccountData.cs1
-rw-r--r--OpenSim/Data/MSSQL/MSSQLAssetData.cs4
-rw-r--r--OpenSim/Data/MSSQL/MSSQLAvatarData.cs2
-rw-r--r--OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs4
-rw-r--r--OpenSim/Data/MSSQL/MSSQLGridUserData.cs2
-rw-r--r--OpenSim/Data/MSSQL/MSSQLManager.cs4
-rw-r--r--OpenSim/Data/MSSQL/MSSQLPresenceData.cs2
-rw-r--r--OpenSim/Data/MSSQL/MSSQLUserAccountData.cs5
-rw-r--r--OpenSim/Data/MSSQL/MSSQLXInventoryData.cs4
-rw-r--r--OpenSim/Data/MySQL/MySQLAssetData.cs6
-rw-r--r--OpenSim/Data/MySQL/MySQLGenericTableHandler.cs7
-rw-r--r--OpenSim/Data/MySQL/MySQLSimulationData.cs162
-rw-r--r--OpenSim/Data/MySQL/MySQLUserAccountData.cs46
-rw-r--r--OpenSim/Data/MySQL/MySQLXAssetData.cs2
-rw-r--r--OpenSim/Data/MySQL/Resources/RegionStore.migrations3
-rw-r--r--OpenSim/Data/Null/NullUserAccountData.cs5
-rw-r--r--OpenSim/Data/SQLite/SQLiteAssetData.cs4
-rw-r--r--OpenSim/Data/SQLite/SQLiteUserAccountData.cs5
20 files changed, 196 insertions, 76 deletions
diff --git a/OpenSim/Data/AssetDataBase.cs b/OpenSim/Data/AssetDataBase.cs
index e1a810c..b4ae913 100644
--- a/OpenSim/Data/AssetDataBase.cs
+++ b/OpenSim/Data/AssetDataBase.cs
@@ -38,7 +38,7 @@ namespace OpenSim.Data
38 { 38 {
39 public abstract AssetBase GetAsset(UUID uuid); 39 public abstract AssetBase GetAsset(UUID uuid);
40 40
41 public abstract void StoreAsset(AssetBase asset); 41 public abstract bool StoreAsset(AssetBase asset);
42 public abstract bool ExistsAsset(UUID uuid); 42 public abstract bool ExistsAsset(UUID uuid);
43 43
44 public abstract List<AssetMetadata> FetchAssetMetadataSet(int start, int count); 44 public abstract List<AssetMetadata> FetchAssetMetadataSet(int start, int count);
diff --git a/OpenSim/Data/IAssetData.cs b/OpenSim/Data/IAssetData.cs
index f31b215c..0c8eadd 100644
--- a/OpenSim/Data/IAssetData.cs
+++ b/OpenSim/Data/IAssetData.cs
@@ -34,7 +34,7 @@ namespace OpenSim.Data
34 public interface IAssetDataPlugin : IPlugin 34 public interface IAssetDataPlugin : IPlugin
35 { 35 {
36 AssetBase GetAsset(UUID uuid); 36 AssetBase GetAsset(UUID uuid);
37 void StoreAsset(AssetBase asset); 37 bool StoreAsset(AssetBase asset);
38 bool ExistsAsset(UUID uuid); 38 bool ExistsAsset(UUID uuid);
39 List<AssetMetadata> FetchAssetMetadataSet(int start, int count); 39 List<AssetMetadata> FetchAssetMetadataSet(int start, int count);
40 void Initialise(string connect); 40 void Initialise(string connect);
diff --git a/OpenSim/Data/IUserAccountData.cs b/OpenSim/Data/IUserAccountData.cs
index 906ba6c..bc7eda7 100644
--- a/OpenSim/Data/IUserAccountData.cs
+++ b/OpenSim/Data/IUserAccountData.cs
@@ -50,5 +50,6 @@ namespace OpenSim.Data
50 bool Store(UserAccountData data); 50 bool Store(UserAccountData data);
51 bool Delete(string field, string val); 51 bool Delete(string field, string val);
52 UserAccountData[] GetUsers(UUID scopeID, string query); 52 UserAccountData[] GetUsers(UUID scopeID, string query);
53 UserAccountData[] GetUsersWhere(UUID scopeID, string where);
53 } 54 }
54} 55}
diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
index c7488d8..c882555 100644
--- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs
@@ -143,7 +143,7 @@ namespace OpenSim.Data.MSSQL
143 /// Create asset in m_database 143 /// Create asset in m_database
144 /// </summary> 144 /// </summary>
145 /// <param name="asset">the asset</param> 145 /// <param name="asset">the asset</param>
146 override public void StoreAsset(AssetBase asset) 146 override public bool StoreAsset(AssetBase asset)
147 { 147 {
148 148
149 string sql = 149 string sql =
@@ -192,10 +192,12 @@ namespace OpenSim.Data.MSSQL
192 try 192 try
193 { 193 {
194 command.ExecuteNonQuery(); 194 command.ExecuteNonQuery();
195 return true;
195 } 196 }
196 catch(Exception e) 197 catch(Exception e)
197 { 198 {
198 m_log.Error("[ASSET DB]: Error storing item :" + e.Message); 199 m_log.Error("[ASSET DB]: Error storing item :" + e.Message);
200 return false;
199 } 201 }
200 } 202 }
201 } 203 }
diff --git a/OpenSim/Data/MSSQL/MSSQLAvatarData.cs b/OpenSim/Data/MSSQL/MSSQLAvatarData.cs
index 301b424..49a6b09 100644
--- a/OpenSim/Data/MSSQL/MSSQLAvatarData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLAvatarData.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Data.MSSQL
43 public class MSSQLAvatarData : MSSQLGenericTableHandler<AvatarBaseData>, 43 public class MSSQLAvatarData : MSSQLGenericTableHandler<AvatarBaseData>,
44 IAvatarData 44 IAvatarData
45 { 45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 public MSSQLAvatarData(string connectionString, string realm) : 48 public MSSQLAvatarData(string connectionString, string realm) :
49 base(connectionString, realm, "Avatar") 49 base(connectionString, realm, "Avatar")
diff --git a/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs b/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs
index 4145d95..8f471c4 100644
--- a/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs
+++ b/OpenSim/Data/MSSQL/MSSQLGenericTableHandler.cs
@@ -40,8 +40,8 @@ namespace OpenSim.Data.MSSQL
40{ 40{
41 public class MSSQLGenericTableHandler<T> where T : class, new() 41 public class MSSQLGenericTableHandler<T> where T : class, new()
42 { 42 {
43// private static readonly ILog m_log = 43 private static readonly ILog m_log =
44// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 45
46 protected string m_ConnectionString; 46 protected string m_ConnectionString;
47 protected MSSQLManager m_database; //used for parameter type translation 47 protected MSSQLManager m_database; //used for parameter type translation
diff --git a/OpenSim/Data/MSSQL/MSSQLGridUserData.cs b/OpenSim/Data/MSSQL/MSSQLGridUserData.cs
index 9e215f9..1870273 100644
--- a/OpenSim/Data/MSSQL/MSSQLGridUserData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLGridUserData.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Data.MSSQL
43 public class MSSQLGridUserData : MSSQLGenericTableHandler<GridUserData>, 43 public class MSSQLGridUserData : MSSQLGenericTableHandler<GridUserData>,
44 IGridUserData 44 IGridUserData
45 { 45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 public MSSQLGridUserData(string connectionString, string realm) : 48 public MSSQLGridUserData(string connectionString, string realm) :
49 base(connectionString, realm, "GridUserStore") 49 base(connectionString, realm, "GridUserStore")
diff --git a/OpenSim/Data/MSSQL/MSSQLManager.cs b/OpenSim/Data/MSSQL/MSSQLManager.cs
index 9a0015c..62c38d3 100644
--- a/OpenSim/Data/MSSQL/MSSQLManager.cs
+++ b/OpenSim/Data/MSSQL/MSSQLManager.cs
@@ -41,7 +41,7 @@ namespace OpenSim.Data.MSSQL
41 /// </summary> 41 /// </summary>
42 public class MSSQLManager 42 public class MSSQLManager
43 { 43 {
44// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 45
46 /// <summary> 46 /// <summary>
47 /// Connection string for ADO.net 47 /// Connection string for ADO.net
@@ -185,6 +185,8 @@ namespace OpenSim.Data.MSSQL
185 return parameter; 185 return parameter;
186 } 186 }
187 187
188 private static readonly Dictionary<string, string> emptyDictionary = new Dictionary<string, string>();
189
188 /// <summary> 190 /// <summary>
189 /// Checks if we need to do some migrations to the database 191 /// Checks if we need to do some migrations to the database
190 /// </summary> 192 /// </summary>
diff --git a/OpenSim/Data/MSSQL/MSSQLPresenceData.cs b/OpenSim/Data/MSSQL/MSSQLPresenceData.cs
index 8068d23..e7b3d9c 100644
--- a/OpenSim/Data/MSSQL/MSSQLPresenceData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLPresenceData.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Data.MSSQL
43 public class MSSQLPresenceData : MSSQLGenericTableHandler<PresenceData>, 43 public class MSSQLPresenceData : MSSQLGenericTableHandler<PresenceData>,
44 IPresenceData 44 IPresenceData
45 { 45 {
46// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 public MSSQLPresenceData(string connectionString, string realm) : 48 public MSSQLPresenceData(string connectionString, string realm) :
49 base(connectionString, realm, "Presence") 49 base(connectionString, realm, "Presence")
diff --git a/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs b/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs
index 7feec91..dd0689c 100644
--- a/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLUserAccountData.cs
@@ -242,5 +242,10 @@ namespace OpenSim.Data.MSSQL
242 return DoQuery(cmd); 242 return DoQuery(cmd);
243 } 243 }
244 } 244 }
245
246 public UserAccountData[] GetUsersWhere(UUID scopeID, string where)
247 {
248 return null;
249 }
245 } 250 }
246} 251}
diff --git a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
index b19a0da..a1069c6 100644
--- a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
@@ -40,8 +40,8 @@ namespace OpenSim.Data.MSSQL
40{ 40{
41 public class MSSQLXInventoryData : IXInventoryData 41 public class MSSQLXInventoryData : IXInventoryData
42 { 42 {
43// private static readonly ILog m_log = LogManager.GetLogger( 43 private static readonly ILog m_log = LogManager.GetLogger(
44// MethodBase.GetCurrentMethod().DeclaringType); 44 MethodBase.GetCurrentMethod().DeclaringType);
45 45
46 private MSSQLGenericTableHandler<XInventoryFolder> m_Folders; 46 private MSSQLGenericTableHandler<XInventoryFolder> m_Folders;
47 private MSSQLItemHandler m_Items; 47 private MSSQLItemHandler m_Items;
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 b2a1481..9467124 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
@@ -135,7 +135,7 @@ namespace OpenSim.Data.MySQL
135 foreach (SceneObjectPart prim in obj.Parts) 135 foreach (SceneObjectPart prim in obj.Parts)
136 { 136 {
137 cmd.Parameters.Clear(); 137 cmd.Parameters.Clear();
138 138
139 cmd.CommandText = "replace into prims (" + 139 cmd.CommandText = "replace into prims (" +
140 "UUID, CreationDate, " + 140 "UUID, CreationDate, " +
141 "Name, Text, Description, " + 141 "Name, Text, Description, " +
@@ -171,7 +171,10 @@ namespace OpenSim.Data.MySQL
171 "ParticleSystem, ClickAction, Material, " + 171 "ParticleSystem, ClickAction, Material, " +
172 "CollisionSound, CollisionSoundVolume, " + 172 "CollisionSound, CollisionSoundVolume, " +
173 "PassTouches, " + 173 "PassTouches, " +
174 "LinkNumber, MediaURL) values (" + "?UUID, " + 174 "PassCollisions, " +
175 "LinkNumber, MediaURL, KeyframeMotion, " +
176 "PhysicsShapeType, Density, GravityModifier, " +
177 "Friction, Restitution) values (" + "?UUID, " +
175 "?CreationDate, ?Name, ?Text, " + 178 "?CreationDate, ?Name, ?Text, " +
176 "?Description, ?SitName, ?TouchName, " + 179 "?Description, ?SitName, ?TouchName, " +
177 "?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " + 180 "?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " +
@@ -202,14 +205,17 @@ namespace OpenSim.Data.MySQL
202 "?SaleType, ?ColorR, ?ColorG, " + 205 "?SaleType, ?ColorR, ?ColorG, " +
203 "?ColorB, ?ColorA, ?ParticleSystem, " + 206 "?ColorB, ?ColorA, ?ParticleSystem, " +
204 "?ClickAction, ?Material, ?CollisionSound, " + 207 "?ClickAction, ?Material, ?CollisionSound, " +
205 "?CollisionSoundVolume, ?PassTouches, ?LinkNumber, ?MediaURL)"; 208 "?CollisionSoundVolume, ?PassTouches, ?PassCollisions, " +
206 209 "?LinkNumber, ?MediaURL, ?KeyframeMotion, " +
210 "?PhysicsShapeType, ?Density, ?GravityModifier, " +
211 "?Friction, ?Restitution)";
212
207 FillPrimCommand(cmd, prim, obj.UUID, regionUUID); 213 FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
208 214
209 ExecuteNonQuery(cmd); 215 ExecuteNonQuery(cmd);
210 216
211 cmd.Parameters.Clear(); 217 cmd.Parameters.Clear();
212 218
213 cmd.CommandText = "replace into primshapes (" + 219 cmd.CommandText = "replace into primshapes (" +
214 "UUID, Shape, ScaleX, ScaleY, " + 220 "UUID, Shape, ScaleX, ScaleY, " +
215 "ScaleZ, PCode, PathBegin, PathEnd, " + 221 "ScaleZ, PCode, PathBegin, PathEnd, " +
@@ -231,9 +237,9 @@ namespace OpenSim.Data.MySQL
231 "?ProfileEnd, ?ProfileCurve, " + 237 "?ProfileEnd, ?ProfileCurve, " +
232 "?ProfileHollow, ?Texture, ?ExtraParams, " + 238 "?ProfileHollow, ?Texture, ?ExtraParams, " +
233 "?State, ?Media)"; 239 "?State, ?Media)";
234 240
235 FillShapeCommand(cmd, prim); 241 FillShapeCommand(cmd, prim);
236 242
237 ExecuteNonQuery(cmd); 243 ExecuteNonQuery(cmd);
238 } 244 }
239 } 245 }
@@ -241,7 +247,7 @@ namespace OpenSim.Data.MySQL
241 } 247 }
242 } 248 }
243 249
244 public void RemoveObject(UUID obj, UUID regionUUID) 250 public virtual void RemoveObject(UUID obj, UUID regionUUID)
245 { 251 {
246// m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID); 252// m_log.DebugFormat("[REGION DB]: Deleting scene object {0} from {1} in database", obj, regionUUID);
247 253
@@ -390,7 +396,7 @@ namespace OpenSim.Data.MySQL
390 } 396 }
391 } 397 }
392 398
393 public List<SceneObjectGroup> LoadObjects(UUID regionID) 399 public virtual List<SceneObjectGroup> LoadObjects(UUID regionID)
394 { 400 {
395 const int ROWS_PER_QUERY = 5000; 401 const int ROWS_PER_QUERY = 5000;
396 402
@@ -446,7 +452,11 @@ namespace OpenSim.Data.MySQL
446 foreach (SceneObjectPart prim in prims.Values) 452 foreach (SceneObjectPart prim in prims.Values)
447 { 453 {
448 if (prim.ParentUUID == UUID.Zero) 454 if (prim.ParentUUID == UUID.Zero)
455 {
449 objects[prim.UUID] = new SceneObjectGroup(prim); 456 objects[prim.UUID] = new SceneObjectGroup(prim);
457 if (prim.KeyframeMotion != null)
458 prim.KeyframeMotion.UpdateSceneObject(objects[prim.UUID]);
459 }
450 } 460 }
451 461
452 // Add all of the children objects to the SOGs 462 // Add all of the children objects to the SOGs
@@ -559,36 +569,51 @@ namespace OpenSim.Data.MySQL
559 } 569 }
560 } 570 }
561 571
562 public void StoreTerrain(double[,] ter, UUID regionID) 572 public virtual void StoreTerrain(double[,] ter, UUID regionID)
563 { 573 {
564 m_log.Info("[REGION DB]: Storing terrain"); 574 Util.FireAndForget(delegate(object x)
565
566 lock (m_dbLock)
567 { 575 {
568 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 576 double[,] oldTerrain = LoadTerrain(regionID);
569 {
570 dbcon.Open();
571 577
572 using (MySqlCommand cmd = dbcon.CreateCommand()) 578 m_log.Info("[REGION DB]: Storing terrain");
579
580 lock (m_dbLock)
581 {
582 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
573 { 583 {
574 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID"; 584 dbcon.Open();
575 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
576 585
577 ExecuteNonQuery(cmd); 586 using (MySqlCommand cmd = dbcon.CreateCommand())
587 {
588 cmd.CommandText = "delete from terrain where RegionUUID = ?RegionUUID";
589 cmd.Parameters.AddWithValue("RegionUUID", regionID.ToString());
578 590
579 cmd.CommandText = "insert into terrain (RegionUUID, " + 591 using (MySqlCommand cmd2 = dbcon.CreateCommand())
580 "Revision, Heightfield) values (?RegionUUID, " + 592 {
581 "1, ?Heightfield)"; 593 try
594 {
595 cmd2.CommandText = "insert into terrain (RegionUUID, " +
596 "Revision, Heightfield) values (?RegionUUID, " +
597 "1, ?Heightfield)";
582 598
583 cmd.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter)); 599 cmd2.Parameters.AddWithValue("RegionUUID", regionID.ToString());
600 cmd2.Parameters.AddWithValue("Heightfield", SerializeTerrain(ter, oldTerrain));
584 601
585 ExecuteNonQuery(cmd); 602 ExecuteNonQuery(cmd);
603 ExecuteNonQuery(cmd2);
604 }
605 catch (Exception e)
606 {
607 m_log.ErrorFormat(e.ToString());
608 }
609 }
610 }
586 } 611 }
587 } 612 }
588 } 613 });
589 } 614 }
590 615
591 public double[,] LoadTerrain(UUID regionID) 616 public virtual double[,] LoadTerrain(UUID regionID)
592 { 617 {
593 double[,] terrain = null; 618 double[,] terrain = null;
594 619
@@ -638,7 +663,7 @@ namespace OpenSim.Data.MySQL
638 return terrain; 663 return terrain;
639 } 664 }
640 665
641 public void RemoveLandObject(UUID globalID) 666 public virtual void RemoveLandObject(UUID globalID)
642 { 667 {
643 lock (m_dbLock) 668 lock (m_dbLock)
644 { 669 {
@@ -657,7 +682,7 @@ namespace OpenSim.Data.MySQL
657 } 682 }
658 } 683 }
659 684
660 public void StoreLandObject(ILandObject parcel) 685 public virtual void StoreLandObject(ILandObject parcel)
661 { 686 {
662 lock (m_dbLock) 687 lock (m_dbLock)
663 { 688 {
@@ -714,7 +739,7 @@ namespace OpenSim.Data.MySQL
714 } 739 }
715 } 740 }
716 741
717 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID) 742 public virtual RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
718 { 743 {
719 RegionLightShareData nWP = new RegionLightShareData(); 744 RegionLightShareData nWP = new RegionLightShareData();
720 nWP.OnSave += StoreRegionWindlightSettings; 745 nWP.OnSave += StoreRegionWindlightSettings;
@@ -736,7 +761,7 @@ namespace OpenSim.Data.MySQL
736 { 761 {
737 //No result, so store our default windlight profile and return it 762 //No result, so store our default windlight profile and return it
738 nWP.regionID = regionUUID; 763 nWP.regionID = regionUUID;
739 StoreRegionWindlightSettings(nWP); 764 // StoreRegionWindlightSettings(nWP);
740 return nWP; 765 return nWP;
741 } 766 }
742 else 767 else
@@ -811,7 +836,7 @@ namespace OpenSim.Data.MySQL
811 return nWP; 836 return nWP;
812 } 837 }
813 838
814 public RegionSettings LoadRegionSettings(UUID regionUUID) 839 public virtual RegionSettings LoadRegionSettings(UUID regionUUID)
815 { 840 {
816 RegionSettings rs = null; 841 RegionSettings rs = null;
817 842
@@ -851,7 +876,7 @@ namespace OpenSim.Data.MySQL
851 return rs; 876 return rs;
852 } 877 }
853 878
854 public void StoreRegionWindlightSettings(RegionLightShareData wl) 879 public virtual void StoreRegionWindlightSettings(RegionLightShareData wl)
855 { 880 {
856 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 881 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
857 { 882 {
@@ -954,7 +979,7 @@ namespace OpenSim.Data.MySQL
954 } 979 }
955 } 980 }
956 981
957 public void RemoveRegionWindlightSettings(UUID regionID) 982 public virtual void RemoveRegionWindlightSettings(UUID regionID)
958 { 983 {
959 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 984 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
960 { 985 {
@@ -969,7 +994,7 @@ namespace OpenSim.Data.MySQL
969 } 994 }
970 } 995 }
971 996
972 public void StoreRegionSettings(RegionSettings rs) 997 public virtual void StoreRegionSettings(RegionSettings rs)
973 { 998 {
974 lock (m_dbLock) 999 lock (m_dbLock)
975 { 1000 {
@@ -996,7 +1021,7 @@ namespace OpenSim.Data.MySQL
996 "use_estate_sun, fixed_sun, sun_position, " + 1021 "use_estate_sun, fixed_sun, sun_position, " +
997 "covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " + 1022 "covenant, covenant_datetime, Sandbox, sunvectorx, sunvectory, " +
998 "sunvectorz, loaded_creation_datetime, " + 1023 "sunvectorz, loaded_creation_datetime, " +
999 "loaded_creation_id, map_tile_ID, " + 1024 "loaded_creation_id, map_tile_ID, block_search, casino, " +
1000 "TelehubObject, parcel_tile_ID) " + 1025 "TelehubObject, parcel_tile_ID) " +
1001 "values (?RegionUUID, ?BlockTerraform, " + 1026 "values (?RegionUUID, ?BlockTerraform, " +
1002 "?BlockFly, ?AllowDamage, ?RestrictPushing, " + 1027 "?BlockFly, ?AllowDamage, ?RestrictPushing, " +
@@ -1013,7 +1038,8 @@ namespace OpenSim.Data.MySQL
1013 "?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " + 1038 "?SunPosition, ?Covenant, ?CovenantChangedDateTime, ?Sandbox, " +
1014 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " + 1039 "?SunVectorX, ?SunVectorY, ?SunVectorZ, " +
1015 "?LoadedCreationDateTime, ?LoadedCreationID, " + 1040 "?LoadedCreationDateTime, ?LoadedCreationID, " +
1016 "?TerrainImageID, ?TelehubObject, ?ParcelImageID) "; 1041 "?TerrainImageID, ?block_search, ?casino, " +
1042 "?TelehubObject, ?ParcelImageID)";
1017 1043
1018 FillRegionSettingsCommand(cmd, rs); 1044 FillRegionSettingsCommand(cmd, rs);
1019 1045
@@ -1024,7 +1050,7 @@ namespace OpenSim.Data.MySQL
1024 SaveSpawnPoints(rs); 1050 SaveSpawnPoints(rs);
1025 } 1051 }
1026 1052
1027 public List<LandData> LoadLandObjects(UUID regionUUID) 1053 public virtual List<LandData> LoadLandObjects(UUID regionUUID)
1028 { 1054 {
1029 List<LandData> landData = new List<LandData>(); 1055 List<LandData> landData = new List<LandData>();
1030 1056
@@ -1206,11 +1232,31 @@ namespace OpenSim.Data.MySQL
1206 prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"]; 1232 prim.CollisionSoundVolume = (float)(double)row["CollisionSoundVolume"];
1207 1233
1208 prim.PassTouches = ((sbyte)row["PassTouches"] != 0); 1234 prim.PassTouches = ((sbyte)row["PassTouches"] != 0);
1235 prim.PassCollisions = ((sbyte)row["PassCollisions"] != 0);
1209 prim.LinkNum = (int)row["LinkNumber"]; 1236 prim.LinkNum = (int)row["LinkNumber"];
1210 1237
1211 if (!(row["MediaURL"] is System.DBNull)) 1238 if (!(row["MediaURL"] is System.DBNull))
1212 prim.MediaUrl = (string)row["MediaURL"]; 1239 prim.MediaUrl = (string)row["MediaURL"];
1213 1240
1241 if (!(row["KeyframeMotion"] is DBNull))
1242 {
1243 Byte[] data = (byte[])row["KeyframeMotion"];
1244 if (data.Length > 0)
1245 prim.KeyframeMotion = KeyframeMotion.FromData(null, data);
1246 else
1247 prim.KeyframeMotion = null;
1248 }
1249 else
1250 {
1251 prim.KeyframeMotion = null;
1252 }
1253
1254 prim.PhysicsShapeType = (byte)Convert.ToInt32(row["PhysicsShapeType"].ToString());
1255 prim.Density = (float)(double)row["Density"];
1256 prim.GravityModifier = (float)(double)row["GravityModifier"];
1257 prim.Friction = (float)(double)row["Friction"];
1258 prim.Bounciness = (float)(double)row["Restitution"];
1259
1214 return prim; 1260 return prim;
1215 } 1261 }
1216 1262
@@ -1304,6 +1350,9 @@ namespace OpenSim.Data.MySQL
1304 newSettings.ParcelImageID = DBGuid.FromDB(row["parcel_tile_ID"]); 1350 newSettings.ParcelImageID = DBGuid.FromDB(row["parcel_tile_ID"]);
1305 newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]); 1351 newSettings.TelehubObject = DBGuid.FromDB(row["TelehubObject"]);
1306 1352
1353 newSettings.GodBlockSearch = Convert.ToBoolean(row["block_search"]);
1354 newSettings.Casino = Convert.ToBoolean(row["casino"]);
1355
1307 return newSettings; 1356 return newSettings;
1308 } 1357 }
1309 1358
@@ -1401,7 +1450,7 @@ namespace OpenSim.Data.MySQL
1401 /// </summary> 1450 /// </summary>
1402 /// <param name="val"></param> 1451 /// <param name="val"></param>
1403 /// <returns></returns> 1452 /// <returns></returns>
1404 private static Array SerializeTerrain(double[,] val) 1453 private static Array SerializeTerrain(double[,] val, double[,] oldTerrain)
1405 { 1454 {
1406 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double)); 1455 MemoryStream str = new MemoryStream(((int)Constants.RegionSize * (int)Constants.RegionSize) *sizeof (double));
1407 BinaryWriter bw = new BinaryWriter(str); 1456 BinaryWriter bw = new BinaryWriter(str);
@@ -1410,7 +1459,11 @@ namespace OpenSim.Data.MySQL
1410 for (int x = 0; x < (int)Constants.RegionSize; x++) 1459 for (int x = 0; x < (int)Constants.RegionSize; x++)
1411 for (int y = 0; y < (int)Constants.RegionSize; y++) 1460 for (int y = 0; y < (int)Constants.RegionSize; y++)
1412 { 1461 {
1413 double height = val[x, y]; 1462 double height = 20.0;
1463 if (oldTerrain != null)
1464 height = oldTerrain[x, y];
1465 if (!double.IsNaN(val[x, y]))
1466 height = val[x, y];
1414 if (height == 0.0) 1467 if (height == 0.0)
1415 height = double.Epsilon; 1468 height = double.Epsilon;
1416 1469
@@ -1554,8 +1607,24 @@ namespace OpenSim.Data.MySQL
1554 else 1607 else
1555 cmd.Parameters.AddWithValue("PassTouches", 0); 1608 cmd.Parameters.AddWithValue("PassTouches", 0);
1556 1609
1610 if (prim.PassCollisions)
1611 cmd.Parameters.AddWithValue("PassCollisions", 1);
1612 else
1613 cmd.Parameters.AddWithValue("PassCollisions", 0);
1614
1557 cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum); 1615 cmd.Parameters.AddWithValue("LinkNumber", prim.LinkNum);
1558 cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl); 1616 cmd.Parameters.AddWithValue("MediaURL", prim.MediaUrl);
1617
1618 if (prim.KeyframeMotion != null)
1619 cmd.Parameters.AddWithValue("KeyframeMotion", prim.KeyframeMotion.Serialize());
1620 else
1621 cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]);
1622
1623 cmd.Parameters.AddWithValue("PhysicsShapeType", prim.PhysicsShapeType);
1624 cmd.Parameters.AddWithValue("Density", (double)prim.Density);
1625 cmd.Parameters.AddWithValue("GravityModifier", (double)prim.GravityModifier);
1626 cmd.Parameters.AddWithValue("Friction", (double)prim.Friction);
1627 cmd.Parameters.AddWithValue("Restitution", (double)prim.Bounciness);
1559 } 1628 }
1560 1629
1561 /// <summary> 1630 /// <summary>
@@ -1634,6 +1703,9 @@ namespace OpenSim.Data.MySQL
1634 cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime); 1703 cmd.Parameters.AddWithValue("LoadedCreationDateTime", settings.LoadedCreationDateTime);
1635 cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID); 1704 cmd.Parameters.AddWithValue("LoadedCreationID", settings.LoadedCreationID);
1636 cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID); 1705 cmd.Parameters.AddWithValue("TerrainImageID", settings.TerrainImageID);
1706 cmd.Parameters.AddWithValue("block_search", settings.GodBlockSearch);
1707 cmd.Parameters.AddWithValue("casino", settings.Casino);
1708
1637 cmd.Parameters.AddWithValue("ParcelImageID", settings.ParcelImageID); 1709 cmd.Parameters.AddWithValue("ParcelImageID", settings.ParcelImageID);
1638 cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject); 1710 cmd.Parameters.AddWithValue("TelehubObject", settings.TelehubObject);
1639 } 1711 }
@@ -1794,7 +1866,7 @@ namespace OpenSim.Data.MySQL
1794 cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml()); 1866 cmd.Parameters.AddWithValue("Media", null == s.Media ? null : s.Media.ToXml());
1795 } 1867 }
1796 1868
1797 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) 1869 public virtual void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
1798 { 1870 {
1799 lock (m_dbLock) 1871 lock (m_dbLock)
1800 { 1872 {
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 099beaf..ef99ef8 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` (
@@ -883,4 +883,3 @@ ALTER TABLE `regionsettings` MODIFY COLUMN `TelehubObject` VARCHAR(36) NOT NULL
883 883
884COMMIT; 884COMMIT;
885 885
886
diff --git a/OpenSim/Data/Null/NullUserAccountData.cs b/OpenSim/Data/Null/NullUserAccountData.cs
index ec54dba..241616b 100644
--- a/OpenSim/Data/Null/NullUserAccountData.cs
+++ b/OpenSim/Data/Null/NullUserAccountData.cs
@@ -193,5 +193,10 @@ namespace OpenSim.Data.Null
193 193
194 return false; 194 return false;
195 } 195 }
196
197 public UserAccountData[] GetUsersWhere(UUID scopeID, string where)
198 {
199 return null;
200 }
196 } 201 }
197} 202}
diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs
index d0e24c3..7f7059b 100644
--- a/OpenSim/Data/SQLite/SQLiteAssetData.cs
+++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs
@@ -131,7 +131,7 @@ namespace OpenSim.Data.SQLite
131 /// Create an asset 131 /// Create an asset
132 /// </summary> 132 /// </summary>
133 /// <param name="asset">Asset Base</param> 133 /// <param name="asset">Asset Base</param>
134 override public void StoreAsset(AssetBase asset) 134 override public bool StoreAsset(AssetBase asset)
135 { 135 {
136 //m_log.Info("[ASSET DB]: Creating Asset " + asset.FullID.ToString()); 136 //m_log.Info("[ASSET DB]: Creating Asset " + asset.FullID.ToString());
137 if (ExistsAsset(asset.FullID)) 137 if (ExistsAsset(asset.FullID))
@@ -153,6 +153,7 @@ namespace OpenSim.Data.SQLite
153 cmd.Parameters.Add(new SqliteParameter(":Data", asset.Data)); 153 cmd.Parameters.Add(new SqliteParameter(":Data", asset.Data));
154 154
155 cmd.ExecuteNonQuery(); 155 cmd.ExecuteNonQuery();
156 return true;
156 } 157 }
157 } 158 }
158 } 159 }
@@ -173,6 +174,7 @@ namespace OpenSim.Data.SQLite
173 cmd.Parameters.Add(new SqliteParameter(":Data", asset.Data)); 174 cmd.Parameters.Add(new SqliteParameter(":Data", asset.Data));
174 175
175 cmd.ExecuteNonQuery(); 176 cmd.ExecuteNonQuery();
177 return true;
176 } 178 }
177 } 179 }
178 } 180 }
diff --git a/OpenSim/Data/SQLite/SQLiteUserAccountData.cs b/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
index 7a5de50..4d580c0 100644
--- a/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
@@ -81,5 +81,10 @@ namespace OpenSim.Data.SQLite
81 81
82 return DoQuery(cmd); 82 return DoQuery(cmd);
83 } 83 }
84
85 public UserAccountData[] GetUsersWhere(UUID scopeID, string where)
86 {
87 return null;
88 }
84 } 89 }
85} 90}