Class QueryProviderBase
Base query provider for executing LINQ queries via search_objects_with_facets.
Database-specific implementations should inherit and provide ISqlDialect.
public abstract class QueryProviderBase : IRedbQueryProvider
Inheritance
Implements
Derived
Methods
CheckProOnlyDistinctFeatures<TProps>(QueryContext<TProps>)
Check for Pro-only Distinct features
protected virtual void CheckProOnlyDistinctFeatures<TProps>(QueryContext<TProps> context) where TProps : class, new()
CreateFacetBuilder()
Creates facet filter builder.
protected virtual IFacetFilterBuilder CreateFacetBuilder()
CreateFilterParser()
Creates filter expression parser. Override for Pro features.
protected abstract IFilterExpressionParser CreateFilterParser()
CreateOrderingParser()
Creates ordering expression parser.
protected virtual IOrderingExpressionParser CreateOrderingParser()
CreateQuery<TProps>(long, long?, bool)
Create new query for specified scheme.
public IRedbQueryable<TProps> CreateQuery<TProps>(long schemeId, long? userId = null, bool checkPermissions = false) where TProps : class, new()
ExecuteAggregateAsync(long, string, AggregateFunction, FilterExpression?)
Execute single-field aggregation with FilterExpression (Pro version).
public virtual Task<decimal?> ExecuteAggregateAsync(long schemeId, string fieldPath, AggregateFunction function, FilterExpression? filter)
ExecuteAggregateAsync(long, string, AggregateFunction, string?)
Perform aggregation on EAV field (SQL strategy)
public virtual Task<decimal?> ExecuteAggregateAsync(long schemeId, string fieldPath, AggregateFunction function, string? filterJson = null)
ExecuteAggregateBatchAsync(long, IEnumerable<AggregateRequest>, FilterExpression?)
Execute batch aggregation with FilterExpression (Pro version).
public virtual Task<AggregateResult> ExecuteAggregateBatchAsync(long schemeId, IEnumerable<AggregateRequest> requests, FilterExpression? filter)
ExecuteAggregateBatchAsync(long, IEnumerable<AggregateRequest>, string?)
Perform batch aggregation — ONE SQL query for all aggregations!
public virtual Task<AggregateResult> ExecuteAggregateBatchAsync(long schemeId, IEnumerable<AggregateRequest> requests, string? filterJson = null)
ExecuteArrayGroupedAggregateAsync(long, string, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, string?)
Performs GroupBy aggregation on an array via the aggregate_array_grouped SQL function
public virtual Task<JsonDocument?> ExecuteArrayGroupedAggregateAsync(long schemeId, string arrayPath, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, string? filterJson = null)
ExecuteAsync(Expression, Type)
Execute query asynchronously.
public Task<object> ExecuteAsync(Expression expression, Type elementType)
ExecuteCountAsync<TProps>(QueryContext<TProps>)
Executes COUNT query. Override in Pro for PVT-based count with computed expressions.
protected virtual Task<int> ExecuteCountAsync<TProps>(QueryContext<TProps> context) where TProps : class, new()
ExecuteDeleteAsync(long, FilterExpression?)
Delete objects by FilterExpression (Pro version uses PVT, OpenSource falls back to facet JSON).
public virtual Task<int> ExecuteDeleteAsync(long schemeId, FilterExpression? filter)
ExecuteDeleteAsync(long, string?)
Delete objects by filter.
public virtual Task<int> ExecuteDeleteAsync(long schemeId, string? filterJson = null)
ExecuteGroupedAggregateAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, FilterExpression?)
Performs GroupBy aggregation with FilterExpression (Pro version).
public virtual Task<JsonDocument?> ExecuteGroupedAggregateAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, FilterExpression? filter)
ExecuteGroupedAggregateAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, string?)
Performs GroupBy aggregation via the aggregate_grouped SQL function
public virtual 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 with Window Functions with FilterExpression (Pro version).
public virtual 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 with Window Functions.
public virtual 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)
protected virtual 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?)
Execute window query with FilterExpression (Pro version).
public virtual 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?)
Execute query with window functions (SQL function query_with_window).
public virtual 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>>)
🔍 Returns SQL query for aggregation (for debugging)
public virtual Task<string> GetAggregateSqlPreviewAsync<TProps, TResult>(QueryContext<TProps> context, Expression<Func<RedbObject<TProps>, TResult>> selector) where TProps : class, new()
GetFilterJsonAsync<TProps>(QueryContext<TProps>)
Returns the JSON filter that will be sent to SQL function (for diagnostics)
public virtual Task<string> GetFilterJsonAsync<TProps>(QueryContext<TProps> context) where TProps : class, new()
GetGroupedWindowSqlPreviewAsync(long, IEnumerable<GroupFieldRequest>, IEnumerable<AggregateRequest>, IEnumerable<WindowFuncRequest>, IEnumerable<WindowFieldRequest>, IEnumerable<WindowOrderRequest>, FilterExpression?)
SQL preview for GroupBy + Window query with FilterExpression (Pro version).
public virtual 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 query.
public virtual Task<string> GetGroupedWindowSqlPreviewAsync(long schemeId, IEnumerable<GroupFieldRequest> groupFields, IEnumerable<AggregateRequest> aggregations, IEnumerable<WindowFuncRequest> windowFuncs, IEnumerable<WindowFieldRequest> partitionBy, IEnumerable<WindowOrderRequest> orderBy, string? filterJson = null)
GetSchemeAsync(long)
⭐ Get scheme by ID (for projections)
public Task<IRedbScheme?> GetSchemeAsync(long schemeId)
GetSqlPreviewAsync<TProps>(QueryContext<TProps>)
Returns the SQL query that will be executed (for debugging)
public virtual 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?)
SQL preview for window query.
public virtual 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)
ParseAggregateExpressionForPreview<TProps, TResult>(Expression<Func<RedbObject<TProps>, TResult>>)
Parses aggregate expression for preview (simplified version from RedbQueryable)
protected List<(string Alias, string FieldPath, string Function)> ParseAggregateExpressionForPreview<TProps, TResult>(Expression<Func<RedbObject<TProps>, TResult>> selector) where TProps : class, new()
ShouldUseLazyLoading<TProps>(QueryContext<TProps>)
Determines if lazy loading should be used for this query
protected bool ShouldUseLazyLoading<TProps>(QueryContext<TProps> context) where TProps : class, new()