Reference
Capabilities
What each provider supports, and what it does with what it doesn't.
Databases differ, and ARX.SDK doesn't hide it. Every provider declares what it supports as capability flags (service.Capabilities), so code can choose a path before it calls. The rule is the same in every provider: a declared capability works; an undeclared one is refused with ArxNotSupportedException (ARX8001), naming what it can't do. No provider ignores part of a call.
| Capability | What it covers | PostgreSQL | SQL Server | MySQL | MongoDB | DynamoDB |
|---|---|---|---|---|---|---|
| Joins | Links to other entities in a query | Yes | Yes | Yes | Yes ($lookup) | No |
| Aggregates | Count, Sum, Avg, Min, Max and grouping | Yes | Yes | Yes | Yes | Not declared: a single Count is answered, anything else is ARX8001 |
| OffsetPaging | Paging by page number | Yes | Yes | Yes | Yes | No |
| TokenPaging | Paging by the cookie each page returns | No | No | No | Yes | Yes |
| TotalCount | The total of matching records | Yes | Yes | Yes | Yes | No |
| Transactions | Transactions and batch scopes across calls | Yes | Yes | Yes | Yes (replica set) | Yes (sent at commit) |
| BulkWrite | CreateMultiple, UpdateMultiple, DeleteMultiple | Yes | Yes | Yes | Yes | Yes (100 per transaction) |
| Upsert | Reserved for an insert-or-update operation: no operation uses it and no provider declares it yet | No | No | No | No | No |
| StoredProcedures | Execute: procedures and functions | Yes | Yes | Yes | No | No |
| FullTextSearch | Full-text search conditions | Yes | Yes | Yes | Yes | No |
| LikeOperators | Like, Contains, BeginsWith, EndsWith (ignoring case where the database does) | Yes, ignoring case | Yes; the column's collation decides case (the default ignores it) | Yes; the column's collation decides case (the default ignores it) | Yes (Like ignores case from 0.1.0-preview.4; in preview.3 Like and NotLike are case-sensitive) | Not declared: BeginsWith and Contains only, case-sensitive, with CaseSensitivePatterns; the rest is ARX8001 |
| OrFilters | Filters joined by OR | Yes | Yes | Yes | Yes | Yes |
| SecondaryIndexQuery | A read that names a secondary index | No | No | No | No | Yes |
| OptimisticConcurrency | A version column declared in the schema, checked on writes (ARX2004 RecordChanged) | Yes, from 0.1.0-preview.4 | Yes, from 0.1.0-preview.4 | Yes, from 0.1.0-preview.4 | Yes, from 0.1.0-preview.4 | Yes |
| Savepoints | A failed call in a batch scope is undone alone (savepoints); without them it rolls the whole scope back | Yes | Yes | Yes | No | No |
| WriteByFilter | UpdateMultiple and DeleteMultiple by a filter: every row the filter matches, in one call | Yes, from 0.1.0-preview.5 | Yes, from 0.1.0-preview.5 | Yes, from 0.1.0-preview.5 | Yes, from 0.1.0-preview.5 | Yes, from 0.1.0-preview.5 (the filter gives a partition key; at most 100 items) |
| SchemaResolution | A service without a catalog reads the id, keys and column types of each table itself | Yes | Yes | Yes | No | No |
The shared conformance suite runs against every database and tests each flag both ways: a provider that declares it must do it correctly, and one that doesn't must refuse it.