Package-level declarations
Types
How an access policy restricts the rows of a dataset bound to an aggregate (QueryDatasetAccess): by the current access attributes of the aggregate each row is of, never by what the row recorded when it was written. The restriction is one ELEMENT_MATCH on the reserved container FIELD, @access: the aggregate's current access record, none when the storage holds none of it, whose fields are its attributes by name as every record stores them (AccessValues: the built-in owner and space, and each declared one). It reads "the aggregate has a current access record that the predicate holds of":
The query gateway of one dataset: the QueryGateway operations (single, list, paged, cursor, count, aggregate, describe), each with its explicit QueryCaller, admitted against the dataset's schema with the same filters, policies, budgets and masking as an aggregate's snapshots. Its aggregateType is the dataset's name.
The gateways of the datasets a node serves, by dataset name, following QueryDatasets: a dataset that joins or changes gets a new gateway, one that leaves loses its own.
The record layout of one QueryDataset: the whole record is payload, its fields are the dataset's declaration, and the system fields are the columns the dataset names. A dataset has no aggregate id and no deletion flag, so a filter on either is an unknown field, and no default scope.
Which datasets a caller sees: those GET /wow/dataset lists, and those whose routes answer it; the routes of a dataset the caller does not see are a 404, as if it did not exist. It hides only what the caller could not read anyway, and every query is still restricted by the gateway's policies.
A DatasetQueryGateway over backend, admitting against the schema schemaProvider compiles.
A dataset (the DATASET query model): a table-like record set, such as a BI wide table or the ClickHouse Sink's _state_flat view, declared at runtime or in a file rather than in the Manifest. Its fields are its declaration, at the record root; its record layout is its profile.
Declares a QueryDataset in code: its profile columns, its fields and their sensitivity.
One change to the QueryDatasets: a dataset joined, was replaced by a new declaration, or left.
What a QueryDatasetProvider opens from: its type, its settings (options, wow.<type>.* relative to it) and the application's resources. Fields may be added: the host builds it, so the constructor is internal to Wow; a provider's test builds one with of.
Reads the dataset files (datasets are declared in files, not in the Manifest), one per dataset, named {context}.{dataset}.json in the QueryDatasetProperties format: from the working directory's <configDirectory>/wow/dataset/, which takes precedence, else from the classpath's META-INF/wow/dataset/.
Follows the changes of QueryDatasets: every listener validates a change before any applys it, so a listener that cannot follow a change (a gateway that cannot be built, a name an aggregate takes) refuses it for all of them.
A dataset backend (the ClickHouse one, say): the QueryBindings of the datasets it serves, opened from its settings and the application's resources. The host finds it with ServiceLoader (META-INF/services) and opens the one that is available; with several it refuses the start, naming them, and an application's own QueryBindings<QueryDataset> bean takes the place of any.
The runtime catalog of the datasets this node serves: declared in code, read from files (QueryDatasetFiles) or registered while the node runs, as dataset-registry does. The schema Catalog, the dataset gateways and the storages follow it through listen.