From 680231d7e79cae2636e9722ca12b79345fa2dbdd Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Thu, 23 Mar 2017 23:00:48 +0000
Subject: Make the MySqlGeneric layer transaction aware
---
OpenSim/Data/MySQL/MySQLFramework.cs | 75 ++++++++----
OpenSim/Data/MySQL/MySQLGenericTableHandler.cs | 163 ++++++++++++++++---------
2 files changed, 155 insertions(+), 83 deletions(-)
(limited to 'OpenSim/Data')
diff --git a/OpenSim/Data/MySQL/MySQLFramework.cs b/OpenSim/Data/MySQL/MySQLFramework.cs
index 34791cf..93662db 100644
--- a/OpenSim/Data/MySQL/MySQLFramework.cs
+++ b/OpenSim/Data/MySQL/MySQLFramework.cs
@@ -36,7 +36,7 @@ using MySql.Data.MySqlClient;
namespace OpenSim.Data.MySQL
{
///
- /// A database interface class to a user profile storage system
+ /// Common code for a number of database modules
///
public class MySqlFramework
{
@@ -44,14 +44,24 @@ namespace OpenSim.Data.MySQL
log4net.LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
- protected string m_connectionString;
- protected object m_dbLock = new object();
+ protected string m_connectionString = String.Empty;
+ protected MySqlTransaction m_trans = null;
+ // Constructor using a connection string. Instances constructed
+ // this way will open a new connection for each call.
protected MySqlFramework(string connectionString)
{
m_connectionString = connectionString;
}
+ // Constructor using a connection object. Instances constructed
+ // this way will use the connection object and never create
+ // new connections.
+ protected MySqlFramework(MySqlTransaction trans)
+ {
+ m_trans = trans;
+ }
+
//////////////////////////////////////////////////////////////
//
// All non queries are funneled through one connection
@@ -59,33 +69,48 @@ namespace OpenSim.Data.MySQL
//
protected int ExecuteNonQuery(MySqlCommand cmd)
{
- lock (m_dbLock)
+ if (m_trans == null)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{
- try
- {
- dbcon.Open();
- cmd.Connection = dbcon;
+ dbcon.Open();
+ return ExecuteNonQueryWithConnection(cmd, dbcon);
+ }
+ }
+ else
+ {
+ return ExecuteNonQueryWithTransaction(cmd, m_trans);
+ }
+ }
- try
- {
- return cmd.ExecuteNonQuery();
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- m_log.Error(Environment.StackTrace.ToString());
- return 0;
- }
- }
- catch (Exception e)
- {
- m_log.Error(e.Message, e);
- return 0;
- }
+ private int ExecuteNonQueryWithTransaction(MySqlCommand cmd, MySqlTransaction trans)
+ {
+ cmd.Transaction = trans;
+ return ExecuteNonQueryWithConnection(cmd, trans.Connection);
+ }
+
+ private int ExecuteNonQueryWithConnection(MySqlCommand cmd, MySqlConnection dbcon)
+ {
+ try
+ {
+ cmd.Connection = dbcon;
+
+ try
+ {
+ return cmd.ExecuteNonQuery();
}
+ catch (Exception e)
+ {
+ m_log.Error(e.Message, e);
+ m_log.Error(Environment.StackTrace.ToString());
+ return 0;
+ }
+ }
+ catch (Exception e)
+ {
+ m_log.Error(e.Message, e);
+ return 0;
}
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
index 6aae9c6..bd8bbd5 100644
--- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
+++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
@@ -53,14 +53,27 @@ namespace OpenSim.Data.MySQL
get { return GetType().Assembly; }
}
+ public MySQLGenericTableHandler(MySqlTransaction trans,
+ string realm, string storeName) : base(trans)
+ {
+ m_Realm = realm;
+
+ CommonConstruct(storeName);
+ }
+
public MySQLGenericTableHandler(string connectionString,
string realm, string storeName) : base(connectionString)
{
m_Realm = realm;
- m_connectionString = connectionString;
+ CommonConstruct(storeName);
+ }
+
+ protected void CommonConstruct(string storeName)
+ {
if (storeName != String.Empty)
{
+ // We always use a new connection for any Migrations
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{
dbcon.Open();
@@ -111,6 +124,11 @@ namespace OpenSim.Data.MySQL
public virtual T[] Get(string[] fields, string[] keys)
{
+ return Get(fields, keys, String.Empty);
+ }
+
+ public virtual T[] Get(string[] fields, string[] keys, string options)
+ {
if (fields.Length != keys.Length)
return new T[0];
@@ -126,8 +144,8 @@ namespace OpenSim.Data.MySQL
string where = String.Join(" and ", terms.ToArray());
- string query = String.Format("select * from {0} where {1}",
- m_Realm, where);
+ string query = String.Format("select * from {0} where {1} {2}",
+ m_Realm, where, options);
cmd.CommandText = query;
@@ -137,72 +155,92 @@ namespace OpenSim.Data.MySQL
protected T[] DoQuery(MySqlCommand cmd)
{
+ if (m_trans == null)
+ {
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+
+ return DoQueryWithConnection(cmd, dbcon);
+ }
+ }
+ else
+ {
+ return DoQueryWithTransaction(cmd, m_trans);
+ }
+ }
+
+ protected T[] DoQueryWithTransaction(MySqlCommand cmd, MySqlTransaction trans)
+ {
+ cmd.Transaction = trans;
+
+ return DoQueryWithConnection(cmd, trans.Connection);
+ }
+
+ protected T[] DoQueryWithConnection(MySqlCommand cmd, MySqlConnection dbcon)
+ {
List result = new List();
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ cmd.Connection = dbcon;
+
+ using (IDataReader reader = cmd.ExecuteReader())
{
- dbcon.Open();
- cmd.Connection = dbcon;
+ if (reader == null)
+ return new T[0];
- using (IDataReader reader = cmd.ExecuteReader())
- {
- if (reader == null)
- return new T[0];
+ CheckColumnNames(reader);
- CheckColumnNames(reader);
+ while (reader.Read())
+ {
+ T row = new T();
- while (reader.Read())
+ foreach (string name in m_Fields.Keys)
{
- T row = new T();
-
- foreach (string name in m_Fields.Keys)
+ if (reader[name] is DBNull)
{
- if (reader[name] is DBNull)
- {
- continue;
- }
- if (m_Fields[name].FieldType == typeof(bool))
- {
- int v = Convert.ToInt32(reader[name]);
- m_Fields[name].SetValue(row, v != 0 ? true : false);
- }
- else if (m_Fields[name].FieldType == typeof(UUID))
- {
- m_Fields[name].SetValue(row, DBGuid.FromDB(reader[name]));
- }
- else if (m_Fields[name].FieldType == typeof(int))
- {
- int v = Convert.ToInt32(reader[name]);
- m_Fields[name].SetValue(row, v);
- }
- else if (m_Fields[name].FieldType == typeof(uint))
- {
- uint v = Convert.ToUInt32(reader[name]);
- m_Fields[name].SetValue(row, v);
- }
- else
- {
- m_Fields[name].SetValue(row, reader[name]);
- }
+ continue;
}
-
- if (m_DataField != null)
+ if (m_Fields[name].FieldType == typeof(bool))
+ {
+ int v = Convert.ToInt32(reader[name]);
+ m_Fields[name].SetValue(row, v != 0 ? true : false);
+ }
+ else if (m_Fields[name].FieldType == typeof(UUID))
+ {
+ m_Fields[name].SetValue(row, DBGuid.FromDB(reader[name]));
+ }
+ else if (m_Fields[name].FieldType == typeof(int))
+ {
+ int v = Convert.ToInt32(reader[name]);
+ m_Fields[name].SetValue(row, v);
+ }
+ else if (m_Fields[name].FieldType == typeof(uint))
+ {
+ uint v = Convert.ToUInt32(reader[name]);
+ m_Fields[name].SetValue(row, v);
+ }
+ else
{
- Dictionary data =
- new Dictionary();
+ m_Fields[name].SetValue(row, reader[name]);
+ }
+ }
- foreach (string col in m_ColumnNames)
- {
- data[col] = reader[col].ToString();
- if (data[col] == null)
- data[col] = String.Empty;
- }
+ if (m_DataField != null)
+ {
+ Dictionary data =
+ new Dictionary();
- m_DataField.SetValue(row, data);
+ foreach (string col in m_ColumnNames)
+ {
+ data[col] = reader[col].ToString();
+ if (data[col] == null)
+ data[col] = String.Empty;
}
- result.Add(row);
+ m_DataField.SetValue(row, data);
}
+
+ result.Add(row);
}
}
@@ -357,14 +395,23 @@ namespace OpenSim.Data.MySQL
public object DoQueryScalar(MySqlCommand cmd)
{
- using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ if (m_trans == null)
{
- dbcon.Open();
- cmd.Connection = dbcon;
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+ cmd.Connection = dbcon;
+
+ return cmd.ExecuteScalar();
+ }
+ }
+ else
+ {
+ cmd.Connection = m_trans.Connection;
+ cmd.Transaction = m_trans;
return cmd.ExecuteScalar();
}
}
-
}
}
--
cgit v1.1
From 443fc60cdf399a49832e787ca58c2644bef7e457 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Sat, 1 Apr 2017 17:49:17 +0100
Subject: store the physics inertia override in Mysql and add it to
serializer. run prebuild is required
---
OpenSim/Data/MySQL/MySQLSimulationData.cs | 17 +++++++++++++++--
OpenSim/Data/MySQL/Resources/RegionStore.migrations | 6 ++++++
2 files changed, 21 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Data')
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 8278c0e..97a433f 100644
--- a/OpenSim/Data/MySQL/MySQLSimulationData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -187,7 +187,7 @@ namespace OpenSim.Data.MySQL
"LinkNumber, MediaURL, KeyframeMotion, AttachedPosX, " +
"AttachedPosY, AttachedPosZ, " +
"PhysicsShapeType, Density, GravityModifier, " +
- "Friction, Restitution, Vehicle, DynAttrs, " +
+ "Friction, Restitution, Vehicle, PhysInertia, DynAttrs, " +
"RotationAxisLocks" +
") values (" + "?UUID, " +
"?CreationDate, ?Name, ?Text, " +
@@ -224,7 +224,7 @@ namespace OpenSim.Data.MySQL
"?LinkNumber, ?MediaURL, ?KeyframeMotion, ?AttachedPosX, " +
"?AttachedPosY, ?AttachedPosZ, " +
"?PhysicsShapeType, ?Density, ?GravityModifier, " +
- "?Friction, ?Restitution, ?Vehicle, ?DynAttrs," +
+ "?Friction, ?Restitution, ?Vehicle, ?PhysInertia, ?DynAttrs," +
"?RotationAxisLocks)";
FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
@@ -1452,6 +1452,14 @@ namespace OpenSim.Data.MySQL
prim.VehicleParams = vehicle;
}
+ PhysicsInertiaData pdata;
+ if (row["PhysInertia"].ToString() != String.Empty)
+ {
+ pdata = PhysicsInertiaData.FromXml2(row["PhysInertia"].ToString());
+ if (pdata != null)
+ prim.PhysicsInertia = pdata;
+ }
+
return prim;
}
@@ -1810,6 +1818,11 @@ namespace OpenSim.Data.MySQL
else
cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]);
+ if (prim.PhysicsInertia != null)
+ cmd.Parameters.AddWithValue("PhysInertia", prim.PhysicsInertia.ToXml2());
+ else
+ cmd.Parameters.AddWithValue("PhysInertia", String.Empty);
+
if (prim.VehicleParams != null)
cmd.Parameters.AddWithValue("Vehicle", prim.VehicleParams.ToXml2());
else
diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
index c63cc95..0577392 100644
--- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations
@@ -461,3 +461,9 @@ BEGIN;
ALTER TABLE `prims` ADD COLUMN `RezzerID` char(36) DEFAULT NULL;
COMMIT;
+
+:VERSION 57 #----- Add physics inertia data
+
+BEGIN;
+ALTER TABLE `prims` ADD COLUMN `PhysInertia` TEXT default NULL;
+COMMIT;
--
cgit v1.1
From 44993550a85f411e5ea88a889fb652744e2d3d1b Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Sat, 1 Apr 2017 18:15:47 +0100
Subject: store the physics inertia override in SQlite
---
OpenSim/Data/MySQL/MySQLSimulationData.cs | 7 ++-----
OpenSim/Data/SQLite/Resources/RegionStore.migrations | 6 ++++++
OpenSim/Data/SQLite/SQLiteSimulationData.cs | 11 +++++++++++
3 files changed, 19 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Data')
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 97a433f..5740b91 100644
--- a/OpenSim/Data/MySQL/MySQLSimulationData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -1452,13 +1452,10 @@ namespace OpenSim.Data.MySQL
prim.VehicleParams = vehicle;
}
- PhysicsInertiaData pdata;
+ PhysicsInertiaData pdata = null;
if (row["PhysInertia"].ToString() != String.Empty)
- {
pdata = PhysicsInertiaData.FromXml2(row["PhysInertia"].ToString());
- if (pdata != null)
- prim.PhysicsInertia = pdata;
- }
+ prim.PhysicsInertia = pdata;
return prim;
}
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index eef14d6..fb154cf 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -371,3 +371,9 @@ BEGIN;
ALTER TABLE `prims` ADD COLUMN `RezzerID` char(36) DEFAULT NULL;
COMMIT;
+
+:VERSION 36 #----- Add physics inertia data
+
+BEGIN;
+ALTER TABLE `prims` ADD COLUMN `PhysInertia` TEXT default NULL;
+COMMIT;
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index eec386f..19880de 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -1843,6 +1843,12 @@ namespace OpenSim.Data.SQLite
if (vehicle != null)
prim.VehicleParams = vehicle;
}
+
+ PhysicsInertiaData pdata = null;
+ if (!(row["PhysInertia"] is DBNull) && row["PhysInertia"].ToString() != String.Empty)
+ pdata = PhysicsInertiaData.FromXml2(row["PhysInertia"].ToString());
+ prim.PhysicsInertia = pdata;
+
return prim;
}
@@ -2266,6 +2272,11 @@ namespace OpenSim.Data.SQLite
else
row["Vehicle"] = String.Empty;
+ if (prim.PhysicsInertia != null)
+ row["PhysInertia"] = prim.PhysicsInertia.ToXml2();
+ else
+ row["PhysInertia"] = String.Empty;
+
}
///
--
cgit v1.1
From fe83763c365dfa2ba77ebd902810683cedd58ffa Mon Sep 17 00:00:00 2001
From: Geir Nøklebye
Date: Thu, 13 Apr 2017 12:07:06 +0200
Subject: PGSQL: Fixed a failing query in GroupsData for deleting groups
messages older than 14 days. The little known abstime function could be used
for a double cast. The field TMStamp should be changed to store the data as a
proper timestamp. Related to Mantis #7848. Usually this would easily be
solved using the to_timestamp function, but there is no support for it in
NPGSQL as there are no very close functionality in .NET
Signed-off-by: Michael Cerquoni
---
OpenSim/Data/PGSQL/PGSQLGroupsData.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Data')
diff --git a/OpenSim/Data/PGSQL/PGSQLGroupsData.cs b/OpenSim/Data/PGSQL/PGSQLGroupsData.cs
index 6ef576b..f398256 100755
--- a/OpenSim/Data/PGSQL/PGSQLGroupsData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLGroupsData.cs
@@ -435,7 +435,7 @@ namespace OpenSim.Data.PGSQL
using (NpgsqlCommand cmd = new NpgsqlCommand())
{
- cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm);
+ cmd.CommandText = String.Format("delete from {0} where \"TMStamp\"::abstime::timestamp < now() - INTERVAL '2 week'", m_Realm);
ExecuteNonQuery(cmd);
}
@@ -461,7 +461,7 @@ namespace OpenSim.Data.PGSQL
using (NpgsqlCommand cmd = new NpgsqlCommand())
{
- cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm);
+ cmd.CommandText = String.Format("delete from {0} where \"TMStamp\"::abstime::timestamp < now() - INTERVAL '2 week'", m_Realm);
ExecuteNonQuery(cmd);
}
--
cgit v1.1
From 28125202cc320dee3f4908f07eb4fbc04a134d6e Mon Sep 17 00:00:00 2001
From: Geir Nøklebye
Date: Thu, 13 Apr 2017 11:54:25 +0200
Subject: update for The new Constant: integer OBJECT_REZZER_KEY = 32 + adding
missing support for fields in the prims table.
Signed-off-by: Michael Cerquoni
---
OpenSim/Data/PGSQL/PGSQLSimulationData.cs | 33 ++++++++++++++++++----
.../Data/PGSQL/Resources/RegionStore.migrations | 9 ++++++
2 files changed, 37 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Data')
diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
index 33d12bd..3e08dd6 100755
--- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
@@ -350,7 +350,8 @@ namespace OpenSim.Data.PGSQL
""CameraEyeOffsetY"" = :CameraEyeOffsetY, ""CameraEyeOffsetZ"" = :CameraEyeOffsetZ, ""CameraAtOffsetX"" = :CameraAtOffsetX,
""CameraAtOffsetY"" = :CameraAtOffsetY, ""CameraAtOffsetZ"" = :CameraAtOffsetZ, ""ForceMouselook"" = :ForceMouselook,
""ScriptAccessPin"" = :ScriptAccessPin, ""AllowedDrop"" = :AllowedDrop, ""DieAtEdge"" = :DieAtEdge, ""SalePrice"" = :SalePrice,
- ""SaleType"" = :SaleType, ""ColorR"" = :ColorR, ""ColorG"" = :ColorG, ""ColorB"" = :ColorB, ""ColorA"" = :ColorA, ""ParticleSystem"" = :ParticleSystem,
+ ""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution,
++ ""PassCollisions"" = :PassCollisions, ""RotationAxisLocks"" = :RotationAxisLocks, ""RezzerID"" = :RezzerID
""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches,
""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs,
""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution
@@ -367,7 +368,7 @@ namespace OpenSim.Data.PGSQL
""OmegaY"", ""OmegaZ"", ""CameraEyeOffsetX"", ""CameraEyeOffsetY"", ""CameraEyeOffsetZ"", ""CameraAtOffsetX"", ""CameraAtOffsetY"", ""CameraAtOffsetZ"",
""ForceMouselook"", ""ScriptAccessPin"", ""AllowedDrop"", ""DieAtEdge"", ""SalePrice"", ""SaleType"", ""ColorR"", ""ColorG"", ""ColorB"", ""ColorA"",
""ParticleSystem"", ""ClickAction"", ""Material"", ""CollisionSound"", ""CollisionSoundVolume"", ""PassTouches"", ""LinkNumber"", ""MediaURL"", ""DynAttrs"",
- ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution""
+ ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution"", ""PassCollisions"", ""RotationAxisLocks"", ""RezzerID""
) Select
:UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask,
:EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX,
@@ -378,7 +379,7 @@ namespace OpenSim.Data.PGSQL
:OmegaY, :OmegaZ, :CameraEyeOffsetX, :CameraEyeOffsetY, :CameraEyeOffsetZ, :CameraAtOffsetX, :CameraAtOffsetY, :CameraAtOffsetZ,
:ForceMouselook, :ScriptAccessPin, :AllowedDrop, :DieAtEdge, :SalePrice, :SaleType, :ColorR, :ColorG, :ColorB, :ColorA,
:ParticleSystem, :ClickAction, :Material, :CollisionSound, :CollisionSoundVolume, :PassTouches, :LinkNumber, :MediaURL, :DynAttrs,
- :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution
+ :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution, :PassCollisions, :RotationAxisLocks, :RezzerID
where not EXISTS (SELECT ""UUID"" FROM prims WHERE ""UUID"" = :UUID);
";
@@ -1678,6 +1679,12 @@ namespace OpenSim.Data.PGSQL
prim.OwnerID = new UUID((Guid)primRow["OwnerID"]);
prim.GroupID = new UUID((Guid)primRow["GroupID"]);
prim.LastOwnerID = new UUID((Guid)primRow["LastOwnerID"]);
+
+ if (primRow["RezzerID"] != DBNull.Value)
+ prim.RezzerID = new UUID((Guid)primRow["RezzerID"]);
+ else
+ prim.RezzerID = UUID.Zero;
+
prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]);
prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]);
prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]);
@@ -1796,6 +1803,8 @@ namespace OpenSim.Data.PGSQL
prim.GravityModifier = Convert.ToSingle(primRow["GravityModifier"]);
prim.Friction = Convert.ToSingle(primRow["Friction"]);
prim.Restitution = Convert.ToSingle(primRow["Restitution"]);
+ prim.RotationAxisLocks = Convert.ToByte(primRow["RotationAxisLocks"]);
+
return prim;
}
@@ -2097,6 +2106,7 @@ namespace OpenSim.Data.PGSQL
parameters.Add(_Database.CreateParameter("OwnerID", prim.OwnerID));
parameters.Add(_Database.CreateParameter("GroupID", prim.GroupID));
parameters.Add(_Database.CreateParameter("LastOwnerID", prim.LastOwnerID));
+ parameters.Add(_Database.CreateParameter("RezzerID", prim.RezzerID));
parameters.Add(_Database.CreateParameter("OwnerMask", prim.OwnerMask));
parameters.Add(_Database.CreateParameter("NextOwnerMask", prim.NextOwnerMask));
parameters.Add(_Database.CreateParameter("GroupMask", prim.GroupMask));
@@ -2196,7 +2206,19 @@ namespace OpenSim.Data.PGSQL
parameters.Add(_Database.CreateParameter("CollisionSound", prim.CollisionSound));
parameters.Add(_Database.CreateParameter("CollisionSoundVolume", prim.CollisionSoundVolume));
- parameters.Add(_Database.CreateParameter("PassTouches", prim.PassTouches));
+ parameters.Add(_Database.CreateParameter("PassTouches", (bool)prim.PassTouches));
+ parameters.Add(_Database.CreateParameter("PassCollisions", prim.PassCollisions));
+
+
+ if (prim.PassTouches)
+ parameters.Add(_Database.CreateParameter("PassTouches", true));
+ else
+ parameters.Add(_Database.CreateParameter("PassTouches", false));
+
+ if (prim.PassCollisions)
+ parameters.Add(_Database.CreateParameter("PassCollisions", 1));
+ else
+ parameters.Add(_Database.CreateParameter("PassCollisions", 0));
parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
@@ -2211,12 +2233,13 @@ namespace OpenSim.Data.PGSQL
parameters.Add(_Database.CreateParameter("GravityModifier", (double)prim.GravityModifier));
parameters.Add(_Database.CreateParameter("Friction", (double)prim.Friction));
parameters.Add(_Database.CreateParameter("Restitution", (double)prim.Restitution));
+ parameters.Add(_Database.CreateParameter("RotationAxisLocks", prim.RotationAxisLocks));
return parameters.ToArray();
}
///
- /// Creates the primshape parameters for stroing in DB.
+ /// Creates the primshape parameters for storing in DB.
///
/// Basic data of SceneObjectpart prim.
/// The scene group ID.
diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
index c085939..2f197bf 100644
--- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
@@ -1195,3 +1195,12 @@ CREATE TABLE bakedterrain
);
COMMIT;
+
+:VERSION 45 #---- Add RezzerID filed in table prims
+
+BEGIN TRANSACTION;
+
+ALTER TABLE prims ADD "RezzerID" uuid NULL;
+
+COMMIT;
+
--
cgit v1.1
From ebcfad1a839557b3f0d28bf34e627f63dc59d9eb Mon Sep 17 00:00:00 2001
From: Geir Nøklebye
Date: Thu, 20 Apr 2017 15:41:28 +0200
Subject: store the physics inertia override in the database
Signed-off-by: UbitUmarov
---
OpenSim/Data/PGSQL/PGSQLSimulationData.cs | 19 +++++++++++++++----
OpenSim/Data/PGSQL/Resources/RegionStore.migrations | 7 +++++++
2 files changed, 22 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Data')
diff --git a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
index 3e08dd6..625120b 100755
--- a/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
+++ b/OpenSim/Data/PGSQL/PGSQLSimulationData.cs
@@ -351,10 +351,10 @@ namespace OpenSim.Data.PGSQL
""CameraAtOffsetY"" = :CameraAtOffsetY, ""CameraAtOffsetZ"" = :CameraAtOffsetZ, ""ForceMouselook"" = :ForceMouselook,
""ScriptAccessPin"" = :ScriptAccessPin, ""AllowedDrop"" = :AllowedDrop, ""DieAtEdge"" = :DieAtEdge, ""SalePrice"" = :SalePrice,
""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution,
-+ ""PassCollisions"" = :PassCollisions, ""RotationAxisLocks"" = :RotationAxisLocks, ""RezzerID"" = :RezzerID
+ ""PassCollisions"" = :PassCollisions, ""RotationAxisLocks"" = :RotationAxisLocks, ""RezzerID"" = :RezzerID,
""ClickAction"" = :ClickAction, ""Material"" = :Material, ""CollisionSound"" = :CollisionSound, ""CollisionSoundVolume"" = :CollisionSoundVolume, ""PassTouches"" = :PassTouches,
""LinkNumber"" = :LinkNumber, ""MediaURL"" = :MediaURL, ""DynAttrs"" = :DynAttrs,
- ""PhysicsShapeType"" = :PhysicsShapeType, ""Density"" = :Density, ""GravityModifier"" = :GravityModifier, ""Friction"" = :Friction, ""Restitution"" = :Restitution
+ ""PhysInertia"" = :PhysInertia
WHERE ""UUID"" = :UUID ;
INSERT INTO
@@ -368,7 +368,7 @@ namespace OpenSim.Data.PGSQL
""OmegaY"", ""OmegaZ"", ""CameraEyeOffsetX"", ""CameraEyeOffsetY"", ""CameraEyeOffsetZ"", ""CameraAtOffsetX"", ""CameraAtOffsetY"", ""CameraAtOffsetZ"",
""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""
+ ""PhysicsShapeType"", ""Density"", ""GravityModifier"", ""Friction"", ""Restitution"", ""PassCollisions"", ""RotationAxisLocks"", ""RezzerID"" , ""PhysInertia""
) Select
:UUID, :CreationDate, :Name, :Text, :Description, :SitName, :TouchName, :ObjectFlags, :OwnerMask, :NextOwnerMask, :GroupMask,
:EveryoneMask, :BaseMask, :PositionX, :PositionY, :PositionZ, :GroupPositionX, :GroupPositionY, :GroupPositionZ, :VelocityX,
@@ -379,7 +379,7 @@ namespace OpenSim.Data.PGSQL
:OmegaY, :OmegaZ, :CameraEyeOffsetX, :CameraEyeOffsetY, :CameraEyeOffsetZ, :CameraAtOffsetX, :CameraAtOffsetY, :CameraAtOffsetZ,
: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
+ :PhysicsShapeType, :Density, :GravityModifier, :Friction, :Restitution, :PassCollisions, :RotationAxisLocks, :RezzerID, :PhysInertia
where not EXISTS (SELECT ""UUID"" FROM prims WHERE ""UUID"" = :UUID);
";
@@ -1805,6 +1805,11 @@ namespace OpenSim.Data.PGSQL
prim.Restitution = Convert.ToSingle(primRow["Restitution"]);
prim.RotationAxisLocks = Convert.ToByte(primRow["RotationAxisLocks"]);
+
+ PhysicsInertiaData pdata = null;
+ if (!(primRow["PhysInertia"] is System.DBNull))
+ pdata = PhysicsInertiaData.FromXml2(primRow["PhysInertia"].ToString());
+ prim.PhysicsInertia = pdata;
return prim;
}
@@ -2222,6 +2227,12 @@ namespace OpenSim.Data.PGSQL
parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
+
+ if (prim.PhysicsInertia != null)
+ parameters.Add(_Database.CreateParameter("PhysInertia", prim.PhysicsInertia.ToXml2()));
+ else
+ parameters.Add(_Database.CreateParameter("PhysInertia", String.Empty));
+
if (prim.DynAttrs.CountNamespaces > 0)
parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml()));
diff --git a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
index 2f197bf..948d177 100644
--- a/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
+++ b/OpenSim/Data/PGSQL/Resources/RegionStore.migrations
@@ -1204,3 +1204,10 @@ ALTER TABLE prims ADD "RezzerID" uuid NULL;
COMMIT;
+:VERSION 46 #---- Add physics inertia data to table prims
+
+BEGIN TRANSACTION;
+
+ALTER TABLE prims ADD "PhysInertia" TEXT;
+
+COMMIT;
--
cgit v1.1