diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs index 590b2c7dfa..f2eda40b53 100755 --- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs +++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs @@ -158,6 +158,11 @@ namespace OpenSim.Data.PGSQL } grp = new SceneObjectGroup(sceneObjectPart); + if (reader["lnkstBinData"] is not DBNull) + { + byte[] data = (byte[])reader["lnkstBinData"]; + grp.LinksetData = LinksetData.FromBin(data); + } } else { @@ -347,7 +352,7 @@ namespace OpenSim.Data.PGSQL ""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches, ""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs, ""Vehicle"" = :Vehicle, ""PhysInertia"" = :PhysInertia, ""standtargetx"" =:standtargetx, ""standtargety"" =:standtargety, ""standtargetz"" =:standtargetz, - ""sitactrange"" =:sitactrange, ""pseudocrc"" = :pseudocrc, ""sopanims"" = :sopanims + ""sitactrange"" =:sitactrange, ""pseudocrc"" = :pseudocrc, ""sopanims"" = :sopanims, ""lnkstBinData"" = :lnkstBinData WHERE ""UUID"" = :UUID ; @@ -363,7 +368,7 @@ namespace OpenSim.Data.PGSQL ""ForceMouselook"", ""ScriptAccessPin"", ""AllowedDrop"", ""DieAtEdge"", ""SalePrice"", ""SaleType"", ""ColorR"", ""ColorG"", ""ColorB"", ""ColorA"", ""ParticleSystem"", ""ClickAction"", ""Material"", ""CollisionSound"", ""CollisionSoundVolume"", ""PassTouches"", ""LinkNumber"", ""MediaURL"", ""DynAttrs"", ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution"", ""PassCollisions"", ""RotationAxisLocks"", ""RezzerID"" , ""Vehicle"", ""PhysInertia"", - ""standtargetx"", ""standtargety"", ""standtargetz"", ""sitactrange"", ""pseudocrc"",""sopanims"" + ""standtargetx"", ""standtargety"", ""standtargetz"", ""sitactrange"", ""pseudocrc"",""sopanims"",""lnkstBinData"" ) Select :UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask, :EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX, @@ -1871,6 +1876,11 @@ namespace OpenSim.Data.PGSQL else parameters.Add(_Database.CreateParameter("sopanims", null)); + if (prim.IsRoot && prim.ParentGroup.LinksetData is not null) + parameters.Add(_Database.CreateParameter("lnkstBinData", prim.ParentGroup.LinksetData.ToBin())); + else + parameters.Add(_Database.CreateParameter("lnkstBinData", null)); + return parameters.ToArray(); } diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations index 1def32ef1f..6d4793ed56 100644 --- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations @@ -1261,3 +1261,8 @@ BEGIN; ALTER TABLE `prims` ADD COLUMN `sopanims` bytea NULL; ALTER TABLE `primshapes` ADD COLUMN `MatOvrd` bytea NULL; COMMIT; + +:VERSION 53 #----- add linkset data binary storage column +BEGIN; +ALTER TABLE `prims` ADD COLUMN `lnkstBinData` bytea NULL; +COMMIT; diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations index e81b33a001..8e7085532e 100644 --- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations +++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations @@ -405,3 +405,8 @@ BEGIN; ALTER TABLE `prims` ADD COLUMN `sopanims` blob default NULL; ALTER TABLE `primshapes` ADD COLUMN `MatOvrd` blob default NULL; COMMIT; + +:VERSION 41 #----- add linkset data binary storage column +BEGIN; +ALTER TABLE `prims` ADD COLUMN `lnkstBinData` blob default NULL; +COMMIT; diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs index ed33fd4a30..211805b77b 100644 --- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs @@ -657,6 +657,12 @@ namespace OpenSim.Data.SQLite SceneObjectGroup group = new SceneObjectGroup(prim); + if (primRow["lnkstBinData"] is not DBNull) + { + byte[] data = (byte[])primRow["lnkstBinData"]; + group.LinksetData = LinksetData.FromBin(data); + } + createdObjects.Add(group.UUID, group); retvals.Add(group); LoadItems(prim); @@ -1244,6 +1250,8 @@ namespace OpenSim.Data.SQLite createCol(prims, "pseudocrc", typeof(int)); createCol(prims, "sopanims", typeof(byte[])); + createCol(prims, "lnkstBinData", typeof(byte[])); + // Add in contraints prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] }; @@ -2196,6 +2204,10 @@ namespace OpenSim.Data.SQLite row["pseudocrc"] = prim.PseudoCRC; row["sopanims"] = prim.SerializeAnimations(); + if (prim.IsRoot && prim.ParentGroup.LinksetData is not null) + row["lnkstBinData"] = prim.ParentGroup.LinksetData.ToBin(); + else + row["lnkstBinData"] = null; } ///