Skip to content

Commit d3557db

Browse files
committed
Fix some CodeFactor issues
1 parent 766a403 commit d3557db

File tree

6 files changed

+93
-182
lines changed

6 files changed

+93
-182
lines changed

src/NHibernate.Test/Async/Linq/EnumTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ public async Task ConditionalNavigationPropertyAsync()
7777
? (o.NullableEnum1.HasValue ? o.Enum1 : EnumStoredAsString.Unspecified)
7878
: EnumStoredAsString.Small) == EnumStoredAsString.Medium).ToListAsync());
7979

80-
8180
await (db.Users.Where(o => (o.Enum1 == EnumStoredAsString.Large ? o.Role : o.Role).Name == "test").ToListAsync());
8281
}
8382

src/NHibernate.Test/Linq/EnumTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ public void ConditionalNavigationProperty()
6464
? (o.NullableEnum1.HasValue ? o.Enum1 : EnumStoredAsString.Unspecified)
6565
: EnumStoredAsString.Small) == EnumStoredAsString.Medium).ToList();
6666

67-
6867
db.Users.Where(o => (o.Enum1 == EnumStoredAsString.Large ? o.Role : o.Role).Name == "test").ToList();
6968
}
7069

src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ public HqlSqlWalker(
7474
string collectionRole)
7575
: this(qti, sfi, input, tokenReplacements, null, collectionRole)
7676
{
77-
7877
}
7978

8079
internal HqlSqlWalker(

src/NHibernate/Hql/Ast/ANTLR/Tree/BinaryArithmeticOperatorNode.cs

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,52 +32,50 @@ public void Initialize()
3232
IType lhType = (lhs is SqlNode) ? ((SqlNode)lhs).DataType : null;
3333
IType rhType = (rhs is SqlNode) ? ((SqlNode)rhs).DataType : null;
3434

35-
if (lhs is IExpectedTypeAwareNode lhsTypeAwareNode && rhType != null && lhsTypeAwareNode.ExpectedType == null)
35+
TrySetExpectedType(lhs, rhType, true);
36+
TrySetExpectedType(rhs, lhType, false);
37+
}
38+
39+
private void TrySetExpectedType(IASTNode operand, IType otherOperandType, bool leftHandOperand)
40+
{
41+
if (!(operand is IExpectedTypeAwareNode typeAwareNode) ||
42+
otherOperandType == null ||
43+
typeAwareNode.ExpectedType != null)
3644
{
37-
IType expectedType;
45+
return;
46+
}
47+
48+
IType expectedType = null;
3849

39-
// we have something like : "? [op] rhs"
40-
if (IsDateTimeType(rhType))
50+
// we have something like : "lhs [op] ?" or "? [op] rhs"
51+
if (IsDateTimeType(otherOperandType))
52+
{
53+
if (leftHandOperand)
4154
{
4255
// more specifically : "? [op] datetime"
4356
// 1) if the operator is MINUS, the param needs to be of
4457
// some datetime type
4558
// 2) if the operator is PLUS, the param needs to be of
4659
// some numeric type
47-
expectedType = Type == HqlSqlWalker.PLUS ? NHibernateUtil.Double : rhType;
60+
expectedType = Type == HqlSqlWalker.PLUS ? NHibernateUtil.Double : otherOperandType;
4861
}
49-
else
50-
{
51-
expectedType = rhType;
52-
}
53-
54-
lhsTypeAwareNode.ExpectedType = expectedType;
55-
}
56-
else if (rhs is IExpectedTypeAwareNode rhsTypeAwareNode && lhType != null && rhsTypeAwareNode.ExpectedType == null)
57-
{
58-
IType expectedType = null;
59-
60-
// we have something like : "lhs [op] ?"
61-
if (IsDateTimeType(lhType))
62+
else if (Type == HqlSqlWalker.PLUS)
6263
{
6364
// more specifically : "datetime [op] ?"
6465
// 1) if the operator is MINUS, we really cannot determine
6566
// the expected type as either another datetime or
6667
// numeric would be valid
6768
// 2) if the operator is PLUS, the param needs to be of
6869
// some numeric type
69-
if (Type == HqlSqlWalker.PLUS)
70-
{
71-
expectedType = NHibernateUtil.Double;
72-
}
73-
}
74-
else
75-
{
76-
expectedType = lhType;
70+
expectedType = NHibernateUtil.Double;
7771
}
78-
79-
rhsTypeAwareNode.ExpectedType = expectedType;
8072
}
73+
else
74+
{
75+
expectedType = otherOperandType;
76+
}
77+
78+
typeAwareNode.ExpectedType = expectedType;
8179
}
8280

8381
public override IType DataType

src/NHibernate/Hql/Ast/HqlTreeNode.cs

Lines changed: 40 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.CodeDom;
23
using System.Collections.Generic;
34
using System.Linq;
45
using NHibernate.Hql.Ast.ANTLR;
@@ -204,6 +205,23 @@ internal HqlQuery(IASTFactory factory, params HqlStatement[] children)
204205

205206
public class HqlIdent : HqlExpression
206207
{
208+
private static readonly Dictionary<TypeCode, string> SupportedIdentTypes = new Dictionary<TypeCode, string>
209+
{
210+
{TypeCode.Boolean, "bool"},
211+
{TypeCode.Int16, "short"},
212+
{TypeCode.Int32, "integer"},
213+
{TypeCode.Int64, "long"},
214+
{TypeCode.UInt16, "ushort"},
215+
{TypeCode.UInt32, "uint"},
216+
{TypeCode.UInt64, "ulong"},
217+
{TypeCode.Decimal, "decimal"},
218+
{TypeCode.Single, "single"},
219+
{TypeCode.DateTime, "datetime"},
220+
{TypeCode.String, "string"},
221+
{TypeCode.Char, "char"},
222+
{TypeCode.Double, "double"}
223+
};
224+
207225
internal HqlIdent(IASTFactory factory, string ident)
208226
: base(HqlSqlWalker.IDENT, ident, factory)
209227
{
@@ -212,88 +230,37 @@ internal HqlIdent(IASTFactory factory, string ident)
212230
internal HqlIdent(IASTFactory factory, System.Type type)
213231
: base(HqlSqlWalker.IDENT, "", factory)
214232
{
215-
type = type.UnwrapIfNullable();
216-
217-
switch (System.Type.GetTypeCode(type))
233+
if (!TryGetTypeName(type, out var typeName))
218234
{
219-
case TypeCode.Boolean:
220-
SetText("bool");
221-
break;
222-
case TypeCode.Int16:
223-
SetText("short");
224-
break;
225-
case TypeCode.Int32:
226-
SetText("integer");
227-
break;
228-
case TypeCode.Int64:
229-
SetText("long");
230-
break;
231-
case TypeCode.UInt16:
232-
SetText("ushort");
233-
break;
234-
case TypeCode.UInt32:
235-
SetText("uint");
236-
break;
237-
case TypeCode.UInt64:
238-
SetText("ulong");
239-
break;
240-
case TypeCode.Decimal:
241-
SetText("decimal");
242-
break;
243-
case TypeCode.Single:
244-
SetText("single");
245-
break;
246-
case TypeCode.DateTime:
247-
SetText("datetime");
248-
break;
249-
case TypeCode.String:
250-
SetText("string");
251-
break;
252-
case TypeCode.Char:
253-
SetText("char");
254-
break;
255-
case TypeCode.Double:
256-
SetText("double");
257-
break;
258-
default:
259-
if (type == typeof(Guid))
260-
{
261-
SetText("guid");
262-
break;
263-
}
264-
if (type == typeof(DateTimeOffset))
265-
{
266-
SetText("datetimeoffset");
267-
break;
268-
}
269-
throw new NotSupportedException(string.Format("Don't currently support idents of type {0}", type.Name));
235+
throw new NotSupportedException($"Don't currently support idents of type {type.Name}");
270236
}
237+
238+
SetText(typeName);
271239
}
272240

273241
internal static bool SupportsType(System.Type type)
242+
{
243+
return TryGetTypeName(type, out _);
244+
}
245+
246+
private static bool TryGetTypeName(System.Type type, out string typeName)
274247
{
275248
type = type.UnwrapIfNullable();
276-
switch (System.Type.GetTypeCode(type))
249+
if (SupportedIdentTypes.TryGetValue(System.Type.GetTypeCode(type), out typeName))
277250
{
278-
case TypeCode.Boolean:
279-
case TypeCode.Int16:
280-
case TypeCode.Int32:
281-
case TypeCode.Int64:
282-
case TypeCode.UInt16:
283-
case TypeCode.UInt32:
284-
case TypeCode.UInt64:
285-
case TypeCode.Decimal:
286-
case TypeCode.Single:
287-
case TypeCode.DateTime:
288-
case TypeCode.String:
289-
case TypeCode.Char:
290-
case TypeCode.Double:
291-
return true;
292-
default:
293-
return
294-
type == typeof(Guid) ||
295-
type == typeof(DateTimeOffset);
251+
return true;
296252
}
253+
254+
if (type == typeof(Guid))
255+
{
256+
typeName = "guid";
257+
}
258+
else if (type == typeof(DateTimeOffset))
259+
{
260+
typeName = "datetimeoffset";
261+
}
262+
263+
return typeName != null;
297264
}
298265
}
299266

src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs

Lines changed: 27 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -800,68 +800,51 @@ public override void VisitOrdering(Ordering ordering, QueryModel queryModel, Ord
800800
public override void VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, int index)
801801
{
802802
_string.Append(" => ");
803+
804+
// Custom visitors for operators that do not expose all information with TransformExpressions method in order to mimic their ToString method
803805
switch (resultOperator)
804806
{
805-
case AllResultOperator allResult:
806-
VisitResultOperator("All", allResult.Predicate);
807-
break;
808-
case AggregateResultOperator aggregateResult:
809-
VisitResultOperator("Aggregate", aggregateResult.Func);
810-
break;
811-
case ContainsResultOperator containsResult:
812-
VisitResultOperator("Contains", containsResult.Item);
813-
break;
814-
case AggregateFromSeedResultOperator aggregateFromSeedResult:
815-
VisitAggregateFromSeedResultOperator(aggregateFromSeedResult);
816-
break;
817807
case CastResultOperator castResult:
818808
VisitTypeChangeOperator("Cast", castResult.CastItemType);
819809
break;
820-
case ConcatResultOperator concatResult:
821-
VisitResultOperator("Concat", concatResult.Source2);
822-
break;
823-
case DefaultIfEmptyResultOperator defaultIfEmptyResult:
824-
VisitDefaultIfEmptyResultOperator(defaultIfEmptyResult);
825-
break;
826-
case ExceptResultOperator exceptResult:
827-
VisitResultOperator("Except", exceptResult.Source2);
828-
break;
829810
case FetchRequestBase fetchBase:
830811
VisitFetchRequestBase(fetchBase);
831812
break;
832-
case ChoiceResultOperatorBase choiceResult:
833-
VisitChoiceResultOperatorBase(choiceResult);
834-
break;
835-
case GroupResultOperator groupResult:
836-
GroupResultOperator(groupResult);
837-
break;
838-
case IntersectResultOperator intersectResult:
839-
VisitResultOperator("Intersect", intersectResult.Source2);
813+
case ChoiceResultOperatorBase operatorBase:
814+
VisitChoiceResultOperatorBase(operatorBase);
840815
break;
841816
case OfTypeResultOperator ofTypeResult:
842817
VisitTypeChangeOperator("OfType", ofTypeResult.SearchedItemType);
843818
break;
844-
case SkipResultOperator skipResult:
845-
VisitResultOperator("Skip", skipResult.Count);
846-
break;
847-
case TakeResultOperator takeResult:
848-
VisitResultOperator("Take", takeResult.Count);
849-
break;
850-
case UnionResultOperator unionResult:
851-
VisitResultOperator("Union", unionResult.Source2);
852-
break;
853819
default:
854-
_string.Append(resultOperator);
820+
VisitResultOperatorBase(resultOperator);
855821
break;
856822
}
857823
}
858824

859-
private void GroupResultOperator(GroupResultOperator resultOperator)
825+
private void VisitResultOperatorBase(ResultOperatorBase resultOperator)
860826
{
861-
_string.Append("GroupBy(");
862-
_keyVisitor.Visit(resultOperator.KeySelector);
863-
_string.Append(',');
864-
_keyVisitor.Visit(resultOperator.ElementSelector);
827+
_string.Append(resultOperator.GetType().Name.Replace("ResultOperator", "("));
828+
var index = 0;
829+
resultOperator.TransformExpressions(
830+
expression =>
831+
{
832+
if (expression == null)
833+
{
834+
return null;
835+
}
836+
837+
if (index > 0)
838+
{
839+
_string.Append(',');
840+
}
841+
842+
_keyVisitor.Visit(expression);
843+
index++;
844+
845+
return expression;
846+
});
847+
865848
_string.Append(')');
866849
}
867850

@@ -890,32 +873,6 @@ private void VisitFetchRequestBase(FetchRequestBase fetchBase)
890873
}
891874
}
892875

893-
private void VisitDefaultIfEmptyResultOperator(DefaultIfEmptyResultOperator resultOperator)
894-
{
895-
_string.Append("DefaultIfEmpty(");
896-
if (resultOperator.OptionalDefaultValue != null)
897-
{
898-
_keyVisitor.Visit(resultOperator.OptionalDefaultValue);
899-
}
900-
901-
_string.Append(')');
902-
}
903-
904-
private void VisitAggregateFromSeedResultOperator(AggregateFromSeedResultOperator resultOperator)
905-
{
906-
_string.Append("Aggregate(");
907-
_keyVisitor.Visit(resultOperator.Seed);
908-
_string.Append(',');
909-
_keyVisitor.Visit(resultOperator.Func);
910-
if (resultOperator.OptionalResultSelector != null)
911-
{
912-
_string.Append(',');
913-
_keyVisitor.Visit(resultOperator.OptionalResultSelector);
914-
}
915-
916-
_string.Append(')');
917-
}
918-
919876
private void VisitTypeChangeOperator(string name, System.Type type)
920877
{
921878
_string.Append(name);
@@ -924,14 +881,6 @@ private void VisitTypeChangeOperator(string name, System.Type type)
924881
_string.Append(">()");
925882
}
926883

927-
private void VisitResultOperator(string name, Expression expression)
928-
{
929-
_string.Append(name);
930-
_string.Append("(");
931-
_keyVisitor.Visit(expression);
932-
_string.Append(")");
933-
}
934-
935884
private void VisitJoin(System.Type itemType, string itemName, Expression expression)
936885
{
937886
_string.Append(" join ");

0 commit comments

Comments
 (0)