From b59d9789f8cafdc64ebf4ecf4fec75d5589c97f7 Mon Sep 17 00:00:00 2001 From: MW Date: Mon, 13 Aug 2007 13:36:42 +0000 Subject: Partial Linking of prim groups should work (its partial as currently only the root prim of the child group will actually get linked, working on linking the rest now). Multiple prim groups are now stored in the sqlite database and are reloaded correctly. --- .../MonoSqliteDataStore.cs | 52 ++++++++++++++-------- 1 file changed, 34 insertions(+), 18 deletions(-) (limited to 'OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs') diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs index 5d1592c..bd6658c 100644 --- a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs +++ b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs @@ -308,7 +308,6 @@ namespace OpenSim.DataStore.MonoSqliteStorage private void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID) { - Console.WriteLine("scene Group for this prim is " + sceneGroupID); row["UUID"] = prim.UUID; row["ParentID"] = prim.ParentID; row["CreationDate"] = prim.CreationDate; @@ -481,37 +480,54 @@ namespace OpenSim.DataStore.MonoSqliteStorage public List LoadObjects() { + Dictionary createdObjects = new Dictionary(); List retvals = new List(); DataTable prims = ds.Tables["prims"]; DataTable shapes = ds.Tables["primshapes"]; - // This only supports 1 prim per SceneObjectGroup. Need to fix later foreach (DataRow primRow in prims.Rows) { - SceneObjectGroup group = new SceneObjectGroup(); - SceneObjectPart prim = buildPrim(primRow); - DataRow shapeRow = shapes.Rows.Find(prim.UUID); - if (shapeRow != null) + string uuid = (string)primRow["UUID"]; + string objID = (string)primRow["SceneGroupID"]; + if (uuid == objID) //is new SceneObjectGroup ? { - prim.Shape = buildShape(shapeRow); + SceneObjectGroup group = new SceneObjectGroup(); + SceneObjectPart prim = buildPrim(primRow); + DataRow shapeRow = shapes.Rows.Find(prim.UUID); + if (shapeRow != null) + { + prim.Shape = buildShape(shapeRow); + } + else + { + Console.WriteLine("No shape found for prim in storage, so setting default box shape"); + prim.Shape = BoxShape.Default; + } + group.AddPart(prim); + group.RootPart = prim; + + createdObjects.Add(group.UUID, group); + retvals.Add(group); } else { - Console.WriteLine("No shape found for prim in storage, so setting default box shape"); - prim.Shape = BoxShape.Default; + SceneObjectPart prim = buildPrim(primRow); + DataRow shapeRow = shapes.Rows.Find(prim.UUID); + if (shapeRow != null) + { + prim.Shape = buildShape(shapeRow); + } + else + { + Console.WriteLine("No shape found for prim in storage, so setting default box shape"); + prim.Shape = BoxShape.Default; + } + createdObjects[new LLUUID(objID)].AddPart(prim); } - group.AddPart(prim); - // TODO: there are a couple of known issues to get this to work - // * While we can add Children, we can't set the root part (or - // or even figure out which should be the root part) - // * region handle may need to be persisted, it isn't now - group.RootPart = prim; - - retvals.Add(group); } - MainLog.Instance.Verbose("DATASTORE", "Sqlite - LoadObjects found " + prims.Rows.Count + " objects"); + MainLog.Instance.Verbose("DATASTORE", "Sqlite - LoadObjects found " + prims.Rows.Count + " primitives"); return retvals; } -- cgit v1.1