QueryModelProfile
Record layout and invariants of one QueryModel: the built-in Snapshot and EventStream, and each declared dataset.
Every model difference that the query runtime depends on lives here, so gateways, validators, maskers and backends ask the profile instead of branching on QueryModel themselves. A schema carries its profile (QueryModelSchema.profile); other custom models have none, and operations that need one of these facts reject them.
Inheritors
Properties
When the record last changed: the default orderBy of FIRST and LAST metrics; null when there is none.
When the record's aggregate got its first event, or null when a record does not say.
The one tenant every record belongs to, for a model with no tenant field (a platform-level dataset); null otherwise. A tenant filter then matches every record when it names this tenant and none when it names another, and it pins requiredScope.
Unique record identity: the target of id filters and the tie-breaker of every cursor; null when the model declares none, which rejects both.
Logical field that holds the user payload; masked fields and schema extensions must live below it. null when the whole record is payload, as in a dataset.
Field that names the payload type of each record, or null when the payload is monomorphic.
The field an authenticated caller scope must pin when requireAuthenticatedScope is on: the tenant, the isolation boundary of every built-in model.
Fields that every record of this model carries, independent of the aggregate.
The element whose variants are typed payloads (an event stream's body), or null for a monomorphic payload.
Functions
Returns the scope appended to a query whose filter does not scope it explicitly, or MatchAllFilter when the model has no implicit scope.
The logical field a system-field filter (ID, TENANT_ID, DELETION, ...) targets: identityField for the record identity; null when the model does not carry field.
Rejects a projection that would return records the model cannot interpret.