From fcd7cf5e4a7ef0a998e3d05236f8cb161e5c1bef Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Thu, 19 Jun 2008 15:03:00 +0000
Subject: fix an edge case with migrations in the region store. Add migration
 support to gridstore.

---
 OpenSim/Data/MySQL/MySQLDataStore.cs           |  4 ++++
 OpenSim/Data/MySQL/MySQLGridData.cs            | 20 ++++++++++++++--
 OpenSim/Data/MySQL/Resources/001_GridStore.sql | 32 ++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 2 deletions(-)
 create mode 100644 OpenSim/Data/MySQL/Resources/001_GridStore.sql

(limited to 'OpenSim/Data')

diff --git a/OpenSim/Data/MySQL/MySQLDataStore.cs b/OpenSim/Data/MySQL/MySQLDataStore.cs
index 01cd605..ff1b583 100644
--- a/OpenSim/Data/MySQL/MySQLDataStore.cs
+++ b/OpenSim/Data/MySQL/MySQLDataStore.cs
@@ -1670,6 +1670,10 @@ namespace OpenSim.Data.MySQL
 
         private bool TestTables(MySqlConnection conn, Migration m)
         {
+            // we already have migrations, get out of here
+            if (m.Version > 0)
+                return false;
+
             MySqlCommand primSelectCmd = new MySqlCommand(m_primSelect, conn);
             MySqlDataAdapter pDa = new MySqlDataAdapter(primSelectCmd);
             MySqlCommand shapeSelectCmd = new MySqlCommand(m_shapeSelect, conn);
diff --git a/OpenSim/Data/MySQL/MySQLGridData.cs b/OpenSim/Data/MySQL/MySQLGridData.cs
index 86ceffc..e5940e2 100644
--- a/OpenSim/Data/MySQL/MySQLGridData.cs
+++ b/OpenSim/Data/MySQL/MySQLGridData.cs
@@ -72,7 +72,15 @@ namespace OpenSim.Data.MySQL
                                             settingPooling, settingPort);
             }
 
-            TestTables();
+            // This actually does the roll forward assembly stuff
+            Assembly assem = GetType().Assembly;
+            Migration m = new Migration(database.Connection, assem, "GridStore");
+
+            // TODO: After rev 6000, remove this.  People should have
+            // been rolled onto the new migration code by then.
+            TestTables(m);
+
+            m.Update();
         }
 
         #region Test and initialization code
@@ -80,14 +88,22 @@ namespace OpenSim.Data.MySQL
         /// <summary>
         /// Ensure that the user related tables exists and are at the latest version
         /// </summary>
-        private void TestTables()
+        private void TestTables(Migration m)
         {
+            // we already have migrations, get out of here
+            if (m.Version > 0)
+                return;
+
             Dictionary<string, string> tableList = new Dictionary<string, string>();
 
             tableList["regions"] = null;
             database.GetTableVersion(tableList);
 
             UpgradeRegionsTable(tableList["regions"]);
+
+            // we have tables, but not a migration model yet
+            if (m.Version == 0)
+                m.Version = 1;
         }
 
         /// <summary>
diff --git a/OpenSim/Data/MySQL/Resources/001_GridStore.sql b/OpenSim/Data/MySQL/Resources/001_GridStore.sql
new file mode 100644
index 0000000..cb0f9bd
--- /dev/null
+++ b/OpenSim/Data/MySQL/Resources/001_GridStore.sql
@@ -0,0 +1,32 @@
+CREATE TABLE `regions` (
+  `uuid` varchar(36) NOT NULL,
+  `regionHandle` bigint(20) unsigned NOT NULL,
+  `regionName` varchar(32) default NULL,
+  `regionRecvKey` varchar(128) default NULL,
+  `regionSendKey` varchar(128) default NULL,
+  `regionSecret` varchar(128) default NULL,
+  `regionDataURI` varchar(255) default NULL,
+  `serverIP` varchar(64) default NULL,
+  `serverPort` int(10) unsigned default NULL,
+  `serverURI` varchar(255) default NULL,
+  `locX` int(10) unsigned default NULL,
+  `locY` int(10) unsigned default NULL,
+  `locZ` int(10) unsigned default NULL,
+  `eastOverrideHandle` bigint(20) unsigned default NULL,
+  `westOverrideHandle` bigint(20) unsigned default NULL,
+  `southOverrideHandle` bigint(20) unsigned default NULL,
+  `northOverrideHandle` bigint(20) unsigned default NULL,
+  `regionAssetURI` varchar(255) default NULL,
+  `regionAssetRecvKey` varchar(128) default NULL,
+  `regionAssetSendKey` varchar(128) default NULL,
+  `regionUserURI` varchar(255) default NULL,
+  `regionUserRecvKey` varchar(128) default NULL,
+  `regionUserSendKey` varchar(128) default NULL, `regionMapTexture` varchar(36) default NULL,
+  `serverHttpPort` int(10) default NULL, `serverRemotingPort` int(10) default NULL,
+  `owner_uuid` varchar(36) default '00000000-0000-0000-0000-000000000000' not null,
+  `originUUID` varchar(36),
+  PRIMARY KEY  (`uuid`),
+  KEY `regionName` (`regionName`),
+  KEY `regionHandle` (`regionHandle`),
+  KEY `overrideHandles` (`eastOverrideHandle`,`westOverrideHandle`,`southOverrideHandle`,`northOverrideHandle`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Rev. 3';
-- 
cgit v1.1