Skip to content

Commit e26f335

Browse files
committed
Remove breaking changes
1 parent b61a907 commit e26f335

17 files changed

+212
-42
lines changed

src/NHibernate.Test/Async/BulkManipulation/NativeSQLBulkOperationsWithCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ protected override void Configure(Configuration configuration)
4040
public async Task SimpleNativeSQLInsert_DoesNotEvictEntireCacheWhenQuerySpacesAreAddedAsync()
4141
{
4242
List<string> clearCalls = new List<string>();
43-
(Sfi.Settings.CacheProvider as SubstituteCacheProvider).OnClear(x =>
43+
((SubstituteCacheProvider) Sfi.Settings.CacheProvider).OnClear(x =>
4444
{
4545
clearCalls.Add(x);
4646
});

src/NHibernate.Test/BulkManipulation/NativeSQLBulkOperationsWithCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protected override void Configure(Configuration configuration)
2929
public void SimpleNativeSQLInsert_DoesNotEvictEntireCacheWhenQuerySpacesAreAdded()
3030
{
3131
List<string> clearCalls = new List<string>();
32-
(Sfi.Settings.CacheProvider as SubstituteCacheProvider).OnClear(x =>
32+
((SubstituteCacheProvider) Sfi.Settings.CacheProvider).OnClear(x =>
3333
{
3434
clearCalls.Add(x);
3535
});

src/NHibernate/Action/BulkOperationCleanupAction.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace NHibernate.Action
1414
/// Implementation of BulkOperationCleanupAction.
1515
/// </summary>
1616
[Serializable]
17-
public partial class BulkOperationCleanupAction : IExecutable, IAfterTransactionCompletionProcess
17+
public partial class BulkOperationCleanupAction : IAsyncExecutable, IAfterTransactionCompletionProcess
1818
{
1919
private readonly ISessionImplementor session;
2020
private readonly HashSet<string> affectedEntityNames = new HashSet<string>();
@@ -109,9 +109,17 @@ public void Execute()
109109
// nothing to do
110110
}
111111

112-
public IBeforeTransactionCompletionProcess BeforeTransactionCompletionProcess => null;
112+
public BeforeTransactionCompletionProcessDelegate BeforeTransactionCompletionProcess =>
113+
null;
113114

114-
public IAfterTransactionCompletionProcess AfterTransactionCompletionProcess => this;
115+
public AfterTransactionCompletionProcessDelegate AfterTransactionCompletionProcess =>
116+
ExecuteAfterTransactionCompletion;
117+
118+
IBeforeTransactionCompletionProcess IAsyncExecutable.BeforeTransactionCompletionProcess =>
119+
null;
120+
121+
IAfterTransactionCompletionProcess IAsyncExecutable.AfterTransactionCompletionProcess =>
122+
this;
115123

116124
public void ExecuteAfterTransactionCompletion(bool success)
117125
{

src/NHibernate/Action/CollectionAction.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace NHibernate.Action
1414
/// Any action relating to insert/update/delete of a collection
1515
/// </summary>
1616
[Serializable]
17-
public abstract partial class CollectionAction : IExecutable, IComparable<CollectionAction>, IDeserializationCallback, IAfterTransactionCompletionProcess
17+
public abstract partial class CollectionAction : IAsyncExecutable, IComparable<CollectionAction>, IDeserializationCallback, IAfterTransactionCompletionProcess
1818
{
1919
private readonly object key;
2020
private object finalKey;
@@ -104,10 +104,17 @@ public virtual void BeforeExecutions()
104104
/// <summary>Execute this action</summary>
105105
public abstract void Execute();
106106

107-
public virtual IBeforeTransactionCompletionProcess BeforeTransactionCompletionProcess => null;
107+
IBeforeTransactionCompletionProcess IAsyncExecutable.BeforeTransactionCompletionProcess =>
108+
null;
108109

109-
// Only make sense to add the delegate if there is a cache.
110-
public virtual IAfterTransactionCompletionProcess AfterTransactionCompletionProcess => persister.HasCache ? this : null;
110+
IAfterTransactionCompletionProcess IAsyncExecutable.AfterTransactionCompletionProcess =>
111+
persister.HasCache ? this : null;
112+
113+
public virtual BeforeTransactionCompletionProcessDelegate BeforeTransactionCompletionProcess =>
114+
null;
115+
116+
public virtual AfterTransactionCompletionProcessDelegate AfterTransactionCompletionProcess =>
117+
persister.HasCache ? ExecuteAfterTransactionCompletion : default(AfterTransactionCompletionProcessDelegate);
111118

112119
public virtual void ExecuteAfterTransactionCompletion(bool success)
113120
{

src/NHibernate/Action/CollectionUpdateAction.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Diagnostics;
33
using NHibernate.Cache;
4-
using NHibernate.Cache.Access;
54
using NHibernate.Cache.Entry;
65
using NHibernate.Collection;
76
using NHibernate.Engine;
@@ -12,7 +11,7 @@
1211
namespace NHibernate.Action
1312
{
1413
[Serializable]
15-
public sealed partial class CollectionUpdateAction : CollectionAction, IAfterTransactionCompletionProcess
14+
public sealed partial class CollectionUpdateAction : CollectionAction
1615
{
1716
private readonly bool emptySnapshot;
1817

@@ -116,6 +115,8 @@ private void PostUpdate()
116115

117116
public override void ExecuteAfterTransactionCompletion(bool success)
118117
{
118+
// NH Different behavior: to support unlocking collections from the cache.(r3260)
119+
119120
CacheKey ck = Session.GenerateCacheKey(Key, Persister.KeyType, Persister.Role);
120121

121122
if (success)

src/NHibernate/Action/EntityAction.cs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@ namespace NHibernate.Action
1313
/// instance.
1414
/// </summary>
1515
[Serializable]
16-
public abstract partial class EntityAction : IExecutable, IComparable<EntityAction>, IDeserializationCallback,
16+
public abstract partial class EntityAction :
17+
IAsyncExecutable,
1718
IBeforeTransactionCompletionProcess,
18-
IAfterTransactionCompletionProcess
19+
IAfterTransactionCompletionProcess,
20+
IComparable<EntityAction>,
21+
IDeserializationCallback
1922
{
2023
private readonly string entityName;
2124
private readonly object id;
@@ -104,12 +107,22 @@ public void BeforeExecutions()
104107

105108
public abstract void Execute();
106109

107-
public virtual IBeforeTransactionCompletionProcess BeforeTransactionCompletionProcess =>
110+
IBeforeTransactionCompletionProcess IAsyncExecutable.BeforeTransactionCompletionProcess =>
108111
NeedsBeforeTransactionCompletion() ? this : null;
109112

110-
public virtual IAfterTransactionCompletionProcess AfterTransactionCompletionProcess =>
113+
IAfterTransactionCompletionProcess IAsyncExecutable.AfterTransactionCompletionProcess =>
111114
NeedsAfterTransactionCompletion() ? this : null;
112115

116+
public virtual BeforeTransactionCompletionProcessDelegate BeforeTransactionCompletionProcess =>
117+
NeedsBeforeTransactionCompletion()
118+
? BeforeTransactionCompletionProcessImpl
119+
: default(BeforeTransactionCompletionProcessDelegate);
120+
121+
public virtual AfterTransactionCompletionProcessDelegate AfterTransactionCompletionProcess =>
122+
NeedsAfterTransactionCompletion()
123+
? AfterTransactionCompletionProcessImpl
124+
: default(AfterTransactionCompletionProcessDelegate);
125+
113126
protected virtual bool NeedsAfterTransactionCompletion()
114127
{
115128
return persister.HasCache || HasPostCommitEventListeners;
@@ -130,16 +143,6 @@ protected virtual void AfterTransactionCompletionProcessImpl(bool success)
130143
{
131144
}
132145

133-
public void ExecuteBeforeTransactionCompletion()
134-
{
135-
BeforeTransactionCompletionProcessImpl();
136-
}
137-
138-
public void ExecuteAfterTransactionCompletion(bool success)
139-
{
140-
AfterTransactionCompletionProcessImpl(success);
141-
}
142-
143146
#endregion
144147

145148
#region IComparable<EntityAction> Members
@@ -178,5 +181,15 @@ public override string ToString()
178181
{
179182
return StringHelper.Unqualify(GetType().FullName) + MessageHelper.InfoString(entityName, id);
180183
}
184+
185+
public void ExecuteBeforeTransactionCompletion()
186+
{
187+
BeforeTransactionCompletionProcessImpl();
188+
}
189+
190+
public void ExecuteAfterTransactionCompletion(bool success)
191+
{
192+
AfterTransactionCompletionProcessImpl(success);
193+
}
181194
}
182195
}

src/NHibernate/Action/IAfterTransactionCompletionProcess.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
namespace NHibernate.Action
22
{
3+
/// <summary>
4+
/// Contract representing some process that needs to occur during after transaction completion.
5+
/// </summary>
36
public partial interface IAfterTransactionCompletionProcess
47
{
58
/// <summary>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace NHibernate.Action
2+
{
3+
public interface IAsyncExecutable : IExecutable
4+
{
5+
/// <summary>
6+
/// Get the before-transaction-completion process, if any, for this action.
7+
/// </summary>
8+
new IBeforeTransactionCompletionProcess BeforeTransactionCompletionProcess { get; }
9+
10+
/// <summary>
11+
/// Get the after-transaction-completion process, if any, for this action.
12+
/// </summary>
13+
new IAfterTransactionCompletionProcess AfterTransactionCompletionProcess { get; }
14+
}
15+
}

src/NHibernate/Action/IBeforeTransactionCompletionProcess.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
namespace NHibernate.Action
22
{
3+
/// <summary>
4+
/// Contract representing some process that needs to occur during before transaction completion.
5+
/// </summary>
36
public partial interface IBeforeTransactionCompletionProcess
47
{
58
/// <summary>

src/NHibernate/Action/IExecutable.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
1+
using NHibernate.Engine;
2+
13
namespace NHibernate.Action
24
{
5+
/// <summary>
6+
/// Delegate representing some process that needs to occur before transaction completion.
7+
/// </summary>
8+
/// <remarks>
9+
/// NH specific: C# does not support dynamic interface proxies so a delegate is used in
10+
/// place of the Hibernate interface (see Action/BeforeTransactionCompletionProcess). The
11+
/// delegate omits the <see cref="ISessionImplementor" /> parameter as it is not used.
12+
/// </remarks>
13+
public delegate void BeforeTransactionCompletionProcessDelegate();
14+
15+
/// <summary>
16+
/// Delegate representing some process that needs to occur after transaction completion.
17+
/// </summary>
18+
/// <param name="success"> Did the transaction complete successfully? True means it did.</param>
19+
/// <remarks>
20+
/// NH specific: C# does not support dynamic interface proxies so a delegate is used in
21+
/// place of the Hibernate interface (see Action/AfterTransactionCompletionProcess). The
22+
/// delegate omits the <see cref="ISessionImplementor" /> parameter as it is not used.
23+
/// </remarks>
24+
public delegate void AfterTransactionCompletionProcessDelegate(bool success);
25+
326
/// <summary>
427
/// An operation which may be scheduled for later execution.
528
/// Usually, the operation is a database insert/update/delete,
@@ -21,11 +44,11 @@ public partial interface IExecutable
2144
/// <summary>
2245
/// Get the before-transaction-completion process, if any, for this action.
2346
/// </summary>
24-
IBeforeTransactionCompletionProcess BeforeTransactionCompletionProcess { get; }
47+
BeforeTransactionCompletionProcessDelegate BeforeTransactionCompletionProcess { get; }
2548

2649
/// <summary>
2750
/// Get the after-transaction-completion process, if any, for this action.
2851
/// </summary>
29-
IAfterTransactionCompletionProcess AfterTransactionCompletionProcess { get; }
52+
AfterTransactionCompletionProcessDelegate AfterTransactionCompletionProcess { get; }
3053
}
3154
}

src/NHibernate/Async/Action/BulkOperationCleanupAction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
namespace NHibernate.Action
2222
{
23-
public partial class BulkOperationCleanupAction : IExecutable, IAfterTransactionCompletionProcess
23+
public partial class BulkOperationCleanupAction : IAsyncExecutable, IAfterTransactionCompletionProcess
2424
{
2525

2626
#region IExecutable Members

src/NHibernate/Async/Action/CollectionAction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace NHibernate.Action
2222
{
2323
using System.Threading.Tasks;
2424
using System.Threading;
25-
public abstract partial class CollectionAction : IExecutable, IComparable<CollectionAction>, IDeserializationCallback, IAfterTransactionCompletionProcess
25+
public abstract partial class CollectionAction : IAsyncExecutable, IComparable<CollectionAction>, IDeserializationCallback, IAfterTransactionCompletionProcess
2626
{
2727

2828
#region IExecutable Members

src/NHibernate/Async/Action/CollectionUpdateAction.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
using System;
1212
using System.Diagnostics;
1313
using NHibernate.Cache;
14-
using NHibernate.Cache.Access;
1514
using NHibernate.Cache.Entry;
1615
using NHibernate.Collection;
1716
using NHibernate.Engine;
@@ -23,7 +22,7 @@ namespace NHibernate.Action
2322
{
2423
using System.Threading.Tasks;
2524
using System.Threading;
26-
public sealed partial class CollectionUpdateAction : CollectionAction, IAfterTransactionCompletionProcess
25+
public sealed partial class CollectionUpdateAction : CollectionAction
2726
{
2827

2928
public override async Task ExecuteAsync(CancellationToken cancellationToken)
@@ -123,6 +122,8 @@ private async Task PostUpdateAsync(CancellationToken cancellationToken)
123122
public override async Task ExecuteAfterTransactionCompletionAsync(bool success, CancellationToken cancellationToken)
124123
{
125124
cancellationToken.ThrowIfCancellationRequested();
125+
// NH Different behavior: to support unlocking collections from the cache.(r3260)
126+
126127
CacheKey ck = Session.GenerateCacheKey(Key, Persister.KeyType, Persister.Role);
127128

128129
if (success)

src/NHibernate/Async/Action/EntityAction.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ namespace NHibernate.Action
2020
{
2121
using System.Threading.Tasks;
2222
using System.Threading;
23-
public abstract partial class EntityAction : IExecutable, IComparable<EntityAction>, IDeserializationCallback,
23+
public abstract partial class EntityAction :
24+
IAsyncExecutable,
2425
IBeforeTransactionCompletionProcess,
25-
IAfterTransactionCompletionProcess
26+
IAfterTransactionCompletionProcess,
27+
IComparable<EntityAction>,
28+
IDeserializationCallback
2629
{
2730

2831
#region IExecutable Members
@@ -68,6 +71,8 @@ protected virtual Task AfterTransactionCompletionProcessImplAsync(bool success,
6871
}
6972
}
7073

74+
#endregion
75+
7176
public Task ExecuteBeforeTransactionCompletionAsync(CancellationToken cancellationToken)
7277
{
7378
if (cancellationToken.IsCancellationRequested)
@@ -85,7 +90,5 @@ public Task ExecuteAfterTransactionCompletionAsync(bool success, CancellationTok
8590
}
8691
return AfterTransactionCompletionProcessImplAsync(success, cancellationToken);
8792
}
88-
89-
#endregion
9093
}
9194
}

src/NHibernate/Async/Action/IExecutable.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
//------------------------------------------------------------------------------
99

1010

11+
using NHibernate.Engine;
12+
1113
namespace NHibernate.Action
1214
{
1315
using System.Threading.Tasks;
1416
using System.Threading;
17+
1518
public partial interface IExecutable
1619
{
1720

src/NHibernate/Async/Engine/ActionQueue.cs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace NHibernate.Engine
2323
{
2424
public partial class ActionQueue
2525
{
26-
26+
2727
private async Task ExecuteActionsAsync(IList list, CancellationToken cancellationToken)
2828
{
2929
cancellationToken.ThrowIfCancellationRequested();
@@ -240,5 +240,47 @@ public async Task AfterTransactionCompletionAsync(bool success, CancellationToke
240240
processes.Clear();
241241
}
242242
}
243+
244+
private partial class BeforeTransactionCompletionDelegatedProcess : IBeforeTransactionCompletionProcess
245+
{
246+
247+
public Task ExecuteBeforeTransactionCompletionAsync(CancellationToken cancellationToken)
248+
{
249+
if (cancellationToken.IsCancellationRequested)
250+
{
251+
return Task.FromCanceled<object>(cancellationToken);
252+
}
253+
try
254+
{
255+
ExecuteBeforeTransactionCompletion();
256+
return Task.CompletedTask;
257+
}
258+
catch (Exception ex)
259+
{
260+
return Task.FromException<object>(ex);
261+
}
262+
}
263+
}
264+
265+
private partial class AfterTransactionCompletionDelegatedProcess : IAfterTransactionCompletionProcess
266+
{
267+
268+
public Task ExecuteAfterTransactionCompletionAsync(bool success, CancellationToken cancellationToken)
269+
{
270+
if (cancellationToken.IsCancellationRequested)
271+
{
272+
return Task.FromCanceled<object>(cancellationToken);
273+
}
274+
try
275+
{
276+
ExecuteAfterTransactionCompletion(success);
277+
return Task.CompletedTask;
278+
}
279+
catch (Exception ex)
280+
{
281+
return Task.FromException<object>(ex);
282+
}
283+
}
284+
}
243285
}
244286
}

0 commit comments

Comments
 (0)