Skip to content

Commit a6ab74a

Browse files
authored
Merge pull request #468 from DataObjects-NET/tuple-transform-refactoring
Tuple transformation and Rse.Providers refactoring
2 parents 5bffbe2 + cbf53e2 commit a6ab74a

106 files changed

Lines changed: 1709 additions & 2820 deletions

File tree

Some content is hidden

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

ChangeLog/7.2.2-dev.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

ChangeLog/7.3.0-Beta-1-dev.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
[main] Removed obsolete member Values of SqlInsert type
33
[main] Removed obsolete methods GetSingleConstructor/GetSingleConstructorOrDefault of TypeHelper type
44
[main] Removed obsolete constant WellKnown.MaxNumberOfConditions, use DefaultMaxNumberOfConditions instead
5+
[main] Tuple transformation heavily refactored, many types from Xtensive.Tuples.Transform removed, renamed or turned to internal
6+
[main] Collection FixedList3 is removed
7+
[main] Xtensive.Orm.Rse.Providers.Provider descendants no longer build RecordSetHeader on initialization via virtual method
8+
[main] Many compilable providers build headers more easily with static methods
59
[firebird] Switch to .NET8/.NET10-only support, nuget packages actualized
610
[firebird] Support for Firebird 2.5 ended due to end-of-life state
711
[mysql] Switch to .NET8/.NET10-only support, nuget packages actualized

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
<IncludeSymbols Condition="$(GeneratePackageOnBuild) == 'true'">true</IncludeSymbols>
123123
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
124124
<EmbedUntrackedSources>true</EmbedUntrackedSources>
125-
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
125+
<ContinuousIntegrationBuild>false</ContinuousIntegrationBuild>
126126
</PropertyGroup>
127127

128128
<ItemGroup>

Extensions/Xtensive.Orm.Security/Cryptography/MD5HashingService.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// Created: 2011.05.22
66

77
using System.Security.Cryptography;
8-
using System.Text;
98
using Xtensive.IoC;
109

1110
namespace Xtensive.Orm.Security.Cryptography

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/Resources/Strings.Designer.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Orm/Xtensive.Orm.Sqlite/Sql.Drivers.Sqlite/ProviderInitializer.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,11 @@ private static Stream GetLibraryStream()
5454
private static string GetLibraryHash()
5555
{
5656
using (var hashProvider = SHA1.Create()) {
57-
//hashProvider.Initialize();
58-
ReadOnlySpan<byte> hashRaw;
59-
using (var stream = GetLibraryStream()) {
60-
hashRaw = hashProvider.ComputeHash(stream);
61-
}
62-
return new StringBuilder().AppendHexArray(hashRaw[..8]).ToString();
57+
hashProvider.Initialize();
58+
using (var stream = GetLibraryStream())
59+
hashProvider.ComputeHash(stream);
60+
var hash = hashProvider.Hash.Take(8).ToArray();
61+
return new StringBuilder().AppendHexArray(hash).ToString();
6362
}
6463
}
6564

Orm/Xtensive.Orm.Tests.Core/Tuples/Transform/CutInTransformTest.cs

Lines changed: 0 additions & 109 deletions
This file was deleted.

Orm/Xtensive.Orm.Tests.Core/Tuples/Transform/MapTransformTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public class MapTransformTest
1616
{
1717
public void MainTest()
1818
{
19-
Xtensive.Tuples.Tuple source = Tuple.Create(1);
20-
MapTransform transform = new MapTransform(true, TupleDescriptor.Create<byte, int, string>(), new[] {-1, 0});
21-
Xtensive.Tuples.Tuple result = transform.Apply(TupleTransformType.TransformedTuple, source);
19+
var source = Tuple.Create(1);
20+
var transform = new MapTransform(true, TupleDescriptor.Create<byte, int, string>(), new[] {-1, 0});
21+
var result = transform.Apply(TupleTransformType.TransformedTuple, source);
2222
Assert.That(result.GetFieldState(0), Is.EqualTo(TupleFieldState.Default));
2323
Assert.That(result.GetFieldState(1), Is.EqualTo(TupleFieldState.Available));
2424
Assert.That(result.GetFieldState(2), Is.EqualTo(TupleFieldState.Default));
Lines changed: 76 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1-
// Copyright (C) 2003-2010 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2008-2021 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: Alex Yakunin
55
// Created: 2008.06.05
66

77
using System;
88
using NUnit.Framework;
99
using Xtensive.Comparison;
10-
using Xtensive.Core;
11-
using Xtensive.Tuples;
12-
using Xtensive.Orm.Tests;
1310
using Xtensive.Tuples.Transform;
14-
using Tuple = Xtensive.Tuples.Tuple;
1511

1612
namespace Xtensive.Orm.Tests.Core.Tuples.Transform
1713
{
1814
[TestFixture]
1915
public class MergeTransformTest
2016
{
21-
public const int IterationCount = 1000000;
17+
private const int IterationCount = 1_000_000;
18+
private const int MeasurementRuns = 5;
2219

2320
[Test]
2421
public void BaseTest()
@@ -27,8 +24,8 @@ public void BaseTest()
2724
Xtensive.Tuples.Tuple t2 = Xtensive.Tuples.Tuple.Create(3, 4.0, "5");
2825
TestLog.Info($"Originals: {t1}, {t2}");
2926

30-
CombineTransform mt = new CombineTransform(false, t1.Descriptor, t2.Descriptor);
31-
CombineTransform mtro = new CombineTransform(true, t1.Descriptor, t2.Descriptor);
27+
ConcatTransform mt = new ConcatTransform(false, t1.Descriptor, t2.Descriptor);
28+
ConcatTransform mtro = new ConcatTransform(true, t1.Descriptor, t2.Descriptor);
3229

3330
Xtensive.Tuples.Tuple wt1 = mt.Apply(TupleTransformType.TransformedTuple, t1, t2);
3431
TestLog.Info($"Wrapper: {wt1}");
@@ -57,34 +54,27 @@ public void BaseTest()
5754
AssertEx.Throws<NotSupportedException>(delegate {
5855
wtro.SetValue(2, 0);
5956
});
57+
}
58+
59+
[Test]
60+
public void ToStringTest()
61+
{
62+
Xtensive.Tuples.Tuple t1 = Xtensive.Tuples.Tuple.Create(1, "2");
63+
Xtensive.Tuples.Tuple t2 = Xtensive.Tuples.Tuple.Create(3, 4.0, "5");
64+
65+
var ct = new ConcatTransform(false, t1.Descriptor, t2.Descriptor);
66+
Assert.That(ct.ToString(), Is.EqualTo("ConcatTransform(TupleDescriptor(Int32, String) + TupleDescriptor(Int32, Double, String), r/w)"));
6067

61-
CombineTransform mt3 = new CombineTransform(false, t1.Descriptor, t1.Descriptor, t1.Descriptor);
62-
Xtensive.Tuples.Tuple wt3 = mt3.Apply(TupleTransformType.TransformedTuple, t1, t1, t1);
63-
TestLog.Info($"Wrapper: {wt3}");
64-
Xtensive.Tuples.Tuple ct3 = mt3.Apply(TupleTransformType.Tuple, t1, t1, t1);
65-
TestLog.Info($"Copy: {ct3}");
66-
t1.SetValue(0,0);
67-
Assert.That(t1.GetValue(0), Is.EqualTo(wt3.GetValue(4)));
68-
t1.SetValue(0,1);
69-
70-
CombineTransform mt4 = new CombineTransform(false, t1.Descriptor, t1.Descriptor, t1.Descriptor, t1.Descriptor);
71-
Xtensive.Tuples.Tuple wt4 = mt4.Apply(TupleTransformType.TransformedTuple, t1, t1, t1, t1);
72-
TestLog.Info($"Wrapper: {wt4}");
73-
Xtensive.Tuples.Tuple ct4 = mt4.Apply(TupleTransformType.Tuple, t1, t1, t1, t1);
74-
TestLog.Info($"Copy: {ct4}");
75-
t1.SetValue(0,0);
76-
Assert.That(t1.GetValue(0), Is.EqualTo(wt4.GetValue(6)));
77-
t1.SetValue(0,1);
7868
}
7969

8070
[Test]
8171
[Explicit]
8272
[Category("Performance")]
83-
public void PerformanceTest1()
73+
public void ComparisonPerformanceTest()
8474
{
8575
AdvancedComparerStruct<Xtensive.Tuples.Tuple> comparer = AdvancedComparerStruct<Xtensive.Tuples.Tuple>.Default;
8676
Xtensive.Tuples.Tuple t = Xtensive.Tuples.Tuple.Create(1);
87-
CombineTransform mt = new CombineTransform(false, t.Descriptor, t.Descriptor);
77+
ConcatTransform mt = new ConcatTransform(false, t.Descriptor, t.Descriptor);
8878
Xtensive.Tuples.Tuple wt1 = mt.Apply(TupleTransformType.TransformedTuple, t, t);
8979
Xtensive.Tuples.Tuple wt2 = mt.Apply(TupleTransformType.TransformedTuple, t, t);
9080
Xtensive.Tuples.Tuple ct1 = mt.Apply(TupleTransformType.Tuple, t, t);
@@ -96,55 +86,78 @@ public void PerformanceTest1()
9686
comparer.Equals(wt1, wt2);
9787

9888
TestHelper.CollectGarbage();
99-
using (new Measurement("O&O", MeasurementOptions.Log, count))
100-
for (int i = 0; i<count; i++)
89+
using (var mx = new Measurement("O&O", MeasurementOptions.Log, count)) {
90+
for (int i = 0; i < count; i++)
10191
comparer.Equals(ct1, ct2);
10292

93+
mx.Complete();
94+
Console.WriteLine(mx.ToString());
95+
}
96+
10397
TestHelper.CollectGarbage();
104-
using (new Measurement("O&W", MeasurementOptions.Log, count))
105-
for (int i = 0; i<count; i++)
98+
using (var mx =new Measurement("O&W", MeasurementOptions.Log, count)) {
99+
for (int i = 0; i < count; i++)
106100
comparer.Equals(ct1, wt1);
101+
102+
mx.Complete();
103+
Console.WriteLine(mx.ToString());
104+
}
107105

108106
TestHelper.CollectGarbage();
109-
using (new Measurement("W&W", MeasurementOptions.Log, count))
107+
using (var mx = new Measurement("W&W", MeasurementOptions.Log, count)) {
110108
for (int i = 0; i<count; i++)
111109
comparer.Equals(wt1, wt2);
110+
111+
mx.Complete();
112+
Console.WriteLine(mx.ToString());
113+
}
112114
}
113115

114116

115117
[Test]
116118
[Explicit]
117119
[Category("Performance")]
118-
public void PerformanceTest2()
120+
public void InstanceCreationPerformanceTest()
119121
{
120-
AdvancedComparerStruct<Xtensive.Tuples.Tuple> comparer = AdvancedComparerStruct<Xtensive.Tuples.Tuple>.Default;
121-
Xtensive.Tuples.Tuple t = Xtensive.Tuples.Tuple.Create(1);
122-
CombineTransform mt = new CombineTransform(false, t.Descriptor, t.Descriptor, t.Descriptor, t.Descriptor);
123-
SegmentTransform st = new SegmentTransform(false, mt.Descriptor, new Segment<int>(1,2));
124-
Xtensive.Tuples.Tuple wt1 = st.Apply(TupleTransformType.TransformedTuple, mt.Apply(TupleTransformType.TransformedTuple, t, t, t, t));
125-
Xtensive.Tuples.Tuple wt2 = st.Apply(TupleTransformType.TransformedTuple, mt.Apply(TupleTransformType.TransformedTuple, t, t, t, t));
126-
Xtensive.Tuples.Tuple ct1 = st.Apply(TupleTransformType.Tuple, mt.Apply(TupleTransformType.Tuple, t, t, t, t));
127-
Xtensive.Tuples.Tuple ct2 = st.Apply(TupleTransformType.Tuple, mt.Apply(TupleTransformType.Tuple, t, t, t, t));
128-
int count = IterationCount;
129-
130-
comparer.Equals(ct1, ct2);
131-
comparer.Equals(ct1, wt1);
132-
comparer.Equals(wt1, wt2);
133-
134-
TestHelper.CollectGarbage();
135-
using (new Measurement("O&O", MeasurementOptions.Log, count))
136-
for (int i = 0; i<count; i++)
137-
comparer.Equals(ct1, ct2);
138-
139-
TestHelper.CollectGarbage();
140-
using (new Measurement("O&W", MeasurementOptions.Log, count))
141-
for (int i = 0; i<count; i++)
142-
comparer.Equals(ct1, wt1);
143-
144-
TestHelper.CollectGarbage();
145-
using (new Measurement("W&W", MeasurementOptions.Log, count))
146-
for (int i = 0; i<count; i++)
147-
comparer.Equals(wt1, wt2);
122+
Xtensive.Tuples.Tuple t1 = Xtensive.Tuples.Tuple.Create(1);
123+
Xtensive.Tuples.Tuple t2 = Xtensive.Tuples.Tuple.Create(1, "2");
124+
Xtensive.Tuples.Tuple t3 = Xtensive.Tuples.Tuple.Create(1, 2L, "3");
125+
Xtensive.Tuples.Tuple t4 = Xtensive.Tuples.Tuple.Create(1, 2L, "3", "4");
126+
Xtensive.Tuples.Tuple t5 = Xtensive.Tuples.Tuple.Create(1, 2L, "3", "4", 5);
127+
Xtensive.Tuples.Tuple t6 = Xtensive.Tuples.Tuple.Create(1, 2L, "3", "4", 5, 6L);
128+
129+
int count = IterationCount * 10;
130+
131+
_ = new ConcatTransform(false, t1.Descriptor, t1.Descriptor);
132+
_ = new ConcatTransform(false, t2.Descriptor, t2.Descriptor);
133+
_ = new ConcatTransform(false, t3.Descriptor, t3.Descriptor);
134+
_ = new ConcatTransform(false, t4.Descriptor, t4.Descriptor);
135+
_ = new ConcatTransform(false, t5.Descriptor, t5.Descriptor);
136+
137+
for (var run = 0; run < MeasurementRuns; run++) {
138+
TestHelper.CollectGarbage();
139+
using (var mx = new Measurement("N1Concat", MeasurementOptions.Log, count)) {
140+
for (int i = 0; i < count; i++) {
141+
_ = new ConcatTransform(false, t1.Descriptor, t1.Descriptor);
142+
}
143+
144+
mx.Complete();
145+
Console.WriteLine(mx.ToString());
146+
}
147+
}
148+
149+
Console.WriteLine();
150+
for (var run = 0; run < MeasurementRuns; run++) {
151+
TestHelper.CollectGarbage();
152+
using (var mx = new Measurement("N5Concat", MeasurementOptions.Log, count)) {
153+
for (int i = 0; i < count; i++) {
154+
_ = new ConcatTransform(false, t5.Descriptor, t5.Descriptor);
155+
}
156+
157+
mx.Complete();
158+
Console.WriteLine(mx.ToString());
159+
}
160+
}
148161
}
149162
}
150163
}

0 commit comments

Comments
 (0)