aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorSean Dague2008-06-11 21:01:33 +0000
committerSean Dague2008-06-11 21:01:33 +0000
commit6c1fce61473b8d3faf9ee4602b9d0a392f148b7c (patch)
tree0cb0091493f725c0b06c2ceba493220eb85d507d
parentupdated resources for current sqlite schema for migrations (diff)
downloadopensim-SC-6c1fce61473b8d3faf9ee4602b9d0a392f148b7c.zip
opensim-SC-6c1fce61473b8d3faf9ee4602b9d0a392f148b7c.tar.gz
opensim-SC-6c1fce61473b8d3faf9ee4602b9d0a392f148b7c.tar.bz2
opensim-SC-6c1fce61473b8d3faf9ee4602b9d0a392f148b7c.tar.xz
check in working migration code fore SQLite. This
is now using migrations instead of the old model to create tables. Tested for existing old tables, and for creating new ones.
-rw-r--r--OpenSim/Data/Migration.cs8
-rw-r--r--OpenSim/Data/SQLite/SQLiteAssetData.cs24
-rw-r--r--OpenSim/Data/SQLite/SQLiteInventoryStore.cs120
-rw-r--r--OpenSim/Data/SQLite/SQLiteRegionData.cs286
-rw-r--r--OpenSim/Data/SQLite/SQLiteUserData.cs52
5 files changed, 276 insertions, 214 deletions
diff --git a/OpenSim/Data/Migration.cs b/OpenSim/Data/Migration.cs
index 83f4c3d..54d4970 100644
--- a/OpenSim/Data/Migration.cs
+++ b/OpenSim/Data/Migration.cs
@@ -159,7 +159,13 @@ namespace OpenSim.Data
159 public int Version 159 public int Version
160 { 160 {
161 get { return FindVersion(_type); } 161 get { return FindVersion(_type); }
162 set { UpdateVersion(_type, value); } 162 set {
163 if (Version < 1) {
164 InsertVersion(_type, value);
165 } else {
166 UpdateVersion(_type, value);
167 }
168 }
163 } 169 }
164 170
165 private int FindVersion(string type) 171 private int FindVersion(string type)
diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs
index 8d4fb99..4370cf7 100644
--- a/OpenSim/Data/SQLite/SQLiteAssetData.cs
+++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs
@@ -64,7 +64,19 @@ namespace OpenSim.Data.SQLite
64 } 64 }
65 m_conn = new SqliteConnection(dbconnect); 65 m_conn = new SqliteConnection(dbconnect);
66 m_conn.Open(); 66 m_conn.Open();
67 TestTables(m_conn); 67
68
69
70
71 Assembly assem = GetType().Assembly;
72 Migration m = new Migration(m_conn, assem, "AssetStore");
73 // TODO: remove this next line after changeset 6000,
74 // people should have all gotten into the migration swing
75 // again.
76 TestTables(m_conn, m);
77
78 m.Update();
79
68 return; 80 return;
69 } 81 }
70 82
@@ -258,7 +270,7 @@ namespace OpenSim.Data.SQLite
258 pcmd.ExecuteNonQuery(); 270 pcmd.ExecuteNonQuery();
259 } 271 }
260 272
261 private static bool TestTables(SqliteConnection conn) 273 private static bool TestTables(SqliteConnection conn, Migration m)
262 { 274 {
263 SqliteCommand cmd = new SqliteCommand(assetSelect, conn); 275 SqliteCommand cmd = new SqliteCommand(assetSelect, conn);
264 SqliteDataAdapter pDa = new SqliteDataAdapter(cmd); 276 SqliteDataAdapter pDa = new SqliteDataAdapter(cmd);
@@ -270,8 +282,14 @@ namespace OpenSim.Data.SQLite
270 catch (SqliteSyntaxException) 282 catch (SqliteSyntaxException)
271 { 283 {
272 m_log.Info("[ASSET DB]: SQLite Database doesn't exist... creating"); 284 m_log.Info("[ASSET DB]: SQLite Database doesn't exist... creating");
273 InitDB(conn); 285 return false;
274 } 286 }
287
288 // if the tables are here, and we don't have a migration,
289 // set it to 1, as we're migrating off of legacy bits
290 if (m.Version == 0)
291 m.Version = 1;
292
275 return true; 293 return true;
276 } 294 }
277 295
diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
index 5acc5f2..5b77f82 100644
--- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
+++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
@@ -61,7 +61,12 @@ namespace OpenSim.Data.SQLite
61 61
62 conn.Open(); 62 conn.Open();
63 63
64 TestTables(conn); 64 Assembly assem = GetType().Assembly;
65 Migration m = new Migration(conn, assem, "InventoryStore");
66 // TODO: remove this line after changeset 6000
67 TestTables(conn, m);
68
69 m.Update();
65 70
66 SqliteCommand itemsSelectCmd = new SqliteCommand(invItemsSelect, conn); 71 SqliteCommand itemsSelectCmd = new SqliteCommand(invItemsSelect, conn);
67 invItemsDa = new SqliteDataAdapter(itemsSelectCmd); 72 invItemsDa = new SqliteDataAdapter(itemsSelectCmd);
@@ -672,7 +677,7 @@ namespace OpenSim.Data.SQLite
672 scmd.ExecuteNonQuery(); 677 scmd.ExecuteNonQuery();
673 } 678 }
674 679
675 private static bool TestTables(SqliteConnection conn) 680 private static bool TestTables(SqliteConnection conn, Migration m)
676 { 681 {
677 SqliteCommand invItemsSelectCmd = new SqliteCommand(invItemsSelect, conn); 682 SqliteCommand invItemsSelectCmd = new SqliteCommand(invItemsSelect, conn);
678 SqliteDataAdapter pDa = new SqliteDataAdapter(invItemsSelectCmd); 683 SqliteDataAdapter pDa = new SqliteDataAdapter(invItemsSelectCmd);
@@ -688,63 +693,68 @@ namespace OpenSim.Data.SQLite
688 catch (SqliteSyntaxException) 693 catch (SqliteSyntaxException)
689 { 694 {
690 m_log.Info("[INVENTORY DB]: SQLite Database doesn't exist... creating"); 695 m_log.Info("[INVENTORY DB]: SQLite Database doesn't exist... creating");
691 InitDB(conn); 696 return false;
692 } 697 }
693 698
694 pDa.Fill(tmpDS, "inventoryitems"); 699 if (m.Version == 0)
695 sDa.Fill(tmpDS, "inventoryfolders"); 700 m.Version = 1;
696
697 // Very clumsy way of checking whether we need to upgrade the database table version and then updating. Only
698 // putting up with this because this code should be blown away soon by nhibernate...
699 conn.Open();
700
701 SqliteCommand cmd;
702 try
703 {
704 cmd = new SqliteCommand("select salePrice from inventoryitems limit 1;", conn);
705 cmd.ExecuteNonQuery();
706 }
707 catch (SqliteSyntaxException)
708 {
709 m_log.Info("[INVENTORY DB]: Upgrading sqlite inventory database to version 2");
710
711 cmd = new SqliteCommand("alter table inventoryitems add column salePrice integer default 99;", conn);
712 cmd.ExecuteNonQuery();
713 cmd = new SqliteCommand("alter table inventoryitems add column saleType integer default 0;", conn);
714 cmd.ExecuteNonQuery();
715 cmd = new SqliteCommand("alter table inventoryitems add column creationDate integer default 2000;", conn);
716 cmd.ExecuteNonQuery();
717 cmd = new SqliteCommand("alter table inventoryitems add column groupID varchar(255) default '00000000-0000-0000-0000-000000000000';", conn);
718 cmd.ExecuteNonQuery();
719 cmd = new SqliteCommand("alter table inventoryitems add column groupOwned integer default 0;", conn);
720 cmd.ExecuteNonQuery();
721 cmd = new SqliteCommand("alter table inventoryitems add column flags integer default 0;", conn);
722 cmd.ExecuteNonQuery();
723 701
724 pDa.Fill(tmpDS, "inventoryitems");
725 }
726 finally
727 {
728 conn.Close();
729 }
730
731 foreach (DataColumn col in createInventoryItemsTable().Columns)
732 {
733 if (! tmpDS.Tables["inventoryitems"].Columns.Contains(col.ColumnName))
734 {
735 m_log.Info("[INVENTORY DB]: Missing required column:" + col.ColumnName);
736 return false;
737 }
738 }
739 foreach (DataColumn col in createInventoryFoldersTable().Columns)
740 {
741 if (! tmpDS.Tables["inventoryfolders"].Columns.Contains(col.ColumnName))
742 {
743 m_log.Info("[INVENTORY DB]: Missing required column:" + col.ColumnName);
744 return false;
745 }
746 }
747 return true; 702 return true;
703
704 // pDa.Fill(tmpDS, "inventoryitems");
705 // sDa.Fill(tmpDS, "inventoryfolders");
706
707 // // Very clumsy way of checking whether we need to upgrade the database table version and then updating. Only
708 // // putting up with this because this code should be blown away soon by nhibernate...
709 // conn.Open();
710
711 // SqliteCommand cmd;
712 // try
713 // {
714 // cmd = new SqliteCommand("select salePrice from inventoryitems limit 1;", conn);
715 // cmd.ExecuteNonQuery();
716 // }
717 // catch (SqliteSyntaxException)
718 // {
719 // m_log.Info("[INVENTORY DB]: Upgrading sqlite inventory database to version 2");
720
721 // cmd = new SqliteCommand("alter table inventoryitems add column salePrice integer default 99;", conn);
722 // cmd.ExecuteNonQuery();
723 // cmd = new SqliteCommand("alter table inventoryitems add column saleType integer default 0;", conn);
724 // cmd.ExecuteNonQuery();
725 // cmd = new SqliteCommand("alter table inventoryitems add column creationDate integer default 2000;", conn);
726 // cmd.ExecuteNonQuery();
727 // cmd = new SqliteCommand("alter table inventoryitems add column groupID varchar(255) default '00000000-0000-0000-0000-000000000000';", conn);
728 // cmd.ExecuteNonQuery();
729 // cmd = new SqliteCommand("alter table inventoryitems add column groupOwned integer default 0;", conn);
730 // cmd.ExecuteNonQuery();
731 // cmd = new SqliteCommand("alter table inventoryitems add column flags integer default 0;", conn);
732 // cmd.ExecuteNonQuery();
733
734 // pDa.Fill(tmpDS, "inventoryitems");
735 // }
736 // finally
737 // {
738 // conn.Close();
739 // }
740
741 // foreach (DataColumn col in createInventoryItemsTable().Columns)
742 // {
743 // if (! tmpDS.Tables["inventoryitems"].Columns.Contains(col.ColumnName))
744 // {
745 // m_log.Info("[INVENTORY DB]: Missing required column:" + col.ColumnName);
746 // return false;
747 // }
748 // }
749 // foreach (DataColumn col in createInventoryFoldersTable().Columns)
750 // {
751 // if (! tmpDS.Tables["inventoryfolders"].Columns.Contains(col.ColumnName))
752 // {
753 // m_log.Info("[INVENTORY DB]: Missing required column:" + col.ColumnName);
754 // return false;
755 // }
756 // }
757 // return true;
748 } 758 }
749 } 759 }
750} 760}
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index 6a16a88..42299a0 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs
@@ -84,6 +84,8 @@ namespace OpenSim.Data.SQLite
84 m_conn = new SqliteConnection(m_connectionString); 84 m_conn = new SqliteConnection(m_connectionString);
85 m_conn.Open(); 85 m_conn.Open();
86 86
87
88
87 SqliteCommand primSelectCmd = new SqliteCommand(primSelect, m_conn); 89 SqliteCommand primSelectCmd = new SqliteCommand(primSelect, m_conn);
88 primDa = new SqliteDataAdapter(primSelectCmd); 90 primDa = new SqliteDataAdapter(primSelectCmd);
89 // SqliteCommandBuilder primCb = new SqliteCommandBuilder(primDa); 91 // SqliteCommandBuilder primCb = new SqliteCommandBuilder(primDa);
@@ -104,10 +106,15 @@ namespace OpenSim.Data.SQLite
104 SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn); 106 SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn);
105 landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd); 107 landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd);
106 108
107 // We fill the data set, now we've got copies in memory for the information 109 // This actually does the roll forward assembly stuff
108 // TODO: see if the linkage actually holds. 110 Assembly assem = GetType().Assembly;
109 // primDa.FillSchema(ds, SchemaType.Source, "PrimSchema"); 111 Migration m = new Migration(m_conn, assem, "RegionStore");
110 TestTables(m_conn); 112
113 // TODO: After rev 6000, remove this. People should have
114 // been rolled onto the new migration code by then.
115 TestTables(m_conn, m);
116
117 m.Update();
111 118
112 lock (ds) 119 lock (ds)
113 { 120 {
@@ -1520,81 +1527,81 @@ namespace OpenSim.Data.SQLite
1520 /// Create the necessary database tables. 1527 /// Create the necessary database tables.
1521 /// </summary> 1528 /// </summary>
1522 /// <param name="conn"></param> 1529 /// <param name="conn"></param>
1523 private void InitDB(SqliteConnection conn) 1530 // private void InitDB(SqliteConnection conn)
1524 { 1531 // {
1525 string createPrims = defineTable(createPrimTable()); 1532 // string createPrims = defineTable(createPrimTable());
1526 string createShapes = defineTable(createShapeTable()); 1533 // string createShapes = defineTable(createShapeTable());
1527 string createItems = defineTable(createItemsTable()); 1534 // string createItems = defineTable(createItemsTable());
1528 string createTerrain = defineTable(createTerrainTable()); 1535 // string createTerrain = defineTable(createTerrainTable());
1529 string createLand = defineTable(createLandTable()); 1536 // string createLand = defineTable(createLandTable());
1530 string createLandAccessList = defineTable(createLandAccessListTable()); 1537 // string createLandAccessList = defineTable(createLandAccessListTable());
1531 1538
1532 SqliteCommand pcmd = new SqliteCommand(createPrims, conn); 1539 // SqliteCommand pcmd = new SqliteCommand(createPrims, conn);
1533 SqliteCommand scmd = new SqliteCommand(createShapes, conn); 1540 // SqliteCommand scmd = new SqliteCommand(createShapes, conn);
1534 SqliteCommand icmd = new SqliteCommand(createItems, conn); 1541 // SqliteCommand icmd = new SqliteCommand(createItems, conn);
1535 SqliteCommand tcmd = new SqliteCommand(createTerrain, conn); 1542 // SqliteCommand tcmd = new SqliteCommand(createTerrain, conn);
1536 SqliteCommand lcmd = new SqliteCommand(createLand, conn); 1543 // SqliteCommand lcmd = new SqliteCommand(createLand, conn);
1537 SqliteCommand lalcmd = new SqliteCommand(createLandAccessList, conn); 1544 // SqliteCommand lalcmd = new SqliteCommand(createLandAccessList, conn);
1538 1545
1539 try 1546 // try
1540 { 1547 // {
1541 pcmd.ExecuteNonQuery(); 1548 // pcmd.ExecuteNonQuery();
1542 } 1549 // }
1543 catch (SqliteSyntaxException) 1550 // catch (SqliteSyntaxException)
1544 { 1551 // {
1545 m_log.Warn("[REGION DB]: Primitives Table Already Exists"); 1552 // m_log.Warn("[REGION DB]: Primitives Table Already Exists");
1546 } 1553 // }
1547 1554
1548 try 1555 // try
1549 { 1556 // {
1550 scmd.ExecuteNonQuery(); 1557 // scmd.ExecuteNonQuery();
1551 } 1558 // }
1552 catch (SqliteSyntaxException) 1559 // catch (SqliteSyntaxException)
1553 { 1560 // {
1554 m_log.Warn("[REGION DB]: Shapes Table Already Exists"); 1561 // m_log.Warn("[REGION DB]: Shapes Table Already Exists");
1555 } 1562 // }
1556 1563
1557 if (persistPrimInventories) 1564 // if (persistPrimInventories)
1558 { 1565 // {
1559 try 1566 // try
1560 { 1567 // {
1561 icmd.ExecuteNonQuery(); 1568 // icmd.ExecuteNonQuery();
1562 } 1569 // }
1563 catch (SqliteSyntaxException) 1570 // catch (SqliteSyntaxException)
1564 { 1571 // {
1565 m_log.Warn("[REGION DB]: Primitives Inventory Table Already Exists"); 1572 // m_log.Warn("[REGION DB]: Primitives Inventory Table Already Exists");
1566 } 1573 // }
1567 } 1574 // }
1568 1575
1569 try 1576 // try
1570 { 1577 // {
1571 tcmd.ExecuteNonQuery(); 1578 // tcmd.ExecuteNonQuery();
1572 } 1579 // }
1573 catch (SqliteSyntaxException) 1580 // catch (SqliteSyntaxException)
1574 { 1581 // {
1575 m_log.Warn("[REGION DB]: Terrain Table Already Exists"); 1582 // m_log.Warn("[REGION DB]: Terrain Table Already Exists");
1576 } 1583 // }
1577 1584
1578 try 1585 // try
1579 { 1586 // {
1580 lcmd.ExecuteNonQuery(); 1587 // lcmd.ExecuteNonQuery();
1581 } 1588 // }
1582 catch (SqliteSyntaxException) 1589 // catch (SqliteSyntaxException)
1583 { 1590 // {
1584 m_log.Warn("[REGION DB]: Land Table Already Exists"); 1591 // m_log.Warn("[REGION DB]: Land Table Already Exists");
1585 } 1592 // }
1586 1593
1587 try 1594 // try
1588 { 1595 // {
1589 lalcmd.ExecuteNonQuery(); 1596 // lalcmd.ExecuteNonQuery();
1590 } 1597 // }
1591 catch (SqliteSyntaxException) 1598 // catch (SqliteSyntaxException)
1592 { 1599 // {
1593 m_log.Warn("[SQLITE]: LandAccessList Table Already Exists"); 1600 // m_log.Warn("[SQLITE]: LandAccessList Table Already Exists");
1594 } 1601 // }
1595 } 1602 // }
1596 1603
1597 private bool TestTables(SqliteConnection conn) 1604 private bool TestTables(SqliteConnection conn, Migration m)
1598 { 1605 {
1599 SqliteCommand primSelectCmd = new SqliteCommand(primSelect, conn); 1606 SqliteCommand primSelectCmd = new SqliteCommand(primSelect, conn);
1600 SqliteDataAdapter pDa = new SqliteDataAdapter(primSelectCmd); 1607 SqliteDataAdapter pDa = new SqliteDataAdapter(primSelectCmd);
@@ -1630,65 +1637,72 @@ namespace OpenSim.Data.SQLite
1630 catch (SqliteSyntaxException) 1637 catch (SqliteSyntaxException)
1631 { 1638 {
1632 m_log.Info("[DATASTORE]: SQLite Database doesn't exist... creating"); 1639 m_log.Info("[DATASTORE]: SQLite Database doesn't exist... creating");
1633 InitDB(conn); 1640 return false;
1634 }
1635
1636 pDa.Fill(tmpDS, "prims");
1637 sDa.Fill(tmpDS, "primshapes");
1638
1639 if (persistPrimInventories)
1640 iDa.Fill(tmpDS, "primitems");
1641
1642 tDa.Fill(tmpDS, "terrain");
1643 lDa.Fill(tmpDS, "land");
1644 lalDa.Fill(tmpDS, "landaccesslist");
1645
1646 foreach (DataColumn col in createPrimTable().Columns)
1647 {
1648 if (!tmpDS.Tables["prims"].Columns.Contains(col.ColumnName))
1649 {
1650 m_log.Info("[REGION DB]: Missing required column:" + col.ColumnName);
1651 return false;
1652 }
1653 } 1641 }
1654 1642
1655 foreach (DataColumn col in createShapeTable().Columns) 1643 // if we've gotten this far, and our version is still 0,
1656 { 1644 // it's because the migration was never done, so
1657 if (!tmpDS.Tables["primshapes"].Columns.Contains(col.ColumnName)) 1645 // initialize to 1 just to sync up to where we should be.
1658 { 1646
1659 m_log.Info("[REGION DB]: Missing required column:" + col.ColumnName); 1647 if (m.Version == 0)
1660 return false; 1648 m.Version = 1;
1661 } 1649
1662 } 1650 // pDa.Fill(tmpDS, "prims");
1663 1651 // sDa.Fill(tmpDS, "primshapes");
1664 // XXX primitems should probably go here eventually 1652
1665 1653 // if (persistPrimInventories)
1666 foreach (DataColumn col in createTerrainTable().Columns) 1654 // iDa.Fill(tmpDS, "primitems");
1667 { 1655
1668 if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName)) 1656 // tDa.Fill(tmpDS, "terrain");
1669 { 1657 // lDa.Fill(tmpDS, "land");
1670 m_log.Info("[REGION DB]: Missing require column:" + col.ColumnName); 1658 // lalDa.Fill(tmpDS, "landaccesslist");
1671 return false; 1659
1672 } 1660 // foreach (DataColumn col in createPrimTable().Columns)
1673 } 1661 // {
1674 1662 // if (!tmpDS.Tables["prims"].Columns.Contains(col.ColumnName))
1675 foreach (DataColumn col in createLandTable().Columns) 1663 // {
1676 { 1664 // m_log.Info("[REGION DB]: Missing required column:" + col.ColumnName);
1677 if (!tmpDS.Tables["land"].Columns.Contains(col.ColumnName)) 1665 // return false;
1678 { 1666 // }
1679 m_log.Info("[REGION DB]: Missing require column:" + col.ColumnName); 1667 // }
1680 return false; 1668
1681 } 1669 // foreach (DataColumn col in createShapeTable().Columns)
1682 } 1670 // {
1683 1671 // if (!tmpDS.Tables["primshapes"].Columns.Contains(col.ColumnName))
1684 foreach (DataColumn col in createLandAccessListTable().Columns) 1672 // {
1685 { 1673 // m_log.Info("[REGION DB]: Missing required column:" + col.ColumnName);
1686 if (!tmpDS.Tables["landaccesslist"].Columns.Contains(col.ColumnName)) 1674 // return false;
1687 { 1675 // }
1688 m_log.Info("[DATASTORE]: Missing require column:" + col.ColumnName); 1676 // }
1689 return false; 1677
1690 } 1678 // // XXX primitems should probably go here eventually
1691 } 1679
1680 // foreach (DataColumn col in createTerrainTable().Columns)
1681 // {
1682 // if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName))
1683 // {
1684 // m_log.Info("[REGION DB]: Missing require column:" + col.ColumnName);
1685 // return false;
1686 // }
1687 // }
1688
1689 // foreach (DataColumn col in createLandTable().Columns)
1690 // {
1691 // if (!tmpDS.Tables["land"].Columns.Contains(col.ColumnName))
1692 // {
1693 // m_log.Info("[REGION DB]: Missing require column:" + col.ColumnName);
1694 // return false;
1695 // }
1696 // }
1697
1698 // foreach (DataColumn col in createLandAccessListTable().Columns)
1699 // {
1700 // if (!tmpDS.Tables["landaccesslist"].Columns.Contains(col.ColumnName))
1701 // {
1702 // m_log.Info("[DATASTORE]: Missing require column:" + col.ColumnName);
1703 // return false;
1704 // }
1705 // }
1692 1706
1693 return true; 1707 return true;
1694 } 1708 }
diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs
index c9ef3c2..36ec9ea 100644
--- a/OpenSim/Data/SQLite/SQLiteUserData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserData.cs
@@ -72,12 +72,20 @@ namespace OpenSim.Data.SQLite
72 connect = "URI=file:userprofiles.db,version=3"; 72 connect = "URI=file:userprofiles.db,version=3";
73 73
74 SqliteConnection conn = new SqliteConnection(connect); 74 SqliteConnection conn = new SqliteConnection(connect);
75 TestTables(conn);
76 75
77 // This sucks, but It doesn't seem to work with the dataset Syncing :P 76 // This sucks, but It doesn't seem to work with the dataset Syncing :P
78 g_conn = conn; 77 g_conn = conn;
79 g_conn.Open(); 78 g_conn.Open();
80 79
80 Assembly assem = GetType().Assembly;
81 Migration m = new Migration(g_conn, assem, "UserStore");
82
83 // TODO: remove this after rev 6000
84 TestTables(conn, m);
85
86 m.Update();
87
88
81 ds = new DataSet(); 89 ds = new DataSet();
82 da = new SqliteDataAdapter(new SqliteCommand(userSelect, conn)); 90 da = new SqliteDataAdapter(new SqliteCommand(userSelect, conn));
83 daf = new SqliteDataAdapter(new SqliteCommand(userFriendsSelect, conn)); 91 daf = new SqliteDataAdapter(new SqliteCommand(userFriendsSelect, conn));
@@ -824,7 +832,7 @@ namespace OpenSim.Data.SQLite
824 conn.Close(); 832 conn.Close();
825 } 833 }
826 834
827 private static bool TestTables(SqliteConnection conn) 835 private static bool TestTables(SqliteConnection conn, Migration m)
828 { 836 {
829 SqliteCommand cmd = new SqliteCommand(userSelect, conn); 837 SqliteCommand cmd = new SqliteCommand(userSelect, conn);
830 SqliteCommand fcmd = new SqliteCommand(userFriendsSelect, conn); 838 SqliteCommand fcmd = new SqliteCommand(userFriendsSelect, conn);
@@ -842,26 +850,32 @@ namespace OpenSim.Data.SQLite
842 catch (SqliteSyntaxException) 850 catch (SqliteSyntaxException)
843 { 851 {
844 m_log.Info("[USER DB]: SQLite Database doesn't exist... creating"); 852 m_log.Info("[USER DB]: SQLite Database doesn't exist... creating");
845 InitDB(conn); 853 return false;
846 }
847 conn.Open();
848 try
849 {
850 cmd = new SqliteCommand("select webLoginKey from users limit 1;", conn);
851 cmd.ExecuteNonQuery();
852 }
853 catch (SqliteSyntaxException)
854 {
855 cmd = new SqliteCommand("alter table users add column webLoginKey text default '00000000-0000-0000-0000-000000000000';", conn);
856 cmd.ExecuteNonQuery();
857 pDa.Fill(tmpDS, "users");
858 }
859 finally
860 {
861 conn.Close();
862 } 854 }
863 855
856 if (m.Version == 0)
857 m.Version = 1;
858
864 return true; 859 return true;
860
861 // conn.Open();
862 // try
863 // {
864 // cmd = new SqliteCommand("select webLoginKey from users limit 1;", conn);
865 // cmd.ExecuteNonQuery();
866 // }
867 // catch (SqliteSyntaxException)
868 // {
869 // cmd = new SqliteCommand("alter table users add column webLoginKey text default '00000000-0000-0000-0000-000000000000';", conn);
870 // cmd.ExecuteNonQuery();
871 // pDa.Fill(tmpDS, "users");
872 // }
873 // finally
874 // {
875 // conn.Close();
876 // }
877
878 // return true;
865 } 879 }
866 } 880 }
867} 881}