From e033f4028db387dc7162e8f5ae1abb781dbfb920 Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Thu, 7 May 2009 13:20:29 +0000
Subject: * Consistently use dashed uuid format for sqlite region data, as was
previously done for sqlite inventory data. * This revision contains a data
migration. Please backup your sqlite region db as a precaution before using
this code * I also advise that you do a runprebuild[.sh|.bat] and a clean
build ("nant clean build" if you're using the command line). * This change is
needed for future id schemes
---
OpenSim/Data/SQLite/Resources/018_RegionStore.sql | 79 +++++++++++++++++++++++
OpenSim/Data/SQLite/SQLiteRegionData.cs | 73 ++++++++++-----------
2 files changed, 114 insertions(+), 38 deletions(-)
create mode 100644 OpenSim/Data/SQLite/Resources/018_RegionStore.sql
diff --git a/OpenSim/Data/SQLite/Resources/018_RegionStore.sql b/OpenSim/Data/SQLite/Resources/018_RegionStore.sql
new file mode 100644
index 0000000..6a390c2
--- /dev/null
+++ b/OpenSim/Data/SQLite/Resources/018_RegionStore.sql
@@ -0,0 +1,79 @@
+BEGIN;
+
+update terrain
+ set RegionUUID = substr(RegionUUID, 1, 8) || "-" || substr(RegionUUID, 9, 4) || "-" || substr(RegionUUID, 13, 4) || "-" || substr(RegionUUID, 17, 4) || "-" || substr(RegionUUID, 21, 12)
+ where RegionUUID not like '%-%';
+
+
+update landaccesslist
+ set LandUUID = substr(LandUUID, 1, 8) || "-" || substr(LandUUID, 9, 4) || "-" || substr(LandUUID, 13, 4) || "-" || substr(LandUUID, 17, 4) || "-" || substr(LandUUID, 21, 12)
+ where LandUUID not like '%-%';
+
+update landaccesslist
+ set AccessUUID = substr(AccessUUID, 1, 8) || "-" || substr(AccessUUID, 9, 4) || "-" || substr(AccessUUID, 13, 4) || "-" || substr(AccessUUID, 17, 4) || "-" || substr(AccessUUID, 21, 12)
+ where AccessUUID not like '%-%';
+
+
+update prims
+ set UUID = substr(UUID, 1, 8) || "-" || substr(UUID, 9, 4) || "-" || substr(UUID, 13, 4) || "-" || substr(UUID, 17, 4) || "-" || substr(UUID, 21, 12)
+ where UUID not like '%-%';
+
+update prims
+ set RegionUUID = substr(RegionUUID, 1, 8) || "-" || substr(RegionUUID, 9, 4) || "-" || substr(RegionUUID, 13, 4) || "-" || substr(RegionUUID, 17, 4) || "-" || substr(RegionUUID, 21, 12)
+ where RegionUUID not like '%-%';
+
+update prims
+ set SceneGroupID = substr(SceneGroupID, 1, 8) || "-" || substr(SceneGroupID, 9, 4) || "-" || substr(SceneGroupID, 13, 4) || "-" || substr(SceneGroupID, 17, 4) || "-" || substr(SceneGroupID, 21, 12)
+ where SceneGroupID not like '%-%';
+
+update prims
+ set CreatorID = substr(CreatorID, 1, 8) || "-" || substr(CreatorID, 9, 4) || "-" || substr(CreatorID, 13, 4) || "-" || substr(CreatorID, 17, 4) || "-" || substr(CreatorID, 21, 12)
+ where CreatorID not like '%-%';
+
+update prims
+ set OwnerID = substr(OwnerID, 1, 8) || "-" || substr(OwnerID, 9, 4) || "-" || substr(OwnerID, 13, 4) || "-" || substr(OwnerID, 17, 4) || "-" || substr(OwnerID, 21, 12)
+ where OwnerID not like '%-%';
+
+update prims
+ set GroupID = substr(GroupID, 1, 8) || "-" || substr(GroupID, 9, 4) || "-" || substr(GroupID, 13, 4) || "-" || substr(GroupID, 17, 4) || "-" || substr(GroupID, 21, 12)
+ where GroupID not like '%-%';
+
+update prims
+ set LastOwnerID = substr(LastOwnerID, 1, 8) || "-" || substr(LastOwnerID, 9, 4) || "-" || substr(LastOwnerID, 13, 4) || "-" || substr(LastOwnerID, 17, 4) || "-" || substr(LastOwnerID, 21, 12)
+ where LastOwnerID not like '%-%';
+
+
+update primshapes
+ set UUID = substr(UUID, 1, 8) || "-" || substr(UUID, 9, 4) || "-" || substr(UUID, 13, 4) || "-" || substr(UUID, 17, 4) || "-" || substr(UUID, 21, 12)
+ where UUID not like '%-%';
+
+
+update land
+ set UUID = substr(UUID, 1, 8) || "-" || substr(UUID, 9, 4) || "-" || substr(UUID, 13, 4) || "-" || substr(UUID, 17, 4) || "-" || substr(UUID, 21, 12)
+ where UUID not like '%-%';
+
+update land
+ set RegionUUID = substr(RegionUUID, 1, 8) || "-" || substr(RegionUUID, 9, 4) || "-" || substr(RegionUUID, 13, 4) || "-" || substr(RegionUUID, 17, 4) || "-" || substr(RegionUUID, 21, 12)
+ where RegionUUID not like '%-%';
+
+update land
+ set OwnerUUID = substr(OwnerUUID, 1, 8) || "-" || substr(OwnerUUID, 9, 4) || "-" || substr(OwnerUUID, 13, 4) || "-" || substr(OwnerUUID, 17, 4) || "-" || substr(OwnerUUID, 21, 12)
+ where OwnerUUID not like '%-%';
+
+update land
+ set GroupUUID = substr(GroupUUID, 1, 8) || "-" || substr(GroupUUID, 9, 4) || "-" || substr(GroupUUID, 13, 4) || "-" || substr(GroupUUID, 17, 4) || "-" || substr(GroupUUID, 21, 12)
+ where GroupUUID not like '%-%';
+
+update land
+ set MediaTextureUUID = substr(MediaTextureUUID, 1, 8) || "-" || substr(MediaTextureUUID, 9, 4) || "-" || substr(MediaTextureUUID, 13, 4) || "-" || substr(MediaTextureUUID, 17, 4) || "-" || substr(MediaTextureUUID, 21, 12)
+ where MediaTextureUUID not like '%-%';
+
+update land
+ set SnapshotUUID = substr(SnapshotUUID, 1, 8) || "-" || substr(SnapshotUUID, 9, 4) || "-" || substr(SnapshotUUID, 13, 4) || "-" || substr(SnapshotUUID, 17, 4) || "-" || substr(SnapshotUUID, 21, 12)
+ where SnapshotUUID not like '%-%';
+
+update land
+ set AuthbuyerID = substr(AuthbuyerID, 1, 8) || "-" || substr(AuthbuyerID, 9, 4) || "-" || substr(AuthbuyerID, 13, 4) || "-" || substr(AuthbuyerID, 17, 4) || "-" || substr(AuthbuyerID, 21, 12)
+ where AuthbuyerID not like '%-%';
+
+COMMIT;
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index 2d0f6d8..476d8db 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs
@@ -321,7 +321,7 @@ namespace OpenSim.Data.SQLite
{
//m_log.Info("[DATASTORE]: " +
//"Adding stopped obj: " + obj.UUID + " to region: " + regionUUID);
- //addPrim(prim, Util.ToRawUuidString(obj.UUID), Util.ToRawUuidString(regionUUID));
+ //addPrim(prim, obj.UUID.ToString(), regionUUID.ToString());
}
else
{
@@ -346,7 +346,7 @@ namespace OpenSim.Data.SQLite
DataTable prims = ds.Tables["prims"];
DataTable shapes = ds.Tables["primshapes"];
- string selectExp = "SceneGroupID = '" + Util.ToRawUuidString(obj) + "' and RegionUUID = '" + Util.ToRawUuidString(regionUUID) + "'";
+ string selectExp = "SceneGroupID = '" + obj + "' and RegionUUID = '" + regionUUID + "'";
lock (ds)
{
DataRow[] primRows = prims.Select(selectExp);
@@ -354,7 +354,7 @@ namespace OpenSim.Data.SQLite
{
// Remove shape rows
UUID uuid = new UUID((string) row["UUID"]);
- DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(uuid));
+ DataRow shapeRow = shapes.Rows.Find(uuid.ToString());
if (shapeRow != null)
{
shapeRow.Delete();
@@ -402,7 +402,7 @@ namespace OpenSim.Data.SQLite
DataTable prims = ds.Tables["prims"];
DataTable shapes = ds.Tables["primshapes"];
- string byRegion = "RegionUUID = '" + Util.ToRawUuidString(regionUUID) + "'";
+ string byRegion = "RegionUUID = '" + regionUUID + "'";
lock (ds)
{
@@ -423,7 +423,7 @@ namespace OpenSim.Data.SQLite
{
SceneObjectGroup group = new SceneObjectGroup();
prim = buildPrim(primRow);
- DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
+ DataRow shapeRow = shapes.Rows.Find(prim.UUID.ToString());
if (shapeRow != null)
{
prim.Shape = buildShape(shapeRow);
@@ -464,7 +464,7 @@ namespace OpenSim.Data.SQLite
if (uuid != objID) //is new SceneObjectGroup ?
{
prim = buildPrim(primRow);
- DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
+ DataRow shapeRow = shapes.Rows.Find(prim.UUID.ToString());
if (shapeRow != null)
{
prim.Shape = buildShape(shapeRow);
@@ -541,7 +541,7 @@ namespace OpenSim.Data.SQLite
new SqliteCommand("delete from terrain where RegionUUID=:RegionUUID and Revision <= :Revision",
m_conn))
{
- cmd.Parameters.Add(new SqliteParameter(":RegionUUID", Util.ToRawUuidString(regionID)));
+ cmd.Parameters.Add(new SqliteParameter(":RegionUUID", regionID.ToString()));
cmd.Parameters.Add(new SqliteParameter(":Revision", revision));
cmd.ExecuteNonQuery();
}
@@ -554,7 +554,7 @@ namespace OpenSim.Data.SQLite
using (SqliteCommand cmd = new SqliteCommand(sql, m_conn))
{
- cmd.Parameters.Add(new SqliteParameter(":RegionUUID", Util.ToRawUuidString(regionID)));
+ cmd.Parameters.Add(new SqliteParameter(":RegionUUID", regionID.ToString()));
cmd.Parameters.Add(new SqliteParameter(":Revision", revision));
cmd.Parameters.Add(new SqliteParameter(":Heightfield", serializeTerrain(ter)));
cmd.ExecuteNonQuery();
@@ -579,7 +579,7 @@ namespace OpenSim.Data.SQLite
using (SqliteCommand cmd = new SqliteCommand(sql, m_conn))
{
- cmd.Parameters.Add(new SqliteParameter(":RegionUUID", Util.ToRawUuidString(regionID)));
+ cmd.Parameters.Add(new SqliteParameter(":RegionUUID", regionID.ToString()));
using (IDataReader row = cmd.ExecuteReader())
{
@@ -621,13 +621,13 @@ namespace OpenSim.Data.SQLite
{
using (SqliteCommand cmd = new SqliteCommand("delete from land where UUID=:UUID", m_conn))
{
- cmd.Parameters.Add(new SqliteParameter(":UUID", Util.ToRawUuidString(globalID)));
+ cmd.Parameters.Add(new SqliteParameter(":UUID", globalID.ToString()));
cmd.ExecuteNonQuery();
}
using (SqliteCommand cmd = new SqliteCommand("delete from landaccesslist where LandUUID=:UUID", m_conn))
{
- cmd.Parameters.Add(new SqliteParameter(":UUID", Util.ToRawUuidString(globalID)));
+ cmd.Parameters.Add(new SqliteParameter(":UUID", globalID.ToString()));
cmd.ExecuteNonQuery();
}
}
@@ -644,7 +644,7 @@ namespace OpenSim.Data.SQLite
DataTable land = ds.Tables["land"];
DataTable landaccesslist = ds.Tables["landaccesslist"];
- DataRow landRow = land.Rows.Find(Util.ToRawUuidString(parcel.landData.GlobalID));
+ DataRow landRow = land.Rows.Find(parcel.landData.GlobalID.ToString());
if (landRow == null)
{
landRow = land.NewRow();
@@ -659,7 +659,7 @@ namespace OpenSim.Data.SQLite
// I know this caused someone issues before, but OpenSim is unusable if we leave this stuff around
using (SqliteCommand cmd = new SqliteCommand("delete from landaccesslist where LandUUID=:LandUUID", m_conn))
{
- cmd.Parameters.Add(new SqliteParameter(":LandUUID", Util.ToRawUuidString(parcel.landData.GlobalID)));
+ cmd.Parameters.Add(new SqliteParameter(":LandUUID", parcel.landData.GlobalID.ToString()));
cmd.ExecuteNonQuery();
}
@@ -686,12 +686,12 @@ namespace OpenSim.Data.SQLite
{
DataTable land = ds.Tables["land"];
DataTable landaccesslist = ds.Tables["landaccesslist"];
- string searchExp = "RegionUUID = '" + Util.ToRawUuidString(regionUUID) + "'";
+ string searchExp = "RegionUUID = '" + regionUUID + "'";
DataRow[] rawDataForRegion = land.Select(searchExp);
foreach (DataRow rawDataLand in rawDataForRegion)
{
LandData newLand = buildLandData(rawDataLand);
- string accessListSearchExp = "LandUUID = '" + Util.ToRawUuidString(newLand.GlobalID) + "'";
+ string accessListSearchExp = "LandUUID = '" + newLand.GlobalID + "'";
DataRow[] rawDataForLandAccessList = landaccesslist.Select(accessListSearchExp);
foreach (DataRow rawDataLandAccess in rawDataForLandAccessList)
{
@@ -1447,11 +1447,11 @@ namespace OpenSim.Data.SQLite
///
private static void fillPrimRow(DataRow row, SceneObjectPart prim, UUID sceneGroupID, UUID regionUUID)
{
- row["UUID"] = Util.ToRawUuidString(prim.UUID);
- row["RegionUUID"] = Util.ToRawUuidString(regionUUID);
+ row["UUID"] = prim.UUID.ToString();
+ row["RegionUUID"] = regionUUID.ToString();
row["CreationDate"] = prim.CreationDate;
row["Name"] = prim.Name;
- row["SceneGroupID"] = Util.ToRawUuidString(sceneGroupID);
+ row["SceneGroupID"] = sceneGroupID.ToString();
// the UUID of the root part for this SceneObjectGroup
// various text fields
row["Text"] = prim.Text;
@@ -1460,10 +1460,10 @@ namespace OpenSim.Data.SQLite
row["TouchName"] = prim.TouchName;
// permissions
row["ObjectFlags"] = prim.ObjectFlags;
- row["CreatorID"] = Util.ToRawUuidString(prim.CreatorID);
- row["OwnerID"] = Util.ToRawUuidString(prim.OwnerID);
- row["GroupID"] = Util.ToRawUuidString(prim.GroupID);
- row["LastOwnerID"] = Util.ToRawUuidString(prim.LastOwnerID);
+ row["CreatorID"] = prim.CreatorID.ToString();
+ row["OwnerID"] = prim.OwnerID.ToString();
+ row["GroupID"] = prim.GroupID.ToString();
+ row["LastOwnerID"] = prim.LastOwnerID.ToString();
row["OwnerMask"] = prim.OwnerMask;
row["NextOwnerMask"] = prim.NextOwnerMask;
row["GroupMask"] = prim.GroupMask;
@@ -1613,8 +1613,8 @@ namespace OpenSim.Data.SQLite
///
private static void fillLandRow(DataRow row, LandData land, UUID regionUUID)
{
- row["UUID"] = Util.ToRawUuidString(land.GlobalID);
- row["RegionUUID"] = Util.ToRawUuidString(regionUUID);
+ row["UUID"] = land.GlobalID.ToString();
+ row["RegionUUID"] = regionUUID.ToString();
row["LocalLandID"] = land.LocalID;
// Bitmap is a byte[512]
@@ -1622,32 +1622,32 @@ namespace OpenSim.Data.SQLite
row["Name"] = land.Name;
row["Desc"] = land.Description;
- row["OwnerUUID"] = Util.ToRawUuidString(land.OwnerID);
+ row["OwnerUUID"] = land.OwnerID.ToString();
row["IsGroupOwned"] = land.IsGroupOwned;
row["Area"] = land.Area;
row["AuctionID"] = land.AuctionID; //Unemplemented
row["Category"] = land.Category; //Enum OpenMetaverse.Parcel.ParcelCategory
row["ClaimDate"] = land.ClaimDate;
row["ClaimPrice"] = land.ClaimPrice;
- row["GroupUUID"] = Util.ToRawUuidString(land.GroupID);
+ row["GroupUUID"] = land.GroupID.ToString();
row["SalePrice"] = land.SalePrice;
row["LandStatus"] = land.Status; //Enum. OpenMetaverse.Parcel.ParcelStatus
row["LandFlags"] = land.Flags;
row["LandingType"] = land.LandingType;
row["MediaAutoScale"] = land.MediaAutoScale;
- row["MediaTextureUUID"] = Util.ToRawUuidString(land.MediaID);
+ row["MediaTextureUUID"] = land.MediaID.ToString();
row["MediaURL"] = land.MediaURL;
row["MusicURL"] = land.MusicURL;
row["PassHours"] = land.PassHours;
row["PassPrice"] = land.PassPrice;
- row["SnapshotUUID"] = Util.ToRawUuidString(land.SnapshotID);
+ row["SnapshotUUID"] = land.SnapshotID.ToString();
row["UserLocationX"] = land.UserLocation.X;
row["UserLocationY"] = land.UserLocation.Y;
row["UserLocationZ"] = land.UserLocation.Z;
row["UserLookAtX"] = land.UserLookAt.X;
row["UserLookAtY"] = land.UserLookAt.Y;
row["UserLookAtZ"] = land.UserLookAt.Z;
- row["AuthbuyerID"] = Util.ToRawUuidString(land.AuthBuyerID);
+ row["AuthbuyerID"] = land.AuthBuyerID.ToString();
row["OtherCleanTime"] = land.OtherCleanTime;
row["Dwell"] = land.Dwell;
}
@@ -1660,8 +1660,8 @@ namespace OpenSim.Data.SQLite
///
private static void fillLandAccessRow(DataRow row, ParcelManager.ParcelAccessEntry entry, UUID parcelID)
{
- row["LandUUID"] = Util.ToRawUuidString(parcelID);
- row["AccessUUID"] = Util.ToRawUuidString(entry.AgentID);
+ row["LandUUID"] = parcelID.ToString();
+ row["AccessUUID"] = entry.AgentID.ToString();
row["Flags"] = entry.Flags;
}
@@ -1742,10 +1742,7 @@ namespace OpenSim.Data.SQLite
s.ProfileHollow = Convert.ToUInt16(row["ProfileHollow"]);
s.State = Convert.ToByte(row["State"]);
- // text TODO: this isn't right] = but I'm not sure the right
- // way to specify this as a blob atm
-
- byte[] textureEntry = (byte[]) row["Texture"];
+ byte[] textureEntry = (byte[])row["Texture"];
s.TextureEntry = textureEntry;
s.ExtraParams = (byte[]) row["ExtraParams"];
@@ -1760,7 +1757,7 @@ namespace OpenSim.Data.SQLite
private static void fillShapeRow(DataRow row, SceneObjectPart prim)
{
PrimitiveBaseShape s = prim.Shape;
- row["UUID"] = Util.ToRawUuidString(prim.UUID);
+ row["UUID"] = prim.UUID.ToString();
// shape is an enum
row["Shape"] = 0;
// vectors
@@ -1805,7 +1802,7 @@ namespace OpenSim.Data.SQLite
DataTable prims = ds.Tables["prims"];
DataTable shapes = ds.Tables["primshapes"];
- DataRow primRow = prims.Rows.Find(Util.ToRawUuidString(prim.UUID));
+ DataRow primRow = prims.Rows.Find(prim.UUID.ToString());
if (primRow == null)
{
primRow = prims.NewRow();
@@ -1817,7 +1814,7 @@ namespace OpenSim.Data.SQLite
fillPrimRow(primRow, prim, sceneGroupID, regionUUID);
}
- DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
+ DataRow shapeRow = shapes.Rows.Find(prim.UUID.ToString());
if (shapeRow == null)
{
shapeRow = shapes.NewRow();
--
cgit v1.1