Class ProQueryProvider

Assembly: redb.Postgres.Pro.dll

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

QueryProviderBase.CheckProOnlyDistinctFeatures<TProps>(QueryContext<TProps>),QueryProviderBase.CreateFacetBuilder(),QueryProviderBase.CreateFilterParser(),QueryProviderBase.CreateOrderingParser(),QueryProviderBase.CreateQuery<TProps>(long, long?, bool),QueryProviderBase.ExecuteAggregateAsync(long, string, AggregateFunction, FilterExpression?),QueryProviderBase.ExecuteAggregateAsync(long, string, AggregateFunction, string?),QueryProviderBase.ExecuteAggregateBatchAsync(long, IEnumerable<AggregateRequest>, FilterExpression?),QueryProviderBase.ExecuteAggregateBatchAsync(long, IEnumerable<AggregateRequest>, string?),QueryProviderBase.ExecuteArrayGroupedAggregateAsync(long, string, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, string?),QueryProviderBase.ExecuteAsync(Expression, Type),QueryProviderBase.ExecuteCountAsync<TProps>(QueryContext<TProps>),QueryProviderBase.ExecuteDeleteAsync(long, FilterExpression?),QueryProviderBase.ExecuteDeleteAsync(long, string?),QueryProviderBase.ExecuteGroupedAggregateAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, FilterExpression?),QueryProviderBase.ExecuteGroupedAggregateAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, string?),QueryProviderBase.ExecuteGroupedWindowQueryAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?),QueryProviderBase.ExecuteGroupedWindowQueryAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?),QueryProviderBase.ExecuteToListAsync<TProps>(QueryContext<TProps>, Type),QueryProviderBase.ExecuteWindowQueryAsync(long, IEnumerable<WindowFieldRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?, string?, int?, int?),QueryProviderBase.ExecuteWindowQueryAsync(long, IEnumerable<WindowFieldRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?, string?, int?, int?),QueryProviderBase.GetAggregateSqlPreviewAsync<TProps, TResult>(QueryContext<TProps>, Expression<Func<RedbObject<TProps>, TResult>>),QueryProviderBase.GetFilterJsonAsync<TProps>(QueryContext<TProps>),QueryProviderBase.GetGroupedWindowSqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?),QueryProviderBase.GetGroupedWindowSqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?),QueryProviderBase.GetSchemeAsync(long),QueryProviderBase.GetSqlPreviewAsync<TProps>(QueryContext<TProps>),QueryProviderBase.GetWindowSqlPreviewAsync(long, IEnumerable<WindowFieldRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, string?, string?, int?, int?),QueryProviderBase.ParseAggregateExpressionForPreview<TProps, TResult>(Expression<Func<RedbObject<TProps>, TResult>>),QueryProviderBase.ShouldUseLazyLoading<TProps>(QueryContext<TProps>),PostgresQueryProvider.CreateFilterParser()

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)

Constructors