Skip to content

Commit 9734d03

Browse files
authored
Merge pull request #242 from servicetitan/upstream/buildDomains
Optimize Build Domain operation
2 parents d1e4da8 + cd14263 commit 9734d03

File tree

156 files changed

+2147
-5082
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+2147
-5082
lines changed

ChangeLog/7.1.0-Beta-2-dev.txt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,11 @@
77
[main] Obsolete Query's members have been removed
88
[main] Obsolete members of DelayedScalarQuery<T> have been removed
99
[main] Obsolete FieldInfo.IsDynalicallyDefined property's been removed (FieldInfo.IsDynamicallyDefined is still there)
10-
[main] Changed translation of queries when DomainConfiguration.ShareStorageSchemaOverNodes set to true
11-
[main] StorageDriver.Compile(ISqlCompileUnit, NodeConfiguration) became obsolete
12-
[main] SqlNodeActualizer became obsolete
13-
[main] SqlCompilerConfiguration's DatabaseMapping and SchemaMapping moved to SqlPostCompilerConfiguration
1410
[main] Some EventArgs inheritors that were sealed classes transformed to read-only structures
1511
[main] DbCommandEventArgs became read-only structure
1612
[main] SqlCustomFunctionCall and SqlFunctionCall share one base type
1713
[main] SqlFunctionCall.Arguments property is IReadOnlyList now and parameters can't be changed after instance creation
1814
[main] Xtensive.Sql.Dml.Extensions.IsNullReference() extension method is marked obsolete, use 'is null' operator instead
19-
[main] DirectSessionAccessor.GetChangedEntities() result type changed to improve enumeration
20-
[main] EntityChangeRegistry.GetItems(PersistenceState) changed result type to improve enumeration
21-
[main] EntitySetChangeRegistry.GetItems() changed result type to improve enumeration
22-
[main] IgnoreRule now has only one public constructor - parameterless
23-
[main] IgnoreRule supports indexes
24-
[main] Queries use parameters instead of constant values for type indentifiers within columns list
25-
[main] Added DomainConfiguration.PreferTypeIdsAsQueryParameters to choose between contants and parameters for TypeIds
2615
[main] BitFaster.Caching package reference is updated to 1.0.7
2716
[main] No error caused by ambiguity due to new IQueryable extension methods of .Net 6
2817
[reprocessing] DomainBuildErrorEventArgs (not sealed) became read-only structure

Directory.Build.props

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@
6363

6464
<PropertyGroup Condition = "$(Configuration.Contains('Debug')) == 'true'">
6565
<DefineConstants>$(DefineConstants);TRACE;DEBUG</DefineConstants>
66-
<DebugSymbols>true</DebugSymbols>
67-
<DebugType>portable</DebugType>
6866
</PropertyGroup>
6967

7068
<PropertyGroup Condition = "$(Configuration.Contains('Release')) == 'true'">

Extensions/TestCommon/TestCommon.csproj

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,11 @@
88
<AssemblyOriginatorKeyFile>$(ExtensionsKeyFile)</AssemblyOriginatorKeyFile>
99
</PropertyGroup>
1010
<Import Project="$(SolutionDir)MSBuild\DataObjects.Net.InternalBuild.targets" />
11-
<ItemGroup Condition="'$(TargetFramework)'=='net5.0'">
12-
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
13-
</ItemGroup>
14-
<ItemGroup Condition="'$(TargetFramework)'=='net6.0'">
15-
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
16-
</ItemGroup>
1711
<ItemGroup>
1812
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
1913
<PackageReference Include="NUnit" Version="3.13.2" />
2014
<PackageReference Include="NUnit3TestAdapter" Version="4.2.0" />
15+
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
2116
</ItemGroup>
2217
<ItemGroup>
2318
<ProjectReference Include="..\..\Orm\Xtensive.Orm.Tests.Framework\Xtensive.Orm.Tests.Framework.csproj" />

Extensions/Xtensive.Orm.Reprocessing/Xtensive.Orm.Reprocessing.csproj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@
1212
<SignAssembly>true</SignAssembly>
1313
<AssemblyOriginatorKeyFile>$(ExtensionsKeyFile)</AssemblyOriginatorKeyFile>
1414
</PropertyGroup>
15-
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
15+
<ItemGroup>
1616
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
1717
</ItemGroup>
18-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
19-
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
20-
</ItemGroup>
2118
<ItemGroup>
2219
<None Include="Readme.txt" />
2320
</ItemGroup>

Extensions/Xtensive.Orm.Security/Xtensive.Orm.Security.csproj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,9 @@
1313
<AssemblyOriginatorKeyFile>$(ExtensionsKeyFile)</AssemblyOriginatorKeyFile>
1414
</PropertyGroup>
1515
<Import Project="$(SolutionDir)MSBuild\DataObjects.Net.InternalBuild.targets" />
16-
<ItemGroup Condition="'$(TargetFramework)'=='net5.0'">
16+
<ItemGroup>
1717
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
1818
</ItemGroup>
19-
<ItemGroup Condition="'$(TargetFramework)'=='net6.0'">
20-
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
21-
</ItemGroup>
2219
<ItemGroup>
2320
<ProjectReference Include="..\..\Orm\Xtensive.Orm\Xtensive.Orm.csproj" />
2421
</ItemGroup>

Extensions/Xtensive.Orm.Tracking.Tests/TrackingStackFrameTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class TrackingStackFrameTests : TrackingTestBase
1111
[Test]
1212
public void SafelyInsertTheSameItemTwiceTest()
1313
{
14-
var frame = new TrackingStackFrame(false);
14+
var frame = new TrackingStackFrame();
1515
var key = Key.Create(Domain, typeof(MyEntity), 1);
1616
var item = CreateTrackingItem(key, TrackingItemState.Created);
1717
frame.Register(item);
@@ -21,8 +21,8 @@ public void SafelyInsertTheSameItemTwiceTest()
2121
[Test]
2222
public void MergeTwoEmptyFramesTest()
2323
{
24-
var target = new TrackingStackFrame(false);
25-
var source = new TrackingStackFrame(false);
24+
var target = new TrackingStackFrame();
25+
var source = new TrackingStackFrame();
2626
target.MergeWith(source);
2727

2828
Assert.AreEqual(0, target.Count);
@@ -32,9 +32,9 @@ public void MergeTwoEmptyFramesTest()
3232
public void MergeEmptyFrameWithNonEmptyFrameTest()
3333
{
3434
var key = Key.Create(Domain, typeof(MyEntity), 1);
35-
var target = new TrackingStackFrame(false);
35+
var target = new TrackingStackFrame();
3636

37-
var source = new TrackingStackFrame(false);
37+
var source = new TrackingStackFrame();
3838
source.Register(CreateTrackingItem(key, TrackingItemState.Created));
3939

4040
target.MergeWith(source);
@@ -46,11 +46,11 @@ public void MergeEmptyFrameWithNonEmptyFrameTest()
4646
public void MergeNonEmptyFrameWithEmptyFrameTest()
4747
{
4848
var key = Key.Create(Domain, typeof(MyEntity), 1);
49-
var target = new TrackingStackFrame(false);
49+
var target = new TrackingStackFrame();
5050
target.Register(CreateTrackingItem(key, TrackingItemState.Created));
5151
var count = target.Count;
5252

53-
var source = new TrackingStackFrame(false);
53+
var source = new TrackingStackFrame();
5454

5555
target.MergeWith(source);
5656

@@ -61,11 +61,11 @@ public void MergeNonEmptyFrameWithEmptyFrameTest()
6161
public void MergeFramesWithTheSameItemsTest()
6262
{
6363
var key = Key.Create(Domain, typeof(MyEntity), 1);
64-
var target = new TrackingStackFrame(false);
64+
var target = new TrackingStackFrame();
6565
target.Register(CreateTrackingItem(key, TrackingItemState.Created));
6666
var count = target.Count;
6767

68-
var source = new TrackingStackFrame(false);
68+
var source = new TrackingStackFrame();
6969
source.Register(CreateTrackingItem(key, TrackingItemState.Changed));
7070

7171
target.MergeWith(source);
@@ -79,10 +79,10 @@ public void MergeFramesWithDifferentItemsTest()
7979
{
8080
var key1 = Key.Create(Domain, typeof(MyEntity), 1);
8181
var key2 = Key.Create(Domain, typeof(MyEntity), 2);
82-
var target = new TrackingStackFrame(false);
82+
var target = new TrackingStackFrame();
8383
target.Register(CreateTrackingItem(key1, TrackingItemState.Created));
8484

85-
var source = new TrackingStackFrame(false);
85+
var source = new TrackingStackFrame();
8686
source.Register(CreateTrackingItem(key2, TrackingItemState.Changed));
8787
var count = target.Count + source.Count;
8888

Extensions/Xtensive.Orm.Tracking/ChangedValue.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,26 @@
1-
// Copyright (C) 2012-2022 Xtensive LLC.
2-
// This code is distributed under MIT license terms.
3-
// See the License.txt file in the project root for more information.
4-
5-
using Xtensive.Orm.Model;
1+
using Xtensive.Orm.Model;
62

73
namespace Xtensive.Orm.Tracking
84
{
95
/// <summary>
106
/// Represents a pair of original and changed values for a persistent field
117
/// </summary>
12-
public readonly struct ChangedValue
8+
public sealed class ChangedValue
139
{
1410
/// <summary>
1511
/// Gets the field.
1612
/// </summary>
17-
public FieldInfo Field { get; }
13+
public FieldInfo Field { get; private set; }
1814

1915
/// <summary>
2016
/// Gets the original value.
2117
/// </summary>
22-
public object OriginalValue { get; }
18+
public object OriginalValue { get; private set; }
2319

2420
/// <summary>
2521
/// Gets the new value.
2622
/// </summary>
27-
public object NewValue { get; }
23+
public object NewValue { get; private set; }
2824

2925
/// <summary>
3026
/// Initializes a new instance of the <see cref="ChangedValue"/> class.

Extensions/Xtensive.Orm.Tracking/Interfaces/ITrackingItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ public interface ITrackingItem
3232
/// <summary>
3333
/// Gets list of detected changes of field values.
3434
/// </summary>
35-
IReadOnlyList<ChangedValue> ChangedValues { get; }
35+
IList<ChangedValue> ChangedValues { get; }
3636
}
3737
}

Extensions/Xtensive.Orm.Tracking/Internals/SessionTrackingMonitor.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2019-2022 Xtensive LLC.
1+
// Copyright (C) 2019-2020 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44

@@ -15,20 +15,19 @@ internal sealed class SessionTrackingMonitor : TrackingMonitor, ISessionTracking
1515
{
1616
private readonly Session session;
1717
private readonly DirectSessionAccessor accessor;
18-
private readonly Stack<TrackingStackFrame> stack = new(2);
18+
private readonly Stack<TrackingStackFrame> stack;
1919

2020
private void Subscribe()
2121
{
22-
var events = session.Events;
23-
events.Persisting += OnPersisting;
24-
events.TransactionOpened += OnOpenTransaction;
25-
events.TransactionCommitted += OnCommitTransaction;
26-
events.TransactionRollbacked += OnRollbackTransaction;
22+
session.Events.Persisting += OnPersisting;
23+
session.Events.TransactionOpened += OnOpenTransaction;
24+
session.Events.TransactionCommitted += OnCommitTransaction;
25+
session.Events.TransactionRollbacked += OnRollbackTransaction;
2726
}
2827

2928
private void OnOpenTransaction(object sender, TransactionEventArgs e)
3029
{
31-
stack.Push(new TrackingStackFrame(false));
30+
stack.Push(new TrackingStackFrame());
3231
}
3332

3433
private void OnCommitTransaction(object sender, TransactionEventArgs e)
@@ -77,10 +76,16 @@ private void OnPersisting(object sender, EventArgs e)
7776
[ServiceConstructor]
7877
public SessionTrackingMonitor(Session session, DirectSessionAccessor accessor)
7978
{
80-
this.session = session ?? throw new ArgumentNullException(nameof(session));
81-
this.accessor = accessor ?? throw new ArgumentNullException(nameof(accessor));
79+
if (session==null)
80+
throw new ArgumentNullException("session");
81+
if (accessor==null)
82+
throw new ArgumentNullException("accessor");
8283

83-
stack.Push(new TrackingStackFrame(false));
84+
this.session = session;
85+
this.accessor = accessor;
86+
87+
stack = new Stack<TrackingStackFrame>();
88+
stack.Push(new TrackingStackFrame());
8489

8590
Subscribe();
8691
}

Extensions/Xtensive.Orm.Tracking/Internals/TrackingItem.cs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2012-2022 Xtensive LLC.
2-
// This code is distributed under MIT license terms.
3-
// See the License.txt file in the project root for more information.
1+
// Copyright (C) 2012 Xtensive LLC.
2+
// All rights reserved.
3+
// For conditions of distribution and use, see license.
44
// Created by: Dmitri Maximov
55
// Created: 2012.05.16
66

@@ -16,15 +16,23 @@ namespace Xtensive.Orm.Tracking
1616
[DebuggerDisplay("{Key}")]
1717
internal sealed class TrackingItem : ITrackingItem
1818
{
19-
private IReadOnlyList<ChangedValue> cachedChangedValues;
19+
private IList<ChangedValue> cachedChangedValues;
2020

21-
public Key Key { get; }
21+
public Key Key { get; private set; }
2222

2323
public DifferentialTuple RawData { get; private set; }
2424

2525
public TrackingItemState State { get; private set; }
2626

27-
public IReadOnlyList<ChangedValue> ChangedValues => cachedChangedValues ??= CalculateChangedValues();
27+
public IList<ChangedValue> ChangedValues
28+
{
29+
get
30+
{
31+
if (cachedChangedValues==null)
32+
cachedChangedValues = CalculateChangedValues().ToList().AsReadOnly();
33+
return cachedChangedValues;
34+
}
35+
}
2836

2937
public void MergeWith(TrackingItem source)
3038
{
@@ -47,33 +55,29 @@ public void MergeWith(TrackingItem source)
4755
State = source.State;
4856
}
4957

50-
private IReadOnlyList<ChangedValue> CalculateChangedValues()
58+
private IEnumerable<ChangedValue> CalculateChangedValues()
5159
{
5260
var originalValues = RawData.Origin;
5361
var changedValues = RawData.Difference;
5462

55-
if (State == TrackingItemState.Created) {
63+
if (State==TrackingItemState.Created) {
5664
originalValues = null;
5765
changedValues = RawData.Origin;
5866
}
5967

60-
var changedValuesList = new List<ChangedValue>(Key.TypeInfo.Fields.Count);
61-
62-
foreach (var field in Key.TypeInfo.Fields.Where(f => f.Column != null)) {
68+
foreach (var field in Key.TypeInfo.Fields.Where(f => f.Column!=null)) {
6369
object origValue = null, changedValue = null;
6470
int fieldIndex = field.MappingInfo.Offset;
6571
TupleFieldState fieldState;
66-
if (originalValues != null)
72+
if (originalValues!=null)
6773
origValue = originalValues.GetValue(fieldIndex, out fieldState);
68-
if (changedValues != null) {
74+
if (changedValues!=null) {
6975
changedValue = changedValues.GetValue(fieldIndex, out fieldState);
7076
if (!fieldState.IsAvailable())
7177
continue;
7278
}
73-
changedValuesList.Add(new ChangedValue(field, origValue, changedValue));
79+
yield return new ChangedValue(field, origValue, changedValue);
7480
}
75-
76-
return changedValuesList.AsReadOnly();
7781
}
7882

7983
private void MergeWith(Tuple difference)

0 commit comments

Comments
 (0)