Skip to content

Commit 5209a39

Browse files
committed
Persist sequence of SqlPersistTask is now IReadOnlyCollection
This allow to have Count of processible requests in CommandFactory. Current API won't be hurt - new ctors provided and readonly field extends functionality so it is not a breaking change. True sequence is List<T> anyway.
1 parent ad2daf4 commit 5209a39

5 files changed

Lines changed: 24 additions & 10 deletions

File tree

Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/CommandFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public virtual IEnumerable<CommandPart> CreatePersistParts(SqlPersistTask task,
4545
ArgumentValidator.EnsureArgumentNotNull(task, "task");
4646
ArgumentValidator.EnsureArgumentNotNullOrEmpty(parameterNamePrefix, "parameterNamePrefix");
4747

48-
var result = new List<CommandPart>();
48+
var result = new List<CommandPart>(task.RequestSequence.Count);
4949
int parameterIndex = 0;
5050
foreach (var request in task.RequestSequence) {
5151
var tuple = task.Tuple;

Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/SqlPersistTask.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
// Created by: Denis Krjuchkov
55
// Created: 2009.08.21
66

7+
using System;
78
using System.Collections.Generic;
9+
using System.Linq;
810
using Xtensive.Collections;
911
using Xtensive.Tuples;
1012
using Tuple = Xtensive.Tuples.Tuple;
@@ -24,7 +26,7 @@ public sealed class SqlPersistTask : SqlTask
2426
/// <summary>
2527
/// Requests to execute.
2628
/// </summary>
27-
public readonly IEnumerable<PersistRequest> RequestSequence;
29+
public readonly IReadOnlyCollection<PersistRequest> RequestSequence;
2830

2931
/// <summary>
3032
/// A tuple that stores changed column values.
@@ -52,18 +54,30 @@ public override void ProcessWith(ISqlTaskProcessor processor, CommandProcessorCo
5254

5355
public SqlPersistTask(PersistRequest request, Tuple tuple)
5456
{
55-
RequestSequence = EnumerableUtils.One(request);
57+
RequestSequence = new PersistRequest[1] { request };
5658
Tuple = tuple;
5759
}
5860

61+
[Obsolete]
5962
public SqlPersistTask(Key key, IEnumerable<PersistRequest> requestSequence, Tuple tuple)
63+
: this(key, (requestSequence as IReadOnlyCollection<PersistRequest>)?? requestSequence.ToList(), tuple)
64+
{
65+
}
66+
67+
[Obsolete]
68+
public SqlPersistTask(Key key, IEnumerable<PersistRequest> requestSequence, Tuple tuple, Tuple originalTuple, bool validateRowCount)
69+
: this(key, (requestSequence as IReadOnlyCollection<PersistRequest>) ?? requestSequence.ToList(), tuple, originalTuple, validateRowCount)
70+
{
71+
}
72+
73+
public SqlPersistTask(Key key, IReadOnlyCollection<PersistRequest> requestSequence, Tuple tuple)
6074
{
6175
EntityKey = key;
6276
RequestSequence = requestSequence;
6377
Tuple = tuple;
6478
}
6579

66-
public SqlPersistTask(Key key, IEnumerable<PersistRequest> requestSequence, Tuple tuple, Tuple originalTuple, bool validateRowCount)
80+
public SqlPersistTask(Key key, IReadOnlyCollection<PersistRequest> requestSequence, Tuple tuple, Tuple originalTuple, bool validateRowCount)
6781
{
6882
EntityKey = key;
6983
RequestSequence = requestSequence;

Orm/Xtensive.Orm/Orm/Providers/Persister.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2012 Xtensive LLC.
1+
// Copyright (C) 2012 Xtensive LLC.
22
// All rights reserved.
33
// For conditions of distribution and use, see license.
44
// Created by: Denis Krjuchkov
@@ -93,10 +93,10 @@ private SqlPersistTask CreateRemoveTask(PersistAction action, bool validateVersi
9393
}
9494
}
9595

96-
private ICollection<PersistRequest> GetOrBuildRequest(StorageNode node, PersistRequestBuilderTask task)
96+
private IReadOnlyCollection<PersistRequest> GetOrBuildRequest(StorageNode node, PersistRequestBuilderTask task)
9797
{
9898
var cache = node.PersistRequestCache;
99-
ICollection<PersistRequest> result;
99+
IReadOnlyCollection<PersistRequest> result;
100100
if (cache.TryGetValue(task, out result))
101101
return result;
102102
result = requestBuilder.Build(node, task);

Orm/Xtensive.Orm/Orm/Providers/Requests/PersistRequestBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class PersistRequestBuilder : DomainBoundHandler
2323
private ProviderInfo providerInfo;
2424
private StorageDriver driver;
2525

26-
internal ICollection<PersistRequest> Build(StorageNode node, PersistRequestBuilderTask task)
26+
internal IReadOnlyCollection<PersistRequest> Build(StorageNode node, PersistRequestBuilderTask task)
2727
{
2828
var context = new PersistRequestBuilderContext(task, node.Mapping, node.Configuration);
2929
List<PersistRequest> result;

Orm/Xtensive.Orm/Orm/StorageNode.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public sealed class StorageNode : ISessionSource
4848

4949
internal ConcurrentDictionary<SequenceInfo, object> KeySequencesCache { get; private set; }
5050

51-
internal ConcurrentDictionary<PersistRequestBuilderTask, ICollection<PersistRequest>> PersistRequestCache { get; private set; }
51+
internal ConcurrentDictionary<PersistRequestBuilderTask, IReadOnlyCollection<PersistRequest>> PersistRequestCache { get; private set; }
5252

5353
/// <inheritdoc/>
5454
public Session OpenSession()
@@ -123,7 +123,7 @@ internal StorageNode(Domain domain, NodeConfiguration configuration, ModelMappin
123123
TypeIdRegistry = typeIdRegistry;
124124

125125
KeySequencesCache = new ConcurrentDictionary<SequenceInfo, object>();
126-
PersistRequestCache = new ConcurrentDictionary<PersistRequestBuilderTask, ICollection<PersistRequest>>();
126+
PersistRequestCache = new ConcurrentDictionary<PersistRequestBuilderTask, IReadOnlyCollection<PersistRequest>>();
127127
InternalQueryCache = new ConcurrentDictionary<object, object>();
128128
}
129129
}

0 commit comments

Comments
 (0)