Skip to main content

Feature Support

What odata2ts supports of the OData protocol, for V4 (4.0 / 4.01) and V2.

SymbolMeaning
Supported as a typed, first-class feature
🔶Partially supported, or reachable through an escape hatch
Not supported
Not applicable — the protocol version has no such thing

The tables describe the client's perspective: what you can send and what you get back. Server-side concerns are out of scope, as is the Atom/XML format — odata2ts speaks JSON only.

note

This page states what odata2ts does. What the protocol offers, independent of any implementation, is inventoried in the OData V4 feature matrix and its V1–V3 counterpart under OData Concepts.

System Query Options

OptionV4V2Notes
$selectTop-level properties; select("*") produces the wildcard
$expandexpand() for plain expansion
$expand with nested optionsexpanding(); V2's syntax cannot carry nested options at all
$filterSee Filtering
$orderbyProperty paths with asc() / desc(), multiple criteria
$top / $skip
$countV4: @odata.count on the response model; V2: __count
$searchTerms and phrases are distinguished automatically
$apply (aggregation)🔶groupBy() only — no aggregate, topcount, compute
$compute
$skiptoken🔶🔶Never built by the client, which is correct; the next link is exposed and followed manually
$formatJSON-only client — negotiated through the Accept header
Custom query optionsNot through the query builder but through the HTTP client's request configuration

The builder only offers what the resource admits: $filter, $orderby, $top, $skip and $count exist on a collection query, not on a single entity, and $search and groupBy are V4 collections only.

Filtering

GroupV4V2Notes
Comparison operatorseq, ne, lt, le, gt, ge, plus isNull / isNotNull
Logical operatorsand, or, not
inEmulated as or-chained equals by default; V4 can render it natively with enableNativeInOperator
String functions🔶🔶contains, startsWith, endsWith, indexOf, length, concat, toLower, toUpper, trim, matchesPattern; substring and has are missing
Arithmeticadd, sub, mul, div, mod
Number functionsround, floor, ceiling
Date & time functions🔶🔶The component functions (year, month, day, hour, …); now, totalseconds and date arithmetic are missing
Lambda operatorsany() / all() over collections
cast / isof
Geo functionsGeo types are typed as string
Custom expressionsAn escape hatch for anything the builder does not model

Reading and Writing

FeatureV4V2Notes
Read entity / collectionTyped response models per version
Create, update, patch, deleteV2 sends MERGE where the protocol demands it
$select / $expand on a writeThe same builder as on a read
Editable modelsManaged properties are excluded — see managed properties
Binding an existing entityBy key; rendered as @odata.bind (4.0), {"@id": …} (4.01) or __metadata.uri (V2)
Deep insert / deep updateRelated entities inside the parent's payload
Return representationpatch<true>() plus Prefer: return=representation
Individual property accessOpt-in via enablePrimitivePropertyServices
Optimistic concurrency (ETag)No If-Match workflow; possible through manual headers
Relationship management via $ref
Batch requestsOut of scope of the HTTP client design
Delta / change tracking
Asynchronous requests

Operations

FeatureV4V2Notes
Unbound functions / actionsV2 has FunctionImport only, distinguished by its HTTP method
Bound operationsGenerated onto the service of the bound type
Typed parametersOne parameter model and one q-function / q-action per operation
Function overloads
Composable functionscompose() applies query options to a function's result
Query options in the bodyasPostRequest() moves the query string into POST …/$query, for URLs beyond a server's length limit

Binary Content

FeatureV4V2Notes
Media entities ($value)Own service per media entity
Stream properties (Edm.Stream)Own service per stream property
Streaming transferContent can be transferred as a stream rather than buffered
Edm.Binarybase64 in the payload

Types and Payload Format

FeatureV4V2Notes
Primitive typesSee OData Data Types
ConvertersSee Converters
Enum typesV2 knows no enums; as string enum, numeric enum or string union
Complex types
Inheritance and type casts🔶V4 addresses derived types by cast segment; V2 renders the hierarchy but cannot serialise it
Open typesThe declared properties are typed; the dynamic ones cannot be, since nothing announces them
IEEE754Compatiblev4BigNumberAsString
4.01 short-form control infoodataVersionV4 selects one spelling, requests and responses alike
metadata=full / none🔶Through a manual Accept header; the extra control information stays untyped
Instance annotations🔶🔶Passed through untyped
Vocabulary annotationsNot evaluated at all — neither Core.* nor Capabilities.* nor any other term; the same effects have to be configured by hand
results wrappingSee extra results wrapper

Deliberately Out of Scope

Not gaps but decisions:

  • Runtime metadata access. odata2ts reads the metadata at build time and generates from it, so there is nothing to fetch and interpret at runtime — no $metadata or service document handling.
  • Atom / XML payloads. JSON only.
  • $format. Format negotiation belongs in the Accept header.