diff options
author | Justin Clark-Casey (justincc) | 2012-11-09 00:59:18 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-11-09 01:13:19 +0000 |
commit | 75c880a6f3631a527b532773a8a493309a96028e (patch) | |
tree | d07023ef4a277420b66f3b144df3be1287c26d92 /OpenSim/Data/MSSQL | |
parent | ODECharacter overrides TargetVelocity. No change to existing behavior (diff) | |
download | opensim-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')
-rw-r--r-- | OpenSim/Data/MSSQL/MSSQLXInventoryData.cs | 128 |
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 |