From 281955949910eb257b5f7e42e54535ba7812418e Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Sun, 14 Sep 2008 13:23:02 +0000
Subject: Mantis #2124 Thank you, RuudL, for a patch that brings MSSQL up to
the same implementation level as MySQL.
---
OpenSim/Data/MSSQL/MSSQLLogData.cs | 106 ++++++++++++++++++++++++++++++-------
1 file changed, 86 insertions(+), 20 deletions(-)
(limited to 'OpenSim/Data/MSSQL/MSSQLLogData.cs')
diff --git a/OpenSim/Data/MSSQL/MSSQLLogData.cs b/OpenSim/Data/MSSQL/MSSQLLogData.cs
index b284c02..a617cea 100644
--- a/OpenSim/Data/MSSQL/MSSQLLogData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLLogData.cs
@@ -26,6 +26,7 @@
*/
using System;
+using System.Data.SqlClient;
using System.Reflection;
using System.Collections.Generic;
using System.Data;
@@ -39,6 +40,8 @@ namespace OpenSim.Data.MSSQL
///
internal class MSSQLLogData : ILogDataPlugin
{
+ private const string _migrationStore = "LogStore";
+
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
@@ -48,7 +51,7 @@ namespace OpenSim.Data.MSSQL
public void Initialise()
{
- m_log.Info("[MSSQLLogData]: " + Name + " cannot be default-initialized!");
+ m_log.Info("[LOG DB]: " + Name + " cannot be default-initialized!");
throw new PluginNotInitialisedException (Name);
}
@@ -57,18 +60,37 @@ namespace OpenSim.Data.MSSQL
///
public void Initialise(string connect)
{
- // TODO: do something with the connect string
- IniFile gridDataMSSqlFile = new IniFile("mssql_connection.ini");
- string settingDataSource = gridDataMSSqlFile.ParseFileReadValue("data_source");
- string settingInitialCatalog = gridDataMSSqlFile.ParseFileReadValue("initial_catalog");
- string settingPersistSecurityInfo = gridDataMSSqlFile.ParseFileReadValue("persist_security_info");
- string settingUserId = gridDataMSSqlFile.ParseFileReadValue("user_id");
- string settingPassword = gridDataMSSqlFile.ParseFileReadValue("password");
-
- database =
- new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId,
- settingPassword);
+ if (string.IsNullOrEmpty(connect))
+ {
+ database = new MSSQLManager(connect);
+ }
+ else
+ {
+ // TODO: do something with the connect string
+ IniFile gridDataMSSqlFile = new IniFile("mssql_connection.ini");
+ string settingDataSource = gridDataMSSqlFile.ParseFileReadValue("data_source");
+ string settingInitialCatalog = gridDataMSSqlFile.ParseFileReadValue("initial_catalog");
+ string settingPersistSecurityInfo = gridDataMSSqlFile.ParseFileReadValue("persist_security_info");
+ string settingUserId = gridDataMSSqlFile.ParseFileReadValue("user_id");
+ string settingPassword = gridDataMSSqlFile.ParseFileReadValue("password");
+
+ database =
+ new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId,
+ settingPassword);
+ }
+
+ //TODO when can this be removed
+ TestTable();
+
+ //Updating mechanisme
+ database.CheckMigration(_migrationStore);
+ }
+ ///
+ /// Can be removed someday!!!
+ ///
+ private void TestTable()
+ {
using (IDbCommand cmd = database.Query("select top 1 * from logs", new Dictionary()))
{
try
@@ -80,9 +102,38 @@ namespace OpenSim.Data.MSSQL
database.ExecuteResourceSql("Mssql-logs.sql");
}
}
+ using (AutoClosingSqlCommand cmd = database.Query("select * from migrations where name = '" + _migrationStore + "'"))
+ {
+ //Special for Migrations to create backword compatible
+ try
+ {
+ bool insert = true;
+ using (SqlDataReader reader = cmd.ExecuteReader())
+ {
+ if (reader.Read()) insert = false;
+ }
+ if (insert)
+ {
+ cmd.CommandText = "insert into migrations(name, version) values('" + _migrationStore + "', 1)";
+ cmd.ExecuteNonQuery();
+ }
+ }
+ catch
+ {
+ //No migrations table
+ //HACK create one and add data
+ cmd.CommandText = "create table migrations(name varchar(100), version int)";
+ cmd.ExecuteNonQuery();
- }
+ cmd.CommandText = "insert into migrations(name, version) values('migrations', 1)";
+ cmd.ExecuteNonQuery();
+ cmd.CommandText = "insert into migrations(name, version) values('" + _migrationStore + "', 1)";
+ cmd.ExecuteNonQuery();
+ }
+ }
+ }
+
///
/// Saves a log item to the database
///
@@ -95,13 +146,28 @@ namespace OpenSim.Data.MSSQL
public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority,
string logMessage)
{
- try
- {
- database.insertLogRow(serverDaemon, target, methodCall, arguments, priority, logMessage);
- }
- catch
+ string sql = "INSERT INTO logs ([target], [server], [method], [arguments], [priority], [message]) VALUES ";
+ sql += "(@target, @server, @method, @arguments, @priority, @message);";
+
+ using (AutoClosingSqlCommand command = database.Query(sql))
{
- // it didn't log, don't worry about it
+ command.Parameters.Add(database.CreateParameter("server", serverDaemon));
+ command.Parameters.Add(database.CreateParameter("target",target));
+ command.Parameters.Add(database.CreateParameter("method", methodCall));
+ command.Parameters.Add(database.CreateParameter("arguments", arguments));
+ command.Parameters.Add(database.CreateParameter("priority", priority.ToString()));
+ command.Parameters.Add(database.CreateParameter("message", logMessage));
+
+ try
+ {
+ command.ExecuteNonQuery();
+ }
+ catch (Exception e)
+ {
+ //Are we not in a loop here
+ //m_log.Error(e.ToString());
+ Console.WriteLine("[LOG DB] Error logging : " + e.Message);
+ }
}
}
@@ -119,7 +185,7 @@ namespace OpenSim.Data.MSSQL
///
public void Dispose()
{
- // Do nothing.
+ database = null;
}
///
--
cgit v1.1