From 8211047d6b0d6b949a060b0b7218d045c2f99387 Mon Sep 17 00:00:00 2001 From: Thom Lamb Date: Tue, 26 May 2026 09:30:58 -0500 Subject: [PATCH] chore(sonar): use LINQ Select for parameter match projection (S3267) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Snowflake/Breakdowns/ProcedureBreakdown.ParseCallParameters — replace the foreach over a MatchCollection with a .Cast().Select(m => m.Groups) projection. The loop now iterates GroupCollection values directly, indexing groups[1] and groups[2] for name/value without rebinding the Match. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../Breakdowns/ProcedureBreakdown.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs index 8d6d27a..4e79517 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs @@ -235,12 +235,10 @@ public class ProcedureBreakdown : SqlServerProcedureBreakdown @"(\w+)\s*=>\s*([^,]+)(?:,|$)", System.Text.RegularExpressions.RegexOptions.IgnoreCase, Strata.SqlTools.SqlBreakdown.Utilities.RegexDefaults.MatchTimeout); - foreach (System.Text.RegularExpressions.Match paramMatch in paramMatches) + foreach (var groups in paramMatches.Cast().Select(paramMatch => paramMatch.Groups)) { - var paramName = paramMatch.Groups[1].Value.Trim(); - var paramValue = paramMatch.Groups[2].Value.Trim(); // Store with @ prefix for consistency with SQL Server - parameters["@" + paramName] = paramValue; + parameters["@" + groups[1].Value.Trim()] = groups[2].Value.Trim(); } // If no named parameters found, try positional parameters (just values)