Skip to content

Commit cb5ec4c

Browse files
committed
Merge branch 'master' into master-firebird4-support
# Conflicts: # ChangeLog/7.1.0-dev.txt
2 parents 7839a1a + abed776 commit cb5ec4c

File tree

64 files changed

+421
-530
lines changed

Some content is hidden

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

64 files changed

+421
-530
lines changed

ChangeLog/7.1.0-dev.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,13 @@
6868
[main] CompositePreCompiler.Items became readonly field and changed its type to IReadOnlyList<IPreCompiler>
6969
[main] SqlCompilerConfiguration's SchemaMapping and DatabaseMapping changed return types to IReadOnlyDictionary<string, string>
7070
[main] TypeMappingRegistry.Mappings and .ReverseMappings changed return types to IReadOnlyDictionary<TKey, TValue>
71+
[main] Xtensive.Orm.Services.QueryTranslationResult became read-only structure
72+
[main] Query and ParameterBindings properties of Xtensive.Orm.Services.QueryTranslationResult changed their types and became read-only
73+
[main] SqlTranslator.BuildBatch method changed its parameter from string[] to IReadOnlyList<string>
74+
[main] TypeReference, QueryRequest QueryParameterBinding types became read-only structures
75+
[main] TypeInfoRef, ColumnInfoRef, ColumnGroup and ComparisonRule types became read-only structures
76+
[main] RecordSetHeader constructors changed IEnumerable<T> paremters to IReadOnlyList<T>
77+
[main] ColumnGroupCollection no longer takes IEnumerable<T> as parameter of constructor
78+
[main] ColumnCollection no longer takes IEnumerable<T> as parameter of constructor, only constructor with IReadOnlyList<T> is available now
7179
[firebird] Add support for Firebird 4
72-
[sqlserver] Microsoft.Data.SqlClient is updated to verson 4.0.0
80+
[sqlserver] Microsoft.Data.SqlClient is updated to verson 4.0.0

Extensions/Xtensive.Orm.BulkOperations/Internals/BulkDeleteOperation.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ protected async override Task<int> ExecuteInternalAsync(CancellationToken token
5151
}
5252
}
5353

54-
private QueryCommand CreateCommand(QueryTranslationResult request)
54+
private QueryCommand CreateCommand(in QueryTranslationResult request)
5555
{
5656
var delete = SqlDml.Delete(SqlDml.TableRef(PrimaryIndexes[0].Table));
57-
Join(delete, (SqlSelect) request.Query);
57+
Join(delete, request.Query);
5858
return ToCommand(delete);
5959
}
6060

Extensions/Xtensive.Orm.BulkOperations/Internals/BulkUpdateOperation.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ protected async override Task<int> ExecuteInternalAsync(CancellationToken token
5454
}
5555
}
5656

57-
private QueryCommand CreateCommand(QueryTranslationResult request)
57+
private QueryCommand CreateCommand(in QueryTranslationResult request)
5858
{
5959
var update = SqlDml.Update(SqlDml.TableRef(PrimaryIndexes[0].Table));
6060
setOperation.Statement = SetStatement.Create(update);
61-
Join(update, (SqlSelect) request.Query);
61+
Join(update, request.Query);
6262
setOperation.AddValues();
6363
return ToCommand(update);
6464
}

Extensions/Xtensive.Orm.BulkOperations/Internals/SetOperation.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private void AddComputedStaticExpression(AddValueContext addContext)
103103
all,
104104
addContext.Lambda);
105105
QueryTranslationResult request = parent.GetRequest(parent.QueryProvider.CreateQuery<T>(selectExpression));
106-
var sqlSelect = ((SqlSelect)request.Query);
106+
var sqlSelect = request.Query;
107107
SqlExpression ex = sqlSelect.OrderBy[0].Expression;
108108
var placeholder = ex as SqlPlaceholder;
109109
if (placeholder == null)
@@ -133,7 +133,7 @@ private void AddComputedExpression(AddValueContext addContext)
133133
all,
134134
addContext.Lambda);
135135
QueryTranslationResult request = parent.GetRequest(parent.QueryProvider.CreateQuery<T>(selectExpression));
136-
var sqlSelect = ((SqlSelect) request.Query);
136+
var sqlSelect = request.Query;
137137
SqlExpression ex = sqlSelect.OrderBy[0].Expression;
138138
parent.Bindings.AddRange(request.ParameterBindings);
139139

@@ -217,7 +217,7 @@ private void AddEntityValue(AddValueContext addContext)
217217
QueryTranslationResult request = parent.GetRequest(field.ValueType, q);
218218
parent.Bindings.AddRange(request.ParameterBindings);
219219
SqlTableColumn c = SqlDml.TableColumn(addContext.Statement.Table, addContext.Field.Columns[i].Name);
220-
addContext.Statement.AddValue(c, SqlDml.SubQuery((ISqlQueryExpression) request.Query));
220+
addContext.Statement.AddValue(c, SqlDml.SubQuery(request.Query));
221221
}
222222
return;
223223
}

Orm/Xtensive.Orm.Tests/Storage/Prefetch/PrefetchManagerAdvancedTest.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Xtensive.Orm.Providers;
2121
using Xtensive.Orm.Rse.Providers;
2222
using Xtensive.Orm.Tests.Storage.Prefetch.Model;
23+
using GraphContainerDictionary = System.Collections.Generic.Dictionary<(Xtensive.Orm.Key key, Xtensive.Orm.Model.TypeInfo type), Xtensive.Orm.Internals.Prefetch.GraphContainer>;
2324

2425
namespace Xtensive.Orm.Tests.Storage.Prefetch
2526
{
@@ -103,9 +104,9 @@ public void ReferencedEntityHasBeenFullyLoadedBeforeTaskActivationTest()
103104

104105
prefetchManager.InvokePrefetch(order0Key, null, new PrefetchFieldDescriptor(EmployeeField, true, true));
105106
prefetchManager.InvokePrefetch(order1Key, null, new PrefetchFieldDescriptor(EmployeeField, true, true));
106-
var graphContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
107+
var graphContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
107108
Assert.AreEqual(2, graphContainers.Count);
108-
Func<Key, ReferencedEntityContainer> taskSelector = containerKey => graphContainers
109+
Func<Key, ReferencedEntityContainer> taskSelector = containerKey => graphContainers.Values
109110
.Where(container => container.Key==containerKey)
110111
.SelectMany(container => container.ReferencedEntityContainers).Single();
111112
var entityContainer0 = taskSelector.Invoke(order0Key);
@@ -180,7 +181,7 @@ public void PrefetchEmptyEntitySetTest()
180181
var prefetchManager = (PrefetchManager) PrefetchProcessorField.GetValue(session.Handler);
181182
session.Handler.FetchEntityState(orderKey);
182183
prefetchManager.InvokePrefetch(orderKey, null, new PrefetchFieldDescriptor(DetailsField, null));
183-
var graphContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
184+
var graphContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
184185
Assert.AreEqual(1, graphContainers.Count);
185186
prefetchManager.ExecuteTasks(true);
186187
EntitySetState actualState;
@@ -202,8 +203,8 @@ public void PrefetchReferencedEntityWhenTypeSpecifiedForOwnerIsInvalidTest()
202203
prefetchManager.InvokePrefetch(keyWithoutType, Domain.Model.Types[typeof (PersonalProduct)],
203204
new PrefetchFieldDescriptor(Domain.Model.Types[typeof (PersonalProduct)].Fields["Employee"],
204205
true, true));
205-
var graphContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
206-
var referencedEntityContainer = graphContainers
206+
var graphContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
207+
var referencedEntityContainer = graphContainers.Values
207208
.Where(container => container.ReferencedEntityContainers!=null).Single()
208209
.ReferencedEntityContainers.Single();
209210
prefetchManager.ExecuteTasks(true);
@@ -218,10 +219,10 @@ public void DeletingOfTasksAtTransactionCommitOrRollbackTest()
218219

219220
using (var session = Domain.OpenSession()) {
220221
var prefetchManager = (PrefetchManager) PrefetchProcessorField.GetValue(session.Handler);
221-
HashSet<GraphContainer> graphContainers;
222+
GraphContainerDictionary graphContainers;
222223
using (var tx = session.OpenTransaction()) {
223224
prefetchManager.InvokePrefetch(orderKey, null, new PrefetchFieldDescriptor(CustomerField));
224-
graphContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
225+
graphContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
225226
Assert.AreEqual(1, graphContainers.Count);
226227
tx.Complete();
227228
}
@@ -251,7 +252,7 @@ public void TasksAreExecutedAutomaticallyWhenCountLimitIsReachedTest()
251252
using (var session = Domain.OpenSession())
252253
using (var tx = session.OpenTransaction()) {
253254
var prefetchManager = (PrefetchManager) PrefetchProcessorField.GetValue(session.Handler);
254-
var graphContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
255+
var graphContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
255256
var idField = BookType.Fields["Id"];
256257
for (var i = 1; i < keys.Count; i++) {
257258
prefetchManager.InvokePrefetch(keys[i - 1], null, new PrefetchFieldDescriptor(idField));

Orm/Xtensive.Orm.Tests/Storage/Prefetch/PrefetchManagerBasicTest.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Xtensive.Orm.Rse;
2121
using Xtensive.Orm.Services;
2222
using Xtensive.Orm.Tests.Storage.Prefetch.Model;
23+
using GraphContainerDictionary = System.Collections.Generic.Dictionary<(Xtensive.Orm.Key key, Xtensive.Orm.Model.TypeInfo type), Xtensive.Orm.Internals.Prefetch.GraphContainer>;
2324

2425
namespace Xtensive.Orm.Tests.Storage.Prefetch
2526
{
@@ -380,12 +381,12 @@ public void ReferencedEntityByKnownForeignKeyPrefetchTest()
380381
var prefetchManager = (PrefetchManager) PrefetchProcessorField.GetValue(session.Handler);
381382

382383
prefetchManager.InvokePrefetch(orderKey, null, new PrefetchFieldDescriptor(EmployeeField, true, true));
383-
var graphContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
384+
var graphContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
384385
Assert.AreEqual(2, graphContainers.Count);
385-
foreach (var container in graphContainers)
386+
foreach (var container in graphContainers.Values)
386387
Assert.IsNull(container.ReferencedEntityContainers);
387-
var orderContainer = graphContainers.Where(container => container.Key==orderKey).SingleOrDefault();
388-
var employeeContainer = graphContainers.Where(container => container.Key!=orderKey).SingleOrDefault();
388+
var orderContainer = graphContainers.Values.Where(container => container.Key==orderKey).SingleOrDefault();
389+
var employeeContainer = graphContainers.Values.Where(container => container.Key!=orderKey).SingleOrDefault();
389390
Assert.IsNotNull(orderContainer);
390391
Assert.IsNotNull(employeeContainer);
391392
prefetchManager.ExecuteTasks();
@@ -431,9 +432,9 @@ public void ReferencedEntityByNullAsForeignKeyPrefetchTest()
431432
var prefetchManager = (PrefetchManager) PrefetchProcessorField.GetValue(session.Handler);
432433
session.Handler.FetchEntityState(orderKey);
433434
prefetchManager.InvokePrefetch(orderKey, null, new PrefetchFieldDescriptor(EmployeeField, true, true));
434-
var taskContainers = (HashSet<GraphContainer>) GraphContainersField.GetValue(prefetchManager);
435+
var taskContainers = (GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager);
435436
Assert.AreEqual(1, taskContainers.Count);
436-
Assert.AreEqual(orderKey, taskContainers.Single().Key);
437+
Assert.AreEqual(orderKey, taskContainers.Values.Single().Key);
437438
}
438439
}
439440

Orm/Xtensive.Orm.Tests/Storage/Prefetch/PrefetchManagerTestBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using Xtensive.Orm.Tests.Storage.Prefetch.Model;
1818
using FieldInfo=Xtensive.Orm.Model.FieldInfo;
1919
using TypeInfo = Xtensive.Orm.Model.TypeInfo;
20+
using GraphContainerDictionary = System.Collections.Generic.Dictionary<(Xtensive.Orm.Key key, Xtensive.Orm.Model.TypeInfo type), Xtensive.Orm.Internals.Prefetch.GraphContainer>;
2021

2122
namespace Xtensive.Orm.Tests.Storage.Prefetch
2223
{
@@ -103,7 +104,7 @@ internal static void ValidateLoadedEntitySet(Key key, FieldInfo field, int count
103104

104105
internal GraphContainer GetSingleGraphContainer(PrefetchManager prefetchManager)
105106
{
106-
return ((IEnumerable<GraphContainer>) GraphContainersField.GetValue(prefetchManager)).Single();
107+
return ((GraphContainerDictionary) GraphContainersField.GetValue(prefetchManager)).Values.Single();
107108
}
108109

109110
internal static bool IsFieldKeyOrSystem(FieldInfo field)

Orm/Xtensive.Orm.Tests/Storage/QueryBuilderTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void ModifyQueryTest()
5656
Assert.That(translated.Query, Is.Not.Null);
5757
Assert.That(translated.ParameterBindings, Is.Not.Null);
5858

59-
var select = (SqlSelect) translated.Query;
59+
var select = translated.Query;
6060
select.Columns.Clear();
6161
select.Columns.Add(SqlDml.Count());
6262
var compiled = builder.CompileQuery(translated.Query);

Orm/Xtensive.Orm/Caching/WeakestCache.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,7 @@ public override TItem Add(TItem item, bool replaceIfExists)
236236
public override void RemoveKey(TKey key)
237237
{
238238
ArgumentValidator.EnsureArgumentNotNull(key, "key");
239-
WeakEntry entry;
240-
if (items.TryGetValue(key, out entry)) {
241-
items.Remove(key);
239+
if (items.Remove(key, out var entry)) {
242240
entry.Dispose();
243241
}
244242
}

Orm/Xtensive.Orm/Collections/ExtensionCollection.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,13 @@ public ExtensionCollection(IExtensionCollection source)
153153
ArgumentValidator.EnsureArgumentNotNull(source, "source");
154154
if (source.Count==0)
155155
return;
156-
var sourceLikeMe = source as ExtensionCollection;
157-
if (sourceLikeMe!=null)
156+
if (source is ExtensionCollection sourceLikeMe) {
158157
extensions = new Dictionary<Type, object>(sourceLikeMe.extensions);
159-
else
158+
}
159+
else {
160160
foreach (Type extensionType in source)
161161
Set(extensionType, source.Get(extensionType));
162+
}
162163
}
163164
}
164165
}

0 commit comments

Comments
 (0)