aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs13
-rw-r--r--OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs92
2 files changed, 77 insertions, 28 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index c0cfe9f..051884d 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -60,14 +60,21 @@ namespace OpenSim.Region.Environment.Scenes
60 60
61 [XmlIgnore] public PhysicsActor PhysActor = null; 61 [XmlIgnore] public PhysicsActor PhysActor = null;
62 62
63 // Holds in memory prim inventory 63 /// <summary>
64 protected Dictionary<LLUUID, TaskInventoryItem> m_taskInventory 64 /// Holds in memory prim inventory
65 /// </summary>
66 protected IDictionary<LLUUID, TaskInventoryItem> m_taskInventory
65 = new Dictionary<LLUUID, TaskInventoryItem>(); 67 = new Dictionary<LLUUID, TaskInventoryItem>();
66 68
67 [XmlIgnore] 69 [XmlIgnore]
68 public Dictionary<LLUUID, TaskInventoryItem> TaskInventory 70 /// <summary>
71 /// Not really ideal to allow this to be set, but currently expedient for inserting a prim inventory
72 /// from persistence.
73 /// </summary>
74 public IDictionary<LLUUID, TaskInventoryItem> TaskInventory
69 { 75 {
70 get { return m_taskInventory; } 76 get { return m_taskInventory; }
77 set { m_taskInventory = value; }
71 } 78 }
72 79
73 public LLUUID LastOwnerID; 80 public LLUUID LastOwnerID;
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
index 2de7e25..f9ab0c5 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -121,6 +121,7 @@ namespace OpenSim.DataStore.MonoSqlite
121 { 121 {
122 ds.Tables.Add(createItemsTable()); 122 ds.Tables.Add(createItemsTable());
123 setupItemsCommands(itemsDa, conn); 123 setupItemsCommands(itemsDa, conn);
124 itemsDa.Fill(ds.Tables["primitems"]);
124 } 125 }
125 126
126 ds.Tables.Add(createTerrainTable()); 127 ds.Tables.Add(createTerrainTable());
@@ -265,12 +266,14 @@ namespace OpenSim.DataStore.MonoSqlite
265 { 266 {
266 try 267 try
267 { 268 {
269 SceneObjectPart prim = null;
270
268 string uuid = (string) primRow["UUID"]; 271 string uuid = (string) primRow["UUID"];
269 string objID = (string) primRow["SceneGroupID"]; 272 string objID = (string) primRow["SceneGroupID"];
270 if (uuid == objID) //is new SceneObjectGroup ? 273 if (uuid == objID) //is new SceneObjectGroup ?
271 { 274 {
272 SceneObjectGroup group = new SceneObjectGroup(); 275 SceneObjectGroup group = new SceneObjectGroup();
273 SceneObjectPart prim = buildPrim(primRow); 276 prim = buildPrim(primRow);
274 DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID)); 277 DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
275 if (shapeRow != null) 278 if (shapeRow != null)
276 { 279 {
@@ -290,7 +293,7 @@ namespace OpenSim.DataStore.MonoSqlite
290 } 293 }
291 else 294 else
292 { 295 {
293 SceneObjectPart prim = buildPrim(primRow); 296 prim = buildPrim(primRow);
294 DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID)); 297 DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
295 if (shapeRow != null) 298 if (shapeRow != null)
296 { 299 {
@@ -305,8 +308,10 @@ namespace OpenSim.DataStore.MonoSqlite
305 createdObjects[new LLUUID(objID)].AddPart(prim); 308 createdObjects[new LLUUID(objID)].AddPart(prim);
306 } 309 }
307 310
308 // Add inventory restore code here, probably in a separate method. 311 if (persistPrimInventories)
309 312 {
313 LoadItems(prim);
314 }
310 } 315 }
311 catch (Exception e) 316 catch (Exception e)
312 { 317 {
@@ -326,25 +331,28 @@ namespace OpenSim.DataStore.MonoSqlite
326 /// Load in a prim's persisted inventory. 331 /// Load in a prim's persisted inventory.
327 /// </summary> 332 /// </summary>
328 /// <param name="prim"></param> 333 /// <param name="prim"></param>
329 /* 334 private void LoadItems(SceneObjectPart prim)
330 private void LoadPrimInventory(SceneObjectPart prim)
331 { 335 {
332 String sql = String.Format("primID = '{0}'", primID); 336 MainLog.Instance.Verbose("DATASTORE", "Loading inventory for {0}, {1}", prim.Name, prim.UUID);
337
338 DataTable dbItems = ds.Tables["primitems"];
339
340 String sql = String.Format("primID = '{0}'", prim.UUID.ToString());
333 DataRow[] dbItemRows = dbItems.Select(sql); 341 DataRow[] dbItemRows = dbItems.Select(sql);
334 342
335 DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID)); 343 IDictionary<LLUUID, SceneObjectPart.TaskInventoryItem> inventory
336 if (shapeRow != null) 344 = new Dictionary<LLUUID, SceneObjectPart.TaskInventoryItem>();
337 { 345
338 prim.Shape = buildShape(shapeRow); 346 foreach (DataRow row in dbItemRows)
339 } 347 {
340 else 348 SceneObjectPart.TaskInventoryItem item = buildItem(row);
341 { 349 inventory.Add(item.item_id, item);
342 MainLog.Instance.Notice( 350
343 "No shape found for prim in storage, so setting default box shape"); 351 MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.name, item.item_id);
344 prim.Shape = PrimitiveBaseShape.Default; 352 }
345 } 353
354 prim.TaskInventory = inventory;
346 } 355 }
347 */
348 356
349 public void StoreTerrain(double[,] ter, LLUUID regionID) 357 public void StoreTerrain(double[,] ter, LLUUID regionID)
350 { 358 {
@@ -699,11 +707,11 @@ namespace OpenSim.DataStore.MonoSqlite
699 createCol(items, "lastOwnerID", typeof (String)); 707 createCol(items, "lastOwnerID", typeof (String));
700 createCol(items, "groupID", typeof (String)); 708 createCol(items, "groupID", typeof (String));
701 709
702 createCol(items, "nextPermissions", typeof (Int32)); 710 createCol(items, "nextPermissions", typeof (UInt32));
703 createCol(items, "currentPermissions", typeof (Int32)); 711 createCol(items, "currentPermissions", typeof (UInt32));
704 createCol(items, "basePermissions", typeof (Int32)); 712 createCol(items, "basePermissions", typeof (UInt32));
705 createCol(items, "everyonePermissions", typeof (Int32)); 713 createCol(items, "everyonePermissions", typeof (UInt32));
706 createCol(items, "groupPermissions", typeof (Int32)); 714 createCol(items, "groupPermissions", typeof (UInt32));
707 715
708 items.PrimaryKey = new DataColumn[] {items.Columns["itemID"]}; 716 items.PrimaryKey = new DataColumn[] {items.Columns["itemID"]};
709 717
@@ -877,6 +885,40 @@ namespace OpenSim.DataStore.MonoSqlite
877 885
878 return prim; 886 return prim;
879 } 887 }
888
889 /// <summary>
890 /// Build a prim inventory item from the persisted data.
891 /// </summary>
892 /// <param name="row"></param>
893 /// <returns></returns>
894 private SceneObjectPart.TaskInventoryItem buildItem(DataRow row)
895 {
896 SceneObjectPart.TaskInventoryItem taskItem = new SceneObjectPart.TaskInventoryItem();
897
898 taskItem.item_id = new LLUUID((String)row["itemID"]);
899 taskItem.ParentPartID = new LLUUID((String)row["primID"]);
900 taskItem.asset_id = new LLUUID((String)row["assetID"]);
901 taskItem.parent_id = new LLUUID((String)row["parentFolderID"]);
902
903 taskItem.inv_type = (String)row["invType"];
904 taskItem.type = (String)row["assetType"];
905
906 taskItem.name = (String)row["name"];
907 taskItem.desc = (String)row["description"];
908 taskItem.creation_date = Convert.ToUInt32(row["creationDate"]);
909 taskItem.creator_id = new LLUUID((String)row["creatorID"]);
910 taskItem.owner_id = new LLUUID((String)row["ownerID"]);
911 taskItem.last_owner_id = new LLUUID((String)row["lastOwnerID"]);
912 taskItem.group_id = new LLUUID((String)row["groupID"]);
913
914 taskItem.next_owner_mask = Convert.ToUInt32(row["nextPermissions"]);
915 taskItem.owner_mask = Convert.ToUInt32(row["currentPermissions"]);
916 taskItem.base_mask = Convert.ToUInt32(row["basePermissions"]);
917 taskItem.everyone_mask = Convert.ToUInt32(row["everyonePermissions"]);
918 taskItem.group_mask = Convert.ToUInt32(row["groupPermissions"]);
919
920 return taskItem;
921 }
880 922
881 private LandData buildLandData(DataRow row) 923 private LandData buildLandData(DataRow row)
882 { 924 {
@@ -1223,7 +1265,7 @@ namespace OpenSim.DataStore.MonoSqlite
1223 /// <param name="primID"></param> 1265 /// <param name="primID"></param>
1224 /// <param name="items"></param> 1266 /// <param name="items"></param>
1225 /// <returns></returns> 1267 /// <returns></returns>
1226 private void addPrimInventory(LLUUID primID, Dictionary<LLUUID, SceneObjectPart.TaskInventoryItem> items) 1268 private void addPrimInventory(LLUUID primID, IDictionary<LLUUID, SceneObjectPart.TaskInventoryItem> items)
1227 { 1269 {
1228 MainLog.Instance.Verbose("DATASTORE", "Entered addPrimInventory with prim ID {0}", primID); 1270 MainLog.Instance.Verbose("DATASTORE", "Entered addPrimInventory with prim ID {0}", primID);
1229 1271