Skip to content

Commit f27fb48

Browse files
fredericDelaportehazzik
authored andcommitted
Purge more Invariant culture usages
Comparing SQL keywords should be done with ordinal comparisons. But invariant comparisons are kept for object names, because at least with SQL Server these comparisons are collation sensitive. (So ideally object names comparisons should even have their culture configurable...) An undue current culture comparison for SqlString.EndsWithCaseInsensitive is also fixed. Follow-up to #1567.
1 parent 92dad8e commit f27fb48

15 files changed

+46
-50
lines changed

src/NHibernate/Dialect/Function/AnsiTrimEmulationFunction.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ public SqlString Render(IList args, ISessionFactoryImplementor factory)
9898
// so we trim leading and trailing spaces
9999
return BothSpaceTrim.Render(args, factory);
100100
}
101-
102-
if (StringHelper.EqualsCaseInsensitive("from", firstArg))
101+
102+
if ("from".Equals(firstArg, StringComparison.OrdinalIgnoreCase))
103103
{
104104
// we have the form: trim(from trimSource).
105105
// This is functionally equivalent to trim(trimSource)
@@ -118,15 +118,15 @@ public SqlString Render(IList args, ISessionFactoryImplementor factory)
118118
// trim-specification has been specified. we handle the
119119
// exception to that explicitly
120120
int potentialTrimCharacterArgIndex = 1;
121-
if (StringHelper.EqualsCaseInsensitive("leading", firstArg))
121+
if ("leading".Equals(firstArg, StringComparison.OrdinalIgnoreCase))
122122
{
123123
trailing = false;
124124
}
125-
else if (StringHelper.EqualsCaseInsensitive("trailing", firstArg))
125+
else if ("trailing".Equals(firstArg, StringComparison.OrdinalIgnoreCase))
126126
{
127127
leading = false;
128128
}
129-
else if (StringHelper.EqualsCaseInsensitive("both", firstArg))
129+
else if ("both".Equals(firstArg, StringComparison.OrdinalIgnoreCase))
130130
{
131131
}
132132
else
@@ -135,7 +135,7 @@ public SqlString Render(IList args, ISessionFactoryImplementor factory)
135135
}
136136

137137
object potentialTrimCharacter = args[potentialTrimCharacterArgIndex];
138-
if (StringHelper.EqualsCaseInsensitive("from", potentialTrimCharacter.ToString()))
138+
if ("from".Equals(potentialTrimCharacter.ToString(), StringComparison.OrdinalIgnoreCase))
139139
{
140140
trimCharacter = "' '";
141141
trimSource = args[potentialTrimCharacterArgIndex + 1];
@@ -148,7 +148,7 @@ public SqlString Render(IList args, ISessionFactoryImplementor factory)
148148
else
149149
{
150150
trimCharacter = potentialTrimCharacter;
151-
if (StringHelper.EqualsCaseInsensitive("from", args[potentialTrimCharacterArgIndex + 1].ToString()))
151+
if ("from".Equals(args[potentialTrimCharacterArgIndex + 1].ToString(), StringComparison.OrdinalIgnoreCase))
152152
{
153153
trimSource = args[potentialTrimCharacterArgIndex + 2];
154154
}

src/NHibernate/Dialect/Function/CastFunction.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ protected virtual bool CastingIsRequired(string sqlType)
9292

9393
bool IFunctionGrammar.IsSeparator(string token)
9494
{
95-
return "as".Equals(token, StringComparison.InvariantCultureIgnoreCase);
95+
return "as".Equals(token, StringComparison.OrdinalIgnoreCase);
9696
}
9797

9898
bool IFunctionGrammar.IsKnownArgument(string token)

src/NHibernate/Dialect/Function/ClassicAggregateFunction.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ public SqlString Render(IList args, ISessionFactoryImplementor factory)
7777
if (args.Count > 1)
7878
{
7979
object firstArg = args[0];
80-
if (!StringHelper.EqualsCaseInsensitive("distinct", firstArg.ToString()) &&
81-
!StringHelper.EqualsCaseInsensitive("all", firstArg.ToString()))
80+
if (!"distinct".Equals(firstArg.ToString(), StringComparison.OrdinalIgnoreCase) &&
81+
!"all".Equals(firstArg.ToString(), StringComparison.OrdinalIgnoreCase))
8282
{
8383
throw new QueryException(string.Format("Aggregate {0}(): token unknow {1}.", name, firstArg));
8484
}

src/NHibernate/Driver/NDataReader.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ public int GetOrdinal(string colName)
612612

613613
foreach (KeyValuePair<string, int> pair in fieldNameToIndex)
614614
{
615-
if (StringHelper.EqualsCaseInsensitive(pair.Key, colName))
615+
if (string.Equals(pair.Key, colName, StringComparison.InvariantCultureIgnoreCase))
616616
{
617617
return pair.Value;
618618
}

src/NHibernate/Hql/QuerySplitter.cs

-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections;
32
using System.Collections.Generic;
43
using System.Text;
54
using NHibernate.Engine;
@@ -60,7 +59,6 @@ public static string[] ConcreteQueries(string query, ISessionFactoryImplementor
6059
string next = null;
6160

6261
templateQuery.Append(tokens[0]);
63-
bool isSelectClause = StringHelper.EqualsCaseInsensitive("select", tokens[0]);
6462

6563
for (int i = 1; i < tokens.Length; i++)
6664
{
@@ -70,9 +68,6 @@ public static string[] ConcreteQueries(string query, ISessionFactoryImplementor
7068
last = tokens[i - 1].ToLowerInvariant();
7169
}
7270

73-
// select-range is terminated by declaration of "from"
74-
isSelectClause = !StringHelper.EqualsCaseInsensitive("from", tokens[i]);
75-
7671
string token = tokens[i];
7772
if (!ParserHelper.IsWhitespace(token) || last == null)
7873
{
@@ -120,11 +115,5 @@ public static string[] ConcreteQueries(string query, ISessionFactoryImplementor
120115
}
121116
return results;
122117
}
123-
124-
private static bool IsPossiblyClassName(string last, string next)
125-
{
126-
return ParserHelper.EntityClass.Equals(last) ||
127-
(beforeClassTokens.Contains(last) && !notAfterClassTokens.Contains(next));
128-
}
129118
}
130119
}

src/NHibernate/Mapping/Column.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ private string GetAlias(int maxAliasLength)
155155
// But I will leave it like this for now to make it look similar. /Oskar 2016-08-20
156156
bool useRawName = name.Length + suffix.Length <= usableLength &&
157157
!_quoted &&
158-
!StringHelper.EqualsCaseInsensitive(name, "rowid");
158+
!"rowid".Equals(name, StringComparison.OrdinalIgnoreCase);
159159
if (!useRawName)
160160
{
161161
if (suffix.Length >= usableLength)

src/NHibernate/Mapping/ManyToOne.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void CreatePropertyRefConstraints(IDictionary<string, PersistentClass> pe
7373
if (property == null)
7474
throw new MappingException("Could not find property " + ReferencedPropertyName + " on " + ReferencedEntityName);
7575

76-
if (!HasFormula && !"none".Equals(ForeignKeyName, StringComparison.InvariantCultureIgnoreCase))
76+
if (!HasFormula && !"none".Equals(ForeignKeyName, StringComparison.OrdinalIgnoreCase))
7777
{
7878

7979
IEnumerable<Column> ce = new SafetyEnumerable<Column>(property.ColumnIterator);

src/NHibernate/Mapping/ReferenceDependantValue.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public IEnumerable<Column> ReferenceColumns
2424

2525
public override void CreateForeignKeyOfEntity(string entityName)
2626
{
27-
if (!HasFormula && !string.Equals("none", ForeignKeyName, StringComparison.InvariantCultureIgnoreCase))
27+
if (!HasFormula && !string.Equals("none", ForeignKeyName, StringComparison.OrdinalIgnoreCase))
2828
{
2929
var referencedColumns = new List<Column>(_prototype.ColumnSpan);
3030
foreach (Column column in _prototype.ColumnIterator)

src/NHibernate/Mapping/SimpleValue.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public virtual bool IsComposite
7575

7676
public virtual void CreateForeignKeyOfEntity(string entityName)
7777
{
78-
if (!HasFormula && ! "none".Equals(ForeignKeyName, StringComparison.InvariantCultureIgnoreCase))
78+
if (!HasFormula && ! "none".Equals(ForeignKeyName, StringComparison.OrdinalIgnoreCase))
7979
{
8080
ForeignKey fk = table.CreateForeignKey(ForeignKeyName, ConstraintColumns, entityName);
8181
fk.CascadeDeleteEnabled = cascadeDeleteEnabled;

src/NHibernate/SqlCommand/Parser/MsSqlSelectParser.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ private IEnumerable<ColumnDefinition> ParseColumnDefinitions(IEnumerator<SqlToke
131131
case SqlTokenType.Text:
132132
if (blockLevel != 0) break;
133133

134-
if (token.Equals(",", StringComparison.InvariantCultureIgnoreCase))
134+
if (token.Equals(",", StringComparison.Ordinal))
135135
{
136136
if (columnAliasToken != null)
137137
{
138138
yield return ParseSelectColumnDefinition(columnBeginToken, columnEndToken ?? columnAliasToken, columnAliasToken);
139139
}
140140
}
141141

142-
if (token.Equals("from", StringComparison.InvariantCultureIgnoreCase))
142+
if (token.Equals("from", StringComparison.OrdinalIgnoreCase))
143143
{
144144
if (columnAliasToken != null)
145145
{
@@ -148,7 +148,7 @@ private IEnumerable<ColumnDefinition> ParseColumnDefinitions(IEnumerator<SqlToke
148148
yield break;
149149
}
150150

151-
if (token.Equals("as", StringComparison.InvariantCultureIgnoreCase))
151+
if (token.Equals("as", StringComparison.OrdinalIgnoreCase))
152152
{
153153
columnEndToken = prevToken;
154154
}
@@ -237,8 +237,8 @@ private IEnumerable<OrderDefinition> ParseOrderDefinitions(IEnumerator<SqlToken>
237237
case SqlTokenType.Text:
238238
if (blockLevel != 0) break;
239239

240-
if (token.Equals("asc", StringComparison.InvariantCultureIgnoreCase)
241-
|| token.Equals("desc", StringComparison.InvariantCultureIgnoreCase))
240+
if (token.Equals("asc", StringComparison.OrdinalIgnoreCase)
241+
|| token.Equals("desc", StringComparison.OrdinalIgnoreCase))
242242
{
243243
orderEndToken = prevToken;
244244
directionToken = token;
@@ -269,7 +269,7 @@ private IEnumerable<OrderDefinition> ParseOrderDefinitions(IEnumerator<SqlToken>
269269
private OrderDefinition ParseOrderDefinition(SqlToken beginToken, SqlToken endToken, SqlToken directionToken)
270270
{
271271
var isDescending = directionToken != null &&
272-
directionToken.Equals("desc", StringComparison.InvariantCultureIgnoreCase);
272+
directionToken.Equals("desc", StringComparison.OrdinalIgnoreCase);
273273

274274
var columnNameOrIndex = beginToken == endToken
275275
? beginToken.Value

src/NHibernate/SqlCommand/Parser/SqlTokenizerExtensions.cs

+3-7
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static bool TryParseUntil(this IEnumerator<SqlToken> tokenEnum, string ke
2323
nestLevel--;
2424
break;
2525
case SqlTokenType.Text:
26-
if (nestLevel == 0 && token.Equals(keyword, StringComparison.InvariantCultureIgnoreCase)) return true;
26+
if (nestLevel == 0 && token.Equals(keyword, StringComparison.OrdinalIgnoreCase)) return true;
2727
break;
2828
}
2929
}
@@ -34,9 +34,7 @@ public static bool TryParseUntil(this IEnumerator<SqlToken> tokenEnum, string ke
3434

3535
public static bool TryParseUntilFirstMsSqlSelectColumn(this IEnumerator<SqlToken> tokenEnum)
3636
{
37-
SqlToken selectToken;
38-
bool isDistinct;
39-
return TryParseUntilFirstMsSqlSelectColumn(tokenEnum, out selectToken, out isDistinct);
37+
return TryParseUntilFirstMsSqlSelectColumn(tokenEnum, out _, out _);
4038
}
4139

4240
public static bool TryParseUntilFirstMsSqlSelectColumn(this IEnumerator<SqlToken> tokenEnum, out SqlToken selectToken, out bool isDistinct)
@@ -100,9 +98,7 @@ public static bool TryParseUntilFirstOrderColumn(this IEnumerator<SqlToken> toke
10098
orderToken = tokenEnum.Current;
10199
if (tokenEnum.MoveNext())
102100
{
103-
return tokenEnum.Current.Equals("by", StringComparison.InvariantCultureIgnoreCase)
104-
? tokenEnum.MoveNext()
105-
: false;
101+
return tokenEnum.Current.Equals("by", StringComparison.OrdinalIgnoreCase) && tokenEnum.MoveNext();
106102
}
107103
}
108104

src/NHibernate/SqlCommand/SqlString.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ public bool EndsWithCaseInsensitive(string value)
374374
{
375375
return value != null
376376
&& value.Length <= _length
377-
&& IndexOf(value, _length - value.Length, value.Length, StringComparison.CurrentCultureIgnoreCase) >= 0;
377+
&& IndexOf(value, _length - value.Length, value.Length, StringComparison.InvariantCultureIgnoreCase) >= 0;
378378
}
379379

380380
public IEnumerable<Parameter> GetParameters()

src/NHibernate/SqlCommand/SubselectClauseExtractor.cs

+5-6
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static bool HasOrderBy(SqlString subselect)
111111
private int FindFromClauseInPart(string part)
112112
{
113113
int afterLastClosingParenIndex = 0;
114-
int fromIndex = StringHelper.IndexOfCaseInsensitive(part, FromClauseToken);
114+
int fromIndex = part.IndexOf(FromClauseToken, StringComparison.OrdinalIgnoreCase);
115115

116116
for (int i = 0; i < part.Length; i++)
117117
{
@@ -133,13 +133,13 @@ private int FindFromClauseInPart(string part)
133133
}
134134

135135
afterLastClosingParenIndex = i + 1;
136-
fromIndex = StringHelper.IndexOfCaseInsensitive(part, FromClauseToken, afterLastClosingParenIndex);
136+
fromIndex = part.IndexOf(FromClauseToken, afterLastClosingParenIndex, StringComparison.OrdinalIgnoreCase);
137137
}
138138
}
139139

140140
if (afterLastClosingParenIndex == 0)
141141
{
142-
fromIndex = StringHelper.IndexOfCaseInsensitive(part, FromClauseToken);
142+
fromIndex = part.IndexOf(FromClauseToken, StringComparison.OrdinalIgnoreCase);
143143
}
144144

145145
if(parenNestCount > 0)
@@ -163,7 +163,7 @@ private void CheckLastPartForOrderByClause()
163163
}
164164

165165
string partString = part as string;
166-
int index = StringHelper.LastIndexOfCaseInsensitive(partString, OrderByToken);
166+
int index = partString.LastIndexOf(OrderByToken, StringComparison.OrdinalIgnoreCase);
167167
if (index >= 0)
168168
{
169169
lastOrderByPartIndex = builder.Count - 1;
@@ -175,8 +175,7 @@ private void CheckLastPartForOrderByClause()
175175

176176
private void IgnoreOrderByInSubselect(string partString)
177177
{
178-
int index;
179-
index = StringHelper.LastIndexOfCaseInsensitive(partString, ")");
178+
var index = partString.LastIndexOf(")", StringComparison.Ordinal);
180179
if (index >= 0 && ParenIsAfterLastOrderBy(index))
181180
{
182181
lastOrderByPartIndex = -1;

src/NHibernate/Type/CharBooleanType.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi
3737
}
3838
else
3939
{
40-
return StringHelper.EqualsCaseInsensitive(code, TrueString);
40+
return code.Equals(TrueString, StringComparison.InvariantCultureIgnoreCase);
4141
}
4242
}
4343

@@ -68,11 +68,11 @@ public override string ObjectToSQLString(object value, Dialect.Dialect dialect)
6868
/// <returns></returns>
6969
public override object StringToObject(String xml)
7070
{
71-
if (StringHelper.EqualsCaseInsensitive(TrueString, xml))
71+
if (string.Equals(TrueString, xml, StringComparison.InvariantCultureIgnoreCase))
7272
{
7373
return true;
7474
}
75-
else if (StringHelper.EqualsCaseInsensitive(FalseString, xml))
75+
else if (string.Equals(FalseString, xml, StringComparison.InvariantCultureIgnoreCase))
7676
{
7777
return false;
7878
}
@@ -82,4 +82,4 @@ public override object StringToObject(String xml)
8282
}
8383
}
8484
}
85-
}
85+
}

src/NHibernate/Util/StringHelper.cs

+12
Original file line numberDiff line numberDiff line change
@@ -658,31 +658,43 @@ public static string Unroot(string qualifiedName)
658658
return (loc < 0) ? qualifiedName : qualifiedName.Substring(loc + 1);
659659
}
660660

661+
// Since 5.2
662+
[Obsolete("This method has no more usage and will be removed in a future version")]
661663
public static bool EqualsCaseInsensitive(string a, string b)
662664
{
663665
return StringComparer.InvariantCultureIgnoreCase.Compare(a, b) == 0;
664666
}
665667

668+
// Since 5.2
669+
[Obsolete("This method has no more usage and will be removed in a future version")]
666670
public static int IndexOfCaseInsensitive(string source, string value)
667671
{
668672
return source.IndexOf(value, StringComparison.InvariantCultureIgnoreCase);
669673
}
670674

675+
// Since 5.2
676+
[Obsolete("This method has no more usage and will be removed in a future version")]
671677
public static int IndexOfCaseInsensitive(string source, string value, int startIndex)
672678
{
673679
return source.IndexOf(value, startIndex, StringComparison.InvariantCultureIgnoreCase);
674680
}
675681

682+
// Since 5.2
683+
[Obsolete("This method has no more usage and will be removed in a future version")]
676684
public static int IndexOfCaseInsensitive(string source, string value, int startIndex, int count)
677685
{
678686
return source.IndexOf(value, startIndex, count, StringComparison.InvariantCultureIgnoreCase);
679687
}
680688

689+
// Since 5.2
690+
[Obsolete("This method has no more usage and will be removed in a future version")]
681691
public static int LastIndexOfCaseInsensitive(string source, string value)
682692
{
683693
return source.LastIndexOf(value, StringComparison.InvariantCultureIgnoreCase);
684694
}
685695

696+
// Since 5.2
697+
[Obsolete("This method has no more usage and will be removed in a future version")]
686698
public static bool StartsWithCaseInsensitive(string source, string prefix)
687699
{
688700
return source.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase);

0 commit comments

Comments
 (0)