chore(sonar): mechanical src/ cleanups — AsSpan, drop ContainsKey guard, simplify GetQuery (CA1846, CA1853, S2219)
- `SqlParseException.cs:90` (CA1846): `sql.Substring(0, 197)` → `sql.AsSpan(0, 197)` in the truncated-SQL diagnostic message. Avoids an allocation in an already cold exception path. - `Snowflake/QueryBreakdown.cs:103` (CA1853): drop the redundant `Parameters.ContainsKey(...)` guard around `Parameters.Remove(...)`. `Dictionary<TKey,TValue>.Remove` is a no-op if the key is absent, so the guard only doubled the work and computed the key string twice. - `LinqQueryBreakdown.cs:194` (S2219): collapse the now-stub `GetQuery<T>()` (every branch returned `GetEmptyQueryable<T>()` after the S1168 cleanup) to a single expression-bodied member. Updates the XML doc to describe the actual current behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
cbe891dc0b
commit
1bd6deec83
@@ -185,33 +185,13 @@ public class LinqQueryBreakdown : QueryBreakdown
|
||||
/// Gets a LINQ to SQL query of the specified type based on this breakdown.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The entity type for the query.</typeparam>
|
||||
/// <returns>An IQueryable of the specified type reconstructed from the breakdown; an empty queryable if the type doesn't match the original entity type or the original data source isn't available.</returns>
|
||||
/// <returns>An empty queryable. Breakdown analysis is one-way; reconstruction requires the original provider, which is not preserved.</returns>
|
||||
/// <remarks>
|
||||
/// This method attempts to reconstruct a LINQ query from the analyzed components (WHERE, ORDER BY, etc.).
|
||||
/// If a data source (IQueryable) is available in the breakdown's OriginalExpression, it will be used.
|
||||
/// Otherwise, returns an empty queryable — breakdown analysis is one-way; reconstruction requires the original provider.
|
||||
/// Always returns an empty queryable today. A future version may reconstruct the LINQ query from
|
||||
/// <see cref="OriginalExpression"/> when the provider is available; until then callers receive an
|
||||
/// empty result rather than a null reference.
|
||||
/// </remarks>
|
||||
public override IQueryable<T> GetQuery<T>() where T : class
|
||||
{
|
||||
if (OriginalExpression == null)
|
||||
{
|
||||
return GetEmptyQueryable<T>();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (OriginalExpression is Expression && EntityType == typeof(T))
|
||||
{
|
||||
return GetEmptyQueryable<T>();
|
||||
}
|
||||
|
||||
return GetEmptyQueryable<T>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return GetEmptyQueryable<T>();
|
||||
}
|
||||
}
|
||||
public override IQueryable<T> GetQuery<T>() where T : class => GetEmptyQueryable<T>();
|
||||
|
||||
/// <summary>
|
||||
/// Get and empty queryable of T
|
||||
|
||||
@@ -100,10 +100,7 @@ public class QueryBreakdown : SqlServerQueryBreakdown
|
||||
base.AddParameter(colonName.TrimStart(':', '@'), value);
|
||||
|
||||
// Add both formats to dictionary for compatibility
|
||||
if (Parameters.ContainsKey($"@{colonName.TrimStart(':', '@')}"))
|
||||
{
|
||||
Parameters.Remove($"@{colonName.TrimStart(':', '@')}");
|
||||
}
|
||||
Parameters.Remove($"@{colonName.TrimStart(':', '@')}");
|
||||
Parameters[colonName] = value;
|
||||
Parameters[atName] = value;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public class SqlParseException : Exception
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine($"SQL (truncated): {sql.Substring(0, 197)}...");
|
||||
sb.AppendLine($"SQL (truncated): {sql.AsSpan(0, 197)}...");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
|
||||
Reference in New Issue
Block a user