aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/SQLite
diff options
context:
space:
mode:
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 }