Code review follow-up on 6f85358:
- CalculationFilterGroup.IsValid() previously called GetValidFilters().Any(),
which materialized a full filtered List<CalculationFilter> just to check
existence. Reimplement directly as Filters.Any(x => x.IsValid()) so
IsValid() recovers its pre-refactor O(1) early-exit behavior without
allocations. GetValidFilters() remains for callers that need the full
materialized list.
- QueryConfigExtensions.GetAllColumnIds line 16 uses FilterGroup (not
CalculationFilterGroup), which pre-filters in its JsonConstructor and
has no GetValidFilters() method. Add a comment to document the
intentional asymmetry between line 14 and line 16.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21 lines
970 B
C#
21 lines
970 B
C#
|
|
namespace Strata.SqlTools.Snowflake.ExpressionFactory.Query;
|
|
|
|
public static class QueryConfigExtensions
|
|
{
|
|
/// <summary>
|
|
/// Gets all column ids referenced by this <see cref="QueryConfig"/>
|
|
/// </summary>
|
|
/// <param name="queryConfig"></param>
|
|
/// <returns></returns>
|
|
public static int[] GetAllColumnIds(this QueryConfig queryConfig)
|
|
{
|
|
return queryConfig.Values.SelectMany(value => value.CalculationDataColumnIds)
|
|
.Union(queryConfig.Values.SelectMany(x => x.FilterGroups.SelectMany(y => y.GetValidFilters().Select(f => f.DataColumnId))))
|
|
.Union(queryConfig.Rows.Select(row => row.DataColumnId))
|
|
// FilterGroup.Filters is pre-filtered at construction (see FilterGroup.cs JsonConstructor); no GetValidFilters() equivalent is needed here.
|
|
.Union(queryConfig.FilterGroups.SelectMany(filterGroup => filterGroup.Filters.Select(filter => filter.DataColumnId)))
|
|
.ToArray();
|
|
}
|
|
}
|