Improve inventory folder version updating for mssql database plugin.

I am not in a position to test this so the updates have been done blind.
If it needs any fixing will probably require patches.
0.7.4-extended
Justin Clark-Casey (justincc) 2012-11-15 03:39:17 +00:00
parent c7b9d460e0
commit e8e6bc0c6a
1 changed files with 102 additions and 14 deletions

View File

@ -131,6 +131,12 @@ namespace OpenSim.Data.MSSQL
public bool MoveItem(string id, string newParent) public bool MoveItem(string id, string newParent)
{ {
XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id });
if (retrievedItems.Length == 0)
return false;
UUID oldParent = retrievedItems[0].parentFolderID;
using (SqlConnection conn = new SqlConnection(m_ConnectionString)) using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{ {
using (SqlCommand cmd = new SqlCommand()) using (SqlCommand cmd = new SqlCommand())
@ -141,9 +147,16 @@ namespace OpenSim.Data.MSSQL
cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id)); cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id));
cmd.Connection = conn; cmd.Connection = conn;
conn.Open(); conn.Open();
return cmd.ExecuteNonQuery() == 0 ? false : true;
if (cmd.ExecuteNonQuery() == 0)
return false;
} }
} }
IncrementFolderVersion(oldParent);
IncrementFolderVersion(newParent);
return true;
} }
public XInventoryItem[] GetActiveGestures(UUID principalID) public XInventoryItem[] GetActiveGestures(UUID principalID)
@ -196,14 +209,31 @@ namespace OpenSim.Data.MSSQL
if (!base.Store(item)) if (!base.Store(item))
return false; return false;
string sql = "update inventoryfolders set version=version+1 where folderID = @folderID"; IncrementFolderVersion(item.parentFolderID);
return true;
}
private bool IncrementFolderVersion(UUID folderID)
{
return IncrementFolderVersion(folderID.ToString());
}
private bool IncrementFolderVersion(string folderID)
{
// m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID);
// Util.PrintCallStack();
string sql = "update inventoryfolders set version=version+1 where folderID = ?folderID";
using (SqlConnection conn = new SqlConnection(m_ConnectionString)) using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{ {
using (SqlCommand cmd = new SqlCommand(sql, conn)) using (SqlCommand cmd = new SqlCommand(sql, conn))
{ {
conn.Open(); conn.Open();
cmd.Parameters.AddWithValue("@folderID", item.parentFolderID.ToString()); cmd.Parameters.AddWithValue("@folderID", folderID);
try try
{ {
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
@ -213,11 +243,11 @@ namespace OpenSim.Data.MSSQL
return false; return false;
} }
} }
}
return true; return true;
} }
} }
}
public class MSSQLFolderHandler : MSSQLGenericTableHandler<XInventoryFolder> public class MSSQLFolderHandler : MSSQLGenericTableHandler<XInventoryFolder>
{ {
@ -228,6 +258,13 @@ namespace OpenSim.Data.MSSQL
public bool MoveFolder(string id, string newParentFolderID) public bool MoveFolder(string id, string newParentFolderID)
{ {
XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id });
if (folders.Length == 0)
return false;
UUID oldParentFolderUUID = folders[0].parentFolderID;
using (SqlConnection conn = new SqlConnection(m_ConnectionString)) using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{ {
using (SqlCommand cmd = new SqlCommand()) using (SqlCommand cmd = new SqlCommand())
@ -238,9 +275,60 @@ namespace OpenSim.Data.MSSQL
cmd.Parameters.Add(m_database.CreateParameter("@folderID", id)); cmd.Parameters.Add(m_database.CreateParameter("@folderID", id));
cmd.Connection = conn; cmd.Connection = conn;
conn.Open(); conn.Open();
return cmd.ExecuteNonQuery() == 0 ? false : true;
if (cmd.ExecuteNonQuery() == 0)
return false;
} }
} }
IncrementFolderVersion(oldParentFolderUUID);
IncrementFolderVersion(newParentFolderID);
return true;
}
public override bool Store(XInventoryFolder folder)
{
if (!base.Store(folder))
return false;
IncrementFolderVersion(folder.parentFolderID);
return true;
}
private bool IncrementFolderVersion(UUID folderID)
{
return IncrementFolderVersion(folderID.ToString());
}
private bool IncrementFolderVersion(string folderID)
{
// m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID);
// Util.PrintCallStack();
string sql = "update inventoryfolders set version=version+1 where folderID = ?folderID";
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@folderID", folderID);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception)
{
return false;
}
}
}
return true;
} }
} }
} }