SQLite connector better, but access to tables still doesn't work.

slimupdates
Diva Canto 2010-02-20 20:13:38 -08:00
parent 0ab6aac052
commit df59d098b3
4 changed files with 72 additions and 33 deletions

View File

@ -52,12 +52,16 @@ namespace OpenSim.Data.SQLite
if (!m_initialized) if (!m_initialized)
{ {
m_Connection = new SqliteConnection(connectionString);
m_Connection.Open();
using (SqliteConnection dbcon = new SqliteConnection(m_connectionString)) using (SqliteConnection dbcon = new SqliteConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
Migration m = new Migration(dbcon, GetType().Assembly, "AuthStore"); Migration m = new Migration(dbcon, GetType().Assembly, "AuthStore");
m.Update(); m.Update();
} }
m_initialized = true; m_initialized = true;
} }
} }
@ -105,7 +109,7 @@ namespace OpenSim.Data.SQLite
} }
public bool Store(AuthenticationData data) public bool Store(AuthenticationData data)
{ {
if (data.Data.ContainsKey("UUID")) if (data.Data.ContainsKey("UUID"))
data.Data.Remove("UUID"); data.Data.Remove("UUID");
@ -117,31 +121,60 @@ namespace OpenSim.Data.SQLite
SqliteCommand cmd = new SqliteCommand(); SqliteCommand cmd = new SqliteCommand();
string update = "update `"+m_Realm+"` set "; if (Get(data.PrincipalID) != null)
bool first = true;
foreach (string field in fields)
{ {
if (!first)
update += ", ";
update += "`" + field + "` = " + data.Data[field];
first = false;
string update = "update `" + m_Realm + "` set ";
bool first = true;
foreach (string field in fields)
{
if (!first)
update += ", ";
update += "`" + field + "` = '" + data.Data[field] + "'";
first = false;
}
update += " where UUID = '" + data.PrincipalID.ToString() + "'";
cmd.CommandText = update;
Console.WriteLine("XXX " + cmd.CommandText);
try
{
if (ExecuteNonQuery(cmd) < 1)
{
cmd.Dispose();
return false;
}
}
catch
{
cmd.Dispose();
return false;
}
} }
update += " where UUID = '" + data.PrincipalID.ToString() + "'"; else
cmd.CommandText = update;
if (ExecuteNonQuery(cmd) < 1)
{ {
string insert = "insert into `" + m_Realm + "` (`UUID`, `" + string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
String.Join("`, `", fields) + String.Join("`, `", fields) +
"`) values ('" + data.PrincipalID.ToString() + "', " + String.Join(", '", values) + "')"; "`) values ('" + data.PrincipalID.ToString() + "', '" + String.Join("', '", values) + "')";
cmd.CommandText = insert; cmd.CommandText = insert;
if (ExecuteNonQuery(cmd) < 1) Console.WriteLine("XXX " + cmd.CommandText);
try
{
if (ExecuteNonQuery(cmd) < 1)
{
cmd.Dispose();
return false;
}
}
catch
{ {
cmd.Dispose(); cmd.Dispose();
return false; return false;

View File

@ -40,17 +40,12 @@ namespace OpenSim.Data.SQLite
/// </summary> /// </summary>
public class SQLiteFramework public class SQLiteFramework
{ {
protected static SqliteConnection m_Connection; protected SqliteConnection m_Connection;
private bool m_initialized;
protected SQLiteFramework(string connectionString) protected SQLiteFramework(string connectionString)
{ {
if (!m_initialized) //m_Connection = new SqliteConnection(connectionString);
{ //m_Connection.Open();
m_Connection = new SqliteConnection(connectionString);
m_Connection.Open();
m_initialized = true;
}
} }
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
@ -63,6 +58,7 @@ namespace OpenSim.Data.SQLite
lock (m_Connection) lock (m_Connection)
{ {
cmd.Connection = m_Connection; cmd.Connection = m_Connection;
Console.WriteLine("XXX " + cmd.CommandText);
return cmd.ExecuteNonQuery(); return cmd.ExecuteNonQuery();
} }
@ -75,6 +71,7 @@ namespace OpenSim.Data.SQLite
newConnection.Open(); newConnection.Open();
cmd.Connection = newConnection; cmd.Connection = newConnection;
Console.WriteLine("XXX " + cmd.CommandText);
return cmd.ExecuteReader(); return cmd.ExecuteReader();
} }

View File

@ -57,6 +57,9 @@ namespace OpenSim.Data.SQLite
if (!m_initialized) if (!m_initialized)
{ {
m_Connection = new SqliteConnection(connectionString);
m_Connection.Open();
if (storeName != String.Empty) if (storeName != String.Empty)
{ {
Assembly assem = GetType().Assembly; Assembly assem = GetType().Assembly;
@ -64,6 +67,7 @@ namespace OpenSim.Data.SQLite
Migration m = new Migration(m_Connection, assem, storeName); Migration m = new Migration(m_Connection, assem, storeName);
m.Update(); m.Update();
} }
m_initialized = true; m_initialized = true;
} }
@ -117,7 +121,7 @@ namespace OpenSim.Data.SQLite
for (int i = 0 ; i < fields.Length ; i++) for (int i = 0 ; i < fields.Length ; i++)
{ {
cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i])); cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
terms.Add("`" + fields[i] + "` = :" + fields[i]); terms.Add("`" + fields[i] + "`='" + keys[i] + "'");
} }
string where = String.Join(" and ", terms.ToArray()); string where = String.Join(" and ", terms.ToArray());
@ -215,8 +219,8 @@ namespace OpenSim.Data.SQLite
foreach (FieldInfo fi in m_Fields.Values) foreach (FieldInfo fi in m_Fields.Values)
{ {
names.Add(fi.Name); names.Add(fi.Name);
values.Add(":" + fi.Name); values.Add(fi.GetValue(row).ToString());
cmd.Parameters.Add(new SqliteParameter(":" + fi.Name, fi.GetValue(row).ToString())); cmd.Parameters.Add(new SqliteParameter(fi.Name, fi.GetValue(row).ToString()));
} }
if (m_DataField != null) if (m_DataField != null)
@ -227,12 +231,12 @@ namespace OpenSim.Data.SQLite
foreach (KeyValuePair<string, string> kvp in data) foreach (KeyValuePair<string, string> kvp in data)
{ {
names.Add(kvp.Key); names.Add(kvp.Key);
values.Add(":" + kvp.Key); values.Add(kvp.Value);
cmd.Parameters.Add(new SqliteParameter(":" + kvp.Key, kvp.Value)); cmd.Parameters.Add(new SqliteParameter(kvp.Key, kvp.Value));
} }
} }
query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values (" + String.Join(",", values.ToArray()) + ")"; query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values ('" + String.Join("', '", values.ToArray()) + "')";
cmd.CommandText = query; cmd.CommandText = query;

View File

@ -106,12 +106,17 @@ namespace OpenSim.Services.AuthenticationService
string passwordSalt = Util.Md5Hash(UUID.Random().ToString()); string passwordSalt = Util.Md5Hash(UUID.Random().ToString());
string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + passwordSalt); string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + passwordSalt);
AuthenticationData auth = new AuthenticationData(); AuthenticationData auth = m_Database.Get(principalID);
auth.PrincipalID = principalID; if (auth == null)
auth.Data = new System.Collections.Generic.Dictionary<string, object>(); {
auth = new AuthenticationData();
auth.PrincipalID = principalID;
auth.Data = new System.Collections.Generic.Dictionary<string, object>();
auth.Data["accountType"] = "UserAccount";
auth.Data["webLoginKey"] = UUID.Zero.ToString();
}
auth.Data["passwordHash"] = md5PasswdHash; auth.Data["passwordHash"] = md5PasswdHash;
auth.Data["passwordSalt"] = passwordSalt; auth.Data["passwordSalt"] = passwordSalt;
auth.Data["webLoginKey"] = UUID.Zero.ToString();
if (!m_Database.Store(auth)) if (!m_Database.Store(auth))
{ {
m_log.DebugFormat("[AUTHENTICATION DB]: Failed to store authentication data"); m_log.DebugFormat("[AUTHENTICATION DB]: Failed to store authentication data");