diff options
Diffstat (limited to 'OpenSim/Data/MSSQL/MSSQLAssetData.cs')
-rw-r--r-- | OpenSim/Data/MSSQL/MSSQLAssetData.cs | 106 |
1 files changed, 32 insertions, 74 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs index 8475b22..c7488d8 100644 --- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs +++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs | |||
@@ -121,15 +121,16 @@ namespace OpenSim.Data.MSSQL | |||
121 | if (reader.Read()) | 121 | if (reader.Read()) |
122 | { | 122 | { |
123 | AssetBase asset = new AssetBase( | 123 | AssetBase asset = new AssetBase( |
124 | new UUID((Guid)reader["id"]), | 124 | DBGuid.FromDB(reader["id"]), |
125 | (string)reader["name"], | 125 | (string)reader["name"], |
126 | Convert.ToSByte(reader["assetType"]), | 126 | Convert.ToSByte(reader["assetType"]), |
127 | String.Empty | 127 | reader["creatorid"].ToString() |
128 | ); | 128 | ); |
129 | // Region Main | 129 | // Region Main |
130 | asset.Description = (string)reader["description"]; | 130 | asset.Description = (string)reader["description"]; |
131 | asset.Local = Convert.ToBoolean(reader["local"]); | 131 | asset.Local = Convert.ToBoolean(reader["local"]); |
132 | asset.Temporary = Convert.ToBoolean(reader["temporary"]); | 132 | asset.Temporary = Convert.ToBoolean(reader["temporary"]); |
133 | asset.Flags = (AssetFlags)(Convert.ToInt32(reader["asset_flags"])); | ||
133 | asset.Data = (byte[])reader["data"]; | 134 | asset.Data = (byte[])reader["data"]; |
134 | return asset; | 135 | return asset; |
135 | } | 136 | } |
@@ -144,26 +145,19 @@ namespace OpenSim.Data.MSSQL | |||
144 | /// <param name="asset">the asset</param> | 145 | /// <param name="asset">the asset</param> |
145 | override public void StoreAsset(AssetBase asset) | 146 | override public void StoreAsset(AssetBase asset) |
146 | { | 147 | { |
147 | if (ExistsAsset(asset.FullID)) | 148 | |
148 | UpdateAsset(asset); | 149 | string sql = |
149 | else | 150 | @"IF EXISTS(SELECT * FROM assets WHERE id=@id) |
150 | InsertAsset(asset); | 151 | UPDATE assets set name = @name, description = @description, assetType = @assetType, |
151 | } | 152 | local = @local, temporary = @temporary, creatorid = @creatorid, data = @data |
152 | 153 | WHERE id=@id | |
153 | 154 | ELSE | |
154 | private void InsertAsset(AssetBase asset) | 155 | INSERT INTO assets |
155 | { | 156 | ([id], [name], [description], [assetType], [local], |
156 | if (ExistsAsset(asset.FullID)) | 157 | [temporary], [create_time], [access_time], [creatorid], [asset_flags], [data]) |
157 | { | 158 | VALUES |
158 | return; | 159 | (@id, @name, @description, @assetType, @local, |
159 | } | 160 | @temporary, @create_time, @access_time, @creatorid, @asset_flags, @data)"; |
160 | |||
161 | string sql = @"INSERT INTO assets | ||
162 | ([id], [name], [description], [assetType], [local], | ||
163 | [temporary], [create_time], [access_time], [data]) | ||
164 | VALUES | ||
165 | (@id, @name, @description, @assetType, @local, | ||
166 | @temporary, @create_time, @access_time, @data)"; | ||
167 | 161 | ||
168 | string assetName = asset.Name; | 162 | string assetName = asset.Name; |
169 | if (asset.Name.Length > 64) | 163 | if (asset.Name.Length > 64) |
@@ -191,6 +185,8 @@ namespace OpenSim.Data.MSSQL | |||
191 | command.Parameters.Add(m_database.CreateParameter("temporary", asset.Temporary)); | 185 | command.Parameters.Add(m_database.CreateParameter("temporary", asset.Temporary)); |
192 | command.Parameters.Add(m_database.CreateParameter("access_time", now)); | 186 | command.Parameters.Add(m_database.CreateParameter("access_time", now)); |
193 | command.Parameters.Add(m_database.CreateParameter("create_time", now)); | 187 | command.Parameters.Add(m_database.CreateParameter("create_time", now)); |
188 | command.Parameters.Add(m_database.CreateParameter("asset_flags", (int)asset.Flags)); | ||
189 | command.Parameters.Add(m_database.CreateParameter("creatorid", asset.Metadata.CreatorID)); | ||
194 | command.Parameters.Add(m_database.CreateParameter("data", asset.Data)); | 190 | command.Parameters.Add(m_database.CreateParameter("data", asset.Data)); |
195 | conn.Open(); | 191 | conn.Open(); |
196 | try | 192 | try |
@@ -199,57 +195,11 @@ namespace OpenSim.Data.MSSQL | |||
199 | } | 195 | } |
200 | catch(Exception e) | 196 | catch(Exception e) |
201 | { | 197 | { |
202 | m_log.Error("[ASSET DB]: Error inserting item :" + e.Message); | 198 | m_log.Error("[ASSET DB]: Error storing item :" + e.Message); |
203 | } | 199 | } |
204 | } | 200 | } |
205 | } | 201 | } |
206 | 202 | ||
207 | /// <summary> | ||
208 | /// Update asset in m_database | ||
209 | /// </summary> | ||
210 | /// <param name="asset">the asset</param> | ||
211 | private void UpdateAsset(AssetBase asset) | ||
212 | { | ||
213 | string sql = @"UPDATE assets set id = @id, name = @name, description = @description, assetType = @assetType, | ||
214 | local = @local, temporary = @temporary, data = @data | ||
215 | WHERE id = @keyId;"; | ||
216 | |||
217 | string assetName = asset.Name; | ||
218 | if (asset.Name.Length > 64) | ||
219 | { | ||
220 | assetName = asset.Name.Substring(0, 64); | ||
221 | m_log.Warn("[ASSET DB]: Name field truncated from " + asset.Name.Length + " to " + assetName.Length + " characters on update"); | ||
222 | } | ||
223 | |||
224 | string assetDescription = asset.Description; | ||
225 | if (asset.Description.Length > 64) | ||
226 | { | ||
227 | assetDescription = asset.Description.Substring(0, 64); | ||
228 | m_log.Warn("[ASSET DB]: Description field truncated from " + asset.Description.Length + " to " + assetDescription.Length + " characters on update"); | ||
229 | } | ||
230 | |||
231 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | ||
232 | using (SqlCommand command = new SqlCommand(sql, conn)) | ||
233 | { | ||
234 | command.Parameters.Add(m_database.CreateParameter("id", asset.FullID)); | ||
235 | command.Parameters.Add(m_database.CreateParameter("name", assetName)); | ||
236 | command.Parameters.Add(m_database.CreateParameter("description", assetDescription)); | ||
237 | command.Parameters.Add(m_database.CreateParameter("assetType", asset.Type)); | ||
238 | command.Parameters.Add(m_database.CreateParameter("local", asset.Local)); | ||
239 | command.Parameters.Add(m_database.CreateParameter("temporary", asset.Temporary)); | ||
240 | command.Parameters.Add(m_database.CreateParameter("data", asset.Data)); | ||
241 | command.Parameters.Add(m_database.CreateParameter("@keyId", asset.FullID)); | ||
242 | conn.Open(); | ||
243 | try | ||
244 | { | ||
245 | command.ExecuteNonQuery(); | ||
246 | } | ||
247 | catch (Exception e) | ||
248 | { | ||
249 | m_log.Error(e.ToString()); | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | 203 | ||
254 | // Commented out since currently unused - this probably should be called in GetAsset() | 204 | // Commented out since currently unused - this probably should be called in GetAsset() |
255 | // private void UpdateAccessTime(AssetBase asset) | 205 | // private void UpdateAccessTime(AssetBase asset) |
@@ -295,26 +245,34 @@ namespace OpenSim.Data.MSSQL | |||
295 | public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) | 245 | public override List<AssetMetadata> FetchAssetMetadataSet(int start, int count) |
296 | { | 246 | { |
297 | List<AssetMetadata> retList = new List<AssetMetadata>(count); | 247 | List<AssetMetadata> retList = new List<AssetMetadata>(count); |
298 | string sql = @"SELECT (name,description,assetType,temporary,id), Row = ROW_NUMBER() | 248 | string sql = @"WITH OrderedAssets AS |
299 | OVER (ORDER BY (some column to order by)) | 249 | ( |
300 | WHERE Row >= @Start AND Row < @Start + @Count"; | 250 | SELECT id, name, description, assetType, temporary, creatorid, |
251 | RowNumber = ROW_NUMBER() OVER (ORDER BY id) | ||
252 | FROM assets | ||
253 | ) | ||
254 | SELECT * | ||
255 | FROM OrderedAssets | ||
256 | WHERE RowNumber BETWEEN @start AND @stop;"; | ||
301 | 257 | ||
302 | using (SqlConnection conn = new SqlConnection(m_connectionString)) | 258 | using (SqlConnection conn = new SqlConnection(m_connectionString)) |
303 | using (SqlCommand cmd = new SqlCommand(sql, conn)) | 259 | using (SqlCommand cmd = new SqlCommand(sql, conn)) |
304 | { | 260 | { |
305 | cmd.Parameters.Add(m_database.CreateParameter("start", start)); | 261 | cmd.Parameters.Add(m_database.CreateParameter("start", start)); |
306 | cmd.Parameters.Add(m_database.CreateParameter("count", count)); | 262 | cmd.Parameters.Add(m_database.CreateParameter("stop", start + count - 1)); |
307 | conn.Open(); | 263 | conn.Open(); |
308 | using (SqlDataReader reader = cmd.ExecuteReader()) | 264 | using (SqlDataReader reader = cmd.ExecuteReader()) |
309 | { | 265 | { |
310 | while (reader.Read()) | 266 | while (reader.Read()) |
311 | { | 267 | { |
312 | AssetMetadata metadata = new AssetMetadata(); | 268 | AssetMetadata metadata = new AssetMetadata(); |
313 | metadata.FullID = new UUID((Guid)reader["id"]); | 269 | metadata.FullID = DBGuid.FromDB(reader["id"]); |
314 | metadata.Name = (string)reader["name"]; | 270 | metadata.Name = (string)reader["name"]; |
315 | metadata.Description = (string)reader["description"]; | 271 | metadata.Description = (string)reader["description"]; |
316 | metadata.Type = Convert.ToSByte(reader["assetType"]); | 272 | metadata.Type = Convert.ToSByte(reader["assetType"]); |
317 | metadata.Temporary = Convert.ToBoolean(reader["temporary"]); | 273 | metadata.Temporary = Convert.ToBoolean(reader["temporary"]); |
274 | metadata.CreatorID = (string)reader["creatorid"]; | ||
275 | retList.Add(metadata); | ||
318 | } | 276 | } |
319 | } | 277 | } |
320 | } | 278 | } |