Skip to content

Commit

Permalink
Separate interface for logging sqls
Browse files Browse the repository at this point in the history
Separate interface for logging sqls
  • Loading branch information
gkathire committed Sep 23, 2013
1 parent 2b819d8 commit 260598a
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 36 deletions.
103 changes: 67 additions & 36 deletions Source/Data/DataConnection.Linq.cs
Expand Up @@ -170,17 +170,22 @@ int IDataContext.ExecuteNonQuery(object query)
foreach (var p in pq.Parameters)
Command.Parameters.Add(p);

if (TraceSwitch.TraceInfo)
var now = DateTime.Now;
int n = 0;
try
{
var now = DateTime.Now;
var n = Command.ExecuteNonQuery();

WriteTraceLine("Execution time: {0}. Records affected: {1}.\r\n".Args(DateTime.Now - now, n), TraceSwitch.DisplayName);

return n;
n = Command.ExecuteNonQuery();
}

return Command.ExecuteNonQuery();
catch (System.Exception ex)
{
if (OnError != null)
OnError(Command.CommandText, Command.Parameters, DateTime.Now - now, ex);
throw ex;
}

if (OnSuccess != null)
OnSuccess(Command.CommandText, Command.Parameters, DateTime.Now - now, n,null,null);
return n;
}
else
{
Expand All @@ -193,41 +198,61 @@ int IDataContext.ExecuteNonQuery(object query)
if (i == 0 && pq.Parameters != null)
foreach (var p in pq.Parameters)
Command.Parameters.Add(p);

if (i < pq.Commands.Length - 1 && pq.Commands[i].StartsWith("DROP"))

var nnow = DateTime.Now;
try
{
try
if (i < pq.Commands.Length - 1 && pq.Commands[i].StartsWith("DROP"))
{
Command.ExecuteNonQuery();
try
{
int n = Command.ExecuteNonQuery();
if (OnSuccess != null)
OnSuccess(Command.CommandText, Command.Parameters, DateTime.Now - nnow, n, null, null);
}
catch (Exception ex)
{
if (OnError != null)
OnError(Command.CommandText, Command.Parameters, DateTime.Now - nnow, ex);
}
}
catch (Exception)
else
{
int n = Command.ExecuteNonQuery();
if (OnSuccess != null)
OnSuccess(Command.CommandText, Command.Parameters, DateTime.Now - nnow, n, null, null);
}
}
catch (System.Exception ex)
{
if (OnError != null)
OnError(Command.CommandText, Command.Parameters, DateTime.Now - nnow, ex);
throw ex;
}
else
Command.ExecuteNonQuery();
}

if (TraceSwitch.TraceInfo)
WriteTraceLine("Execution time: {0}.\r\n".Args(DateTime.Now - now), TraceSwitch.DisplayName);

return -1;
}
}

object IDataContext.ExecuteScalar(object query)
{
if (TraceSwitch.TraceInfo)
var now = DateTime.Now;
object ret;
try
{
var now = DateTime.Now;
var ret = ExecuteScalarInternal(query);

WriteTraceLine("Execution time: {0}\r\n".Args(DateTime.Now - now), TraceSwitch.DisplayName);

return ret;
ret = ExecuteScalarInternal(query);
}
catch (System.Exception ex)
{
if (OnError != null)
OnError(Command.CommandText, Command.Parameters, DateTime.Now - now, ex);
throw ex;
}

return ExecuteScalarInternal(query);
if (OnSuccess != null)
OnSuccess(Command.CommandText, Command.Parameters, DateTime.Now - now, null, null, ret);

return ret;
}

object ExecuteScalarInternal(object query)
Expand Down Expand Up @@ -288,17 +313,23 @@ IDataReader IDataContext.ExecuteReader(object query)
foreach (var p in pq.Parameters)
Command.Parameters.Add(p);

if (TraceSwitch.TraceInfo)
var now = DateTime.Now;
IDataReader ret;
try
{
var now = DateTime.Now;
var ret = Command.ExecuteReader();

WriteTraceLine("Execution time: {0}\r\n".Args(DateTime.Now - now), TraceSwitch.DisplayName);

return ret;
ret = Command.ExecuteReader();
}
catch (System.Exception ex)
{
if (OnError != null)
OnError(Command.CommandText, Command.Parameters, DateTime.Now - now, ex);
throw ex;
}

if (OnSuccess != null)
OnSuccess(Command.CommandText, Command.Parameters, DateTime.Now - now, null, null, null);

return Command.ExecuteReader();
return ret;
}

void IDataContext.ReleaseQuery(object query)
Expand Down
57 changes: 57 additions & 0 deletions Source/Data/DataConnection.cs
Expand Up @@ -14,6 +14,7 @@ namespace LinqToDB.Data
using DataProvider;

using Mapping;
using System.Text;

public partial class DataConnection : ICloneable
{
Expand Down Expand Up @@ -145,6 +146,62 @@ public static void TurnTraceSwitchOn()
TraceSwitch = new TraceSwitch("DataConnection", "DataConnection trace switch", "Info");
}

public delegate void OnSuccessDelegate(string sql, IDataParameterCollection parameters, TimeSpan ts, int? rowsAffected, int? rowsReturned, object dataReturned);
public delegate void OnErrorDelegate(string sql, IDataParameterCollection parameters, TimeSpan ts, Exception ex);

private static OnSuccessDelegate onSuccess = new OnSuccessDelegate(OnSuccessInternal);
private static OnErrorDelegate onError = new OnErrorDelegate(OnErrorInternal);

public static OnSuccessDelegate OnSuccess
{
get
{
return onSuccess;
}
set
{
onSuccess = value;
}
}

public static OnErrorDelegate OnError
{
get
{
return onError;
}
set
{
onError = value;
}
}

private static void OnSuccessInternal(string sql, IDataParameterCollection parameters, TimeSpan ts, int? rowsAffected, int? rowsReturned, object dataReturned)
{
if (TraceSwitch.TraceInfo)
{
StringBuilder ptxt = new StringBuilder();
foreach (IDataParameter param in parameters)
{
ptxt.Append(String.Format("{2} {0} = {1} ", param.ParameterName, param.Value, ptxt.Length > 0 ? "," : ""));
}
WriteTraceLine("Sql :{0} . Parameters: {1} . Execution time: {2}. Records affected: {3}. Rows Returned : {4} \r\n".Args(sql,ptxt.ToString(), ts, rowsAffected, rowsReturned), TraceSwitch.DisplayName);
}
}

private static void OnErrorInternal(string sql, IDataParameterCollection parameters, TimeSpan ts, Exception ex)
{
if (TraceSwitch.TraceInfo)
{
StringBuilder ptxt = new StringBuilder();
foreach (IDataParameter param in parameters)
{
ptxt.Append(String.Format("{2} {0} = {1} ", param.ParameterName, param.Value, ptxt.Length > 0 ? "," : ""));
}
WriteTraceLine("Sql :{0} . Parameters: {1} . Execution time: {2}. Error: {3} \r\n".Args(sql, ptxt.ToString(), ts, ex.Message), TraceSwitch.DisplayName);
}
}

public static Action<string,string> WriteTraceLine = (message, displayName) => Debug.WriteLine(message, displayName);

#endregion
Expand Down

0 comments on commit 260598a

Please sign in to comment.