aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/SQLite
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-06-04 18:00:48 +0100
committerJustin Clark-Casey (justincc)2010-06-04 18:00:48 +0100
commit2f6d401db13b31c6cac7450266dade6e678c8aa6 (patch)
tree8ae3f924dfecbea30835d0172ac5464c6b8325b6 /OpenSim/Data/SQLite
parentRevert "Next OSG test. Don't remove app domains if they contain running threa... (diff)
parentswitch 0.6.9 flavour to release (diff)
downloadopensim-SC_OLD-2f6d401db13b31c6cac7450266dade6e678c8aa6.zip
opensim-SC_OLD-2f6d401db13b31c6cac7450266dade6e678c8aa6.tar.gz
opensim-SC_OLD-2f6d401db13b31c6cac7450266dade6e678c8aa6.tar.bz2
opensim-SC_OLD-2f6d401db13b31c6cac7450266dade6e678c8aa6.tar.xz
Merge remote branch 'origin/0.6.9' into 0.6.9-post-fixes
This chiefly brings in the new sqlite adaptor and renames the old one to SQLiteLegacy Existing configuratios should continue to work without changes unless you are using Mac OSX and mono 2.6 or later, in which case you will need to enable SQLiteLegacy instead. Please se the instructions in OpenSim.ini.example and the relevant config/include .ini files Conflicts: OpenSim/Framework/Servers/VersionInfo.cs OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
Diffstat (limited to 'OpenSim/Data/SQLite')
-rw-r--r--OpenSim/Data/SQLite/SQLiteAssetData.cs4
-rw-r--r--OpenSim/Data/SQLite/SQLiteEstateData.cs44
-rw-r--r--OpenSim/Data/SQLite/SQLiteFramework.cs20
-rw-r--r--OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs23
-rw-r--r--OpenSim/Data/SQLite/SQLiteInventoryStore.cs15
-rw-r--r--OpenSim/Data/SQLite/SQLiteManager.cs8
-rw-r--r--OpenSim/Data/SQLite/SQLiteRegionData.cs261
-rw-r--r--OpenSim/Data/SQLite/SQLiteUserData.cs33
-rw-r--r--OpenSim/Data/SQLite/SQLiteUtils.cs2
-rw-r--r--OpenSim/Data/SQLite/SQLiteXInventoryData.cs6
10 files changed, 255 insertions, 161 deletions
diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs
index c52f60b..373c903 100644
--- a/OpenSim/Data/SQLite/SQLiteAssetData.cs
+++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs
@@ -30,7 +30,7 @@ using System.Data;
30using System.Reflection; 30using System.Reflection;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using log4net; 32using log4net;
33using Mono.Data.SqliteClient; 33using Mono.Data.Sqlite;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36 36
@@ -339,4 +339,4 @@ namespace OpenSim.Data.SQLite
339 339
340 #endregion 340 #endregion
341 } 341 }
342} \ No newline at end of file 342}
diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs
index 1be99ee..643e55d 100644
--- a/OpenSim/Data/SQLite/SQLiteEstateData.cs
+++ b/OpenSim/Data/SQLite/SQLiteEstateData.cs
@@ -30,7 +30,7 @@ using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Reflection; 31using System.Reflection;
32using log4net; 32using log4net;
33using Mono.Data.SqliteClient; 33using Mono.Data.Sqlite;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Region.Framework.Interfaces; 36using OpenSim.Region.Framework.Interfaces;
@@ -62,8 +62,8 @@ namespace OpenSim.Data.SQLite
62 Migration m = new Migration(m_connection, assem, "EstateStore"); 62 Migration m = new Migration(m_connection, assem, "EstateStore");
63 m.Update(); 63 m.Update();
64 64
65 m_connection.Close(); 65 //m_connection.Close();
66 m_connection.Open(); 66 // m_connection.Open();
67 67
68 Type t = typeof(EstateSettings); 68 Type t = typeof(EstateSettings);
69 m_Fields = t.GetFields(BindingFlags.NonPublic | 69 m_Fields = t.GetFields(BindingFlags.NonPublic |
@@ -90,7 +90,7 @@ namespace OpenSim.Data.SQLite
90 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); 90 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
91 91
92 cmd.CommandText = sql; 92 cmd.CommandText = sql;
93 cmd.Parameters.Add(":RegionID", regionID.ToString()); 93 cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
94 94
95 IDataReader r = cmd.ExecuteReader(); 95 IDataReader r = cmd.ExecuteReader();
96 96
@@ -140,13 +140,13 @@ namespace OpenSim.Data.SQLite
140 if (m_FieldMap[name].GetValue(es) is bool) 140 if (m_FieldMap[name].GetValue(es) is bool)
141 { 141 {
142 if ((bool)m_FieldMap[name].GetValue(es)) 142 if ((bool)m_FieldMap[name].GetValue(es))
143 cmd.Parameters.Add(":"+name, "1"); 143 cmd.Parameters.AddWithValue(":"+name, "1");
144 else 144 else
145 cmd.Parameters.Add(":"+name, "0"); 145 cmd.Parameters.AddWithValue(":"+name, "0");
146 } 146 }
147 else 147 else
148 { 148 {
149 cmd.Parameters.Add(":"+name, m_FieldMap[name].GetValue(es).ToString()); 149 cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
150 } 150 }
151 } 151 }
152 152
@@ -164,8 +164,8 @@ namespace OpenSim.Data.SQLite
164 r.Close(); 164 r.Close();
165 165
166 cmd.CommandText = "insert into estate_map values (:RegionID, :EstateID)"; 166 cmd.CommandText = "insert into estate_map values (:RegionID, :EstateID)";
167 cmd.Parameters.Add(":RegionID", regionID.ToString()); 167 cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
168 cmd.Parameters.Add(":EstateID", es.EstateID.ToString()); 168 cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
169 169
170 // This will throw on dupe key 170 // This will throw on dupe key
171 try 171 try
@@ -180,7 +180,7 @@ namespace OpenSim.Data.SQLite
180 // 180 //
181 cmd.Parameters.Clear(); 181 cmd.Parameters.Clear();
182 cmd.CommandText = "insert into estateban select "+es.EstateID.ToString()+", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = :UUID"; 182 cmd.CommandText = "insert into estateban select "+es.EstateID.ToString()+", bannedUUID, bannedIp, bannedIpHostMask, '' from regionban where regionban.regionUUID = :UUID";
183 cmd.Parameters.Add(":UUID", regionID.ToString()); 183 cmd.Parameters.AddWithValue(":UUID", regionID.ToString());
184 184
185 try 185 try
186 { 186 {
@@ -222,13 +222,13 @@ namespace OpenSim.Data.SQLite
222 if (m_FieldMap[name].GetValue(es) is bool) 222 if (m_FieldMap[name].GetValue(es) is bool)
223 { 223 {
224 if ((bool)m_FieldMap[name].GetValue(es)) 224 if ((bool)m_FieldMap[name].GetValue(es))
225 cmd.Parameters.Add(":"+name, "1"); 225 cmd.Parameters.AddWithValue(":"+name, "1");
226 else 226 else
227 cmd.Parameters.Add(":"+name, "0"); 227 cmd.Parameters.AddWithValue(":"+name, "0");
228 } 228 }
229 else 229 else
230 { 230 {
231 cmd.Parameters.Add(":"+name, m_FieldMap[name].GetValue(es).ToString()); 231 cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
232 } 232 }
233 } 233 }
234 234
@@ -247,7 +247,7 @@ namespace OpenSim.Data.SQLite
247 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); 247 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
248 248
249 cmd.CommandText = "select bannedUUID from estateban where EstateID = :EstateID"; 249 cmd.CommandText = "select bannedUUID from estateban where EstateID = :EstateID";
250 cmd.Parameters.Add(":EstateID", es.EstateID); 250 cmd.Parameters.AddWithValue(":EstateID", es.EstateID);
251 251
252 IDataReader r = cmd.ExecuteReader(); 252 IDataReader r = cmd.ExecuteReader();
253 253
@@ -271,7 +271,7 @@ namespace OpenSim.Data.SQLite
271 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); 271 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
272 272
273 cmd.CommandText = "delete from estateban where EstateID = :EstateID"; 273 cmd.CommandText = "delete from estateban where EstateID = :EstateID";
274 cmd.Parameters.Add(":EstateID", es.EstateID.ToString()); 274 cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
275 275
276 cmd.ExecuteNonQuery(); 276 cmd.ExecuteNonQuery();
277 277
@@ -281,8 +281,8 @@ namespace OpenSim.Data.SQLite
281 281
282 foreach (EstateBan b in es.EstateBans) 282 foreach (EstateBan b in es.EstateBans)
283 { 283 {
284 cmd.Parameters.Add(":EstateID", es.EstateID.ToString()); 284 cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
285 cmd.Parameters.Add(":bannedUUID", b.BannedUserID.ToString()); 285 cmd.Parameters.AddWithValue(":bannedUUID", b.BannedUserID.ToString());
286 286
287 cmd.ExecuteNonQuery(); 287 cmd.ExecuteNonQuery();
288 cmd.Parameters.Clear(); 288 cmd.Parameters.Clear();
@@ -294,7 +294,7 @@ namespace OpenSim.Data.SQLite
294 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); 294 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
295 295
296 cmd.CommandText = "delete from "+table+" where EstateID = :EstateID"; 296 cmd.CommandText = "delete from "+table+" where EstateID = :EstateID";
297 cmd.Parameters.Add(":EstateID", EstateID.ToString()); 297 cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
298 298
299 cmd.ExecuteNonQuery(); 299 cmd.ExecuteNonQuery();
300 300
@@ -304,8 +304,8 @@ namespace OpenSim.Data.SQLite
304 304
305 foreach (UUID uuid in data) 305 foreach (UUID uuid in data)
306 { 306 {
307 cmd.Parameters.Add(":EstateID", EstateID.ToString()); 307 cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
308 cmd.Parameters.Add(":uuid", uuid.ToString()); 308 cmd.Parameters.AddWithValue(":uuid", uuid.ToString());
309 309
310 cmd.ExecuteNonQuery(); 310 cmd.ExecuteNonQuery();
311 cmd.Parameters.Clear(); 311 cmd.Parameters.Clear();
@@ -319,7 +319,7 @@ namespace OpenSim.Data.SQLite
319 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand(); 319 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
320 320
321 cmd.CommandText = "select uuid from "+table+" where EstateID = :EstateID"; 321 cmd.CommandText = "select uuid from "+table+" where EstateID = :EstateID";
322 cmd.Parameters.Add(":EstateID", EstateID); 322 cmd.Parameters.AddWithValue(":EstateID", EstateID);
323 323
324 IDataReader r = cmd.ExecuteReader(); 324 IDataReader r = cmd.ExecuteReader();
325 325
@@ -337,4 +337,4 @@ namespace OpenSim.Data.SQLite
337 return uuids.ToArray(); 337 return uuids.ToArray();
338 } 338 }
339 } 339 }
340} 340} \ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteFramework.cs b/OpenSim/Data/SQLite/SQLiteFramework.cs
index 12b2750..9567727 100644
--- a/OpenSim/Data/SQLite/SQLiteFramework.cs
+++ b/OpenSim/Data/SQLite/SQLiteFramework.cs
@@ -31,7 +31,7 @@ using System.Collections.Generic;
31using System.Data; 31using System.Data;
32using OpenMetaverse; 32using OpenMetaverse;
33using OpenSim.Framework; 33using OpenSim.Framework;
34using Mono.Data.SqliteClient; 34using Mono.Data.Sqlite;
35 35
36namespace OpenSim.Data.SQLite 36namespace OpenSim.Data.SQLite
37{ 37{
@@ -65,12 +65,18 @@ namespace OpenSim.Data.SQLite
65 65
66 protected IDataReader ExecuteReader(SqliteCommand cmd) 66 protected IDataReader ExecuteReader(SqliteCommand cmd)
67 { 67 {
68 SqliteConnection newConnection = 68 lock (m_Connection)
69 (SqliteConnection)((ICloneable)m_Connection).Clone(); 69 {
70 newConnection.Open(); 70 //SqliteConnection newConnection =
71 // (SqliteConnection)((ICloneable)connection).Clone();
72 //newConnection.Open();
71 73
72 cmd.Connection = newConnection; 74 //cmd.Connection = newConnection;
73 return cmd.ExecuteReader(); 75 cmd.Connection = m_Connection;
76 //Console.WriteLine("XXX " + cmd.CommandText);
77
78 return cmd.ExecuteReader();
79 }
74 } 80 }
75 81
76 protected void CloseReaderCommand(SqliteCommand cmd) 82 protected void CloseReaderCommand(SqliteCommand cmd)
@@ -80,4 +86,4 @@ namespace OpenSim.Data.SQLite
80 cmd.Dispose(); 86 cmd.Dispose();
81 } 87 }
82 } 88 }
83} 89} \ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs b/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
index 8e91693..86eaca1 100644
--- a/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
+++ b/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
@@ -30,7 +30,7 @@ using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Reflection; 31using System.Reflection;
32using log4net; 32using log4net;
33using Mono.Data.SqliteClient; 33using Mono.Data.Sqlite;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Region.Framework.Interfaces; 36using OpenSim.Region.Framework.Interfaces;
@@ -54,10 +54,23 @@ namespace OpenSim.Data.SQLite
54 m_Realm = realm; 54 m_Realm = realm;
55 if (storeName != String.Empty) 55 if (storeName != String.Empty)
56 { 56 {
57 Assembly assem = GetType().Assembly; 57 m_Connection = new SqliteConnection(connectionString);
58 //Console.WriteLine(string.Format("OPENING CONNECTION FOR {0} USING {1}", storeName, connectionString));
59 m_Connection.Open();
58 60
59 Migration m = new Migration(m_Connection, assem, storeName); 61 if (storeName != String.Empty)
60 m.Update(); 62 {
63 Assembly assem = GetType().Assembly;
64 //SqliteConnection newConnection =
65 // (SqliteConnection)((ICloneable)m_Connection).Clone();
66 //newConnection.Open();
67
68 //Migration m = new Migration(newConnection, assem, storeName);
69 Migration m = new Migration(m_Connection, assem, storeName);
70 m.Update();
71 //newConnection.Close();
72 //newConnection.Dispose();
73 }
61 } 74 }
62 75
63 Type t = typeof(T); 76 Type t = typeof(T);
@@ -180,7 +193,7 @@ namespace OpenSim.Data.SQLite
180 result.Add(row); 193 result.Add(row);
181 } 194 }
182 195
183 CloseReaderCommand(cmd); 196 //CloseCommand(cmd);
184 197
185 return result.ToArray(); 198 return result.ToArray();
186 } 199 }
diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
index 64591fd..9ce21b1 100644
--- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
+++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
@@ -30,7 +30,7 @@ using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Reflection; 31using System.Reflection;
32using log4net; 32using log4net;
33using Mono.Data.SqliteClient; 33using Mono.Data.Sqlite;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36 36
@@ -88,15 +88,17 @@ namespace OpenSim.Data.SQLite
88 invFoldersDa = new SqliteDataAdapter(foldersSelectCmd); 88 invFoldersDa = new SqliteDataAdapter(foldersSelectCmd);
89 89
90 ds = new DataSet(); 90 ds = new DataSet();
91 91
92 ds.Tables.Add(createInventoryFoldersTable()); 92 ds.Tables.Add(createInventoryFoldersTable());
93 invFoldersDa.Fill(ds.Tables["inventoryfolders"]); 93 invFoldersDa.Fill(ds.Tables["inventoryfolders"]);
94 setupFoldersCommands(invFoldersDa, conn); 94 setupFoldersCommands(invFoldersDa, conn);
95 CreateDataSetMapping(invFoldersDa, "inventoryfolders");
95 m_log.Info("[INVENTORY DB]: Populated Inventory Folders Definitions"); 96 m_log.Info("[INVENTORY DB]: Populated Inventory Folders Definitions");
96 97
97 ds.Tables.Add(createInventoryItemsTable()); 98 ds.Tables.Add(createInventoryItemsTable());
98 invItemsDa.Fill(ds.Tables["inventoryitems"]); 99 invItemsDa.Fill(ds.Tables["inventoryitems"]);
99 setupItemsCommands(invItemsDa, conn); 100 setupItemsCommands(invItemsDa, conn);
101 CreateDataSetMapping(invItemsDa, "inventoryitems");
100 m_log.Info("[INVENTORY DB]: Populated Inventory Items Definitions"); 102 m_log.Info("[INVENTORY DB]: Populated Inventory Items Definitions");
101 103
102 ds.AcceptChanges(); 104 ds.AcceptChanges();
@@ -721,6 +723,15 @@ namespace OpenSim.Data.SQLite
721 * 723 *
722 **********************************************************************/ 724 **********************************************************************/
723 725
726 protected void CreateDataSetMapping(IDataAdapter da, string tableName)
727 {
728 ITableMapping dbMapping = da.TableMappings.Add(tableName, tableName);
729 foreach (DataColumn col in ds.Tables[tableName].Columns)
730 {
731 dbMapping.ColumnMappings.Add(col.ColumnName, col.ColumnName);
732 }
733 }
734
724 /// <summary> 735 /// <summary>
725 /// Create the "inventoryitems" table 736 /// Create the "inventoryitems" table
726 /// </summary> 737 /// </summary>
diff --git a/OpenSim/Data/SQLite/SQLiteManager.cs b/OpenSim/Data/SQLite/SQLiteManager.cs
index b6d4a1c..7dcd323 100644
--- a/OpenSim/Data/SQLite/SQLiteManager.cs
+++ b/OpenSim/Data/SQLite/SQLiteManager.cs
@@ -28,9 +28,9 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Data.SQLite;
32using System.Reflection; 31using System.Reflection;
33using log4net; 32using log4net;
33using Mono.Data.Sqlite;
34using OpenMetaverse; 34using OpenMetaverse;
35 35
36namespace OpenSim.Data.SQLite 36namespace OpenSim.Data.SQLite
@@ -66,7 +66,7 @@ namespace OpenSim.Data.SQLite
66 connectionString = "URI=file:GridServerSqlite.db;"; 66 connectionString = "URI=file:GridServerSqlite.db;";
67 } 67 }
68 68
69 dbcon = new SQLiteConnection(connectionString); 69 dbcon = new SqliteConnection(connectionString);
70 70
71 dbcon.Open(); 71 dbcon.Open();
72 } 72 }
@@ -93,11 +93,11 @@ namespace OpenSim.Data.SQLite
93 /// <returns>A SQLite DB Command</returns> 93 /// <returns>A SQLite DB Command</returns>
94 public IDbCommand Query(string sql, Dictionary<string, string> parameters) 94 public IDbCommand Query(string sql, Dictionary<string, string> parameters)
95 { 95 {
96 SQLiteCommand dbcommand = (SQLiteCommand) dbcon.CreateCommand(); 96 SqliteCommand dbcommand = (SqliteCommand) dbcon.CreateCommand();
97 dbcommand.CommandText = sql; 97 dbcommand.CommandText = sql;
98 foreach (KeyValuePair<string, string> param in parameters) 98 foreach (KeyValuePair<string, string> param in parameters)
99 { 99 {
100 SQLiteParameter paramx = new SQLiteParameter(param.Key, param.Value); 100 SqliteParameter paramx = new SqliteParameter(param.Key, param.Value);
101 dbcommand.Parameters.Add(paramx); 101 dbcommand.Parameters.Add(paramx);
102 } 102 }
103 103
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index 5a4ee2a..fe6e919 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs
@@ -32,7 +32,7 @@ using System.Drawing;
32using System.IO; 32using System.IO;
33using System.Reflection; 33using System.Reflection;
34using log4net; 34using log4net;
35using Mono.Data.SqliteClient; 35using Mono.Data.Sqlite;
36using OpenMetaverse; 36using OpenMetaverse;
37using OpenSim.Framework; 37using OpenSim.Framework;
38using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
@@ -87,119 +87,142 @@ namespace OpenSim.Data.SQLite
87 /// <param name="connectionString">the connection string</param> 87 /// <param name="connectionString">the connection string</param>
88 public void Initialise(string connectionString) 88 public void Initialise(string connectionString)
89 { 89 {
90 m_connectionString = connectionString; 90 try
91 {
92 m_connectionString = connectionString;
91 93
92 ds = new DataSet(); 94 ds = new DataSet("Region");
93 95
94 m_log.Info("[REGION DB]: Sqlite - connecting: " + connectionString); 96 m_log.Info("[REGION DB]: Sqlite - connecting: " + connectionString);
95 m_conn = new SqliteConnection(m_connectionString); 97 m_conn = new SqliteConnection(m_connectionString);
96 m_conn.Open(); 98 m_conn.Open();
97 99
100 SqliteCommand primSelectCmd = new SqliteCommand(primSelect, m_conn);
101 primDa = new SqliteDataAdapter(primSelectCmd);
98 102
103 SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, m_conn);
104 shapeDa = new SqliteDataAdapter(shapeSelectCmd);
105 // SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);
99 106
100 SqliteCommand primSelectCmd = new SqliteCommand(primSelect, m_conn); 107 SqliteCommand itemsSelectCmd = new SqliteCommand(itemsSelect, m_conn);
101 primDa = new SqliteDataAdapter(primSelectCmd); 108 itemsDa = new SqliteDataAdapter(itemsSelectCmd);
102 // SqliteCommandBuilder primCb = new SqliteCommandBuilder(primDa);
103 109
104 SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, m_conn); 110 SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, m_conn);
105 shapeDa = new SqliteDataAdapter(shapeSelectCmd); 111 terrainDa = new SqliteDataAdapter(terrainSelectCmd);
106 // SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);
107 112
108 SqliteCommand itemsSelectCmd = new SqliteCommand(itemsSelect, m_conn); 113 SqliteCommand landSelectCmd = new SqliteCommand(landSelect, m_conn);
109 itemsDa = new SqliteDataAdapter(itemsSelectCmd); 114 landDa = new SqliteDataAdapter(landSelectCmd);
110 115
111 SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, m_conn); 116 SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn);
112 terrainDa = new SqliteDataAdapter(terrainSelectCmd); 117 landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd);
113 118
114 SqliteCommand landSelectCmd = new SqliteCommand(landSelect, m_conn); 119 SqliteCommand regionSettingsSelectCmd = new SqliteCommand(regionSettingsSelect, m_conn);
115 landDa = new SqliteDataAdapter(landSelectCmd); 120 regionSettingsDa = new SqliteDataAdapter(regionSettingsSelectCmd);
121 // This actually does the roll forward assembly stuff
122 Assembly assem = GetType().Assembly;
123 Migration m = new Migration(m_conn, assem, "RegionStore");
124 m.Update();
116 125
117 SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn); 126 lock (ds)
118 landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd); 127 {
128 ds.Tables.Add(createPrimTable());
129 setupPrimCommands(primDa, m_conn);
119 130
120 SqliteCommand regionSettingsSelectCmd = new SqliteCommand(regionSettingsSelect, m_conn); 131 ds.Tables.Add(createShapeTable());
121 regionSettingsDa = new SqliteDataAdapter(regionSettingsSelectCmd); 132 setupShapeCommands(shapeDa, m_conn);
122 // This actually does the roll forward assembly stuff
123 Assembly assem = GetType().Assembly;
124 Migration m = new Migration(m_conn, assem, "RegionStore");
125 m.Update();
126 133
127 lock (ds) 134 ds.Tables.Add(createItemsTable());
128 { 135 setupItemsCommands(itemsDa, m_conn);
129 ds.Tables.Add(createPrimTable());
130 setupPrimCommands(primDa, m_conn);
131 primDa.Fill(ds.Tables["prims"]);
132 136
133 ds.Tables.Add(createShapeTable()); 137 ds.Tables.Add(createTerrainTable());
134 setupShapeCommands(shapeDa, m_conn); 138 setupTerrainCommands(terrainDa, m_conn);
135 139
136 ds.Tables.Add(createItemsTable()); 140 ds.Tables.Add(createLandTable());
137 setupItemsCommands(itemsDa, m_conn); 141 setupLandCommands(landDa, m_conn);
138 itemsDa.Fill(ds.Tables["primitems"]);
139 142
140 ds.Tables.Add(createTerrainTable()); 143 ds.Tables.Add(createLandAccessListTable());
141 setupTerrainCommands(terrainDa, m_conn); 144 setupLandAccessCommands(landAccessListDa, m_conn);
142 145
143 ds.Tables.Add(createLandTable()); 146 ds.Tables.Add(createRegionSettingsTable());
144 setupLandCommands(landDa, m_conn); 147 setupRegionSettingsCommands(regionSettingsDa, m_conn);
145 148
146 ds.Tables.Add(createLandAccessListTable()); 149 // WORKAROUND: This is a work around for sqlite on
147 setupLandAccessCommands(landAccessListDa, m_conn); 150 // windows, which gets really unhappy with blob columns
151 // that have no sample data in them. At some point we
152 // need to actually find a proper way to handle this.
153 try
154 {
155 primDa.Fill(ds.Tables["prims"]);
156 }
157 catch (Exception)
158 {
159 m_log.Info("[REGION DB]: Caught fill error on prims table");
160 }
148 161
149 ds.Tables.Add(createRegionSettingsTable()); 162 try
150 163 {
151 setupRegionSettingsCommands(regionSettingsDa, m_conn); 164 shapeDa.Fill(ds.Tables["primshapes"]);
165 }
166 catch (Exception)
167 {
168 m_log.Info("[REGION DB]: Caught fill error on primshapes table");
169 }
152 170
153 // WORKAROUND: This is a work around for sqlite on 171 try
154 // windows, which gets really unhappy with blob columns 172 {
155 // that have no sample data in them. At some point we 173 terrainDa.Fill(ds.Tables["terrain"]);
156 // need to actually find a proper way to handle this. 174 }
157 try 175 catch (Exception)
158 { 176 {
159 shapeDa.Fill(ds.Tables["primshapes"]); 177 m_log.Info("[REGION DB]: Caught fill error on terrain table");
160 } 178 }
161 catch (Exception)
162 {
163 m_log.Info("[REGION DB]: Caught fill error on primshapes table");
164 }
165 179
166 try 180 try
167 { 181 {
168 terrainDa.Fill(ds.Tables["terrain"]); 182 landDa.Fill(ds.Tables["land"]);
169 } 183 }
170 catch (Exception) 184 catch (Exception)
171 { 185 {
172 m_log.Info("[REGION DB]: Caught fill error on terrain table"); 186 m_log.Info("[REGION DB]: Caught fill error on land table");
173 } 187 }
174 188
175 try 189 try
176 { 190 {
177 landDa.Fill(ds.Tables["land"]); 191 landAccessListDa.Fill(ds.Tables["landaccesslist"]);
178 } 192 }
179 catch (Exception) 193 catch (Exception)
180 { 194 {
181 m_log.Info("[REGION DB]: Caught fill error on land table"); 195 m_log.Info("[REGION DB]: Caught fill error on landaccesslist table");
182 } 196 }
183 197
184 try 198 try
185 { 199 {
186 landAccessListDa.Fill(ds.Tables["landaccesslist"]); 200 regionSettingsDa.Fill(ds.Tables["regionsettings"]);
187 } 201 }
188 catch (Exception) 202 catch (Exception)
189 { 203 {
190 m_log.Info("[REGION DB]: Caught fill error on landaccesslist table"); 204 m_log.Info("[REGION DB]: Caught fill error on regionsettings table");
191 } 205 }
192 206
193 try 207 // We have to create a data set mapping for every table, otherwise the IDataAdaptor.Update() will not populate rows with values!
194 { 208 // Not sure exactly why this is - this kind of thing was not necessary before - justincc 20100409
195 regionSettingsDa.Fill(ds.Tables["regionsettings"]); 209 // Possibly because we manually set up our own DataTables before connecting to the database
196 } 210 CreateDataSetMapping(primDa, "prims");
197 catch (Exception) 211 CreateDataSetMapping(shapeDa, "primshapes");
198 { 212 CreateDataSetMapping(itemsDa, "primitems");
199 m_log.Info("[REGION DB]: Caught fill error on regionsettings table"); 213 CreateDataSetMapping(terrainDa, "terrain");
214 CreateDataSetMapping(landDa, "land");
215 CreateDataSetMapping(landAccessListDa, "landaccesslist");
216 CreateDataSetMapping(regionSettingsDa, "regionsettings");
200 } 217 }
201 return;
202 } 218 }
219 catch (Exception e)
220 {
221 m_log.Error(e);
222 Environment.Exit(23);
223 }
224
225 return;
203 } 226 }
204 227
205 public void Dispose() 228 public void Dispose()
@@ -594,7 +617,7 @@ namespace OpenSim.Data.SQLite
594 } 617 }
595 } 618 }
596 } 619 }
597 rev = (int) row["Revision"]; 620 rev = Convert.ToInt32(row["Revision"]);
598 } 621 }
599 else 622 else
600 { 623 {
@@ -746,6 +769,7 @@ namespace OpenSim.Data.SQLite
746 /// </summary> 769 /// </summary>
747 public void Commit() 770 public void Commit()
748 { 771 {
772 //m_log.Debug("[SQLITE]: Starting commit");
749 lock (ds) 773 lock (ds)
750 { 774 {
751 primDa.Update(ds, "prims"); 775 primDa.Update(ds, "prims");
@@ -760,18 +784,11 @@ namespace OpenSim.Data.SQLite
760 { 784 {
761 regionSettingsDa.Update(ds, "regionsettings"); 785 regionSettingsDa.Update(ds, "regionsettings");
762 } 786 }
763 catch (SqliteExecutionException SqlEx) 787 catch (SqliteException SqlEx)
764 { 788 {
765 if (SqlEx.Message.Contains("logic error")) 789 throw new Exception(
766 { 790 "There was a SQL error or connection string configuration error when saving the region settings. This could be a bug, it could also happen if ConnectionString is defined in the [DatabaseService] section of StandaloneCommon.ini in the config_include folder. This could also happen if the config_include folder doesn't exist or if the OpenSim.ini [Architecture] section isn't set. If this is your first time running OpenSimulator, please restart the simulator and bug a developer to fix this!",
767 throw new Exception( 791 SqlEx);
768 "There was a SQL error or connection string configuration error when saving the region settings. This could be a bug, it could also happen if ConnectionString is defined in the [DatabaseService] section of StandaloneCommon.ini in the config_include folder. This could also happen if the config_include folder doesn't exist or if the OpenSim.ini [Architecture] section isn't set. If this is your first time running OpenSimulator, please restart the simulator and bug a developer to fix this!",
769 SqlEx);
770 }
771 else
772 {
773 throw SqlEx;
774 }
775 } 792 }
776 ds.AcceptChanges(); 793 ds.AcceptChanges();
777 } 794 }
@@ -793,6 +810,15 @@ namespace OpenSim.Data.SQLite
793 * 810 *
794 **********************************************************************/ 811 **********************************************************************/
795 812
813 protected void CreateDataSetMapping(IDataAdapter da, string tableName)
814 {
815 ITableMapping dbMapping = da.TableMappings.Add(tableName, tableName);
816 foreach (DataColumn col in ds.Tables[tableName].Columns)
817 {
818 dbMapping.ColumnMappings.Add(col.ColumnName, col.ColumnName);
819 }
820 }
821
796 /// <summary> 822 /// <summary>
797 /// 823 ///
798 /// </summary> 824 /// </summary>
@@ -1888,7 +1914,7 @@ namespace OpenSim.Data.SQLite
1888 /// <param name="items"></param> 1914 /// <param name="items"></param>
1889 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) 1915 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
1890 { 1916 {
1891 m_log.InfoFormat("[REGION DB]: Entered StorePrimInventory with prim ID {0}", primID); 1917 //m_log.InfoFormat("[REGION DB]: Entered StorePrimInventory with prim ID {0}", primID);
1892 1918
1893 DataTable dbItems = ds.Tables["primitems"]; 1919 DataTable dbItems = ds.Tables["primitems"];
1894 1920
@@ -1955,6 +1981,7 @@ namespace OpenSim.Data.SQLite
1955 sql += ") values (:"; 1981 sql += ") values (:";
1956 sql += String.Join(", :", cols); 1982 sql += String.Join(", :", cols);
1957 sql += ")"; 1983 sql += ")";
1984 //m_log.DebugFormat("[SQLITE]: Created insert command {0}", sql);
1958 SqliteCommand cmd = new SqliteCommand(sql); 1985 SqliteCommand cmd = new SqliteCommand(sql);
1959 1986
1960 // this provides the binding for all our parameters, so 1987 // this provides the binding for all our parameters, so
@@ -2250,6 +2277,36 @@ namespace OpenSim.Data.SQLite
2250 return DbType.String; 2277 return DbType.String;
2251 } 2278 }
2252 } 2279 }
2280
2281 static void PrintDataSet(DataSet ds)
2282 {
2283 // Print out any name and extended properties.
2284 Console.WriteLine("DataSet is named: {0}", ds.DataSetName);
2285 foreach (System.Collections.DictionaryEntry de in ds.ExtendedProperties)
2286 {
2287 Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
2288 }
2289 Console.WriteLine();
2290 foreach (DataTable dt in ds.Tables)
2291 {
2292 Console.WriteLine("=> {0} Table:", dt.TableName);
2293 // Print out the column names.
2294 for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
2295 {
2296 Console.Write(dt.Columns[curCol].ColumnName + "\t");
2297 }
2298 Console.WriteLine("\n----------------------------------");
2299 // Print the DataTable.
2300 for (int curRow = 0; curRow < dt.Rows.Count; curRow++)
2301 {
2302 for (int curCol = 0; curCol < dt.Columns.Count; curCol++)
2303 {
2304 Console.Write(dt.Rows[curRow][curCol].ToString() + "\t");
2305 }
2306 Console.WriteLine();
2307 }
2308 }
2309 }
2253 2310
2254 } 2311 }
2255} 2312}
diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs
index caddcf8..ea755b0 100644
--- a/OpenSim/Data/SQLite/SQLiteUserData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserData.cs
@@ -30,7 +30,7 @@ using System.Collections.Generic;
30using System.Data; 30using System.Data;
31using System.Reflection; 31using System.Reflection;
32using log4net; 32using log4net;
33using Mono.Data.SqliteClient; 33using Mono.Data.Sqlite;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
36 36
@@ -115,15 +115,19 @@ namespace OpenSim.Data.SQLite
115 115
116 setupUserCommands(da, conn); 116 setupUserCommands(da, conn);
117 da.Fill(ds.Tables["users"]); 117 da.Fill(ds.Tables["users"]);
118 CreateDataSetMapping(da, "users");
118 119
119 setupAgentCommands(dua, conn); 120 setupAgentCommands(dua, conn);
120 dua.Fill(ds.Tables["useragents"]); 121 dua.Fill(ds.Tables["useragents"]);
122 CreateDataSetMapping(dua, "useragents");
121 123
122 setupUserFriendsCommands(daf, conn); 124 setupUserFriendsCommands(daf, conn);
123 daf.Fill(ds.Tables["userfriends"]); 125 daf.Fill(ds.Tables["userfriends"]);
126 CreateDataSetMapping(daf, "userfriends");
124 127
125 setupAvatarAppearanceCommands(daa, conn); 128 setupAvatarAppearanceCommands(daa, conn);
126 daa.Fill(ds.Tables["avatarappearance"]); 129 daa.Fill(ds.Tables["avatarappearance"]);
130 CreateDataSetMapping(daa, "avatarappearance");
127 } 131 }
128 132
129 return; 133 return;
@@ -706,15 +710,10 @@ namespace OpenSim.Data.SQLite
706 aa.SkirtItem = new UUID((String)row["SkirtItem"]); 710 aa.SkirtItem = new UUID((String)row["SkirtItem"]);
707 aa.SkirtAsset = new UUID((String)row["SkirtAsset"]); 711 aa.SkirtAsset = new UUID((String)row["SkirtAsset"]);
708 712
709 // Ewe Loon 713 byte[] texture = (byte[])row["Texture"];
710 // Used Base64String because for some reason it wont accept using Byte[] (which works in Region date)
711
712 String str = (String)row["Texture"];
713 byte[] texture = Convert.FromBase64String(str);
714 aa.Texture = new Primitive.TextureEntry(texture, 0, texture.Length); 714 aa.Texture = new Primitive.TextureEntry(texture, 0, texture.Length);
715 715
716 str = (String)row["VisualParams"]; 716 byte[] VisualParams = (byte[])row["VisualParams"];
717 byte[] VisualParams = Convert.FromBase64String(str);
718 aa.VisualParams = VisualParams; 717 aa.VisualParams = VisualParams;
719 718
720 aa.Serial = Convert.ToInt32(row["Serial"]); 719 aa.Serial = Convert.ToInt32(row["Serial"]);
@@ -793,6 +792,15 @@ namespace OpenSim.Data.SQLite
793 * 792 *
794 **********************************************************************/ 793 **********************************************************************/
795 794
795 protected void CreateDataSetMapping(IDataAdapter da, string tableName)
796 {
797 ITableMapping dbMapping = da.TableMappings.Add(tableName, tableName);
798 foreach (DataColumn col in ds.Tables[tableName].Columns)
799 {
800 dbMapping.ColumnMappings.Add(col.ColumnName, col.ColumnName);
801 }
802 }
803
796 /// <summary> 804 /// <summary>
797 /// Create the "users" table 805 /// Create the "users" table
798 /// </summary> 806 /// </summary>
@@ -924,9 +932,8 @@ namespace OpenSim.Data.SQLite
924 SQLiteUtil.createCol(aa, "SkirtItem", typeof(String)); 932 SQLiteUtil.createCol(aa, "SkirtItem", typeof(String));
925 SQLiteUtil.createCol(aa, "SkirtAsset", typeof(String)); 933 SQLiteUtil.createCol(aa, "SkirtAsset", typeof(String));
926 934
927 // Used Base64String because for some reason it wont accept using Byte[] (which works in Region date) 935 SQLiteUtil.createCol(aa, "Texture", typeof (Byte[]));
928 SQLiteUtil.createCol(aa, "Texture", typeof (String)); 936 SQLiteUtil.createCol(aa, "VisualParams", typeof (Byte[]));
929 SQLiteUtil.createCol(aa, "VisualParams", typeof (String));
930 937
931 SQLiteUtil.createCol(aa, "Serial", typeof(Int32)); 938 SQLiteUtil.createCol(aa, "Serial", typeof(Int32));
932 SQLiteUtil.createCol(aa, "AvatarHeight", typeof(Double)); 939 SQLiteUtil.createCol(aa, "AvatarHeight", typeof(Double));
@@ -1090,8 +1097,8 @@ namespace OpenSim.Data.SQLite
1090 row["SkirtAsset"] = appearance.SkirtAsset.ToString(); 1097 row["SkirtAsset"] = appearance.SkirtAsset.ToString();
1091 1098
1092 // Used Base64String because for some reason it wont accept using Byte[] (which works in Region date) 1099 // Used Base64String because for some reason it wont accept using Byte[] (which works in Region date)
1093 row["Texture"] = Convert.ToBase64String(appearance.Texture.GetBytes()); 1100 row["Texture"] = appearance.Texture.GetBytes();
1094 row["VisualParams"] = Convert.ToBase64String(appearance.VisualParams); 1101 row["VisualParams"] = appearance.VisualParams;
1095 1102
1096 row["Serial"] = appearance.Serial; 1103 row["Serial"] = appearance.Serial;
1097 row["AvatarHeight"] = appearance.AvatarHeight; 1104 row["AvatarHeight"] = appearance.AvatarHeight;
diff --git a/OpenSim/Data/SQLite/SQLiteUtils.cs b/OpenSim/Data/SQLite/SQLiteUtils.cs
index 4a835ce..07c6b69 100644
--- a/OpenSim/Data/SQLite/SQLiteUtils.cs
+++ b/OpenSim/Data/SQLite/SQLiteUtils.cs
@@ -27,7 +27,7 @@
27 27
28using System; 28using System;
29using System.Data; 29using System.Data;
30using Mono.Data.SqliteClient; 30using Mono.Data.Sqlite;
31 31
32namespace OpenSim.Data.SQLite 32namespace OpenSim.Data.SQLite
33{ 33{
diff --git a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs
index 5c93f88..0d211b6 100644
--- a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs
+++ b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs
@@ -29,7 +29,7 @@ using System;
29using System.Data; 29using System.Data;
30using System.Reflection; 30using System.Reflection;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using Mono.Data.SqliteClient; 32using Mono.Data.Sqlite;
33using log4net; 33using log4net;
34using OpenMetaverse; 34using OpenMetaverse;
35using OpenSim.Framework; 35using OpenSim.Framework;
@@ -147,8 +147,8 @@ namespace OpenSim.Data.SQLite
147 } 147 }
148 148
149 reader.Close(); 149 reader.Close();
150 CloseReaderCommand(cmd); 150
151 151 //CloseCommand(cmd);
152 return perms; 152 return perms;
153 } 153 }
154 } 154 }