chore(sonar): hoist constant arrays, discard TryParse, defang TODO markers (CA1861, CA1806, S1135)
- `SqlUtils.cs:43` and `StatementParser.cs:254,285` (CA1861 ×3): inline
`new[] { ' ' }` and `new[] { ';' }` Split delimiters hoisted to
`static readonly char[]` fields next to the existing `separator`
field. Distinct names (`spaceSeparator`, `semicolonSeparator`) avoid
collision.
- `SqlUtils.Filters.cs:27` (CA1806): `double.TryParse(value, out var
dblValue)` had its return value silently discarded — intentional
(downstream switch branches use `dblValue` only when relevant and
rely on the default `0.0` on failure). Now uses `_ =` to make the
discard explicit and extends the comment.
- `FilterCondition.cs:10` and `With.cs:10` (S1135 ×2): rewrite the
`todo:` / `TODO:` markers as plain "Future:" notes. Both comments
documented deliberate design choices ("inherit base for now",
"could be indexed later") rather than tracked work, so the marker
was misleading anyway.
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
1bd6deec83
commit
54b9c7876f
@@ -6,8 +6,8 @@ public class FilterCondition
|
|||||||
|
|
||||||
public IEnumerable<object>? Values { get; set; }
|
public IEnumerable<object>? Values { get; set; }
|
||||||
|
|
||||||
// This is not hereditary to Values; it is used for combination with the next FilterCondition in the set
|
// This is not hereditary to Values; it is used for combination with the next FilterCondition in the set.
|
||||||
// todo: That could be indexed to ensure accuracy
|
// Could be indexed in future to ensure accuracy if order-of-evaluation across siblings ever matters.
|
||||||
public LogicalOperator LogicalOperator { get; set; }
|
public LogicalOperator LogicalOperator { get; set; }
|
||||||
|
|
||||||
public bool IsValid()
|
public bool IsValid()
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ namespace Strata.SqlTools.Rules.Rule.Groups;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class With : Base
|
public class With : Base
|
||||||
{
|
{
|
||||||
// TODO: revisit whether ordering should be applied here before delegating
|
// Future revisit: whether ordering should be applied here before delegating
|
||||||
// to the base GetExpressions(); inherit base behavior for now.
|
// to the base GetExpressions(); inherits base behavior for now.
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Merges two BoolExpr expressions using WITH semantics.
|
/// Merges two BoolExpr expressions using WITH semantics.
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ public static partial class SqlUtils
|
|||||||
var filter = new SqlFilter();
|
var filter = new SqlFilter();
|
||||||
string param = "@" + GuidUtils.TranslateGuid(Guid.NewGuid());
|
string param = "@" + GuidUtils.TranslateGuid(Guid.NewGuid());
|
||||||
|
|
||||||
// Try to convert string to double (will only be used for some operators)
|
// Try to convert string to double (will only be used for some operators); on failure dblValue stays at 0.0 by design.
|
||||||
double.TryParse(value, out double dblValue);
|
_ = double.TryParse(value, out double dblValue);
|
||||||
|
|
||||||
// Optimize IN if only one value
|
// Optimize IN if only one value
|
||||||
if (operation == FilterOperation.In && !value.Contains(','))
|
if (operation == FilterOperation.In && !value.Contains(','))
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public static partial class SqlUtils
|
|||||||
|
|
||||||
private const string DEFAULT_SCHEMA = "dbo";
|
private const string DEFAULT_SCHEMA = "dbo";
|
||||||
private static readonly char[] separator = new[] { ',' };
|
private static readonly char[] separator = new[] { ',' };
|
||||||
|
private static readonly char[] spaceSeparator = new[] { ' ' };
|
||||||
|
|
||||||
#region SQL String Manipulation
|
#region SQL String Manipulation
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ public static partial class SqlUtils
|
|||||||
|
|
||||||
foreach (string commaWord in commaWords)
|
foreach (string commaWord in commaWords)
|
||||||
{
|
{
|
||||||
string[] spaceWords = commaWord.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
string[] spaceWords = commaWord.Split(spaceSeparator, StringSplitOptions.RemoveEmptyEntries);
|
||||||
var newSpaceWords = new List<string>();
|
var newSpaceWords = new List<string>();
|
||||||
|
|
||||||
foreach (string spaceWord in spaceWords)
|
foreach (string spaceWord in spaceWords)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public class StatementParser
|
|||||||
public const string KeywordHaving = "HAVING";
|
public const string KeywordHaving = "HAVING";
|
||||||
public const string KeywordOrderBy = "ORDER BY";
|
public const string KeywordOrderBy = "ORDER BY";
|
||||||
private static readonly char[] separator = new[] { '\r', '\n' };
|
private static readonly char[] separator = new[] { '\r', '\n' };
|
||||||
|
private static readonly char[] semicolonSeparator = new[] { ';' };
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -251,7 +252,7 @@ public class StatementParser
|
|||||||
if (matchingKeyword != null)
|
if (matchingKeyword != null)
|
||||||
{
|
{
|
||||||
// Extract setup clauses (simplified - would need more robust parsing for production)
|
// Extract setup clauses (simplified - would need more robust parsing for production)
|
||||||
var statements = beforeSelect.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
|
var statements = beforeSelect.Split(semicolonSeparator, StringSplitOptions.RemoveEmptyEntries)
|
||||||
.Select(stmt => stmt.Trim())
|
.Select(stmt => stmt.Trim())
|
||||||
.Where(trimmed => !string.IsNullOrEmpty(trimmed));
|
.Where(trimmed => !string.IsNullOrEmpty(trimmed));
|
||||||
|
|
||||||
@@ -282,7 +283,7 @@ public class StatementParser
|
|||||||
if (match.Success)
|
if (match.Success)
|
||||||
{
|
{
|
||||||
var finishSql = sql.Substring(match.Index + 1).Trim();
|
var finishSql = sql.Substring(match.Index + 1).Trim();
|
||||||
var statements = finishSql.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
|
var statements = finishSql.Split(semicolonSeparator, StringSplitOptions.RemoveEmptyEntries);
|
||||||
foreach (var stmt in statements)
|
foreach (var stmt in statements)
|
||||||
{
|
{
|
||||||
var trimmed = stmt.Trim();
|
var trimmed = stmt.Trim();
|
||||||
|
|||||||
Reference in New Issue
Block a user