aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/SQLite
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-04-30 17:45:00 +0100
committerJustin Clark-Casey (justincc)2010-04-30 19:28:28 +0100
commit56fe4c24b8c67ec3b6a5a897c35ab19507bd1077 (patch)
tree8feccd68058c70da1b96d8b6e804aa4afa6dc723 /OpenSim/Data/SQLite
parentadd Mono.Data.Sqlite.dll (diff)
downloadopensim-SC-56fe4c24b8c67ec3b6a5a897c35ab19507bd1077.zip
opensim-SC-56fe4c24b8c67ec3b6a5a897c35ab19507bd1077.tar.gz
opensim-SC-56fe4c24b8c67ec3b6a5a897c35ab19507bd1077.tar.bz2
opensim-SC-56fe4c24b8c67ec3b6a5a897c35ab19507bd1077.tar.xz
rename SQLiteNG to SQLite and SQLite to SQLiteLegacy this seems the least evil way forward since mono 2.6 and later will see increasing usage, and this only works with what was
SQLiteNG MAC USERS WILL NEED TO CHANGE REFERENCES TO "OpenSim.Data.SQLite.dll" to "OpenSim.Data.SQLiteLegacy.dll" in OpenSim.ini and config-include/StandaloneCommon.ini (if using standalone) See the OpenSim.ini.example and StandaloneCommon.ini.example files for more details This commit also temporarily changes unsigned ParentEstateID values in the OpenSim.Data.Tests to signed temporarily, since the new plugin enforces creation of signed fields in the database (which is what the SQL actually specifies). And change data columns in sqlite is a pita.
Diffstat (limited to 'OpenSim/Data/SQLite')
-rw-r--r--OpenSim/Data/SQLite/SQLiteAssetData.cs4
-rw-r--r--OpenSim/Data/SQLite/SQLiteAuthenticationData.cs257
-rw-r--r--OpenSim/Data/SQLite/SQLiteEstateData.cs101
-rw-r--r--OpenSim/Data/SQLite/SQLiteFramework.cs29
-rw-r--r--OpenSim/Data/SQLite/SQLiteFriendsData.cs70
-rw-r--r--OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs26
-rw-r--r--OpenSim/Data/SQLite/SQLiteInventoryStore.cs25
-rw-r--r--OpenSim/Data/SQLite/SQLiteRegionData.cs259
-rw-r--r--OpenSim/Data/SQLite/SQLiteUserAccountData.cs81
-rw-r--r--OpenSim/Data/SQLite/SQLiteUtils.cs2
-rw-r--r--OpenSim/Data/SQLite/SQLiteXInventoryData.cs6
11 files changed, 732 insertions, 128 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/SQLiteAuthenticationData.cs b/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs
new file mode 100644
index 0000000..086ac0a
--- /dev/null
+++ b/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs
@@ -0,0 +1,257 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using Mono.Data.Sqlite;
35
36namespace OpenSim.Data.SQLite
37{
38 public class SQLiteAuthenticationData : SQLiteFramework, IAuthenticationData
39 {
40 private string m_Realm;
41 private List<string> m_ColumnNames;
42 private int m_LastExpire;
43 private string m_connectionString;
44
45 protected static SqliteConnection m_Connection;
46 private static bool m_initialized = false;
47
48 public SQLiteAuthenticationData(string connectionString, string realm)
49 : base(connectionString)
50 {
51 m_Realm = realm;
52 m_connectionString = connectionString;
53
54 if (!m_initialized)
55 {
56 m_Connection = new SqliteConnection(connectionString);
57 m_Connection.Open();
58
59 Migration m = new Migration(m_Connection, GetType().Assembly, "AuthStore");
60 m.Update();
61
62 m_initialized = true;
63 }
64 }
65
66 public AuthenticationData Get(UUID principalID)
67 {
68 AuthenticationData ret = new AuthenticationData();
69 ret.Data = new Dictionary<string, object>();
70
71 SqliteCommand cmd = new SqliteCommand("select * from `" + m_Realm + "` where UUID = :PrincipalID");
72 cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
73
74 IDataReader result = ExecuteReader(cmd, m_Connection);
75
76 try
77 {
78 if (result.Read())
79 {
80 ret.PrincipalID = principalID;
81
82 if (m_ColumnNames == null)
83 {
84 m_ColumnNames = new List<string>();
85
86 DataTable schemaTable = result.GetSchemaTable();
87 foreach (DataRow row in schemaTable.Rows)
88 m_ColumnNames.Add(row["ColumnName"].ToString());
89 }
90
91 foreach (string s in m_ColumnNames)
92 {
93 if (s == "UUID")
94 continue;
95
96 ret.Data[s] = result[s].ToString();
97 }
98
99 return ret;
100 }
101 else
102 {
103 return null;
104 }
105 }
106 catch
107 {
108 }
109 finally
110 {
111 //CloseCommand(cmd);
112 }
113
114 return null;
115 }
116
117 public bool Store(AuthenticationData data)
118 {
119 if (data.Data.ContainsKey("UUID"))
120 data.Data.Remove("UUID");
121
122 string[] fields = new List<string>(data.Data.Keys).ToArray();
123 string[] values = new string[data.Data.Count];
124 int i = 0;
125 foreach (object o in data.Data.Values)
126 values[i++] = o.ToString();
127
128 SqliteCommand cmd = new SqliteCommand();
129
130 if (Get(data.PrincipalID) != null)
131 {
132
133
134 string update = "update `" + m_Realm + "` set ";
135 bool first = true;
136 foreach (string field in fields)
137 {
138 if (!first)
139 update += ", ";
140 update += "`" + field + "` = :" + field;
141 cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
142
143 first = false;
144 }
145
146 update += " where UUID = :UUID";
147 cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
148
149 cmd.CommandText = update;
150 try
151 {
152 if (ExecuteNonQuery(cmd, m_Connection) < 1)
153 {
154 //CloseCommand(cmd);
155 return false;
156 }
157 }
158 catch (Exception e)
159 {
160 Console.WriteLine(e.ToString());
161 //CloseCommand(cmd);
162 return false;
163 }
164 }
165
166 else
167 {
168 string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
169 String.Join("`, `", fields) +
170 "`) values (:UUID, :" + String.Join(", :", fields) + ")";
171
172 cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
173 foreach (string field in fields)
174 cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
175
176 cmd.CommandText = insert;
177
178 try
179 {
180 if (ExecuteNonQuery(cmd, m_Connection) < 1)
181 {
182 //CloseCommand(cmd);
183 return false;
184 }
185 }
186 catch (Exception e)
187 {
188 Console.WriteLine(e.ToString());
189 //CloseCommand(cmd);
190 return false;
191 }
192 }
193
194 //CloseCommand(cmd);
195
196 return true;
197 }
198
199 public bool SetDataItem(UUID principalID, string item, string value)
200 {
201 SqliteCommand cmd = new SqliteCommand("update `" + m_Realm +
202 "` set `" + item + "` = " + value + " where UUID = '" + principalID.ToString() + "'");
203
204 if (ExecuteNonQuery(cmd, m_Connection) > 0)
205 return true;
206
207 return false;
208 }
209
210 public bool SetToken(UUID principalID, string token, int lifetime)
211 {
212 if (System.Environment.TickCount - m_LastExpire > 30000)
213 DoExpire();
214
215 SqliteCommand cmd = new SqliteCommand("insert into tokens (UUID, token, validity) values ('" + principalID.ToString() +
216 "', '" + token + "', datetime('now', 'localtime', '+" + lifetime.ToString() + " minutes'))");
217
218 if (ExecuteNonQuery(cmd, m_Connection) > 0)
219 {
220 cmd.Dispose();
221 return true;
222 }
223
224 cmd.Dispose();
225 return false;
226 }
227
228 public bool CheckToken(UUID principalID, string token, int lifetime)
229 {
230 if (System.Environment.TickCount - m_LastExpire > 30000)
231 DoExpire();
232
233 SqliteCommand cmd = new SqliteCommand("update tokens set validity = datetime('now', 'localtime', '+" + lifetime.ToString() +
234 " minutes') where UUID = '" + principalID.ToString() + "' and token = '" + token + "' and validity > datetime('now', 'localtime')");
235
236 if (ExecuteNonQuery(cmd, m_Connection) > 0)
237 {
238 cmd.Dispose();
239 return true;
240 }
241
242 cmd.Dispose();
243
244 return false;
245 }
246
247 private void DoExpire()
248 {
249 SqliteCommand cmd = new SqliteCommand("delete from tokens where validity < datetime('now', 'localtime')");
250 ExecuteNonQuery(cmd, m_Connection);
251
252 cmd.Dispose();
253
254 m_LastExpire = System.Environment.TickCount;
255 }
256 }
257}
diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs
index 1be99ee..ad4e2a2 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
@@ -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
@@ -336,5 +336,66 @@ namespace OpenSim.Data.SQLite
336 336
337 return uuids.ToArray(); 337 return uuids.ToArray();
338 } 338 }
339<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteEstateData.cs
340=======
341
342 public EstateSettings LoadEstateSettings(int estateID)
343 {
344 string sql = "select estate_settings."+String.Join(",estate_settings.", FieldList)+" from estate_settings where estate_settings.EstateID :EstateID";
345
346 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
347
348 cmd.CommandText = sql;
349 cmd.Parameters.AddWithValue(":EstateID", estateID.ToString());
350
351 return DoLoad(cmd, UUID.Zero, false);
352 }
353
354 public List<int> GetEstates(string search)
355 {
356 List<int> result = new List<int>();
357
358 string sql = "select EstateID from estate_settings where estate_settings.EstateName :EstateName";
359
360 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
361
362 cmd.CommandText = sql;
363 cmd.Parameters.AddWithValue(":EstateName", search);
364
365 IDataReader r = cmd.ExecuteReader();
366
367 while (r.Read())
368 {
369 result.Add(Convert.ToInt32(r["EstateID"]));
370 }
371 r.Close();
372
373 return result;
374 }
375
376 public bool LinkRegion(UUID regionID, int estateID)
377 {
378 SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
379
380 cmd.CommandText = "insert into estate_map values (:RegionID, :EstateID)";
381 cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
382 cmd.Parameters.AddWithValue(":EstateID", estateID.ToString());
383
384 if (cmd.ExecuteNonQuery() == 0)
385 return false;
386
387 return true;
388 }
389
390 public List<UUID> GetRegions(int estateID)
391 {
392 return new List<UUID>();
393 }
394
395 public bool DeleteEstate(int estateID)
396 {
397 return false;
398 }
399>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteEstateData.cs
339 } 400 }
340} 401}
diff --git a/OpenSim/Data/SQLite/SQLiteFramework.cs b/OpenSim/Data/SQLite/SQLiteFramework.cs
index 12b2750..79eaab3 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{
@@ -57,7 +57,19 @@ namespace OpenSim.Data.SQLite
57 { 57 {
58 lock (m_Connection) 58 lock (m_Connection)
59 { 59 {
60<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteFramework.cs
60 cmd.Connection = m_Connection; 61 cmd.Connection = m_Connection;
62=======
63/*
64 SqliteConnection newConnection =
65 (SqliteConnection)((ICloneable)connection).Clone();
66 newConnection.Open();
67
68 cmd.Connection = newConnection;
69*/
70 cmd.Connection = connection;
71 //Console.WriteLine("XXX " + cmd.CommandText);
72>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteFramework.cs
61 73
62 return cmd.ExecuteNonQuery(); 74 return cmd.ExecuteNonQuery();
63 } 75 }
@@ -65,12 +77,27 @@ namespace OpenSim.Data.SQLite
65 77
66 protected IDataReader ExecuteReader(SqliteCommand cmd) 78 protected IDataReader ExecuteReader(SqliteCommand cmd)
67 { 79 {
80<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteFramework.cs
68 SqliteConnection newConnection = 81 SqliteConnection newConnection =
69 (SqliteConnection)((ICloneable)m_Connection).Clone(); 82 (SqliteConnection)((ICloneable)m_Connection).Clone();
70 newConnection.Open(); 83 newConnection.Open();
71 84
72 cmd.Connection = newConnection; 85 cmd.Connection = newConnection;
73 return cmd.ExecuteReader(); 86 return cmd.ExecuteReader();
87=======
88 lock (connection)
89 {
90 //SqliteConnection newConnection =
91 // (SqliteConnection)((ICloneable)connection).Clone();
92 //newConnection.Open();
93
94 //cmd.Connection = newConnection;
95 cmd.Connection = connection;
96 //Console.WriteLine("XXX " + cmd.CommandText);
97
98 return cmd.ExecuteReader();
99 }
100>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteFramework.cs
74 } 101 }
75 102
76 protected void CloseReaderCommand(SqliteCommand cmd) 103 protected void CloseReaderCommand(SqliteCommand cmd)
diff --git a/OpenSim/Data/SQLite/SQLiteFriendsData.cs b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
new file mode 100644
index 0000000..b06853c
--- /dev/null
+++ b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
@@ -0,0 +1,70 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using Mono.Data.Sqlite;
35
36namespace OpenSim.Data.SQLite
37{
38 public class SQLiteFriendsData : SQLiteGenericTableHandler<FriendsData>, IFriendsData
39 {
40 public SQLiteFriendsData(string connectionString, string realm)
41 : base(connectionString, realm, "FriendsStore")
42 {
43 }
44
45 public FriendsData[] GetFriends(UUID userID)
46 {
47 SqliteCommand cmd = new SqliteCommand();
48
49 cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = :PrincipalID", m_Realm);
50 cmd.Parameters.AddWithValue(":PrincipalID", userID.ToString());
51
52 return DoQuery(cmd);
53
54 }
55
56 public bool Delete(UUID principalID, string friend)
57 {
58 SqliteCommand cmd = new SqliteCommand();
59
60 cmd.CommandText = String.Format("delete from {0} where PrincipalID = :PrincipalID and Friend = :Friend", m_Realm);
61 cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
62 cmd.Parameters.AddWithValue(":Friend", friend);
63
64 ExecuteNonQuery(cmd, cmd.Connection);
65
66 return true;
67 }
68
69 }
70}
diff --git a/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs b/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
index 8e91693..918cb3d 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,7 +54,27 @@ 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<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
57 Assembly assem = GetType().Assembly; 58 Assembly assem = GetType().Assembly;
59=======
60 m_Connection = new SqliteConnection(connectionString);
61 Console.WriteLine(string.Format("OPENING CONNECTION FOR {0} USING {1}", storeName, connectionString));
62 m_Connection.Open();
63
64 if (storeName != String.Empty)
65 {
66 Assembly assem = GetType().Assembly;
67 //SqliteConnection newConnection =
68 // (SqliteConnection)((ICloneable)m_Connection).Clone();
69 //newConnection.Open();
70
71 //Migration m = new Migration(newConnection, assem, storeName);
72 Migration m = new Migration(m_Connection, assem, storeName);
73 m.Update();
74 //newConnection.Close();
75 //newConnection.Dispose();
76 }
77>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
58 78
59 Migration m = new Migration(m_Connection, assem, storeName); 79 Migration m = new Migration(m_Connection, assem, storeName);
60 m.Update(); 80 m.Update();
@@ -180,7 +200,11 @@ namespace OpenSim.Data.SQLite
180 result.Add(row); 200 result.Add(row);
181 } 201 }
182 202
203<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
183 CloseReaderCommand(cmd); 204 CloseReaderCommand(cmd);
205=======
206 //CloseCommand(cmd);
207>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
184 208
185 return result.ToArray(); 209 return result.ToArray();
186 } 210 }
diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs
index 64591fd..0149838 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
@@ -89,6 +89,7 @@ namespace OpenSim.Data.SQLite
89 89
90 ds = new DataSet(); 90 ds = new DataSet();
91 91
92<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteInventoryStore.cs
92 ds.Tables.Add(createInventoryFoldersTable()); 93 ds.Tables.Add(createInventoryFoldersTable());
93 invFoldersDa.Fill(ds.Tables["inventoryfolders"]); 94 invFoldersDa.Fill(ds.Tables["inventoryfolders"]);
94 setupFoldersCommands(invFoldersDa, conn); 95 setupFoldersCommands(invFoldersDa, conn);
@@ -98,6 +99,19 @@ namespace OpenSim.Data.SQLite
98 invItemsDa.Fill(ds.Tables["inventoryitems"]); 99 invItemsDa.Fill(ds.Tables["inventoryitems"]);
99 setupItemsCommands(invItemsDa, conn); 100 setupItemsCommands(invItemsDa, conn);
100 m_log.Info("[INVENTORY DB]: Populated Inventory Items Definitions"); 101 m_log.Info("[INVENTORY DB]: Populated Inventory Items Definitions");
102=======
103 ds.Tables.Add(createInventoryFoldersTable());
104 invFoldersDa.Fill(ds.Tables["inventoryfolders"]);
105 setupFoldersCommands(invFoldersDa, conn);
106 CreateDataSetMapping(invFoldersDa, "inventoryfolders");
107 m_log.Info("[INVENTORY DB]: Populated Inventory Folders Definitions");
108
109 ds.Tables.Add(createInventoryItemsTable());
110 invItemsDa.Fill(ds.Tables["inventoryitems"]);
111 setupItemsCommands(invItemsDa, conn);
112 CreateDataSetMapping(invItemsDa, "inventoryitems");
113 m_log.Info("[INVENTORY DB]: Populated Inventory Items Definitions");
114>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteInventoryStore.cs
101 115
102 ds.AcceptChanges(); 116 ds.AcceptChanges();
103 } 117 }
@@ -721,6 +735,15 @@ namespace OpenSim.Data.SQLite
721 * 735 *
722 **********************************************************************/ 736 **********************************************************************/
723 737
738 protected void CreateDataSetMapping(IDataAdapter da, string tableName)
739 {
740 ITableMapping dbMapping = da.TableMappings.Add(tableName, tableName);
741 foreach (DataColumn col in ds.Tables[tableName].Columns)
742 {
743 dbMapping.ColumnMappings.Add(col.ColumnName, col.ColumnName);
744 }
745 }
746
724 /// <summary> 747 /// <summary>
725 /// Create the "inventoryitems" table 748 /// Create the "inventoryitems" table
726 /// </summary> 749 /// </summary>
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index 5a4ee2a..85368ab 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>
@@ -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/SQLiteUserAccountData.cs b/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
new file mode 100644
index 0000000..893f105
--- /dev/null
+++ b/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
@@ -0,0 +1,81 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Data;
32using OpenMetaverse;
33using OpenSim.Framework;
34using Mono.Data.Sqlite;
35
36namespace OpenSim.Data.SQLite
37{
38 public class SQLiteUserAccountData : SQLiteGenericTableHandler<UserAccountData>, IUserAccountData
39 {
40 public SQLiteUserAccountData(string connectionString, string realm)
41 : base(connectionString, realm, "UserAccount")
42 {
43 }
44
45 public UserAccountData[] GetUsers(UUID scopeID, string query)
46 {
47 string[] words = query.Split(new char[] {' '});
48
49 for (int i = 0 ; i < words.Length ; i++)
50 {
51 if (words[i].Length < 3)
52 {
53 if (i != words.Length - 1)
54 Array.Copy(words, i + 1, words, i, words.Length - i - 1);
55 Array.Resize(ref words, words.Length - 1);
56 }
57 }
58
59 if (words.Length == 0)
60 return new UserAccountData[0];
61
62 if (words.Length > 2)
63 return new UserAccountData[0];
64
65 SqliteCommand cmd = new SqliteCommand();
66
67 if (words.Length == 1)
68 {
69 cmd.CommandText = String.Format("select * from {0} where ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')",
70 m_Realm, scopeID.ToString(), words[0]);
71 }
72 else
73 {
74 cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{3}%')",
75 m_Realm, scopeID.ToString(), words[0], words[1]);
76 }
77
78 return DoQuery(cmd);
79 }
80 }
81}
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..0650a86 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,7 +147,11 @@ namespace OpenSim.Data.SQLite
147 } 147 }
148 148
149 reader.Close(); 149 reader.Close();
150<<<<<<< HEAD:OpenSim/Data/SQLite/SQLiteXInventoryData.cs
150 CloseReaderCommand(cmd); 151 CloseReaderCommand(cmd);
152=======
153 //CloseCommand(cmd);
154>>>>>>> cc67de5... rename SQLiteNG to SQLite and SQLite to SQLiteLegacy:OpenSim/Data/SQLite/SQLiteXInventoryData.cs
151 155
152 return perms; 156 return perms;
153 } 157 }