From b49ae37e89340c5ec5bbafcfd462fc7d6815f34b Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 14 Jan 2008 21:35:49 +0000 Subject: my Exists check was slow and wrong. This fixes issues people were just having on IRC. Thanks to Grumly57 for helping to sort this out. --- OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs | 29 ++++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'OpenSim/Framework/Data.SQLite') diff --git a/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs b/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs index 7b02e99..e2b28cd 100644 --- a/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs +++ b/OpenSim/Framework/Data.SQLite/SQLiteAssetData.cs @@ -57,7 +57,6 @@ namespace OpenSim.Framework.Data.SQLite { m_conn = new SqliteConnection("URI=file:" + dbfile + ",version=3"); m_conn.Open(); - TestTables(m_conn); return; } @@ -70,13 +69,15 @@ namespace OpenSim.Framework.Data.SQLite cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.UUID.ToString())); using (IDataReader reader = cmd.ExecuteReader()) { - reader.Read(); - if (reader != null) + if (reader.Read()) { - return buildAsset(reader); + AssetBase asset = buildAsset(reader); + reader.Close(); + return asset; } else { + reader.Close(); return null; } } @@ -85,8 +86,10 @@ namespace OpenSim.Framework.Data.SQLite public void CreateAsset(AssetBase asset) { + MainLog.Instance.Verbose("SQLITE", "Creating Asset " + asset.FullID.UUID.ToString()); if (ExistsAsset(asset.FullID)) { + MainLog.Instance.Verbose("SQLITE", "Asset exists, updating instead. You should fix the caller for this!"); UpdateAsset(asset); } else @@ -140,7 +143,23 @@ namespace OpenSim.Framework.Data.SQLite public bool ExistsAsset(LLUUID uuid) { - return (FetchAsset(uuid) != null); + using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn)) + { + cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.UUID.ToString())); + using (IDataReader reader = cmd.ExecuteReader()) + { + if(reader.Read()) + { + reader.Close(); + return true; + } + else + { + reader.Close(); + return false; + } + } + } } public void DeleteAsset(LLUUID uuid) -- cgit v1.1