Skip to content

Commit 2cc6de2

Browse files
authored
Merge branch 'master' into upstream/buildDomains
2 parents e8df11c + d1e4da8 commit 2cc6de2

File tree

111 files changed

+4659
-1608
lines changed

Some content is hidden

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

111 files changed

+4659
-1608
lines changed

ChangeLog/7.1.0-Beta-2-dev.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,22 @@
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
1014
[main] Some EventArgs inheritors that were sealed classes transformed to read-only structures
1115
[main] DbCommandEventArgs became read-only structure
1216
[main] SqlCustomFunctionCall and SqlFunctionCall share one base type
1317
[main] SqlFunctionCall.Arguments property is IReadOnlyList now and parameters can't be changed after instance creation
1418
[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
1526
[main] BitFaster.Caching package reference is updated to 1.0.7
1627
[main] No error caused by ambiguity due to new IQueryable extension methods of .Net 6
1728
[reprocessing] DomainBuildErrorEventArgs (not sealed) became read-only structure

Directory.Build.props

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

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

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

Extensions/TestCommon/TestCommon.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,16 @@
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>
1117
<ItemGroup>
1218
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
1319
<PackageReference Include="NUnit" Version="3.13.2" />
1420
<PackageReference Include="NUnit3TestAdapter" Version="4.2.0" />
15-
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
1621
</ItemGroup>
1722
<ItemGroup>
1823
<ProjectReference Include="..\..\Orm\Xtensive.Orm.Tests.Framework\Xtensive.Orm.Tests.Framework.csproj" />

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@
1212
<SignAssembly>true</SignAssembly>
1313
<AssemblyOriginatorKeyFile>$(ExtensionsKeyFile)</AssemblyOriginatorKeyFile>
1414
</PropertyGroup>
15-
<ItemGroup>
15+
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
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>
1821
<ItemGroup>
1922
<None Include="Readme.txt" />
2023
</ItemGroup>

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
<AssemblyOriginatorKeyFile>$(ExtensionsKeyFile)</AssemblyOriginatorKeyFile>
1414
</PropertyGroup>
1515
<Import Project="$(SolutionDir)MSBuild\DataObjects.Net.InternalBuild.targets" />
16-
<ItemGroup>
16+
<ItemGroup Condition="'$(TargetFramework)'=='net5.0'">
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>
1922
<ItemGroup>
2023
<ProjectReference Include="..\..\Orm\Xtensive.Orm\Xtensive.Orm.csproj" />
2124
</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();
14+
var frame = new TrackingStackFrame(false);
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();
25-
var source = new TrackingStackFrame();
24+
var target = new TrackingStackFrame(false);
25+
var source = new TrackingStackFrame(false);
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();
35+
var target = new TrackingStackFrame(false);
3636

37-
var source = new TrackingStackFrame();
37+
var source = new TrackingStackFrame(false);
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();
49+
var target = new TrackingStackFrame(false);
5050
target.Register(CreateTrackingItem(key, TrackingItemState.Created));
5151
var count = target.Count;
5252

53-
var source = new TrackingStackFrame();
53+
var source = new TrackingStackFrame(false);
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();
64+
var target = new TrackingStackFrame(false);
6565
target.Register(CreateTrackingItem(key, TrackingItemState.Created));
6666
var count = target.Count;
6767

68-
var source = new TrackingStackFrame();
68+
var source = new TrackingStackFrame(false);
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();
82+
var target = new TrackingStackFrame(false);
8383
target.Register(CreateTrackingItem(key1, TrackingItemState.Created));
8484

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

Extensions/Xtensive.Orm.Tracking/ChangedValue.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
1-
using Xtensive.Orm.Model;
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;
26

37
namespace Xtensive.Orm.Tracking
48
{
59
/// <summary>
610
/// Represents a pair of original and changed values for a persistent field
711
/// </summary>
8-
public sealed class ChangedValue
12+
public readonly struct ChangedValue
913
{
1014
/// <summary>
1115
/// Gets the field.
1216
/// </summary>
13-
public FieldInfo Field { get; private set; }
17+
public FieldInfo Field { get; }
1418

1519
/// <summary>
1620
/// Gets the original value.
1721
/// </summary>
18-
public object OriginalValue { get; private set; }
22+
public object OriginalValue { get; }
1923

2024
/// <summary>
2125
/// Gets the new value.
2226
/// </summary>
23-
public object NewValue { get; private set; }
27+
public object NewValue { get; }
2428

2529
/// <summary>
2630
/// 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-
IList<ChangedValue> ChangedValues { get; }
35+
IReadOnlyList<ChangedValue> ChangedValues { get; }
3636
}
3737
}

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

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2019-2020 Xtensive LLC.
1+
// Copyright (C) 2019-2022 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,19 +15,20 @@ internal sealed class SessionTrackingMonitor : TrackingMonitor, ISessionTracking
1515
{
1616
private readonly Session session;
1717
private readonly DirectSessionAccessor accessor;
18-
private readonly Stack<TrackingStackFrame> stack;
18+
private readonly Stack<TrackingStackFrame> stack = new(2);
1919

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

2829
private void OnOpenTransaction(object sender, TransactionEventArgs e)
2930
{
30-
stack.Push(new TrackingStackFrame());
31+
stack.Push(new TrackingStackFrame(false));
3132
}
3233

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

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

9085
Subscribe();
9186
}

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

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2012 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
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.
44
// Created by: Dmitri Maximov
55
// Created: 2012.05.16
66

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

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

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

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

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

3729
public void MergeWith(TrackingItem source)
3830
{
@@ -55,29 +47,33 @@ public void MergeWith(TrackingItem source)
5547
State = source.State;
5648
}
5749

58-
private IEnumerable<ChangedValue> CalculateChangedValues()
50+
private IReadOnlyList<ChangedValue> CalculateChangedValues()
5951
{
6052
var originalValues = RawData.Origin;
6153
var changedValues = RawData.Difference;
6254

63-
if (State==TrackingItemState.Created) {
55+
if (State == TrackingItemState.Created) {
6456
originalValues = null;
6557
changedValues = RawData.Origin;
6658
}
6759

68-
foreach (var field in Key.TypeInfo.Fields.Where(f => f.Column!=null)) {
60+
var changedValuesList = new List<ChangedValue>(Key.TypeInfo.Fields.Count);
61+
62+
foreach (var field in Key.TypeInfo.Fields.Where(f => f.Column != null)) {
6963
object origValue = null, changedValue = null;
7064
int fieldIndex = field.MappingInfo.Offset;
7165
TupleFieldState fieldState;
72-
if (originalValues!=null)
66+
if (originalValues != null)
7367
origValue = originalValues.GetValue(fieldIndex, out fieldState);
74-
if (changedValues!=null) {
68+
if (changedValues != null) {
7569
changedValue = changedValues.GetValue(fieldIndex, out fieldState);
7670
if (!fieldState.IsAvailable())
7771
continue;
7872
}
79-
yield return new ChangedValue(field, origValue, changedValue);
73+
changedValuesList.Add(new ChangedValue(field, origValue, changedValue));
8074
}
75+
76+
return changedValuesList.AsReadOnly();
8177
}
8278

8379
private void MergeWith(Tuple difference)

0 commit comments

Comments
 (0)