Skip to content

Commit f64594c

Browse files
committed
Trace begin of generated accessor method
1 parent a1ef199 commit f64594c

25 files changed

Lines changed: 99 additions & 71 deletions

src/Dibix.Sdk.CodeGeneration/Output/DaoExecutorWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ private static string GenerateMethodBody(SqlStatementDefinition definition, stri
167167
writer.WriteLine();
168168
}
169169

170-
writer.WriteLine("using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())")
170+
writer.WriteLine($"using (IDatabaseAccessor accessor = databaseAccessorFactory.Create(\"{definition.DefinitionName}\"))")
171171
.WriteLine("{")
172172
.PushIndent();
173173

src/Dibix.Testing/Data/DatabaseTestBase.cs

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Data;
34
using System.Diagnostics;
4-
using System.Reflection;
55
using System.Threading;
66
using System.Threading.Tasks;
77

@@ -11,7 +11,8 @@ namespace Dibix.Testing.Data
1111
{
1212
#region Fields
1313
private readonly Lazy<IDisposableDatabaseAccessorFactory> _databaseAccessorFactoryAccessor;
14-
private Action _removeTraceListener;
14+
private readonly ICollection<DibixTraceSource> _traceSources = new List<DibixTraceSource>();
15+
private TraceListener _traceListener;
1516
#endregion
1617

1718
#region Properties
@@ -30,10 +31,16 @@ protected override async Task OnTestInitialized()
3031
{
3132
await base.OnTestInitialized().ConfigureAwait(false);
3233

33-
TraceSource dibixTraceSource = GetDibixTraceSource();
34-
TraceListener traceListener = base.TestOutputHelper.CreateTraceListener();
35-
dibixTraceSource.Listeners.Add(traceListener);
36-
this._removeTraceListener = () => dibixTraceSource.Listeners.Remove(traceListener);
34+
TraceListener traceListener = TestOutputHelper.CreateTraceListener();
35+
DibixTraceSource[] traceSources = [DibixTraceSource.Sql, DibixTraceSource.Accessor];
36+
37+
foreach (DibixTraceSource traceSource in traceSources)
38+
{
39+
traceSource.AddListener(traceListener, SourceLevels.Information);
40+
_traceSources.Add(traceSource);
41+
}
42+
43+
_traceListener = traceListener;
3744
}
3845

3946
protected async Task<TResult> ExecuteDatabaseAction<TResult>(Func<IDatabaseAccessor, Task<TResult>> action)
@@ -59,35 +66,25 @@ protected async Task ExecuteStoredProcedure(string storedProcedureName, Action<I
5966

6067
#region Private Methods
6168
private IDisposableDatabaseAccessorFactory CreateDatabaseAccessorFactoryCore(int? commandTimeout = 30) => DatabaseTestUtility.CreateDatabaseAccessorFactory(base.Configuration, commandTimeout);
62-
63-
private static TraceSource GetDibixTraceSource()
64-
{
65-
const string fieldName = "TraceSource";
66-
67-
Type type = typeof(DatabaseAccessor);
68-
FieldInfo field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Static);
69-
if (field == null)
70-
throw new InvalidOperationException($"Could not find 'private static {fieldName}' field on type '{type}'");
71-
72-
TraceSource traceSource = (TraceSource)field.GetValue(null);
73-
if (traceSource == null)
74-
throw new InvalidOperationException($"'private static {fieldName}' field on type '{type}' is null");
75-
76-
traceSource.Switch.Level = SourceLevels.Information;
77-
return traceSource;
78-
}
7969
#endregion
8070

8171
#region IDisposable Members
8272
protected override void Dispose(bool disposing)
8373
{
8474
base.Dispose(disposing);
85-
if (disposing)
75+
if (!disposing)
76+
return;
77+
78+
if (_traceListener != null)
8679
{
87-
this._removeTraceListener?.Invoke();
88-
if (_databaseAccessorFactoryAccessor.IsValueCreated)
89-
_databaseAccessorFactoryAccessor.Value.Dispose();
80+
foreach (DibixTraceSource traceSource in _traceSources)
81+
{
82+
traceSource.RemoveListener(_traceListener);
83+
}
9084
}
85+
86+
if (_databaseAccessorFactoryAccessor.IsValueCreated)
87+
_databaseAccessorFactoryAccessor.Value.Dispose();
9188
}
9289
#endregion
9390
}

src/Dibix/Access/DatabaseAccessor.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@
22
using System.Collections.Generic;
33
using System.Data;
44
using System.Data.Common;
5-
using System.Diagnostics;
65
using System.Threading;
76
using System.Threading.Tasks;
87

98
namespace Dibix
109
{
1110
public abstract class DatabaseAccessor : IDatabaseAccessor, IDisposable
1211
{
13-
#region Fields
14-
private static readonly TraceSource TraceSource = new TraceSource("Dibix.Sql");
15-
#endregion
16-
1712
#region Properties
1813
protected DbConnection Connection { get; }
1914
protected DbProviderAdapter DbProviderAdapter { get; }
@@ -159,7 +154,7 @@ private async Task<T> Execute<T>(string commandText, CommandType commandType, Pa
159154

160155
private void OnInfoMessageEvent(string message)
161156
{
162-
TraceSource.TraceInformation(message);
157+
DibixTraceSource.Sql.TraceInformation(message);
163158
OnInfoMessage(message);
164159
}
165160

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace Dibix
2+
{
3+
public static class DatabaseAccessorFactoryExtensions
4+
{
5+
public static IDatabaseAccessor Create(this IDatabaseAccessorFactory factory, string contextName)
6+
{
7+
DibixTraceSource.Accessor.TraceInformation($"Executing database action '{contextName}'");
8+
IDatabaseAccessor accessor = factory.Create();
9+
return accessor;
10+
}
11+
}
12+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Diagnostics;
2+
3+
namespace Dibix
4+
{
5+
public sealed class DibixTraceSource
6+
{
7+
private readonly TraceSource _traceSource;
8+
9+
public static DibixTraceSource Sql { get; } = new DibixTraceSource("Dibix.Sql");
10+
public static DibixTraceSource Accessor { get; } = new DibixTraceSource("Dibix.Accessor");
11+
12+
private DibixTraceSource(string name) => _traceSource = new TraceSource(name);
13+
14+
public void AddListener(TraceListener listener, SourceLevels level)
15+
{
16+
_traceSource.Switch.Level = level;
17+
_traceSource.Listeners.Add(listener);
18+
}
19+
20+
public void RemoveListener(TraceListener listener) => _traceSource.Listeners.Remove(listener);
21+
22+
internal void TraceInformation(string message) => _traceSource.TraceInformation(message);
23+
}
24+
}

tests/Dibix.Sdk.Tests/Resources/CodeGeneration/Endpoints.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static class TestAccessor
5454

5555
public static void AssertAuthorized(this IDatabaseAccessorFactory databaseAccessorFactory, byte right)
5656
{
57-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
57+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("AssertAuthorized"))
5858
{
5959
ParametersVisitor @params = accessor.Parameters()
6060
.SetFromTemplate(new
@@ -68,7 +68,7 @@ public static void AssertAuthorized(this IDatabaseAccessorFactory databaseAccess
6868

6969
public static short EmptyWithOutputParam(this IDatabaseAccessorFactory databaseAccessorFactory, out short a)
7070
{
71-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
71+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithOutputParam"))
7272
{
7373
ParametersVisitor @params = accessor.Parameters()
7474
.SetInt16(nameof(a), out IOutParameter<short> aOutput)
@@ -81,7 +81,7 @@ public static short EmptyWithOutputParam(this IDatabaseAccessorFactory databaseA
8181

8282
public static void EmptyWithParams(this IDatabaseAccessorFactory databaseAccessorFactory, string a, string b, System.Guid? c, string? password, Dibix.Sdk.Tests.Data.IntParameterSet ids, string? d = null, bool e = true, Dibix.Sdk.Tests.DomainModel.Direction? f = null, string? g = "Cake", System.DateTime? h = null, System.DateTime? i = null, System.TimeSpan? j = null)
8383
{
84-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
84+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithParams"))
8585
{
8686
ParametersVisitor @params = accessor.Parameters()
8787
.SetFromTemplate(new
@@ -106,7 +106,7 @@ public static void EmptyWithParams(this IDatabaseAccessorFactory databaseAccesso
106106

107107
public static void EmptyWithParamsAndComplexUdt(this IDatabaseAccessorFactory databaseAccessorFactory, string a, string b, System.Guid? c, string password, Dibix.Sdk.Tests.Data.GenericParameterSet ids, Dibix.Sdk.Tests.Data.IntParameterTwoSet nested, Dibix.Sdk.Tests.Data.IntParameterTwoSet primitivenested, string? d = null, bool e = true, Dibix.Sdk.Tests.DomainModel.Direction? f = null, string? g = "Cake")
108108
{
109-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
109+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithParamsAndComplexUdt"))
110110
{
111111
ParametersVisitor @params = accessor.Parameters()
112112
.SetFromTemplate(new
@@ -130,7 +130,7 @@ public static void EmptyWithParamsAndComplexUdt(this IDatabaseAccessorFactory da
130130

131131
public static Dibix.FileEntity FileResult(this IDatabaseAccessorFactory databaseAccessorFactory, int id)
132132
{
133-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
133+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("FileResult"))
134134
{
135135
ParametersVisitor @params = accessor.Parameters()
136136
.SetFromTemplate(new
@@ -144,15 +144,15 @@ public static Dibix.FileEntity FileResult(this IDatabaseAccessorFactory database
144144

145145
public static IEnumerable<Dibix.Sdk.Tests.DomainModel.GenericContract> MultiConcreteResult(this IDatabaseAccessorFactory databaseAccessorFactory)
146146
{
147-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
147+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("MultiConcreteResult"))
148148
{
149149
return accessor.QueryMany<Dibix.Sdk.Tests.DomainModel.GenericContract>(MultiConcreteResultCommandText, CommandType.StoredProcedure, ParametersVisitor.Empty);
150150
}
151151
}
152152

153153
public static Dibix.Sdk.Tests.DomainModel.GenericContract SingleConrecteResultWithArrayParam(this IDatabaseAccessorFactory databaseAccessorFactory, Dibix.Sdk.Tests.Data.IntParameterSet ids)
154154
{
155-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
155+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("SingleConrecteResultWithArrayParam"))
156156
{
157157
ParametersVisitor @params = accessor.Parameters()
158158
.SetFromTemplate(new
@@ -166,7 +166,7 @@ public static Dibix.Sdk.Tests.DomainModel.GenericContract SingleConrecteResultWi
166166

167167
public static async Task<Dibix.Sdk.Tests.DomainModel.GenericContract> SingleConrecteResultWithParamsAsync(this IDatabaseAccessorFactory databaseAccessorFactory, int id, string name, CancellationToken cancellationToken = default)
168168
{
169-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
169+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("SingleConrecteResultWithParams"))
170170
{
171171
ParametersVisitor @params = accessor.Parameters()
172172
.SetFromTemplate(new
@@ -191,7 +191,7 @@ public static class TestAccessor
191191

192192
public static async Task FileUploadAsync(this IDatabaseAccessorFactory databaseAccessorFactory, System.IO.Stream data, CancellationToken cancellationToken = default)
193193
{
194-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
194+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("FileUpload"))
195195
{
196196
ParametersVisitor @params = accessor.Parameters()
197197
.SetFromTemplate(new

tests/Dibix.Sdk.Tests/Resources/CodeGeneration/Endpoints_Accessor.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static class TestAccessor
5454

5555
public static void AssertAuthorized(this IDatabaseAccessorFactory databaseAccessorFactory, byte right)
5656
{
57-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
57+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("AssertAuthorized"))
5858
{
5959
ParametersVisitor @params = accessor.Parameters()
6060
.SetFromTemplate(new
@@ -68,7 +68,7 @@ public static void AssertAuthorized(this IDatabaseAccessorFactory databaseAccess
6868

6969
public static short EmptyWithOutputParam(this IDatabaseAccessorFactory databaseAccessorFactory, out short a)
7070
{
71-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
71+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithOutputParam"))
7272
{
7373
ParametersVisitor @params = accessor.Parameters()
7474
.SetInt16(nameof(a), out IOutParameter<short> aOutput)
@@ -81,7 +81,7 @@ public static short EmptyWithOutputParam(this IDatabaseAccessorFactory databaseA
8181

8282
public static void EmptyWithParams(this IDatabaseAccessorFactory databaseAccessorFactory, string a, string b, System.Guid? c, string? password, Dibix.Sdk.Tests.Data.IntParameterSet ids, string? d = null, bool e = true, Dibix.Sdk.Tests.DomainModel.Direction? f = null, string? g = "Cake", System.DateTime? h = null, System.DateTime? i = null, System.TimeSpan? j = null)
8383
{
84-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
84+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithParams"))
8585
{
8686
ParametersVisitor @params = accessor.Parameters()
8787
.SetFromTemplate(new
@@ -106,7 +106,7 @@ public static void EmptyWithParams(this IDatabaseAccessorFactory databaseAccesso
106106

107107
public static void EmptyWithParamsAndComplexUdt(this IDatabaseAccessorFactory databaseAccessorFactory, string a, string b, System.Guid? c, string password, Dibix.Sdk.Tests.Data.GenericParameterSet ids, Dibix.Sdk.Tests.Data.IntParameterTwoSet nested, Dibix.Sdk.Tests.Data.IntParameterTwoSet primitivenested, string? d = null, bool e = true, Dibix.Sdk.Tests.DomainModel.Direction? f = null, string? g = "Cake")
108108
{
109-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
109+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithParamsAndComplexUdt"))
110110
{
111111
ParametersVisitor @params = accessor.Parameters()
112112
.SetFromTemplate(new
@@ -130,7 +130,7 @@ public static void EmptyWithParamsAndComplexUdt(this IDatabaseAccessorFactory da
130130

131131
public static Dibix.FileEntity FileResult(this IDatabaseAccessorFactory databaseAccessorFactory, int id)
132132
{
133-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
133+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("FileResult"))
134134
{
135135
ParametersVisitor @params = accessor.Parameters()
136136
.SetFromTemplate(new
@@ -144,15 +144,15 @@ public static Dibix.FileEntity FileResult(this IDatabaseAccessorFactory database
144144

145145
public static IEnumerable<Dibix.Sdk.Tests.DomainModel.GenericContract> MultiConcreteResult(this IDatabaseAccessorFactory databaseAccessorFactory)
146146
{
147-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
147+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("MultiConcreteResult"))
148148
{
149149
return accessor.QueryMany<Dibix.Sdk.Tests.DomainModel.GenericContract>(MultiConcreteResultCommandText, CommandType.StoredProcedure, ParametersVisitor.Empty);
150150
}
151151
}
152152

153153
public static Dibix.Sdk.Tests.DomainModel.GenericContract SingleConrecteResultWithArrayParam(this IDatabaseAccessorFactory databaseAccessorFactory, Dibix.Sdk.Tests.Data.IntParameterSet ids)
154154
{
155-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
155+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("SingleConrecteResultWithArrayParam"))
156156
{
157157
ParametersVisitor @params = accessor.Parameters()
158158
.SetFromTemplate(new
@@ -166,7 +166,7 @@ public static Dibix.Sdk.Tests.DomainModel.GenericContract SingleConrecteResultWi
166166

167167
public static async Task<Dibix.Sdk.Tests.DomainModel.GenericContract> SingleConrecteResultWithParamsAsync(this IDatabaseAccessorFactory databaseAccessorFactory, int id, string name, CancellationToken cancellationToken = default)
168168
{
169-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
169+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("SingleConrecteResultWithParams"))
170170
{
171171
ParametersVisitor @params = accessor.Parameters()
172172
.SetFromTemplate(new
@@ -191,7 +191,7 @@ public static class TestAccessor
191191

192192
public static async Task FileUploadAsync(this IDatabaseAccessorFactory databaseAccessorFactory, System.IO.Stream data, CancellationToken cancellationToken = default)
193193
{
194-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
194+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("FileUpload"))
195195
{
196196
ParametersVisitor @params = accessor.Parameters()
197197
.SetFromTemplate(new

tests/Dibix.Sdk.Tests/Resources/CodeGeneration/External_Empty.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static class TestAccessor
2222

2323
public static void Empty(this IDatabaseAccessorFactory databaseAccessorFactory)
2424
{
25-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
25+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("Empty"))
2626
{
2727
accessor.Execute(EmptyCommandText, CommandType.StoredProcedure, ParametersVisitor.Empty);
2828
}

tests/Dibix.Sdk.Tests/Resources/CodeGeneration/External_Empty_WithOutputParam.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static class TestAccessor
2222

2323
public static short EmptyWithOutputParam(this IDatabaseAccessorFactory databaseAccessorFactory, out short a)
2424
{
25-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
25+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithOutputParam"))
2626
{
2727
ParametersVisitor @params = accessor.Parameters()
2828
.SetInt16(nameof(a), out IOutParameter<short> aOutput)

tests/Dibix.Sdk.Tests/Resources/CodeGeneration/External_Empty_WithParams.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static class TestAccessor
2323

2424
public static void EmptyWithParams(this IDatabaseAccessorFactory databaseAccessorFactory, string a, string b, System.Guid? c, string? password, Dibix.Sdk.Tests.Data.IntParameterSet ids, string? d = null, bool e = true, Dibix.Sdk.Tests.DomainModel.Direction? f = null, string? g = "Cake", System.DateTime? h = null, System.DateTime? i = null, System.TimeSpan? j = null)
2525
{
26-
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create())
26+
using (IDatabaseAccessor accessor = databaseAccessorFactory.Create("EmptyWithParams"))
2727
{
2828
ParametersVisitor @params = accessor.Parameters()
2929
.SetFromTemplate(new

0 commit comments

Comments
 (0)