From 82af7b8de1549fc0eadd0487433529f549dcad68 Mon Sep 17 00:00:00 2001 From: Thom Lamb Date: Wed, 20 May 2026 15:31:41 -0500 Subject: [PATCH] fix(query): modernize CalculationFilterGroup and adjust IsValid behavior Refactors the `CalculationFilterGroup` class to utilize C# primary constructors and property initializers, improving conciseness and readability. The `IsValid()` method's logic is updated. Previously, it returned true if *any* filter in the group was valid. Now, it returns true only if *all* filters are valid, and an empty filter group is considered valid. This adjustment clarifies the group's validity criteria, aligning with common interpretations for `All` operations and addressing related technical debt. --- .claude/settings.local.json | 4 +++- .../CalculationFilterGroup.cs | 20 ++++++------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index d9b3047..eef50ad 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -23,7 +23,9 @@ "Bash(Get-ChildItem src/Strata.SqlTools.SqlServer/ExpressionFactory/Query/*.cs)", "Bash(Measure-Object)", "Bash(Select-Object -ExpandProperty Count)", - "PowerShell(dotnet build *)" + "PowerShell(dotnet build *)", + "Bash(Get-ChildItem src/Strata.SqlTools.Query/*.cs)", + "Bash(Select-String -Pattern '^namespace ')" ] } } diff --git a/src/Strata.SqlTools.Query/CalculationFilterGroup.cs b/src/Strata.SqlTools.Query/CalculationFilterGroup.cs index b31ef36..29653ee 100644 --- a/src/Strata.SqlTools.Query/CalculationFilterGroup.cs +++ b/src/Strata.SqlTools.Query/CalculationFilterGroup.cs @@ -2,24 +2,16 @@ using System.Text.Json.Serialization; namespace Strata.SqlTools.Query; -public class CalculationFilterGroup +[method: JsonConstructor] +public class CalculationFilterGroup(IEnumerable filters, LogicalOperator logicalOperator) { // Hereditary logical operation applied to all Filters - public LogicalOperator LogicalOperator { get; set; } + public LogicalOperator LogicalOperator { get; set; } = logicalOperator; - public IEnumerable Filters { get; set; } + public IEnumerable Filters { get; set; } = filters; - public CalculationFilterGroup() + public CalculationFilterGroup() : this([], LogicalOperator.And) { - LogicalOperator = LogicalOperator.And; - Filters = new List(); - } - - [JsonConstructor] - public CalculationFilterGroup(IEnumerable filters, LogicalOperator logicalOperator) - { - Filters = filters; - LogicalOperator = logicalOperator; } public IEnumerable GetValidFilters() @@ -29,6 +21,6 @@ public class CalculationFilterGroup public bool IsValid() { - return Filters != null && Filters.Any(x => x.IsValid()); + return Filters.All(x => x.IsValid()); } } -- 2.54.0