From d1c3f8eef58b29eb8760eeb1ac03852a2387f927 Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Mon, 31 Mar 2014 11:53:12 +0300
Subject: Added assets service method AssetsExist(), which returns whether the
given list of assets exist.
This method is used to optimize sending assets with embedded assets: e.g., when a Hypergrid visitor takes an item into the inventory.
---
OpenSim/Data/PGSQL/PGSQLAssetData.cs | 35 ++++++++++++++++++++++++++++-------
1 file changed, 28 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Data/PGSQL/PGSQLAssetData.cs')
diff --git a/OpenSim/Data/PGSQL/PGSQLAssetData.cs b/OpenSim/Data/PGSQL/PGSQLAssetData.cs
index ab74856..ca18dc9 100644
--- a/OpenSim/Data/PGSQL/PGSQLAssetData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLAssetData.cs
@@ -231,17 +231,38 @@ namespace OpenSim.Data.PGSQL
// }
///
- /// Check if asset exist in m_database
+ /// Check if the assets exist in the database.
///
- ///
- /// true if exist.
- override public bool ExistsAsset(UUID uuid)
+ /// The assets' IDs
+ /// For each asset: true if it exists, false otherwise
+ public override bool[] AssetsExist(UUID[] uuids)
{
- if (GetAsset(uuid) != null)
+ if (uuids.Length == 0)
+ return new bool[0];
+
+ HashSet exist = new HashSet();
+
+ string ids = "'" + string.Join("','", uuids) + "'";
+ string sql = string.Format("SELECT id FROM assets WHERE id IN ({0})", ids);
+
+ using (NpgsqlConnection conn = new NpgsqlConnection(m_connectionString))
+ using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn))
{
- return true;
+ conn.Open();
+ using (NpgsqlDataReader reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ UUID id = DBGuid.FromDB(reader["id"]);
+ exist.Add(id);
+ }
+ }
}
- return false;
+
+ bool[] results = new bool[uuids.Length];
+ for (int i = 0; i < uuids.Length; i++)
+ results[i] = exist.Contains(uuids[i]);
+ return results;
}
///
--
cgit v1.1