The ARX specification
08 Capabilities
Providers differ. Each declares what it supports as **capability flags**, so code can choose a path before it calls, and the rule is the same everywhere: **a declared capability is done correctly; an undeclared one is refused with ARX8001 NotSupported, naming what can't be done.** No provider silently ignores part of a call or answers it differently.
| Flag | What it covers |
|---|---|
| Joins | Links in a query |
| Aggregates | Aggregates and grouping (a provider may answer a lone Count without declaring it) |
| OffsetPaging | Paging by page number beyond 1 |
| TokenPaging | Paging by cookie |
| TotalCount | The total of matching records |
| Transactions | Transactions and batch scopes across calls |
| BulkWrite | CreateMultiple, UpdateMultiple, DeleteMultiple |
| Upsert | Reserved for an insert-or-update operation; no implementation declares it yet |
| StoredProcedures | Execute |
| FullTextSearch | Full-text search conditions |
| LikeOperators | Like, Contains, BeginsWith, EndsWith and their negations |
| OrFilters | Filters joined by OR |
| SecondaryIndexQuery | A read that names a secondary index |
| OptimisticConcurrency | A version column declared in the schema, kept and checked on writes (chapter 02); without it, a schema that declares one is refused |
| WriteByFilter | UpdateMultiple and DeleteMultiple by a filter (chapter 03): every record a filter on the entity's own columns matches; a provider that reads by partition (DynamoDB) needs the filter to give one |
| SchemaResolution | Without a schema catalog, the service reads each table's id column, keys and column types from the database when a call needs them; a table with no usable id is ARX1019 TableNotResolvable for a call that needs the id. Without it, a service with no catalog refuses an undeclared table (ARX1016) |
The flags of the .NET providers are in chapter 10; the conformance suite tests every flag both ways against each database.