Class ProQueryProvider
ProQueryProvider: PVT-based Batch Aggregation.
✅ SECURITY: Parameterized SQL queries.
❌ NO FALLBACK to SQL functions.
✅ DRY: One method generates SQL for Execute and Preview.
public class ProQueryProvider : PostgresQueryProvider, IRedbQueryProvider
Inheritance
Implements
Inherited Members
Methods
CheckProOnlyDistinctFeatures<TProps>(QueryContext<TProps>)
Pro version supports all Distinct features.
protected override void CheckProOnlyDistinctFeatures<TProps>(QueryContext<TProps> context) where TProps : class, new()
CreateFilterParser()
Pro: Uses ProFilterExpressionParser with arithmetic and function support.
protected override ProFilterExpressionParser CreateFilterParser()
ExecuteAggregateAsync(long, string, AggregateFunction, FilterExpression?)
⚡ Pro: Single field aggregation with FilterExpression (preferred).
public override Task<decimal?> ExecuteAggregateAsync(long schemeId, string fieldPath, AggregateFunction function, FilterExpression? filter)
ExecuteAggregateAsync(long, string, AggregateFunction, string?)
⚡ Pro: Single field aggregation with filterJson (legacy).
public override Task<decimal?> ExecuteAggregateAsync(long schemeId, string fieldPath, AggregateFunction function, string? filterJson = null)
ExecuteAggregateBatchAsync(long, IEnumerable<AggregateRequest>, FilterExpression?)
⚡ Pro Override: Batch aggregation with FilterExpression (preferred).
public override Task<AggregateResult> ExecuteAggregateBatchAsync(long schemeId, IEnumerable<AggregateRequest> requests, FilterExpression? filter)
ExecuteAggregateBatchAsync(long, IEnumerable<AggregateRequest>, string?)
⚡ Pro Override: Batch aggregation with filterJson (legacy).
public override Task<AggregateResult> ExecuteAggregateBatchAsync(long schemeId, IEnumerable<AggregateRequest> requests, string? filterJson = null)
ExecuteCountAsync<TProps>(QueryContext<TProps>)
Pro Override: COUNT via CTE + JOIN (uses BuildQuerySqlAsync).
protected override Task<int> ExecuteCountAsync<TProps>(QueryContext<TProps> context) where TProps : class, new()
ExecuteDeleteAsync(long, FilterExpression?)
Pro Override: Delete objects by FilterExpression using PVT for efficient filtering.
public override Task<int> ExecuteDeleteAsync(long schemeId, FilterExpression? filter)
ExecuteGroupedAggregateAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, FilterExpression?)
⚡ Pro Override: GroupBy via PVT with FilterExpression (preferred).
public override Task<JsonDocument?> ExecuteGroupedAggregateAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, FilterExpression? filter)
ExecuteGroupedAggregateAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, string?)
⚡ Pro Override: GroupBy via PVT with filterJson (legacy compatibility).
public override Task<JsonDocument?> ExecuteGroupedAggregateAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, string? filterJson = null)
ExecuteGroupedWindowQueryAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?)
Execute GroupBy + Window query with FilterExpression (preferred).
public override Task<JsonDocument?> ExecuteGroupedWindowQueryAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, FilterExpression? filter)
ExecuteGroupedWindowQueryAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?)
Execute GroupBy + Window query with filterJson (legacy).
public override Task<JsonDocument?> ExecuteGroupedWindowQueryAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, string? filterJson = null)
ExecuteToListAsync<TProps>(QueryContext<TProps>, Type)
PVT-based search (uses BuildQuerySqlAsync)
protected override Task<object> ExecuteToListAsync<TProps>(QueryContext<TProps> context, Type propsType) where TProps : class, new()
ExecuteWindowQueryAsync(long, IEnumerable<WindowFieldRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?, string?, int?, int?)
⚡ Pro: Window Functions with FilterExpression (preferred).
public override Task<JsonDocument?> ExecuteWindowQueryAsync(long schemeId, IEnumerable<WindowFieldRequest> selectFields, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, FilterExpression? filter, string? frameJson = null, int? take = null, int? skip = null)
ExecuteWindowQueryAsync(long, IEnumerable<WindowFieldRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?, string?, int?, int?)
⚡ Pro: Window Functions with filterJson (legacy).
public override Task<JsonDocument?> ExecuteWindowQueryAsync(long schemeId, IEnumerable<WindowFieldRequest> selectFields, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, string? filterJson = null, string? frameJson = null, int? take = null, int? skip = null)
GetAggregateSqlPreviewAsync<TProps, TResult>(QueryContext<TProps>, Expression<Func<RedbObject<TProps>, TResult>>)
Pro Override: SQL Preview for aggregation
public override Task<string> GetAggregateSqlPreviewAsync<TProps, TResult>(QueryContext<TProps> context, Expression<Func<RedbObject<TProps>, TResult>> selector) where TProps : class, new()
GetGroupBySqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, FilterExpression?)
Pro: SQL Preview for GroupBy with FilterExpression (preferred).
public Task<string> GetGroupBySqlPreviewAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, FilterExpression? filter)
GetGroupBySqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, string?)
Pro: SQL Preview for GroupBy with filterJson (legacy compatibility).
public Task<string> GetGroupBySqlPreviewAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, string? filterJson = null)
GetGroupedWindowSqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?)
SQL preview for GroupBy + Window with FilterExpression (preferred).
public override Task<string> GetGroupedWindowSqlPreviewAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, FilterExpression? filter)
GetGroupedWindowSqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?)
SQL preview for GroupBy + Window (filterJson - legacy).
public override Task<string> GetGroupedWindowSqlPreviewAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, string? filterJson = null)
GetSingleAggregateSqlPreviewAsync(long, string, AggregateFunction, FilterExpression?)
Pro: SQL Preview for Single Aggregation
public Task<string> GetSingleAggregateSqlPreviewAsync(long schemeId, string fieldPath, AggregateFunction function, FilterExpression? filter = null)
GetSqlPreviewAsync<TProps>(QueryContext<TProps>)
SQL Preview (uses BuildQuerySqlAsync).
public override Task<string> GetSqlPreviewAsync<TProps>(QueryContext<TProps> context) where TProps : class, new()
GetWindowSqlPreviewAsync(long, IEnumerable<WindowFieldRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?, string?, int?, int?)
Pro: SQL Preview for Window Functions
public override Task<string> GetWindowSqlPreviewAsync(long schemeId, IEnumerable<WindowFieldRequest> selectFields, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, string? filterJson = null, string? frameJson = null, int? take = null, int? skip = null)