aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-11-09 00:59:18 +0000
committerJustin Clark-Casey (justincc)2012-11-09 01:13:19 +0000
commit75c880a6f3631a527b532773a8a493309a96028e (patch)
treed07023ef4a277420b66f3b144df3be1287c26d92 /OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
parentODECharacter overrides TargetVelocity. No change to existing behavior (diff)
downloadopensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.zip
opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.tar.gz
opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.tar.bz2
opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.tar.xz
Update parent inventory folder version numbers when folders are moved/created/deleted to match version numbers cached by viewers.
This is done in the way that one would expect (e.g. moving a folder increments version number on both source and destination parent folders). This should hopefully improve viewer reuse of its cached inventory information. Currently MySQL only but will be implement for SQLite/MSSQL if there are no issues.
Diffstat (limited to 'OpenSim/Data/MSSQL/MSSQLXInventoryData.cs')
-rw-r--r--OpenSim/Data/MSSQL/MSSQLXInventoryData.cs128
1 files changed, 86 insertions, 42 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
index b19a0da..7ab0ebb 100644
--- a/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLXInventoryData.cs
@@ -43,12 +43,12 @@ namespace OpenSim.Data.MSSQL
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 MSSQLFolderHandler m_Folders;
47 private MSSQLItemHandler m_Items; 47 private MSSQLItemHandler m_Items;
48 48
49 public MSSQLXInventoryData(string conn, string realm) 49 public MSSQLXInventoryData(string conn, string realm)
50 { 50 {
51 m_Folders = new MSSQLGenericTableHandler<XInventoryFolder>( 51 m_Folders = new MSSQLFolderHandler(
52 conn, "inventoryfolders", "InventoryStore"); 52 conn, "inventoryfolders", "InventoryStore");
53 m_Items = new MSSQLItemHandler( 53 m_Items = new MSSQLItemHandler(
54 conn, "inventoryitems", String.Empty); 54 conn, "inventoryitems", String.Empty);
@@ -85,6 +85,7 @@ namespace OpenSim.Data.MSSQL
85 { 85 {
86 return m_Folders.Delete(field, val); 86 return m_Folders.Delete(field, val);
87 } 87 }
88
88 public bool DeleteFolders(string[] fields, string[] vals) 89 public bool DeleteFolders(string[] fields, string[] vals)
89 { 90 {
90 return m_Folders.Delete(fields, vals); 91 return m_Folders.Delete(fields, vals);
@@ -94,15 +95,22 @@ namespace OpenSim.Data.MSSQL
94 { 95 {
95 return m_Items.Delete(field, val); 96 return m_Items.Delete(field, val);
96 } 97 }
98
97 public bool DeleteItems(string[] fields, string[] vals) 99 public bool DeleteItems(string[] fields, string[] vals)
98 { 100 {
99 return m_Items.Delete(fields, vals); 101 return m_Items.Delete(fields, vals);
100 } 102 }
103
101 public bool MoveItem(string id, string newParent) 104 public bool MoveItem(string id, string newParent)
102 { 105 {
103 return m_Items.MoveItem(id, newParent); 106 return m_Items.MoveItem(id, newParent);
104 } 107 }
105 108
109 public bool MoveFolder(string id, string newParent)
110 {
111 return m_Folders.MoveFolder(id, newParent);
112 }
113
106 public XInventoryItem[] GetActiveGestures(UUID principalID) 114 public XInventoryItem[] GetActiveGestures(UUID principalID)
107 { 115 {
108 return m_Items.GetActiveGestures(principalID); 116 return m_Items.GetActiveGestures(principalID);
@@ -124,79 +132,115 @@ namespace OpenSim.Data.MSSQL
124 public bool MoveItem(string id, string newParent) 132 public bool MoveItem(string id, string newParent)
125 { 133 {
126 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 134 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
127 using (SqlCommand cmd = new SqlCommand())
128 { 135 {
136 using (SqlCommand cmd = new SqlCommand())
137 {
129 138
130 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where inventoryID = @InventoryID", m_Realm); 139 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where inventoryID = @InventoryID", m_Realm);
131 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParent)); 140 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParent));
132 cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id)); 141 cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id));
133 cmd.Connection = conn; 142 cmd.Connection = conn;
134 conn.Open(); 143 conn.Open();
135 return cmd.ExecuteNonQuery() == 0 ? false : true; 144 return cmd.ExecuteNonQuery() == 0 ? false : true;
145 }
136 } 146 }
137 } 147 }
138 148
139 public XInventoryItem[] GetActiveGestures(UUID principalID) 149 public XInventoryItem[] GetActiveGestures(UUID principalID)
140 { 150 {
141 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 151 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
142 using (SqlCommand cmd = new SqlCommand())
143 { 152 {
144 cmd.CommandText = String.Format("select * from inventoryitems where avatarId = @uuid and assetType = @type and flags = 1", m_Realm); 153 using (SqlCommand cmd = new SqlCommand())
154 {
155 cmd.CommandText = String.Format("select * from inventoryitems where avatarId = @uuid and assetType = @type and flags = 1", m_Realm);
145 156
146 cmd.Parameters.Add(m_database.CreateParameter("@uuid", principalID.ToString())); 157 cmd.Parameters.Add(m_database.CreateParameter("@uuid", principalID.ToString()));
147 cmd.Parameters.Add(m_database.CreateParameter("@type", (int)AssetType.Gesture)); 158 cmd.Parameters.Add(m_database.CreateParameter("@type", (int)AssetType.Gesture));
148 cmd.Connection = conn; 159 cmd.Connection = conn;
149 conn.Open(); 160 conn.Open();
150 return DoQuery(cmd); 161 return DoQuery(cmd);
162 }
151 } 163 }
152 } 164 }
153 165
154 public int GetAssetPermissions(UUID principalID, UUID assetID) 166 public int GetAssetPermissions(UUID principalID, UUID assetID)
155 { 167 {
156 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 168 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
157 using (SqlCommand cmd = new SqlCommand())
158 { 169 {
159 cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = @PrincipalID and assetID = @AssetID group by assetID", m_Realm); 170 using (SqlCommand cmd = new SqlCommand())
160 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
161 cmd.Parameters.Add(m_database.CreateParameter("@AssetID", assetID.ToString()));
162 cmd.Connection = conn;
163 conn.Open();
164 using (SqlDataReader reader = cmd.ExecuteReader())
165 { 171 {
172 cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = @PrincipalID and assetID = @AssetID group by assetID", m_Realm);
173 cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
174 cmd.Parameters.Add(m_database.CreateParameter("@AssetID", assetID.ToString()));
175 cmd.Connection = conn;
176 conn.Open();
177 using (SqlDataReader reader = cmd.ExecuteReader())
178 {
166 179
167 int perms = 0; 180 int perms = 0;
168 181
169 if (reader.Read()) 182 if (reader.Read())
170 { 183 {
171 perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]); 184 perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]);
185 }
186
187 return perms;
172 } 188 }
173 189
174 return perms;
175 } 190 }
176
177 } 191 }
178 } 192 }
193
179 public override bool Store(XInventoryItem item) 194 public override bool Store(XInventoryItem item)
180 { 195 {
181 if (!base.Store(item)) 196 if (!base.Store(item))
182 return false; 197 return false;
198
183 string sql = "update inventoryfolders set version=version+1 where folderID = @folderID"; 199 string sql = "update inventoryfolders set version=version+1 where folderID = @folderID";
184 using (SqlConnection conn = new SqlConnection(m_ConnectionString)) 200 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
185 using (SqlCommand cmd = new SqlCommand(sql, conn))
186 { 201 {
187 conn.Open(); 202 using (SqlCommand cmd = new SqlCommand(sql, conn))
203 {
204 conn.Open();
205
206 cmd.Parameters.AddWithValue("@folderID", item.parentFolderID.ToString());
207 try
208 {
209 cmd.ExecuteNonQuery();
210 }
211 catch (Exception)
212 {
213 return false;
214 }
215 }
216
217 return true;
218 }
219 }
220 }
221
222 public class MSSQLFolderHandler : MSSQLGenericTableHandler<XInventoryFolder>
223 {
224 public MSSQLFolderHandler(string c, string t, string m) :
225 base(c, t, m)
226 {
227 }
228
229 public bool MoveFolder(string id, string newParentFolderID)
230 {
231 using (SqlConnection conn = new SqlConnection(m_ConnectionString))
232 {
233 using (SqlCommand cmd = new SqlCommand())
234 {
188 235
189 cmd.Parameters.AddWithValue("@folderID", item.parentFolderID.ToString()); 236 cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where folderID = @folderID", m_Realm);
190 try 237 cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParentFolderID));
191 { 238 cmd.Parameters.Add(m_database.CreateParameter("@folderID", id));
192 cmd.ExecuteNonQuery(); 239 cmd.Connection = conn;
193 } 240 conn.Open();
194 catch (Exception) 241 return cmd.ExecuteNonQuery() == 0 ? false : true;
195 { 242 }
196 return false;
197 }
198 } 243 }
199 return true;
200 } 244 }
201 } 245 }
202} 246} \ No newline at end of file