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.

All chapters of the specification