diff options
author | Mike Mazur | 2009-03-09 07:29:34 +0000 |
---|---|---|
committer | Mike Mazur | 2009-03-09 07:29:34 +0000 |
commit | a2f07ecd2e248966957a8ea70d772276359b02e8 (patch) | |
tree | 5050ec85024e44e4946bfc29782875b3f50f5d37 /OpenSim/Data | |
parent | * Tweak llMoveToTarget per mantis 3265 (diff) | |
download | opensim-SC_OLD-a2f07ecd2e248966957a8ea70d772276359b02e8.zip opensim-SC_OLD-a2f07ecd2e248966957a8ea70d772276359b02e8.tar.gz opensim-SC_OLD-a2f07ecd2e248966957a8ea70d772276359b02e8.tar.bz2 opensim-SC_OLD-a2f07ecd2e248966957a8ea70d772276359b02e8.tar.xz |
Implemented FetchAssetMetadataSet in DB backends.
This method fetches metadata for a subset of the entries in the assets
database. This functionality is used in the ForEach calls in the asset
storage providers in AssetInventoryServer. With this implemented,
frontends such as the BrowseFrontend should now work.
- MySQL: implemented, sanity tested
- SQLite: implemented, sanity tested
- MSSQL: implemented, not tested
- NHibernate: not implemented
Diffstat (limited to 'OpenSim/Data')
-rw-r--r-- | OpenSim/Data/AssetDataBase.cs | 3 | ||||
-rw-r--r-- | OpenSim/Data/IAssetData.cs | 2 | ||||
-rw-r--r-- | OpenSim/Data/MSSQL/MSSQLAssetData.cs | 36 | ||||
-rw-r--r-- | OpenSim/Data/MySQL/MySQLAssetData.cs | 51 | ||||
-rw-r--r-- | OpenSim/Data/NHibernate/NHibernateAssetData.cs | 15 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteAssetData.cs | 50 |
6 files changed, 157 insertions, 0 deletions
diff --git a/OpenSim/Data/AssetDataBase.cs b/OpenSim/Data/AssetDataBase.cs index 2cdbbe1..d699f17 100644 --- a/OpenSim/Data/AssetDataBase.cs +++ b/OpenSim/Data/AssetDataBase.cs | |||
@@ -25,6 +25,7 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System.Collections.Generic; | ||
28 | using OpenMetaverse; | 29 | using OpenMetaverse; |
29 | using OpenSim.Framework; | 30 | using OpenSim.Framework; |
30 | 31 | ||
@@ -37,6 +38,8 @@ namespace OpenSim.Data | |||
37 | public abstract void UpdateAsset(AssetBase asset); | 38 | public abstract void UpdateAsset(AssetBase asset); |
38 | public abstract bool ExistsAsset(UUID uuid); | 39 | public abstract bool ExistsAsset(UUID uuid); |
39 | 40 | ||
41 | public abstract List<AssetMetadata> FetchAssetMetadataSet(int start, int count); | ||
42 | |||
40 | public abstract string Version { get; } | 43 | public abstract string Version { get; } |
41 | public abstract string Name { get; } | 44 | public abstract string Name { get; } |
42 | public abstract void Initialise(string connect); | 45 | public abstract void Initialise(string connect); |
diff --git a/OpenSim/Data/IAssetData.cs b/OpenSim/Data/IAssetData.cs index 47e25f3..ddbc10f 100644 --- a/OpenSim/Data/IAssetData.cs +++ b/OpenSim/Data/IAssetData.cs | |||
@@ -25,6 +25,7 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System.Collections.Generic; | ||
28 | using OpenMetaverse; | 29 | using OpenMetaverse; |
29 | using OpenSim.Framework; | 30 | using OpenSim.Framework; |
30 | 31 | ||
@@ -36,6 +37,7 @@ namespace OpenSim.Data | |||
36 | void CreateAsset(AssetBase asset); | 37 | void CreateAsset(AssetBase asset); |
37 | void UpdateAsset(AssetBase asset); | 38 | void UpdateAsset(AssetBase asset); |
38 | bool ExistsAsset(UUID uuid); | 39 | bool ExistsAsset(UUID uuid); |
40 | List<AssetMetadata> FetchAssetMetadataSet(int start, int count); | ||
39 | void Initialise(string connect); | 41 | void Initialise(string connect); |
40 | } | 42 | } |
41 | 43 | ||
diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs index 61db8f5..edacf08 100644 --- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs +++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs | |||
@@ -28,6 +28,7 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Data; | 29 | using System.Data; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Collections.Generic; | ||
31 | using OpenMetaverse; | 32 | using OpenMetaverse; |
32 | using log4net; | 33 | using log4net; |
33 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
@@ -245,6 +246,41 @@ namespace OpenSim.Data.MSSQL | |||
245 | return false; | 246 | return false; |
246 | } | 247 | } |
247 | 248 | ||
249 | /// <summary> | ||
250 | /// Returns a list of AssetMetadata objects. The list is a subset of | ||
251 | /// the entire data set offset by <paramref name="start" /> containing | ||
252 | /// <paramref name="count" /> elements. | ||
253 | /// </summary> | ||
254 | /// <param name="start">The number of results to discard from the total data set.</param> | ||
255 | /// <param name="count">The number of rows the returned list should contain.</param> | ||
256 | /// <returns>A list of AssetMetadata objects.</returns> | ||
257 | public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) | ||
258 | { | ||
259 | List<AssetMetadata> retList = new List<AssetMetadata>(count); | ||
260 | |||
261 | using (AutoClosingSqlCommand command = database.Query("SELECT name,description,assetType,temporary,id FROM assets LIMIT @start, @count")) | ||
262 | { | ||
263 | command.Parameters.Add(database.CreateParameter("start", start)); | ||
264 | command.Parameters.Add(database.CreateParameter("count", count)); | ||
265 | |||
266 | using (IDataReader reader = command.ExecuteReader()) | ||
267 | { | ||
268 | while (reader.Read()) | ||
269 | { | ||
270 | AssetMetadata metadata = new AssetMetadata(); | ||
271 | // Region Main | ||
272 | metadata.FullID = new UUID((Guid)reader["id"]); | ||
273 | metadata.Name = (string)reader["name"]; | ||
274 | metadata.Description = (string)reader["description"]; | ||
275 | metadata.Type = Convert.ToSByte(reader["assetType"]); | ||
276 | metadata.Temporary = Convert.ToBoolean(reader["temporary"]); | ||
277 | } | ||
278 | } | ||
279 | } | ||
280 | |||
281 | return retList; | ||
282 | } | ||
283 | |||
248 | #endregion | 284 | #endregion |
249 | } | 285 | } |
250 | } | 286 | } |
diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs index 2211d4c..466f5db 100644 --- a/OpenSim/Data/MySQL/MySQLAssetData.cs +++ b/OpenSim/Data/MySQL/MySQLAssetData.cs | |||
@@ -28,6 +28,7 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Data; | 29 | using System.Data; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Collections.Generic; | ||
31 | using log4net; | 32 | using log4net; |
32 | using MySql.Data.MySqlClient; | 33 | using MySql.Data.MySqlClient; |
33 | using OpenMetaverse; | 34 | using OpenMetaverse; |
@@ -311,6 +312,56 @@ namespace OpenSim.Data.MySQL | |||
311 | return assetExists; | 312 | return assetExists; |
312 | } | 313 | } |
313 | 314 | ||
315 | /// <summary> | ||
316 | /// Returns a list of AssetMetadata objects. The list is a subset of | ||
317 | /// the entire data set offset by <paramref name="start" /> containing | ||
318 | /// <paramref name="count" /> elements. | ||
319 | /// </summary> | ||
320 | /// <param name="start">The number of results to discard from the total data set.</param> | ||
321 | /// <param name="count">The number of rows the returned list should contain.</param> | ||
322 | /// <returns>A list of AssetMetadata objects.</returns> | ||
323 | public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) | ||
324 | { | ||
325 | List<AssetMetadata> retList = new List<AssetMetadata>(count); | ||
326 | |||
327 | lock (_dbConnection) | ||
328 | { | ||
329 | _dbConnection.CheckConnection(); | ||
330 | |||
331 | MySqlCommand cmd = new MySqlCommand("SELECT name,description,assetType,temporary,id FROM assets LIMIT ?start, ?count", _dbConnection.Connection); | ||
332 | cmd.Parameters.AddWithValue("?start", start); | ||
333 | cmd.Parameters.AddWithValue("?count", count); | ||
334 | |||
335 | try | ||
336 | { | ||
337 | using (MySqlDataReader dbReader = cmd.ExecuteReader()) | ||
338 | { | ||
339 | while (dbReader.Read()) | ||
340 | { | ||
341 | AssetMetadata metadata = new AssetMetadata(); | ||
342 | metadata.Name = (string) dbReader["name"]; | ||
343 | metadata.Description = (string) dbReader["description"]; | ||
344 | metadata.Type = (sbyte) dbReader["assetType"]; | ||
345 | metadata.Temporary = (bool) dbReader["temporary"]; // Not sure if this is correct. | ||
346 | metadata.FullID = new UUID((string) dbReader["id"]); | ||
347 | |||
348 | // Current SHA1s are not stored/computed. | ||
349 | metadata.SHA1 = new byte[] {}; | ||
350 | |||
351 | retList.Add(metadata); | ||
352 | } | ||
353 | } | ||
354 | } | ||
355 | catch (Exception e) | ||
356 | { | ||
357 | m_log.Error("[ASSETS DB]: MySql failure fetching asset set" + Environment.NewLine + e.ToString() + Environment.NewLine + "Attempting reconnection"); | ||
358 | _dbConnection.Reconnect(); | ||
359 | } | ||
360 | } | ||
361 | |||
362 | return retList; | ||
363 | } | ||
364 | |||
314 | #endregion | 365 | #endregion |
315 | 366 | ||
316 | /// <summary> | 367 | /// <summary> |
diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs index 387d3d4..4e8f708 100644 --- a/OpenSim/Data/NHibernate/NHibernateAssetData.cs +++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System.Reflection; | 28 | using System.Reflection; |
29 | using System.Collections.Generic; | ||
29 | using log4net; | 30 | using log4net; |
30 | using OpenMetaverse; | 31 | using OpenMetaverse; |
31 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
@@ -109,6 +110,20 @@ namespace OpenSim.Data.NHibernate | |||
109 | return (FetchAsset(uuid) != null); | 110 | return (FetchAsset(uuid) != null); |
110 | } | 111 | } |
111 | 112 | ||
113 | /// <summary> | ||
114 | /// Returns a list of AssetMetadata objects. The list is a subset of | ||
115 | /// the entire data set offset by <paramref name="start" /> containing | ||
116 | /// <paramref name="count" /> elements. | ||
117 | /// </summary> | ||
118 | /// <param name="start">The number of results to discard from the total data set.</param> | ||
119 | /// <param name="count">The number of rows the returned list should contain.</param> | ||
120 | /// <returns>A list of AssetMetadata objects.</returns> | ||
121 | public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) | ||
122 | { | ||
123 | List<AssetMetadata> retList = new List<AssetMetadata>(count); | ||
124 | return retList; | ||
125 | } | ||
126 | |||
112 | public void DeleteAsset(UUID uuid) | 127 | public void DeleteAsset(UUID uuid) |
113 | { | 128 | { |
114 | 129 | ||
diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs index 1b42198..6a323e1 100644 --- a/OpenSim/Data/SQLite/SQLiteAssetData.cs +++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs | |||
@@ -28,6 +28,7 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Data; | 29 | using System.Data; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Collections.Generic; | ||
31 | using log4net; | 32 | using log4net; |
32 | using Mono.Data.SqliteClient; | 33 | using Mono.Data.SqliteClient; |
33 | using OpenMetaverse; | 34 | using OpenMetaverse; |
@@ -49,6 +50,7 @@ namespace OpenSim.Data.SQLite | |||
49 | /// Artificial constructor called upon plugin load | 50 | /// Artificial constructor called upon plugin load |
50 | /// </summary> | 51 | /// </summary> |
51 | private const string SelectAssetSQL = "select * from assets where UUID=:UUID"; | 52 | private const string SelectAssetSQL = "select * from assets where UUID=:UUID"; |
53 | private const string SelectAssetMetadataSQL = "select Name, Description, Type, Temporary, UUID from assets limit :start, :count"; | ||
52 | private const string DeleteAssetSQL = "delete from assets where UUID=:UUID"; | 54 | private const string DeleteAssetSQL = "delete from assets where UUID=:UUID"; |
53 | private const string InsertAssetSQL = "insert into assets(UUID, Name, Description, Type, Local, Temporary, Data) values(:UUID, :Name, :Description, :Type, :Local, :Temporary, :Data)"; | 55 | private const string InsertAssetSQL = "insert into assets(UUID, Name, Description, Type, Local, Temporary, Data) values(:UUID, :Name, :Description, :Type, :Local, :Temporary, :Data)"; |
54 | private const string UpdateAssetSQL = "update assets set Name=:Name, Description=:Description, Type=:Type, Local=:Local, Temporary=:Temporary, Data=:Data where UUID=:UUID"; | 56 | private const string UpdateAssetSQL = "update assets set Name=:Name, Description=:Description, Type=:Type, Local=:Local, Temporary=:Temporary, Data=:Data where UUID=:UUID"; |
@@ -256,6 +258,54 @@ namespace OpenSim.Data.SQLite | |||
256 | return asset; | 258 | return asset; |
257 | } | 259 | } |
258 | 260 | ||
261 | private static AssetMetadata buildAssetMetadata(IDataReader row) | ||
262 | { | ||
263 | AssetMetadata metadata = new AssetMetadata(); | ||
264 | |||
265 | metadata.FullID = new UUID((string) row["UUID"]); | ||
266 | metadata.Name = (string) row["Name"]; | ||
267 | metadata.Description = (string) row["Description"]; | ||
268 | metadata.Type = Convert.ToSByte(row["Type"]); | ||
269 | metadata.Temporary = Convert.ToBoolean(row["Temporary"]); // Not sure if this is correct. | ||
270 | |||
271 | // Current SHA1s are not stored/computed. | ||
272 | metadata.SHA1 = new byte[] {}; | ||
273 | |||
274 | return metadata; | ||
275 | } | ||
276 | |||
277 | /// <summary> | ||
278 | /// Returns a list of AssetMetadata objects. The list is a subset of | ||
279 | /// the entire data set offset by <paramref name="start" /> containing | ||
280 | /// <paramref name="count" /> elements. | ||
281 | /// </summary> | ||
282 | /// <param name="start">The number of results to discard from the total data set.</param> | ||
283 | /// <param name="count">The number of rows the returned list should contain.</param> | ||
284 | /// <returns>A list of AssetMetadata objects.</returns> | ||
285 | public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) | ||
286 | { | ||
287 | List<AssetMetadata> retList = new List<AssetMetadata>(count); | ||
288 | |||
289 | lock (this) | ||
290 | { | ||
291 | using (SqliteCommand cmd = new SqliteCommand(SelectAssetMetadataSQL, m_conn)) | ||
292 | { | ||
293 | cmd.Parameters.Add(new SqliteParameter(":start", start)); | ||
294 | cmd.Parameters.Add(new SqliteParameter(":count", count)); | ||
295 | |||
296 | using (IDataReader reader = cmd.ExecuteReader()) | ||
297 | { | ||
298 | while (reader.Read()) | ||
299 | { | ||
300 | AssetMetadata metadata = buildAssetMetadata(reader); | ||
301 | retList.Add(metadata); | ||
302 | } | ||
303 | } | ||
304 | } | ||
305 | } | ||
306 | |||
307 | return retList; | ||
308 | } | ||
259 | 309 | ||
260 | /*********************************************************************** | 310 | /*********************************************************************** |
261 | * | 311 | * |