Skip to content

Commit da2efc9

Browse files
committed
Small performance improvements
1 parent 8ffe6fb commit da2efc9

File tree

2 files changed

+22
-21
lines changed

2 files changed

+22
-21
lines changed

Orm/Xtensive.Orm/Orm/Building/Builders/PartialIndexFilterBuilder.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,30 +47,29 @@ public static void BuildFilter(IndexInfo index)
4747
protected override Expression VisitBinary(BinaryExpression b)
4848
{
4949
if (EnumRewritableOperations(b)) {
50-
if (b.Left.StripCasts().Type.StripNullable().IsEnum
51-
&& b.Right.StripCasts().NodeType == ExpressionType.Constant) {
50+
var rawLeft = b.Left.StripCasts();
51+
var rawLeftType = rawLeft.Type.StripNullable();
52+
var rawRight = b.Right.StripCasts();
53+
var rawRightType = rawRight.Type.StripNullable();
5254

53-
var rawEnum = b.Left.StripCasts();
54-
var typeToCast = (rawEnum.Type.IsNullable())
55-
? rawEnum.Type.StripNullable().GetEnumUnderlyingType().ToNullable()
56-
: rawEnum.Type.GetEnumUnderlyingType();
55+
if (rawLeftType.IsEnum && rawRight.NodeType == ExpressionType.Constant) {
56+
var typeToCast = rawLeft.Type.IsNullable()
57+
? rawLeftType.GetEnumUnderlyingType().ToNullable()
58+
: rawLeft.Type.GetEnumUnderlyingType();
5759

5860
return base.VisitBinary(Expression.MakeBinary(
5961
b.NodeType,
60-
Expression.Convert(rawEnum, typeToCast),
62+
Expression.Convert(rawLeft, typeToCast),
6163
Expression.Convert(b.Right, typeToCast)));
6264
}
63-
else if (b.Right.StripCasts().Type.StripNullable().IsEnum
64-
&& b.Left.StripCasts().NodeType == ExpressionType.Constant) {
65-
66-
var rawEnum = b.Right.StripCasts();
67-
var typeToCast = (rawEnum.Type.IsNullable())
68-
? rawEnum.Type.StripNullable().GetEnumUnderlyingType().ToNullable()
69-
: rawEnum.Type.GetEnumUnderlyingType();
65+
else if (rawRightType.IsEnum && rawLeft.NodeType == ExpressionType.Constant) {
66+
var typeToCast = rawRight.Type.IsNullable()
67+
? rawRightType.GetEnumUnderlyingType().ToNullable()
68+
: rawRight.Type.GetEnumUnderlyingType();
7069

7170
return base.VisitBinary(Expression.MakeBinary(
7271
b.NodeType,
73-
Expression.Convert(rawEnum, typeToCast),
72+
Expression.Convert(rawRight, typeToCast),
7473
Expression.Convert(b.Left, typeToCast)));
7574
}
7675
}
@@ -92,9 +91,10 @@ protected override Expression VisitBinary(BinaryExpression b)
9291

9392
static bool EnumRewritableOperations(BinaryExpression b)
9493
{
95-
return b.NodeType.In(ExpressionType.Equal, ExpressionType.NotEqual,
96-
ExpressionType.GreaterThan, ExpressionType.GreaterThanOrEqual,
97-
ExpressionType.LessThan, ExpressionType.LessThanOrEqual);
94+
var nt = b.NodeType;
95+
return nt == ExpressionType.Equal || nt == ExpressionType.NotEqual
96+
|| nt == ExpressionType.GreaterThan || nt == ExpressionType.GreaterThanOrEqual
97+
|| nt == ExpressionType.LessThan || nt == ExpressionType.LessThanOrEqual;
9898
}
9999
}
100100

Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,10 @@ protected override Expression VisitBinary(BinaryExpression binaryExpression)
258258

259259
static bool EnumRewritableOperations(BinaryExpression b)
260260
{
261-
return b.NodeType.In(ExpressionType.Equal, ExpressionType.NotEqual,
262-
ExpressionType.GreaterThan, ExpressionType.GreaterThanOrEqual,
263-
ExpressionType.LessThan, ExpressionType.LessThanOrEqual);
261+
var nt = b.NodeType;
262+
return nt == ExpressionType.Equal || nt == ExpressionType.NotEqual
263+
|| nt == ExpressionType.GreaterThan || nt == ExpressionType.GreaterThanOrEqual
264+
|| nt == ExpressionType.LessThan || nt == ExpressionType.LessThanOrEqual;
264265
}
265266
}
266267

0 commit comments

Comments
 (0)