diff options
author | Sean Dague | 2008-06-11 21:01:33 +0000 |
---|---|---|
committer | Sean Dague | 2008-06-11 21:01:33 +0000 |
commit | 6c1fce61473b8d3faf9ee4602b9d0a392f148b7c (patch) | |
tree | 0cb0091493f725c0b06c2ceba493220eb85d507d | |
parent | updated resources for current sqlite schema for migrations (diff) | |
download | opensim-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.cs | 8 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteAssetData.cs | 24 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteInventoryStore.cs | 120 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteRegionData.cs | 286 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteUserData.cs | 52 |
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 | } |