QueryPlanOptions
- Namespace:
PPDS.Dataverse.Query.Planning - Assembly:
PPDS.Dataverse - Kind: Class
Summary
Options for query plan construction.
Members
Properties
AggregateRecordLimit
int AggregateRecordLimit { get; set; }
Maximum records per partition for aggregate partitioning. Default is 40,000 to stay safely below the Dataverse 50K AggregateQueryRecordLimit.
CteBindings
Dictionary<string, IQueryPlanNode> CteBindings { get; set; }
CTE name-to-node bindings for recursive CTE planning. When the planner encounters a table matching a CTE name in this dictionary, it returns the bound node instead of generating FetchXML.
DmlRowCap
Nullable<int> DmlRowCap { get; set; }
Row cap for DML operations. null = unlimited, default comes from DmlSafetyGuard (10,000).
EnablePrefetch
bool EnablePrefetch { get; set; }
Whether to wrap scan nodes with PrefetchScanNode for page-ahead buffering. Default false (opt-in).
EstimatedRecordCount
Nullable<long> EstimatedRecordCount { get; set; }
Estimated total record count for the query's entity. When set for aggregate queries
and the count exceeds PPDS.Dataverse.Query.Planning.QueryPlanOptions.AggregateRecordLimit, the planner partitions the
query by date range and executes partitions in parallel across the connection pool.
Obtained from PPDS.Dataverse.Query.IQueryExecutor.GetTotalRecordCountAsync(System.String,System.Threading.CancellationToken) by the caller.
ExplainOnly
bool ExplainOnly { get; set; }
If true, build plan for explanation only — don't execute.
ForceClientAggregation
bool ForceClientAggregation { get; set; }
When true, forces client-side hash grouping instead of Dataverse-side aggregation.
Set by the -- ppds:HASH_GROUP query hint.
IncludeCount
bool IncludeCount { get; set; }
Whether to include total record count in the result.
MaxDate
Nullable<DateTime> MaxDate { get; set; }
Latest createdon date in the target entity. Required for aggregate partitioning.
MaxRecordsPerPartition
int MaxRecordsPerPartition { get; set; }
Maximum records per partition. Default is 40,000 to provide headroom below the 50K limit.
MaxRows
Nullable<int> MaxRows { get; set; }
Global row limit, if any.
MinDate
Nullable<DateTime> MinDate { get; set; }
Earliest createdon date in the target entity. Required for aggregate partitioning.
NoLock
bool NoLock { get; set; }
When true, signals FetchXmlScanNode to inject no-lock="true" into FetchXML.
Set by the -- ppds:NOLOCK query hint.
OriginalSql
string OriginalSql { get; set; }
The original SQL text, needed for TDS Endpoint routing.
When PPDS.Dataverse.Query.Planning.QueryPlanOptions.UseTdsEndpoint is true, this SQL is passed directly
to the TDS Endpoint instead of being transpiled to FetchXML.
PageNumber
Nullable<int> PageNumber { get; set; }
Page number for caller-controlled paging (1-based). When set, the plan fetches only this single page instead of auto-paging.
PagingCookie
string PagingCookie { get; set; }
Paging cookie from a previous result for continuation.
Used with PPDS.Dataverse.Query.Planning.QueryPlanOptions.PageNumber for caller-controlled paging.
PoolCapacity
int PoolCapacity { get; set; }
Pool capacity from pool.GetTotalRecommendedParallelism().
PrefetchBufferSize
int PrefetchBufferSize { get; set; }
Number of rows to buffer ahead for prefetch. Default 5000 (~3 FetchXML pages).
RemoteExecutorFactory
Func<string, IQueryExecutor> RemoteExecutorFactory { get; set; }
Factory for creating IQueryExecutor instances for remote environments. Takes a profile label (e.g., "UAT"), returns an IQueryExecutor for that environment, or null if the label is not found. Combines profile resolution and executor creation. Set by the caller.
TdsQueryExecutor
ITdsQueryExecutor TdsQueryExecutor { get; set; }
The TDS query executor for direct SQL execution (Phase 3.5).
Required when PPDS.Dataverse.Query.Planning.QueryPlanOptions.UseTdsEndpoint is true.
UseTdsEndpoint
bool UseTdsEndpoint { get; set; }
Whether to use the TDS Endpoint (Phase 3.5).
VariableScope
VariableScope VariableScope { get; set; }
Optional variable scope for substituting @variable references in WHERE conditions with literal values before FetchXML transpilation.