Skip to content

Commit c0a72a4

Browse files
committed
Format with one Regex.Replace call
1 parent cab3f97 commit c0a72a4

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

src/MiniProfiler.Shared/SqlFormatters/InlineFormatter.cs

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Collections.Generic;
2+
using System.Linq;
23
using System.Text.RegularExpressions;
3-
using StackExchange.Profiling.Internal;
44

55
namespace StackExchange.Profiling.SqlFormatters
66
{
@@ -9,7 +9,6 @@ namespace StackExchange.Profiling.SqlFormatters
99
/// </summary>
1010
public class InlineFormatter : ISqlFormatter
1111
{
12-
private static readonly Regex ParamPrefixes = new Regex("[@:?].+", RegexOptions.IgnoreCase | RegexOptions.Compiled);
1312
private static bool includeTypeInfo;
1413

1514
/// <summary>
@@ -35,22 +34,21 @@ public string FormatSql(string commandText, List<SqlTimingParameter> parameters)
3534
return commandText;
3635
}
3736

38-
var originalCommandText = commandText;
39-
37+
var paramValuesByName = new Dictionary<string, string>(parameters.Count);
4038
foreach (var p in parameters)
4139
{
42-
// If the parameter doesn't have a prefix (@,:,etc), append one
43-
var name = ParamPrefixes.IsMatch(p.Name)
44-
? p.Name
45-
: Regex.Match(originalCommandText, "([@:?])" + Regex.Escape(p.Name), RegexOptions.IgnoreCase).Value;
46-
if (name.HasValue())
47-
{
48-
var value = GetParameterValue(p);
49-
commandText = Regex.Replace(commandText, "(" + Regex.Escape(name) + ")([^0-9A-z]|$)", m => value + m.Groups[2], RegexOptions.IgnoreCase);
50-
}
40+
var trimmedName = p.Name.TrimStart('@', ':', '?').ToLower();
41+
paramValuesByName[trimmedName] = GetParameterValue(p);
5142
}
5243

53-
return commandText;
44+
var regexPattern = "[@:?](?:" + string.Join("|", paramValuesByName.Keys.Select(Regex.Escape)) + ")(?![0-9a-z])";
45+
46+
return Regex.Replace(
47+
commandText,
48+
regexPattern,
49+
m => paramValuesByName[m.Value.Substring(1).ToLower()],
50+
RegexOptions.IgnoreCase
51+
);
5452
}
5553

5654
/// <summary>

0 commit comments

Comments
 (0)