Skip to content

Commit ba89143

Browse files
authored
Merge branch 'master' into upstream/optimize_ProjectionExpression
2 parents 463266f + 34b30ed commit ba89143

107 files changed

Lines changed: 517 additions & 692 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.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2019-2020 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

@@ -29,7 +29,7 @@ public static bool IsContainsQuery(this Expression expression)
2929
internal static object Invoke(this Expression expression)
3030
{
3131
return FastExpression.Lambda(
32-
WellKnownMembers.FuncOfTResultType.MakeGenericType(expression.Type), expression).Compile().DynamicInvoke();
32+
WellKnownMembers.FuncOfTResultType.CachedMakeGenericType(expression.Type), expression).Compile().DynamicInvoke();
3333
}
3434

3535
internal static Expression Visit<T>(this Expression exp, Func<T, Expression> visitor) where T : Expression

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2019-2021 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

@@ -11,6 +11,7 @@
1111
using Xtensive.Orm.Linq;
1212
using Xtensive.Orm.Providers;
1313
using Xtensive.Orm.Services;
14+
using Xtensive.Reflection;
1415
using Xtensive.Sql;
1516
using Xtensive.Sql.Dml;
1617
using QueryParameterBinding = Xtensive.Orm.Services.QueryParameterBinding;
@@ -68,7 +69,7 @@ protected void EnsureTransactionIsStarted()
6869

6970
public QueryTranslationResult GetRequest(Type type, IQueryable query)
7071
{
71-
var translateQueryMethod = WellKnownMembers.TranslateQueryMethod.MakeGenericMethod(type);
72+
var translateQueryMethod = WellKnownMembers.TranslateQueryMethod.CachedMakeGenericMethod(type);
7273
return (QueryTranslationResult) translateQueryMethod.Invoke(QueryBuilder, new object[] {query});
7374
}
7475

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Xtensive.Core;
1010
using Xtensive.Orm.Linq;
1111
using Xtensive.Orm.Model;
12+
using Xtensive.Reflection;
1213
using Xtensive.Sql;
1314
using Xtensive.Sql.Dml;
1415

@@ -35,7 +36,7 @@ protected override int ExecuteInternal()
3536
ex.Arguments.Count == 2) {
3637
var localCollection = ex.Arguments[0];//IEnumerable<T>
3738
var valueToCheck = ex.Arguments[1];
38-
var genericInMethod = WellKnownMembers.InMethod.MakeGenericMethod(new[] { valueToCheck.Type });
39+
var genericInMethod = WellKnownMembers.InMethod.CachedMakeGenericMethod(valueToCheck.Type);
3940
ex = Expression.Call(genericInMethod, valueToCheck, Expression.Constant(IncludeAlgorithm.ComplexCondition), localCollection);
4041
methodInfo = ex.Method;
4142
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Xtensive.Sql.Dml;
1313
using Xtensive.Core;
1414
using Xtensive.Linq;
15+
using Xtensive.Reflection;
1516

1617
namespace Xtensive.Orm.BulkOperations
1718
{
@@ -205,7 +206,7 @@ private void AddEntityValue(AddValueContext addContext)
205206
ParameterExpression p = Expression.Parameter(info.UnderlyingType);
206207
LambdaExpression lambda =
207208
FastExpression.Lambda(
208-
WellKnownMembers.FuncOfTArgTResultType.MakeGenericType(info.UnderlyingType, field.ValueType),
209+
WellKnownMembers.FuncOfTArgTResultType.CachedMakeGenericType(info.UnderlyingType, field.ValueType),
209210
Expression.MakeMemberAccess(p, field.UnderlyingProperty),
210211
p);
211212
IQueryable q =
@@ -244,7 +245,7 @@ public void AddValues()
244245
Descriptor = descriptor,
245246
Lambda =
246247
FastExpression.Lambda(
247-
WellKnownMembers.FuncOfTArgTResultType.MakeGenericType(typeof (T), descriptor.Expression.Type),
248+
WellKnownMembers.FuncOfTArgTResultType.CachedMakeGenericType(typeof (T), descriptor.Expression.Type),
248249
descriptor.Expression,
249250
descriptor.Parameter),
250251
Statement = Statement

Orm/Xtensive.Orm.Tests/Rse/HeaderParseTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void MainTest()
5454
ResetState(state);
5555

5656
// Select Id, TypeId, Title
57-
CompilableProvider rsTitle = rsMain.Select(0, 1, 2);
57+
CompilableProvider rsTitle = rsMain.Select(new[] { 0, 1, 2 });
5858
UpdateCache(session, rsTitle.GetRecordSetReader(session, parameterContext));
5959
state = Session.Current.EntityStateCache[key, true];
6060
Assert.IsNotNull(state);
@@ -63,7 +63,7 @@ public void MainTest()
6363
ResetState(state);
6464

6565
// Select Id, TypeId, Text
66-
CompilableProvider rsText = rsMain.Select(0, 1, 3);
66+
CompilableProvider rsText = rsMain.Select(new[] { 0, 1, 3 });
6767
UpdateCache(session, rsText.GetRecordSetReader(session, parameterContext));
6868
state = Session.Current.EntityStateCache[key, true];
6969
Assert.IsNotNull(state);

Orm/Xtensive.Orm.Tests/Storage/Providers/Sql/CharSupportTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public void SelectCharTest()
6666
var rs = GetRseQuery<MyEntity>();
6767
var parameterContext = new ParameterContext();
6868
var result = rs
69-
.Select(rs.Header.IndexOf(charColumn))
69+
.Select(new[] { rs.Header.IndexOf(charColumn) })
7070
.GetRecordSetReader(Session.Current, parameterContext)
7171
.ToEnumerable()
7272
.Select(i => i.GetValueOrDefault<char>(0))
@@ -88,7 +88,7 @@ public void CharParameterTest()
8888
var rs = GetRseQuery<MyEntity>();
8989
var parameterContext = new ParameterContext();
9090
var result = rs
91-
.Select(rs.Header.IndexOf(charColumn))
91+
.Select(new[] { rs.Header.IndexOf(charColumn) })
9292
.Filter(t => t.GetValueOrDefault<char>(0) == y)
9393
.GetRecordSetReader(Session.Current, parameterContext)
9494
.ToEnumerable()
@@ -108,7 +108,7 @@ public void CharConstantTest()
108108
var rs = GetRseQuery<MyEntity>();
109109
var parameterContext = new ParameterContext();
110110
var result = rs
111-
.Select(rs.Header.IndexOf(charColumn))
111+
.Select(new[] { rs.Header.IndexOf(charColumn) })
112112
.Filter(t => t.GetValueOrDefault<char>(0)=='Y')
113113
.GetRecordSetReader(Session.Current, parameterContext)
114114
.ToEnumerable()

Orm/Xtensive.Orm/Arithmetic/ArithmeticRules.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,8 @@ public bool Equals(ArithmeticRules other)
4141
}
4242

4343
/// <inheritdoc/>
44-
public override bool Equals(object obj)
45-
{
46-
if (obj==null)
47-
return false;
48-
if (obj is ArithmeticRules)
49-
return Equals((ArithmeticRules)obj);
50-
return false;
51-
}
44+
public override bool Equals(object obj) =>
45+
obj is ArithmeticRules other && Equals(other);
5246

5347
/// <inheritdoc/>
5448
public override int GetHashCode()

Orm/Xtensive.Orm/Caching/WeakestCache.cs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -131,33 +131,24 @@ internal sealed class WeakEntryEqualityComparer : IEqualityComparer<object>
131131

132132
public new bool Equals(object x, object y)
133133
{
134-
TKey key;
135-
var we = x as WeakEntry;
136-
if (we!=null) {
134+
if (x is WeakEntry we) {
137135
// x is WeakEntry
138-
key = y as TKey;
139-
if (key!=null)
136+
if (y is TKey key)
140137
// x is WeakEntry, y is TKey
141138
return keyComparer.Equals(we.Key, key);
142139
else {
143-
var we2 = y as WeakEntry;
144-
if (we2==null)
145-
return false;
146-
// x is WeakEntry, y is WeakEntry
147-
return keyComparer.Equals(we.Key, we2.Key);
140+
return y is WeakEntry we2 && keyComparer.Equals(we.Key, we2.Key); // x is WeakEntry, y is WeakEntry
148141
}
149142
}
150-
key = x as TKey;
151-
if (key==null)
152-
return false;
153-
// x is TKey
154-
we = y as WeakEntry;
155-
if (we!=null)
156-
// x is TKey, y is WeakEntry
157-
return keyComparer.Equals(key, we.Key);
158-
else
159-
// x is TKey, y must be TKey
160-
return keyComparer.Equals(key, y as TKey);
143+
if (x is TKey keyX) {
144+
if (y is WeakEntry weY)
145+
// x is TKey, y is WeakEntry
146+
return keyComparer.Equals(keyX, weY.Key);
147+
else
148+
// x is TKey, y must be TKey
149+
return keyComparer.Equals(keyX, y as TKey);
150+
}
151+
return false;
161152
}
162153

163154
public int GetHashCode(object obj)

Orm/Xtensive.Orm/Comparison/ComparisonRule.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,8 @@ public bool Equals(ComparisonRule other)
8383
}
8484

8585
/// <inheritdoc/>
86-
public override bool Equals(object obj)
87-
{
88-
if (obj is ComparisonRule)
89-
return Equals((ComparisonRule)obj);
90-
return false;
91-
}
86+
public override bool Equals(object obj) =>
87+
obj is ComparisonRule other && Equals(other);
9288

9389
/// <inheritdoc/>
9490
public override int GetHashCode()

Orm/Xtensive.Orm/Comparison/ComparisonRules.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,12 +193,8 @@ public bool Equals(ComparisonRules other)
193193
#region Equals, GetHashCode
194194

195195
/// <inheritdoc/>
196-
public override bool Equals(object obj)
197-
{
198-
if (obj is ComparisonRules)
199-
return Equals((ComparisonRules)obj);
200-
return false;
201-
}
196+
public override bool Equals(object obj) =>
197+
obj is ComparisonRules other && Equals(other);
202198

203199
/// <inheritdoc/>
204200
public override int GetHashCode()

0 commit comments

Comments
 (0)