From 8cb889cb0e1a09bee80745b6a6d81641d1c62202 Mon Sep 17 00:00:00 2001
From: Charles Krinke
Date: Mon, 27 Oct 2008 00:46:17 +0000
Subject: Thank you kindly, Ruud Lathrop for a patch that solves: Primary Key
violation when just linked a lot of prims using MSSQL.
---
OpenSim/Data/MSSQL/MSSQLGridData.cs | 2 +-
OpenSim/Data/MSSQL/MSSQLRegionData.cs | 337 ++++++++++++-----------
OpenSim/Data/MSSQL/Resources/009_RegionStore.sql | 5 +
3 files changed, 187 insertions(+), 157 deletions(-)
create mode 100644 OpenSim/Data/MSSQL/Resources/009_RegionStore.sql
diff --git a/OpenSim/Data/MSSQL/MSSQLGridData.cs b/OpenSim/Data/MSSQL/MSSQLGridData.cs
index 6f94980..ace3b27 100644
--- a/OpenSim/Data/MSSQL/MSSQLGridData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLGridData.cs
@@ -220,7 +220,7 @@ namespace OpenSim.Data.MSSQL
///
/// Returns up to maxNum profiles of regions that have a name starting with namePrefix
///
- /// The name to match against
+ /// The name to match against
/// Maximum number of profiles to return
/// A list of sim profiles
override public List GetRegionsByName (string namePrefix, uint maxNum)
diff --git a/OpenSim/Data/MSSQL/MSSQLRegionData.cs b/OpenSim/Data/MSSQL/MSSQLRegionData.cs
index 4a01ca0..6f4edd1 100644
--- a/OpenSim/Data/MSSQL/MSSQLRegionData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLRegionData.cs
@@ -58,9 +58,9 @@ namespace OpenSim.Data.MSSQL
///
/// Const for the prim store..
///
- private const string _PrimSelect = "SELECT * FROM PRIMS WHERE RegionUUID = @RegionUUID AND (SceneGroupID LIKE @SceneGroupID OR UUID IN (@UUID))";
- private const string _ShapeSelect = "SELECT * FROM PRIMSHAPES WHERE UUID in (SELECT UUID FROM PRIMS WHERE RegionUUID = @RegionUUID AND (SceneGroupID LIKE @SceneGroupID OR UUID IN (@UUID)))";
- private const string _ItemsSelect = "SELECT * FROM PRIMITEMS WHERE primID in (SELECT UUID FROM PRIMS WHERE RegionUUID = @RegionUUID AND (SceneGroupID LIKE @SceneGroupID OR UUID IN (@UUID)))";
+ private const string _PrimSelect = "SELECT * FROM PRIMS WHERE RegionUUID = @RegionUUID"; //" AND UUID IN (@UUID)"; //SceneGroupID LIKE @SceneGroupID OR
+ private const string _ShapeSelect = "SELECT * FROM PRIMSHAPES WHERE UUID in (SELECT UUID FROM PRIMS WHERE RegionUUID = @RegionUUID)"; // AND UUID IN (@UUID))"; //(SceneGroupID LIKE @SceneGroupID OR
+ private const string _ItemsSelect = "SELECT * FROM PRIMITEMS WHERE primID in (SELECT UUID FROM PRIMS WHERE RegionUUID = @RegionUUID)"; // AND UUID IN (@UUID))"; //(SceneGroupID LIKE @SceneGroupID OR
private DataSet _PrimsDataSet;
private SqlDataAdapter _PrimDataAdapter;
@@ -101,8 +101,8 @@ namespace OpenSim.Data.MSSQL
using (SqlCommand primSelectCmd = new SqlCommand(_PrimSelect, connection))
{
primSelectCmd.Parameters.AddWithValue("@RegionUUID", "");
- primSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
- primSelectCmd.Parameters.AddWithValue("@UUID", "");
+ //primSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
+ //primSelectCmd.Parameters.AddWithValue("@UUID", "");
_PrimDataAdapter = new SqlDataAdapter(primSelectCmd);
DataTable primDataTable = new DataTable("prims");
@@ -119,8 +119,8 @@ namespace OpenSim.Data.MSSQL
using (SqlCommand shapeSelectCmd = new SqlCommand(_ShapeSelect, connection))
{
shapeSelectCmd.Parameters.AddWithValue("@RegionUUID", "");
- shapeSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
- shapeSelectCmd.Parameters.AddWithValue("@UUID", "");
+ //shapeSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
+ //shapeSelectCmd.Parameters.AddWithValue("@UUID", "");
_ShapeDataAdapter = new SqlDataAdapter(shapeSelectCmd);
DataTable shapeDataTable = new DataTable("primshapes");
@@ -137,8 +137,8 @@ namespace OpenSim.Data.MSSQL
using (SqlCommand itemSelectCmd = new SqlCommand(_ItemsSelect, connection))
{
itemSelectCmd.Parameters.AddWithValue("@RegionUUID", "");
- itemSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
- itemSelectCmd.Parameters.AddWithValue("@UUID", "");
+ //itemSelectCmd.Parameters.AddWithValue("@SceneGroupID", "%");
+ //itemSelectCmd.Parameters.AddWithValue("@UUID", "");
_ItemsDataAdapter = new SqlDataAdapter(itemSelectCmd);
DataTable itemsDataTable = new DataTable("primitems");
@@ -328,55 +328,60 @@ namespace OpenSim.Data.MSSQL
//Retrieve all values of current region, and current scene/or prims
//Build primID's, we use IN so I can select all prims from objgroup
string primID = "";
- foreach (SceneObjectPart prim in obj.Children.Values)
+// foreach (SceneObjectPart prim in obj.Children.Values)
+// {
+// primID += prim.UUID + "', '";
+// }
+// primID = primID.Remove(primID.LastIndexOf("',"));
+
+ lock (_Database)
{
- primID += prim.UUID + "', '";
- }
- primID = primID.Remove(primID.LastIndexOf("',"));
+ RetrievePrimsDataForRegion(regionUUID, obj.UUID, primID);
- RetrievePrimsDataForRegion(regionUUID, obj.UUID, primID);
+ _Log.InfoFormat("[REGION DB]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Children.Count);
- _Log.InfoFormat("[REGION DB]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Children.Count);
+ DataTable prims = _PrimsDataSet.Tables["prims"];
+ DataTable shapes = _PrimsDataSet.Tables["primshapes"];
- foreach (SceneObjectPart prim in obj.Children.Values)
- {
- if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == 0
- && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0
- && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0)
+ foreach (SceneObjectPart prim in obj.Children.Values)
{
-
- DataTable prims = _PrimsDataSet.Tables["prims"];
- DataTable shapes = _PrimsDataSet.Tables["primshapes"];
-
- DataRow primRow = prims.Rows.Find(prim.UUID.ToString());
- if (primRow == null)
- {
- primRow = prims.NewRow();
- fillPrimRow(primRow, prim, obj.UUID, regionUUID);
- prims.Rows.Add(primRow);
- }
- else
+ if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == 0
+ && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0
+ && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0)
{
- fillPrimRow(primRow, prim, obj.UUID, regionUUID);
- }
- DataRow shapeRow = shapes.Rows.Find(prim.UUID.ToString());
- if (shapeRow == null)
- {
- shapeRow = shapes.NewRow();
- fillShapeRow(shapeRow, prim);
- shapes.Rows.Add(shapeRow);
- }
- else
- {
- fillShapeRow(shapeRow, prim);
+ DataRow primRow = prims.Rows.Find(prim.UUID.ToString());
+ if (primRow == null)
+ {
+// _Log.DebugFormat("[REGION DB]: Adding new prim with key: {0}", prim.UUID);
+ primRow = prims.NewRow();
+ fillPrimRow(primRow, prim, obj.UUID, regionUUID);
+ prims.Rows.Add(primRow);
+ }
+ else
+ {
+// _Log.DebugFormat("[REGION DB]: Changing prim with key: {0}", prim.UUID);
+ fillPrimRow(primRow, prim, obj.UUID, regionUUID);
+ }
+
+ DataRow shapeRow = shapes.Rows.Find(prim.UUID.ToString());
+ if (shapeRow == null)
+ {
+ shapeRow = shapes.NewRow();
+ fillShapeRow(shapeRow, prim);
+ shapes.Rows.Add(shapeRow);
+ }
+ else
+ {
+ fillShapeRow(shapeRow, prim);
+ }
}
}
- }
- //Save changes
- CommitDataSet();
+ //Save changes
+ CommitDataSet();
+ }
}
///
@@ -394,16 +399,19 @@ namespace OpenSim.Data.MSSQL
string sqlPrimItems = string.Format("DELETE FROM PRIMITEMS WHERE primID in (SELECT UUID FROM PRIMS WHERE SceneGroupID = '{0}')", objectID);
string sqlPrimShapes = string.Format("DELETE FROM PRIMSHAPES WHERE uuid in (SELECT UUID FROM PRIMS WHERE SceneGroupID = '{0}')", objectID);
- //Using the non transaction mode.
- using (AutoClosingSqlCommand cmd = _Database.Query(sqlPrimShapes))
+ lock (_Database)
{
- cmd.ExecuteNonQuery();
+ //Using the non transaction mode.
+ using (AutoClosingSqlCommand cmd = _Database.Query(sqlPrimShapes))
+ {
+ cmd.ExecuteNonQuery();
- cmd.CommandText = sqlPrimItems;
- cmd.ExecuteNonQuery();
+ cmd.CommandText = sqlPrimItems;
+ cmd.ExecuteNonQuery();
- cmd.CommandText = sqlPrims;
- cmd.ExecuteNonQuery();
+ cmd.CommandText = sqlPrims;
+ cmd.ExecuteNonQuery();
+ }
}
}
@@ -921,130 +929,132 @@ VALUES
///
/// Builds the prim from a datarecord.
///
- /// datarecord
+ /// datarecord
///
- private static SceneObjectPart buildPrim(DataRow row)
+ private static SceneObjectPart buildPrim(DataRow primRow)
{
SceneObjectPart prim = new SceneObjectPart();
- prim.UUID = new UUID((String)row["UUID"]);
+ prim.UUID = new UUID((String)primRow["UUID"]);
// explicit conversion of integers is required, which sort
// of sucks. No idea if there is a shortcut here or not.
- prim.ParentID = Convert.ToUInt32(row["ParentID"]);
- prim.CreationDate = Convert.ToInt32(row["CreationDate"]);
- prim.Name = (String)row["Name"];
+ prim.ParentID = Convert.ToUInt32(primRow["ParentID"]);
+ prim.CreationDate = Convert.ToInt32(primRow["CreationDate"]);
+ prim.Name = (String)primRow["Name"];
// various text fields
- prim.Text = (String)row["Text"];
- prim.Color = Color.FromArgb(Convert.ToInt32(row["ColorA"]),
- Convert.ToInt32(row["ColorR"]),
- Convert.ToInt32(row["ColorG"]),
- Convert.ToInt32(row["ColorB"]));
- prim.Description = (String)row["Description"];
- prim.SitName = (String)row["SitName"];
- prim.TouchName = (String)row["TouchName"];
+ prim.Text = (String)primRow["Text"];
+ prim.Color = Color.FromArgb(Convert.ToInt32(primRow["ColorA"]),
+ Convert.ToInt32(primRow["ColorR"]),
+ Convert.ToInt32(primRow["ColorG"]),
+ Convert.ToInt32(primRow["ColorB"]));
+ prim.Description = (String)primRow["Description"];
+ prim.SitName = (String)primRow["SitName"];
+ prim.TouchName = (String)primRow["TouchName"];
// permissions
- prim.ObjectFlags = Convert.ToUInt32(row["ObjectFlags"]);
- prim.CreatorID = new UUID((String)row["CreatorID"]);
- prim.OwnerID = new UUID((String)row["OwnerID"]);
- prim.GroupID = new UUID((String)row["GroupID"]);
- prim.LastOwnerID = new UUID((String)row["LastOwnerID"]);
- prim.OwnerMask = Convert.ToUInt32(row["OwnerMask"]);
- prim.NextOwnerMask = Convert.ToUInt32(row["NextOwnerMask"]);
- prim.GroupMask = Convert.ToUInt32(row["GroupMask"]);
- prim.EveryoneMask = Convert.ToUInt32(row["EveryoneMask"]);
- prim.BaseMask = Convert.ToUInt32(row["BaseMask"]);
+ prim.ObjectFlags = Convert.ToUInt32(primRow["ObjectFlags"]);
+ prim.CreatorID = new UUID((String)primRow["CreatorID"]);
+ prim.OwnerID = new UUID((String)primRow["OwnerID"]);
+ prim.GroupID = new UUID((String)primRow["GroupID"]);
+ prim.LastOwnerID = new UUID((String)primRow["LastOwnerID"]);
+ prim.OwnerMask = Convert.ToUInt32(primRow["OwnerMask"]);
+ prim.NextOwnerMask = Convert.ToUInt32(primRow["NextOwnerMask"]);
+ prim.GroupMask = Convert.ToUInt32(primRow["GroupMask"]);
+ prim.EveryoneMask = Convert.ToUInt32(primRow["EveryoneMask"]);
+ prim.BaseMask = Convert.ToUInt32(primRow["BaseMask"]);
// vectors
prim.OffsetPosition = new Vector3(
- Convert.ToSingle(row["PositionX"]),
- Convert.ToSingle(row["PositionY"]),
- Convert.ToSingle(row["PositionZ"]));
+ Convert.ToSingle(primRow["PositionX"]),
+ Convert.ToSingle(primRow["PositionY"]),
+ Convert.ToSingle(primRow["PositionZ"]));
prim.GroupPosition = new Vector3(
- Convert.ToSingle(row["GroupPositionX"]),
- Convert.ToSingle(row["GroupPositionY"]),
- Convert.ToSingle(row["GroupPositionZ"]));
+ Convert.ToSingle(primRow["GroupPositionX"]),
+ Convert.ToSingle(primRow["GroupPositionY"]),
+ Convert.ToSingle(primRow["GroupPositionZ"]));
prim.Velocity = new Vector3(
- Convert.ToSingle(row["VelocityX"]),
- Convert.ToSingle(row["VelocityY"]),
- Convert.ToSingle(row["VelocityZ"]));
+ Convert.ToSingle(primRow["VelocityX"]),
+ Convert.ToSingle(primRow["VelocityY"]),
+ Convert.ToSingle(primRow["VelocityZ"]));
prim.AngularVelocity = new Vector3(
- Convert.ToSingle(row["AngularVelocityX"]),
- Convert.ToSingle(row["AngularVelocityY"]),
- Convert.ToSingle(row["AngularVelocityZ"]));
+ Convert.ToSingle(primRow["AngularVelocityX"]),
+ Convert.ToSingle(primRow["AngularVelocityY"]),
+ Convert.ToSingle(primRow["AngularVelocityZ"]));
prim.Acceleration = new Vector3(
- Convert.ToSingle(row["AccelerationX"]),
- Convert.ToSingle(row["AccelerationY"]),
- Convert.ToSingle(row["AccelerationZ"]));
+ Convert.ToSingle(primRow["AccelerationX"]),
+ Convert.ToSingle(primRow["AccelerationY"]),
+ Convert.ToSingle(primRow["AccelerationZ"]));
// quaternions
prim.RotationOffset = new Quaternion(
- Convert.ToSingle(row["RotationX"]),
- Convert.ToSingle(row["RotationY"]),
- Convert.ToSingle(row["RotationZ"]),
- Convert.ToSingle(row["RotationW"]));
+ Convert.ToSingle(primRow["RotationX"]),
+ Convert.ToSingle(primRow["RotationY"]),
+ Convert.ToSingle(primRow["RotationZ"]),
+ Convert.ToSingle(primRow["RotationW"]));
prim.SitTargetPositionLL = new Vector3(
- Convert.ToSingle(row["SitTargetOffsetX"]),
- Convert.ToSingle(row["SitTargetOffsetY"]),
- Convert.ToSingle(row["SitTargetOffsetZ"]));
+ Convert.ToSingle(primRow["SitTargetOffsetX"]),
+ Convert.ToSingle(primRow["SitTargetOffsetY"]),
+ Convert.ToSingle(primRow["SitTargetOffsetZ"]));
prim.SitTargetOrientationLL = new Quaternion(
- Convert.ToSingle(row["SitTargetOrientX"]),
- Convert.ToSingle(row["SitTargetOrientY"]),
- Convert.ToSingle(row["SitTargetOrientZ"]),
- Convert.ToSingle(row["SitTargetOrientW"]));
-
- prim.PayPrice[0] = Convert.ToInt32(row["PayPrice"]);
- prim.PayPrice[1] = Convert.ToInt32(row["PayButton1"]);
- prim.PayPrice[2] = Convert.ToInt32(row["PayButton2"]);
- prim.PayPrice[3] = Convert.ToInt32(row["PayButton3"]);
- prim.PayPrice[4] = Convert.ToInt32(row["PayButton4"]);
-
- prim.Sound = new UUID(row["LoopedSound"].ToString());
- prim.SoundGain = Convert.ToSingle(row["LoopedSoundGain"]);
+ Convert.ToSingle(primRow["SitTargetOrientX"]),
+ Convert.ToSingle(primRow["SitTargetOrientY"]),
+ Convert.ToSingle(primRow["SitTargetOrientZ"]),
+ Convert.ToSingle(primRow["SitTargetOrientW"]));
+
+ prim.PayPrice[0] = Convert.ToInt32(primRow["PayPrice"]);
+ prim.PayPrice[1] = Convert.ToInt32(primRow["PayButton1"]);
+ prim.PayPrice[2] = Convert.ToInt32(primRow["PayButton2"]);
+ prim.PayPrice[3] = Convert.ToInt32(primRow["PayButton3"]);
+ prim.PayPrice[4] = Convert.ToInt32(primRow["PayButton4"]);
+
+ prim.Sound = new UUID(primRow["LoopedSound"].ToString());
+ prim.SoundGain = Convert.ToSingle(primRow["LoopedSoundGain"]);
prim.SoundFlags = 1; // If it's persisted at all, it's looped
- if (!row.IsNull("TextureAnimation") && row["TextureAnimation"] != DBNull.Value)
- prim.TextureAnimation = (Byte[])row["TextureAnimation"];
- if (!row.IsNull("ParticleSystem"))
- prim.ParticleSystem = (Byte[])row["ParticleSystem"];
+ if (!primRow.IsNull("TextureAnimation") && primRow["TextureAnimation"] != DBNull.Value)
+ prim.TextureAnimation = (Byte[])primRow["TextureAnimation"];
+ if (!primRow.IsNull("ParticleSystem"))
+ prim.ParticleSystem = (Byte[])primRow["ParticleSystem"];
prim.RotationalVelocity = new Vector3(
- Convert.ToSingle(row["OmegaX"]),
- Convert.ToSingle(row["OmegaY"]),
- Convert.ToSingle(row["OmegaZ"]));
+ Convert.ToSingle(primRow["OmegaX"]),
+ Convert.ToSingle(primRow["OmegaY"]),
+ Convert.ToSingle(primRow["OmegaZ"]));
prim.SetCameraEyeOffset(new Vector3(
- Convert.ToSingle(row["CameraEyeOffsetX"]),
- Convert.ToSingle(row["CameraEyeOffsetY"]),
- Convert.ToSingle(row["CameraEyeOffsetZ"])
+ Convert.ToSingle(primRow["CameraEyeOffsetX"]),
+ Convert.ToSingle(primRow["CameraEyeOffsetY"]),
+ Convert.ToSingle(primRow["CameraEyeOffsetZ"])
));
prim.SetCameraAtOffset(new Vector3(
- Convert.ToSingle(row["CameraAtOffsetX"]),
- Convert.ToSingle(row["CameraAtOffsetY"]),
- Convert.ToSingle(row["CameraAtOffsetZ"])
+ Convert.ToSingle(primRow["CameraAtOffsetX"]),
+ Convert.ToSingle(primRow["CameraAtOffsetY"]),
+ Convert.ToSingle(primRow["CameraAtOffsetZ"])
));
- if (Convert.ToInt16(row["ForceMouselook"]) != 0)
+ if (Convert.ToInt16(primRow["ForceMouselook"]) != 0)
prim.SetForceMouselook(true);
- prim.ScriptAccessPin = Convert.ToInt32(row["ScriptAccessPin"]);
+ prim.ScriptAccessPin = Convert.ToInt32(primRow["ScriptAccessPin"]);
- if (Convert.ToInt16(row["AllowedDrop"]) != 0)
+ if (Convert.ToInt16(primRow["AllowedDrop"]) != 0)
prim.AllowedDrop = true;
- if (Convert.ToInt16(row["DieAtEdge"]) != 0)
+ if (Convert.ToInt16(primRow["DieAtEdge"]) != 0)
prim.DIE_AT_EDGE = true;
- prim.SalePrice = Convert.ToInt32(row["SalePrice"]);
- prim.ObjectSaleType = Convert.ToByte(row["SaleType"]);
+ prim.SalePrice = Convert.ToInt32(primRow["SalePrice"]);
+ prim.ObjectSaleType = Convert.ToByte(primRow["SaleType"]);
+
+ prim.Material = Convert.ToByte(primRow["Material"]);
- if (!row.IsNull("ClickAction"))
- prim.ClickAction = Convert.ToByte(row["ClickAction"]);
+ if (!primRow.IsNull("ClickAction"))
+ prim.ClickAction = Convert.ToByte(primRow["ClickAction"]);
return prim;
}
@@ -1306,6 +1316,10 @@ VALUES
// the UUID of the root part for this SceneObjectGroup
// various text fields
row["Text"] = prim.Text;
+ row["ColorR"] = prim.Color.R;
+ row["ColorG"] = prim.Color.G;
+ row["ColorB"] = prim.Color.B;
+ row["ColorA"] = prim.Color.A;
row["Description"] = prim.Description;
row["SitName"] = prim.SitName;
row["TouchName"] = prim.TouchName;
@@ -1372,6 +1386,7 @@ VALUES
}
row["TextureAnimation"] = prim.TextureAnimation;
+ row["ParticleSystem"] = prim.ParticleSystem;
row["OmegaX"] = prim.RotationalVelocity.X;
row["OmegaY"] = prim.RotationalVelocity.Y;
@@ -1404,6 +1419,11 @@ VALUES
row["SalePrice"] = prim.SalePrice;
row["SaleType"] = Convert.ToInt16(prim.ObjectSaleType);
+
+ byte clickAction = prim.ClickAction;
+ row["ClickAction"] = clickAction;
+
+ row["Material"] = prim.Material;
}
///
@@ -1461,31 +1481,33 @@ VALUES
{
_PrimDataAdapter.SelectCommand.Connection = connection;
_PrimDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString();
- if (sceneGroupID != UUID.Zero)
- _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
- else
- _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
- _PrimDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
+// if (sceneGroupID != UUID.Zero)
+// _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
+// else
+// _PrimDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
+// _PrimDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
_PrimDataAdapter.Fill(_PrimsDataSet, "prims");
+ _Log.Debug("Prim row count: " + _PrimsDataSet.Tables["prims"].Rows.Count);
+
_ShapeDataAdapter.SelectCommand.Connection = connection;
_ShapeDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString();
- if (sceneGroupID != UUID.Zero)
- _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
- else
- _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
- _ShapeDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
+// if (sceneGroupID != UUID.Zero)
+// _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
+// else
+// _ShapeDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
+// _ShapeDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
_ShapeDataAdapter.Fill(_PrimsDataSet, "primshapes");
_ItemsDataAdapter.SelectCommand.Connection = connection;
_ItemsDataAdapter.SelectCommand.Parameters["@RegionUUID"].Value = regionUUID.ToString();
- if (sceneGroupID != UUID.Zero)
- _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
- else
- _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
- _ItemsDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
+// if (sceneGroupID != UUID.Zero)
+// _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = sceneGroupID.ToString();
+// else
+// _ItemsDataAdapter.SelectCommand.Parameters["@SceneGroupID"].Value = "%";
+// _ItemsDataAdapter.SelectCommand.Parameters["@UUID"].Value = primID;
_ItemsDataAdapter.Fill(_PrimsDataSet, "primitems");
}
@@ -1496,7 +1518,7 @@ VALUES
///
private void CommitDataSet()
{
- lock (_PrimsDataSet)
+ try
{
using (SqlConnection connection = _Database.DatabaseConnection())
{
@@ -1515,14 +1537,17 @@ VALUES
_PrimDataAdapter.Update(_PrimsDataSet.Tables["prims"]);
_ShapeDataAdapter.Update(_PrimsDataSet.Tables["primshapes"]);
_ItemsDataAdapter.Update(_PrimsDataSet.Tables["primitems"]);
-
- _PrimsDataSet.AcceptChanges();
-
- _PrimsDataSet.Tables["prims"].Clear();
- _PrimsDataSet.Tables["primshapes"].Clear();
- _PrimsDataSet.Tables["primitems"].Clear();
}
}
+ finally
+ {
+ _PrimsDataSet.AcceptChanges();
+
+ _PrimsDataSet.Tables["prims"].Clear();
+ _PrimsDataSet.Tables["primshapes"].Clear();
+ _PrimsDataSet.Tables["primitems"].Clear();
+
+ }
}
///
diff --git a/OpenSim/Data/MSSQL/Resources/009_RegionStore.sql b/OpenSim/Data/MSSQL/Resources/009_RegionStore.sql
new file mode 100644
index 0000000..7efc218
--- /dev/null
+++ b/OpenSim/Data/MSSQL/Resources/009_RegionStore.sql
@@ -0,0 +1,5 @@
+BEGIN TRANSACTION
+
+ALTER TABLE prims ADD Material tinyint NOT NULL default 3
+
+COMMIT
--
cgit v1.1