@hypequery/datasets 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-catalog.d.ts +11 -1
- package/dist/agent-catalog.d.ts.map +1 -1
- package/dist/aggregations.d.ts +2 -0
- package/dist/aggregations.d.ts.map +1 -1
- package/dist/aggregations.js +4 -0
- package/dist/api.type-test.js +57 -0
- package/dist/cache/definition-identity.d.ts +26 -0
- package/dist/cache/definition-identity.d.ts.map +1 -0
- package/dist/cache/definition-identity.js +164 -0
- package/dist/cache/protocol-cache-keys.d.ts +38 -0
- package/dist/cache/protocol-cache-keys.d.ts.map +1 -0
- package/dist/cache/protocol-cache-keys.js +191 -0
- package/dist/cache/query-signature.d.ts +6 -0
- package/dist/cache/query-signature.d.ts.map +1 -1
- package/dist/cache/query-signature.js +27 -13
- package/dist/cache/semantic-query-cache.d.ts +23 -0
- package/dist/cache/semantic-query-cache.d.ts.map +1 -1
- package/dist/catalog.d.ts +14 -2
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +37 -10
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/contract.d.ts +7 -2
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +9 -0
- package/dist/dataset-query.d.ts.map +1 -1
- package/dist/dataset-query.js +27 -5
- package/dist/dataset.d.ts +2 -2
- package/dist/dataset.d.ts.map +1 -1
- package/dist/dataset.js +12 -4
- package/dist/executor.d.ts +7 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +75 -22
- package/dist/in-memory-backend.d.ts.map +1 -1
- package/dist/in-memory-backend.js +34 -7
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/measure.d.ts +17 -2
- package/dist/measure.d.ts.map +1 -1
- package/dist/measure.js +16 -1
- package/dist/portable-execution-errors.d.ts +4 -0
- package/dist/portable-execution-errors.d.ts.map +1 -1
- package/dist/portable-execution-errors.js +4 -1
- package/dist/portable-executor.d.ts.map +1 -1
- package/dist/portable-executor.js +6 -3
- package/dist/protocol-adapter.d.ts.map +1 -1
- package/dist/protocol-adapter.js +25 -8
- package/dist/protocol-deployment-adapter.d.ts.map +1 -1
- package/dist/protocol-deployment-adapter.js +2 -1
- package/dist/protocol-rehydrate.d.ts +5 -1
- package/dist/protocol-rehydrate.d.ts.map +1 -1
- package/dist/protocol-rehydrate.js +20 -10
- package/dist/query-builder-protocol.d.ts +7 -3
- package/dist/query-builder-protocol.d.ts.map +1 -1
- package/dist/query-planner.d.ts +1 -1
- package/dist/query-planner.d.ts.map +1 -1
- package/dist/query-planner.js +10 -17
- package/dist/relationship-check.d.ts +47 -0
- package/dist/relationship-check.d.ts.map +1 -0
- package/dist/relationship-check.js +59 -0
- package/dist/relationships.d.ts +10 -10
- package/dist/relationships.js +10 -10
- package/dist/semantic-plan.d.ts +0 -1
- package/dist/semantic-plan.d.ts.map +1 -1
- package/dist/semantic-planner.d.ts.map +1 -1
- package/dist/semantic-planner.js +15 -4
- package/dist/semantic-query-schema.d.ts.map +1 -1
- package/dist/semantic-query-schema.js +7 -0
- package/dist/types.d.ts +99 -18
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/agent-catalog-projection.d.ts +9 -2
- package/dist/utils/agent-catalog-projection.d.ts.map +1 -1
- package/dist/utils/agent-catalog-projection.js +6 -10
- package/dist/utils/approximate-measures.d.ts +10 -0
- package/dist/utils/approximate-measures.d.ts.map +1 -0
- package/dist/utils/approximate-measures.js +12 -0
- package/dist/utils/dataset-contract.d.ts.map +1 -1
- package/dist/utils/dataset-contract.js +4 -3
- package/dist/utils/dataset-definition-validation.d.ts.map +1 -1
- package/dist/utils/dataset-definition-validation.js +6 -24
- package/dist/utils/dataset-derived-query.d.ts.map +1 -1
- package/dist/utils/dataset-derived-query.js +7 -50
- package/dist/utils/dataset-measures.d.ts +13 -6
- package/dist/utils/dataset-measures.d.ts.map +1 -1
- package/dist/utils/dataset-measures.js +25 -4
- package/dist/utils/dataset-metric-ref.d.ts +2 -2
- package/dist/utils/dataset-metric-ref.d.ts.map +1 -1
- package/dist/utils/dataset-metric-ref.js +5 -0
- package/dist/utils/dataset-query-result.d.ts.map +1 -1
- package/dist/utils/dataset-query-result.js +2 -1
- package/dist/utils/dataset-query-validation.d.ts.map +1 -1
- package/dist/utils/dataset-query-validation.js +13 -6
- package/dist/utils/dataset-time-grains.d.ts +15 -0
- package/dist/utils/dataset-time-grains.d.ts.map +1 -0
- package/dist/utils/dataset-time-grains.js +17 -0
- package/dist/utils/derived-measure-sql.d.ts +3 -0
- package/dist/utils/derived-measure-sql.d.ts.map +1 -0
- package/dist/utils/derived-measure-sql.js +46 -0
- package/dist/utils/derived-measure-validation.d.ts.map +1 -1
- package/dist/utils/derived-measure-validation.js +6 -5
- package/dist/utils/filtered-aggregation-sql.d.ts.map +1 -1
- package/dist/utils/filtered-aggregation-sql.js +1 -0
- package/dist/utils/measure-time-grains.d.ts +4 -0
- package/dist/utils/measure-time-grains.d.ts.map +1 -0
- package/dist/utils/measure-time-grains.js +16 -0
- package/dist/utils/portable-aggregations.d.ts +14 -0
- package/dist/utils/portable-aggregations.d.ts.map +1 -0
- package/dist/utils/portable-aggregations.js +15 -0
- package/dist/utils/portable-grains.d.ts +22 -0
- package/dist/utils/portable-grains.d.ts.map +1 -0
- package/dist/utils/portable-grains.js +35 -0
- package/dist/utils/portable-semantic-query.d.ts.map +1 -1
- package/dist/utils/portable-semantic-query.js +2 -1
- package/dist/utils/protocol-metric-expressions.d.ts.map +1 -1
- package/dist/utils/protocol-metric-expressions.js +2 -1
- package/dist/utils/query-timezone.d.ts +9 -0
- package/dist/utils/query-timezone.d.ts.map +1 -0
- package/dist/utils/query-timezone.js +35 -0
- package/dist/utils/relationship-builder-plan.d.ts +6 -3
- package/dist/utils/relationship-builder-plan.d.ts.map +1 -1
- package/dist/utils/relationship-builder-plan.js +13 -5
- package/dist/utils/relationship-key-check.d.ts +43 -0
- package/dist/utils/relationship-key-check.d.ts.map +1 -0
- package/dist/utils/relationship-key-check.js +72 -0
- package/dist/utils/segments.d.ts +31 -0
- package/dist/utils/segments.d.ts.map +1 -0
- package/dist/utils/segments.js +91 -0
- package/dist/utils/semantic-metadata-validation.d.ts.map +1 -1
- package/dist/utils/semantic-metadata-validation.js +23 -2
- package/dist/utils/semantic-metadata.d.ts.map +1 -1
- package/dist/utils/semantic-metadata.js +3 -1
- package/dist/utils/shift-measure-definition.d.ts +4 -0
- package/dist/utils/shift-measure-definition.d.ts.map +1 -0
- package/dist/utils/shift-measure-definition.js +9 -0
- package/dist/utils/shift-measure-sql.d.ts +18 -0
- package/dist/utils/shift-measure-sql.d.ts.map +1 -0
- package/dist/utils/shift-measure-sql.js +46 -0
- package/dist/utils/shift-measure-validation.d.ts +3 -0
- package/dist/utils/shift-measure-validation.d.ts.map +1 -0
- package/dist/utils/shift-measure-validation.js +20 -0
- package/dist/utils/sql-under-joins.d.ts +10 -0
- package/dist/utils/sql-under-joins.d.ts.map +1 -0
- package/dist/utils/sql-under-joins.js +15 -0
- package/dist/utils/time-arithmetic-sql.d.ts +4 -0
- package/dist/utils/time-arithmetic-sql.d.ts.map +1 -0
- package/dist/utils/time-arithmetic-sql.js +9 -0
- package/dist/utils/time-axis-bounds.d.ts +24 -0
- package/dist/utils/time-axis-bounds.d.ts.map +1 -0
- package/dist/utils/time-axis-bounds.js +71 -0
- package/dist/utils/time-axis-calendar-guard.d.ts +9 -0
- package/dist/utils/time-axis-calendar-guard.d.ts.map +1 -0
- package/dist/utils/time-axis-calendar-guard.js +17 -0
- package/dist/utils/time-axis-intervals.d.ts +13 -0
- package/dist/utils/time-axis-intervals.d.ts.map +1 -0
- package/dist/utils/time-axis-intervals.js +81 -0
- package/dist/utils/time-measure-axis-sql.d.ts +12 -0
- package/dist/utils/time-measure-axis-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-axis-sql.js +47 -0
- package/dist/utils/time-measure-axis.d.ts +19 -0
- package/dist/utils/time-measure-axis.d.ts.map +1 -0
- package/dist/utils/time-measure-axis.js +45 -0
- package/dist/utils/time-measure-dataset-sql.d.ts +9 -0
- package/dist/utils/time-measure-dataset-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-dataset-sql.js +63 -0
- package/dist/utils/time-measure-result-sql.d.ts +6 -0
- package/dist/utils/time-measure-result-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-result-sql.js +30 -0
- package/dist/utils/time-measure-source-sql.d.ts +22 -0
- package/dist/utils/time-measure-source-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-source-sql.js +75 -0
- package/dist/utils/time-measure-values-sql.d.ts +20 -0
- package/dist/utils/time-measure-values-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-values-sql.js +87 -0
- package/dist/utils/time-query-measures.d.ts +6 -0
- package/dist/utils/time-query-measures.d.ts.map +1 -0
- package/dist/utils/time-query-measures.js +28 -0
- package/dist/utils/unsupported-contract-reasons.d.ts +32 -0
- package/dist/utils/unsupported-contract-reasons.d.ts.map +1 -0
- package/dist/utils/unsupported-contract-reasons.js +30 -0
- package/dist/utils/window-aggregation-sql.d.ts +5 -0
- package/dist/utils/window-aggregation-sql.d.ts.map +1 -0
- package/dist/utils/window-aggregation-sql.js +17 -0
- package/dist/utils/window-catalog-metadata.d.ts +14 -0
- package/dist/utils/window-catalog-metadata.d.ts.map +1 -0
- package/dist/utils/window-catalog-metadata.js +17 -0
- package/dist/utils/window-measure-definition.d.ts +4 -0
- package/dist/utils/window-measure-definition.d.ts.map +1 -0
- package/dist/utils/window-measure-definition.js +11 -0
- package/dist/utils/window-measure-dependencies.d.ts +4 -0
- package/dist/utils/window-measure-dependencies.d.ts.map +1 -0
- package/dist/utils/window-measure-dependencies.js +5 -0
- package/dist/utils/window-measure-validation.d.ts +3 -0
- package/dist/utils/window-measure-validation.d.ts.map +1 -0
- package/dist/utils/window-measure-validation.js +49 -0
- package/dist/utils/window-query-measures.d.ts +4 -0
- package/dist/utils/window-query-measures.d.ts.map +1 -0
- package/dist/utils/window-query-measures.js +17 -0
- package/dist/utils/window-query-signature.d.ts +4 -0
- package/dist/utils/window-query-signature.d.ts.map +1 -0
- package/dist/utils/window-query-signature.js +25 -0
- package/package.json +3 -3
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Canonical cache keys for semantic queries.
|
|
3
|
-
*
|
|
4
|
-
* A signature captures everything that changes a query's result set: the
|
|
5
|
-
* target (dataset or metric), selected dimensions/measures, filters, ordering,
|
|
6
|
-
* pagination, time grain, the effective tenant scope, and any explicit cache
|
|
7
|
-
* scope (see `SemanticCacheRuntime.scope`). Two calls with the
|
|
8
|
-
* same signature are guaranteed to produce the same rows against the same
|
|
9
|
-
* underlying data, so the signature is safe to use as a result-cache key.
|
|
10
|
-
*
|
|
11
|
-
* Keys are readable canonical strings rather than hashes so stores can inspect
|
|
12
|
-
* them and tests can assert on them; stores are free to hash internally.
|
|
13
|
-
*/
|
|
1
|
+
import { windowQuerySignature } from '../utils/window-query-signature.js';
|
|
14
2
|
import { getMetricGrain, getMetricRef } from '../utils/metric-handle.js';
|
|
15
3
|
import { getRuntimeTenantPredicate } from '../utils/tenant-runtime.js';
|
|
16
4
|
import { buildRelationshipBuilderContext } from '../utils/relationship-builder-plan.js';
|
|
@@ -69,6 +57,26 @@ function tenantSignature(ds, query, context) {
|
|
|
69
57
|
}
|
|
70
58
|
return { key: ds.tenantKey, operator: predicate.operator, value: predicate.value };
|
|
71
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Selected segments keyed by their resolved definitions, not just their names,
|
|
62
|
+
* so editing a segment cannot serve rows cached under the old one. Absent when
|
|
63
|
+
* no segment is selected, which keeps existing signatures unchanged.
|
|
64
|
+
*/
|
|
65
|
+
function segmentSignature(ds, names) {
|
|
66
|
+
if (!names?.length)
|
|
67
|
+
return {};
|
|
68
|
+
return {
|
|
69
|
+
segments: [...new Set(names)].sort().map(name => ({
|
|
70
|
+
name,
|
|
71
|
+
filters: filterSignature(ds.segments?.[name]?.filters),
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated The result cache no longer keys entries by this readable
|
|
77
|
+
* signature. It uses opaque RFC 0009/0013 keys, which never contain tenant ids,
|
|
78
|
+
* filter values, or table names. Kept for callers that used it directly.
|
|
79
|
+
*/
|
|
72
80
|
export function buildDatasetQuerySignature(ds, query, context) {
|
|
73
81
|
return stableStringify({
|
|
74
82
|
v: SIGNATURE_VERSION,
|
|
@@ -78,15 +86,19 @@ export function buildDatasetQuerySignature(ds, query, context) {
|
|
|
78
86
|
dimensions: query.dimensions ?? null,
|
|
79
87
|
// `null` distinguishes the "all measures" default from an explicit [].
|
|
80
88
|
measures: query.measures ?? null,
|
|
89
|
+
...windowQuerySignature(ds, query),
|
|
81
90
|
filters: filterSignature(query.filters),
|
|
91
|
+
...segmentSignature(ds, query.segments),
|
|
82
92
|
orderBy: orderBySignature(query.orderBy),
|
|
83
93
|
by: query.by ?? null,
|
|
94
|
+
...(query.timezone === undefined ? {} : { timezone: query.timezone }),
|
|
84
95
|
limit: query.limit ?? null,
|
|
85
96
|
offset: query.offset ?? null,
|
|
86
97
|
tenant: tenantSignature(ds, query, context),
|
|
87
98
|
scope: scopeSignature(context),
|
|
88
99
|
});
|
|
89
100
|
}
|
|
101
|
+
/** @deprecated See `buildDatasetQuerySignature`. */
|
|
90
102
|
export function buildMetricQuerySignature(metric, query, context) {
|
|
91
103
|
const ref = getMetricRef(metric);
|
|
92
104
|
const grain = getMetricGrain(metric, query);
|
|
@@ -98,8 +110,10 @@ export function buildMetricQuerySignature(metric, query, context) {
|
|
|
98
110
|
metricKind: ref.spec.__type,
|
|
99
111
|
dimensions: query.dimensions ?? null,
|
|
100
112
|
filters: filterSignature(query.filters),
|
|
113
|
+
...segmentSignature(ref.dataset, query.segments),
|
|
101
114
|
orderBy: orderBySignature(query.orderBy),
|
|
102
115
|
by: grain ?? null,
|
|
116
|
+
...(query.timezone === undefined ? {} : { timezone: query.timezone }),
|
|
103
117
|
limit: query.limit ?? null,
|
|
104
118
|
offset: query.offset ?? null,
|
|
105
119
|
tenant: tenantSignature(ref.dataset, query, context),
|
|
@@ -51,6 +51,29 @@ export interface SemanticCacheOptions {
|
|
|
51
51
|
* so identical queries against different backends never collide.
|
|
52
52
|
*/
|
|
53
53
|
scope?: string;
|
|
54
|
+
/**
|
|
55
|
+
* RFC 0013 cache-key secret: at least 32 random bytes, the same on every
|
|
56
|
+
* instance that shares a store, distinct per environment, never shipped.
|
|
57
|
+
*
|
|
58
|
+
* Optional. Without it the client generates a random secret for its
|
|
59
|
+
* lifetime, so keys stay opaque but entries are not shared with other
|
|
60
|
+
* instances or across restarts. That is all an in-memory store needs; set
|
|
61
|
+
* it for a shared store such as Redis. Keys never contain tenant ids,
|
|
62
|
+
* filter values, or table names either way.
|
|
63
|
+
*/
|
|
64
|
+
secret?: Uint8Array;
|
|
65
|
+
/** Namespace project for RFC 0013 keys. Defaults to `'hypequery'`. */
|
|
66
|
+
project?: string;
|
|
67
|
+
/** Namespace environment for RFC 0013 keys. Defaults to `'default'`. */
|
|
68
|
+
environment?: string;
|
|
69
|
+
/** Increment whenever `secret` rotates; old entries become unreachable. Defaults to 1. */
|
|
70
|
+
keyVersion?: number;
|
|
71
|
+
/**
|
|
72
|
+
* The deployed bundle identity (RFC 0007), to share entries with other
|
|
73
|
+
* runtimes serving the same release, including Python. Without it, a digest
|
|
74
|
+
* of the local definitions is used.
|
|
75
|
+
*/
|
|
76
|
+
definitionIdentity?: string;
|
|
54
77
|
}
|
|
55
78
|
/** Per-call cache controls, passed via `ExecutionContext.cache`. */
|
|
56
79
|
export interface SemanticCacheRuntime {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-query-cache.d.ts","sourceRoot":"","sources":["../../src/cache/semantic-query-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IAC3F,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic-query-cache.d.ts","sourceRoot":"","sources":["../../src/cache/semantic-query-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/catalog.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type WindowCatalogMetadata } from './utils/window-catalog-metadata.js';
|
|
1
2
|
import type { AnyDatasetInstance, DimensionDefinition, MeasureDefinition, MetricHandle, RelationshipDefinition, SemanticFilterDefinition, DatasetLimits, DatasetDefaults, DatasetFreshness, SemanticMetadata, TimeGrain } from './types.js';
|
|
2
3
|
export interface DimensionCatalogEntry extends SemanticMetadata {
|
|
3
4
|
type: DimensionDefinition['fieldType'];
|
|
@@ -8,7 +9,7 @@ export interface DimensionCatalogEntry extends SemanticMetadata {
|
|
|
8
9
|
filterable: boolean;
|
|
9
10
|
groupable: boolean;
|
|
10
11
|
}
|
|
11
|
-
export interface MeasureCatalogEntry extends SemanticMetadata {
|
|
12
|
+
export interface MeasureCatalogEntry extends SemanticMetadata, WindowCatalogMetadata {
|
|
12
13
|
aggregation: MeasureDefinition['aggregation'];
|
|
13
14
|
field: string;
|
|
14
15
|
/** Second column for argMax/argMin. */
|
|
@@ -19,8 +20,17 @@ export interface MeasureCatalogEntry extends SemanticMetadata {
|
|
|
19
20
|
label?: string;
|
|
20
21
|
description?: string;
|
|
21
22
|
filterCount: number;
|
|
23
|
+
/** Present, as `true`, when the measure returns an estimate. */
|
|
24
|
+
approximate?: true;
|
|
22
25
|
}
|
|
23
|
-
export interface DerivedMeasureCatalogEntry extends SemanticMetadata {
|
|
26
|
+
export interface DerivedMeasureCatalogEntry extends SemanticMetadata, WindowCatalogMetadata {
|
|
27
|
+
label?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
/** Present, as `true`, when any measure the formula uses is approximate. */
|
|
30
|
+
approximate?: true;
|
|
31
|
+
}
|
|
32
|
+
/** A named segment. Its filters stay in the definition and are never catalogued. */
|
|
33
|
+
export interface SegmentCatalogEntry {
|
|
24
34
|
label?: string;
|
|
25
35
|
description?: string;
|
|
26
36
|
}
|
|
@@ -72,6 +82,8 @@ export interface DatasetCatalog extends SemanticMetadata {
|
|
|
72
82
|
derivedMeasures?: Record<string, DerivedMeasureCatalogEntry>;
|
|
73
83
|
metrics: Record<string, MetricCatalogEntry>;
|
|
74
84
|
filters: Record<string, FilterCatalogEntry>;
|
|
85
|
+
/** Named segments; absent when the dataset declares none. */
|
|
86
|
+
segments?: Record<string, SegmentCatalogEntry>;
|
|
75
87
|
relationships: Record<string, RelationshipCatalogEntry>;
|
|
76
88
|
limits?: DatasetLimits;
|
|
77
89
|
requiresTenant: boolean;
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACV,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/catalog.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { windowCatalogMetadata } from './utils/window-catalog-metadata.js';
|
|
2
|
+
import { splitDatasetMeasures } from './utils/dataset-measures.js';
|
|
3
|
+
import { SEMANTIC_FILTER_OPERATORS } from './constants.js';
|
|
4
|
+
import { datasetTimeGrains } from './utils/dataset-time-grains.js';
|
|
5
|
+
import { isApproximateAggregation, isApproximateDerivedMeasure } from './utils/approximate-measures.js';
|
|
6
|
+
import { usesTimeMeasure } from './utils/time-query-measures.js';
|
|
7
|
+
import { measureSupportedGrains } from './utils/measure-time-grains.js';
|
|
2
8
|
import { listGroupableRelationshipFields, listQueryableRelationshipFields, } from './utils/relationship-fields.js';
|
|
3
9
|
import { snapshotSemanticMetadata } from './utils/semantic-metadata.js';
|
|
4
10
|
function dimensionToCatalog(dimension) {
|
|
@@ -24,6 +30,7 @@ function measureToCatalog(measure) {
|
|
|
24
30
|
description: measure.description,
|
|
25
31
|
...snapshotSemanticMetadata(measure),
|
|
26
32
|
filterCount: measure.filters?.length ?? 0,
|
|
33
|
+
...(isApproximateAggregation(measure.aggregation) ? { approximate: true } : {}),
|
|
27
34
|
};
|
|
28
35
|
}
|
|
29
36
|
function filterToCatalog(filter, dimensions) {
|
|
@@ -78,10 +85,12 @@ export function getGroupableRelationshipFields(catalog) {
|
|
|
78
85
|
}
|
|
79
86
|
export function getDatasetCatalog(dataset) {
|
|
80
87
|
const dimensionNames = Object.keys(dataset.dimensions);
|
|
81
|
-
const
|
|
82
|
-
const
|
|
88
|
+
const { base: baseMeasures, derived, windows, shifts } = splitDatasetMeasures(dataset.measures);
|
|
89
|
+
const measureNames = [...Object.keys(baseMeasures), ...Object.keys(windows), ...Object.keys(shifts)];
|
|
90
|
+
const derivedMeasures = Object.entries(derived);
|
|
91
|
+
const derivedMeasureNames = derivedMeasures.map(([name]) => name);
|
|
83
92
|
const metricNames = Object.keys(dataset.metrics ?? {});
|
|
84
|
-
const supportedGrains =
|
|
93
|
+
const supportedGrains = [...datasetTimeGrains(dataset)];
|
|
85
94
|
const maxLimit = dataset.limits?.maxResultSize;
|
|
86
95
|
const relationships = Object.fromEntries(Object.entries(dataset.relationships).map(([name, relationship]) => [
|
|
87
96
|
name,
|
|
@@ -101,17 +110,29 @@ export function getDatasetCatalog(dataset) {
|
|
|
101
110
|
name,
|
|
102
111
|
dimensionToCatalog(dimension),
|
|
103
112
|
])),
|
|
104
|
-
measures: Object.fromEntries(
|
|
105
|
-
name,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
measures: Object.fromEntries([
|
|
114
|
+
...Object.entries(baseMeasures).map(([name, measure]) => [name, measureToCatalog(measure)]),
|
|
115
|
+
...[...Object.entries(windows), ...Object.entries(shifts)].map(([name, window]) => [name, {
|
|
116
|
+
...measureToCatalog(baseMeasures[window.measure]),
|
|
117
|
+
...snapshotSemanticMetadata(window),
|
|
118
|
+
label: window.label,
|
|
119
|
+
description: window.description,
|
|
120
|
+
...windowCatalogMetadata(window),
|
|
121
|
+
supportedGrains: measureSupportedGrains(dataset.measures, name, supportedGrains),
|
|
122
|
+
}]),
|
|
123
|
+
]),
|
|
124
|
+
...(derivedMeasures.length > 0 ? {
|
|
125
|
+
derivedMeasures: Object.fromEntries(derivedMeasures.map(([name, definition]) => [
|
|
110
126
|
name,
|
|
111
127
|
{
|
|
112
128
|
...snapshotSemanticMetadata(definition),
|
|
129
|
+
...(usesTimeMeasure(definition, dataset.measures) ? {
|
|
130
|
+
requiresTimeRange: true,
|
|
131
|
+
supportedGrains: measureSupportedGrains(dataset.measures, name, supportedGrains),
|
|
132
|
+
} : {}),
|
|
113
133
|
label: definition.label,
|
|
114
134
|
description: definition.description,
|
|
135
|
+
...(isApproximateDerivedMeasure(dataset.measures, definition) ? { approximate: true } : {}),
|
|
115
136
|
},
|
|
116
137
|
])),
|
|
117
138
|
} : {}),
|
|
@@ -119,6 +140,12 @@ export function getDatasetCatalog(dataset) {
|
|
|
119
140
|
name,
|
|
120
141
|
metricToCatalog(metric),
|
|
121
142
|
])),
|
|
143
|
+
...(Object.keys(dataset.segments ?? {}).length > 0 ? {
|
|
144
|
+
segments: Object.fromEntries(Object.entries(dataset.segments).map(([name, segment]) => [name, {
|
|
145
|
+
...(segment.label !== undefined ? { label: segment.label } : {}),
|
|
146
|
+
...(segment.description !== undefined ? { description: segment.description } : {}),
|
|
147
|
+
}])),
|
|
148
|
+
} : {}),
|
|
122
149
|
filters: Object.fromEntries(Object.entries(dataset.filters).map(([name, filter]) => [
|
|
123
150
|
name,
|
|
124
151
|
filterToCatalog(filter, dataset.dimensions),
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAQrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAmC,SAAS,EAAE,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,yBAAyB,oFAWkB,CAAC;AAEzD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAEvE"}
|
package/dist/constants.js
CHANGED
package/dist/contract.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type WindowCatalogMetadata } from './utils/window-catalog-metadata.js';
|
|
2
|
+
import { type DatasetCatalogSource, type DimensionCatalogEntry, type MeasureCatalogEntry, type SegmentCatalogEntry, type MetricCatalogEntry, type FilterCatalogEntry, type RelationshipCatalogEntry } from './catalog.js';
|
|
2
3
|
import type { DatasetDefaults, DatasetFreshness, DatasetLimits, SemanticMetadata } from './types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Version of the semantic contract format. Bump when the serialized shape
|
|
@@ -14,7 +15,7 @@ export interface ContractDimension extends SemanticMetadata {
|
|
|
14
15
|
filterable: boolean;
|
|
15
16
|
groupable: boolean;
|
|
16
17
|
}
|
|
17
|
-
export interface ContractMeasure extends SemanticMetadata {
|
|
18
|
+
export interface ContractMeasure extends SemanticMetadata, WindowCatalogMetadata {
|
|
18
19
|
aggregation: MeasureCatalogEntry['aggregation'];
|
|
19
20
|
field: string;
|
|
20
21
|
/** Second column for argMax/argMin. */
|
|
@@ -24,6 +25,8 @@ export interface ContractMeasure extends SemanticMetadata {
|
|
|
24
25
|
sql?: string;
|
|
25
26
|
label?: string;
|
|
26
27
|
description?: string;
|
|
28
|
+
/** Present, as `true`, when the measure returns an estimate. */
|
|
29
|
+
approximate?: true;
|
|
27
30
|
}
|
|
28
31
|
export interface ContractMetric extends SemanticMetadata {
|
|
29
32
|
kind: MetricCatalogEntry['kind'];
|
|
@@ -67,6 +70,8 @@ export interface ContractDataset extends SemanticMetadata {
|
|
|
67
70
|
measures: Record<string, ContractMeasure>;
|
|
68
71
|
metrics: Record<string, ContractMetric>;
|
|
69
72
|
filters: Record<string, ContractFilter>;
|
|
73
|
+
/** Named segments (label and description only); absent when none are declared. */
|
|
74
|
+
segments?: Record<string, SegmentCatalogEntry>;
|
|
70
75
|
relationships: Record<string, ContractRelationship>;
|
|
71
76
|
limits?: DatasetLimits;
|
|
72
77
|
}
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { windowCatalogMetadata } from './utils/window-catalog-metadata.js';
|
|
1
2
|
import { sha256 } from '@noble/hashes/sha2';
|
|
2
3
|
import { bytesToHex } from '@noble/hashes/utils';
|
|
3
4
|
import { getDatasetCatalogs, } from './catalog.js';
|
|
@@ -57,6 +58,12 @@ function datasetToContract(catalog, includeSql) {
|
|
|
57
58
|
measures: sortedRecord(Object.entries(catalog.measures).map(([name, entry]) => [name, measureToContract(entry, includeSql)])),
|
|
58
59
|
metrics: sortedRecord(Object.entries(catalog.metrics).map(([name, entry]) => [name, metricToContract(entry)])),
|
|
59
60
|
filters: sortedRecord(Object.entries(catalog.filters).map(([name, entry]) => [name, filterToContract(entry)])),
|
|
61
|
+
...(catalog.segments !== undefined ? {
|
|
62
|
+
segments: sortedRecord(Object.entries(catalog.segments).map(([name, entry]) => [name, {
|
|
63
|
+
...(entry.label !== undefined ? { label: entry.label } : {}),
|
|
64
|
+
...(entry.description !== undefined ? { description: entry.description } : {}),
|
|
65
|
+
}])),
|
|
66
|
+
} : {}),
|
|
60
67
|
relationships: sortedRecord(Object.entries(catalog.relationships).map(([name, entry]) => [name, relationshipToContract(entry)])),
|
|
61
68
|
...(catalog.limits !== undefined ? { limits: limitsToContract(catalog.limits) } : {}),
|
|
62
69
|
};
|
|
@@ -88,6 +95,7 @@ function dimensionToContract(entry, includeSql) {
|
|
|
88
95
|
}
|
|
89
96
|
function measureToContract(entry, includeSql) {
|
|
90
97
|
return {
|
|
98
|
+
...windowCatalogMetadata(entry),
|
|
91
99
|
aggregation: entry.aggregation,
|
|
92
100
|
field: entry.field,
|
|
93
101
|
...(entry.argField !== undefined ? { argField: entry.argField } : {}),
|
|
@@ -96,6 +104,7 @@ function measureToContract(entry, includeSql) {
|
|
|
96
104
|
...(entry.label !== undefined ? { label: entry.label } : {}),
|
|
97
105
|
...(entry.description !== undefined ? { description: entry.description } : {}),
|
|
98
106
|
...snapshotSemanticMetadata(entry),
|
|
107
|
+
...(entry.approximate ? { approximate: true } : {}),
|
|
99
108
|
};
|
|
100
109
|
}
|
|
101
110
|
function metricToContract(entry) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-query.d.ts","sourceRoot":"","sources":["../src/dataset-query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataset-query.d.ts","sourceRoot":"","sources":["../src/dataset-query.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAS7F,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAgBxD,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,uBAAuB,CAAC;IACxC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB,CAElB;AAED,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,4BAA4B,GACpC,gBAAgB,CAyDlB;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,kBAAkB,CAAC,CA0B7B"}
|
package/dist/dataset-query.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { queryTimeFilterSql } from './utils/query-timezone.js';
|
|
2
|
+
import { selectedTimeMeasures } from './utils/time-query-measures.js';
|
|
3
|
+
import { buildTimeMeasureDatasetSql } from './utils/time-measure-dataset-sql.js';
|
|
4
|
+
import { baseMeasureNames, getBaseMeasure } from './utils/dataset-measures.js';
|
|
5
|
+
import { appendOrderLimitOffset, applyMeasureDefinition, buildDimensionSelectionPlan, resolveDimensionExpression, resolveFilterField, resolveTenantFilterColumn, } from './query-planner.js';
|
|
2
6
|
import { validateDatasetQueryInput } from './utils/dataset-query-validation.js';
|
|
3
7
|
import { getRuntimeTenantPredicate } from './utils/tenant-runtime.js';
|
|
4
8
|
import { overfetchLimit } from './utils/pagination.js';
|
|
5
9
|
import { applyRelationshipJoins, buildRelationshipBuilderContext, qualifyBaseColumn, } from './utils/relationship-builder-plan.js';
|
|
6
10
|
import { hasSelectedDerivedMeasure, runDerivedDatasetQuery, } from './utils/dataset-derived-query.js';
|
|
7
11
|
import { toDatasetQueryResult } from './utils/dataset-query-result.js';
|
|
12
|
+
import { segmentFilters } from './utils/segments.js';
|
|
8
13
|
export function validateDatasetQuery(ds, query, context) {
|
|
9
14
|
return validateDatasetQueryInput(ds, query, context);
|
|
10
15
|
}
|
|
11
16
|
export function buildDatasetQueryBuilder(ds, query, options) {
|
|
17
|
+
if (selectedTimeMeasures(ds, query).size) {
|
|
18
|
+
throw new Error('A time-based dataset query needs the time-measure SQL planner; use createDatasetClient().toSQL().');
|
|
19
|
+
}
|
|
12
20
|
if (hasSelectedDerivedMeasure(ds, query)) {
|
|
13
21
|
throw new Error('A derived dataset query needs the outer SQL projection; use createDatasetClient().toSQL().');
|
|
14
22
|
}
|
|
@@ -19,13 +27,16 @@ export function buildDatasetQueryBuilder(ds, query, options) {
|
|
|
19
27
|
const joinCtx = buildRelationshipBuilderContext(ds, query, options.context);
|
|
20
28
|
let qb = options.builderFactory.table(ds.source);
|
|
21
29
|
qb = applyRelationshipJoins(qb, joinCtx);
|
|
22
|
-
const { selectParts, groupByParts } = buildDimensionSelectionPlan(ds, query.dimensions ?? [], query.by, joinCtx);
|
|
23
|
-
const measureNames = query.measures ??
|
|
30
|
+
const { selectParts, groupByParts } = buildDimensionSelectionPlan(ds, query.dimensions ?? [], query.by, joinCtx, query.timezone);
|
|
31
|
+
const measureNames = query.measures ?? baseMeasureNames(ds.measures);
|
|
24
32
|
if (selectParts.length > 0) {
|
|
25
33
|
qb = qb.select(selectParts);
|
|
26
34
|
}
|
|
27
35
|
for (const measureName of measureNames) {
|
|
28
|
-
|
|
36
|
+
const definition = getBaseMeasure(ds.measures, measureName);
|
|
37
|
+
if (!definition)
|
|
38
|
+
throw new Error(`Measure "${measureName}" is not a base measure.`);
|
|
39
|
+
qb = applyMeasureDefinition(qb, ds, measureName, definition, joinCtx);
|
|
29
40
|
}
|
|
30
41
|
if (groupByParts.length > 0) {
|
|
31
42
|
qb = qb.groupBy(groupByParts);
|
|
@@ -37,11 +48,22 @@ export function buildDatasetQueryBuilder(ds, query, options) {
|
|
|
37
48
|
}
|
|
38
49
|
for (const filter of query.filters ?? []) {
|
|
39
50
|
const resolvedField = resolveFilterField(ds, filter.field, joinCtx);
|
|
40
|
-
qb = qb.where(resolvedField, filter.operator, filter.value);
|
|
51
|
+
qb = qb.where(queryTimeFilterSql(ds, filter.field, resolvedField, query.timezone), filter.operator, filter.value);
|
|
52
|
+
}
|
|
53
|
+
// Segments are author-defined, so they bypass the caller filter allow-list.
|
|
54
|
+
for (const filter of segmentFilters(ds, query.segments)) {
|
|
55
|
+
qb = qb.where(resolveDimensionExpression(ds, filter.field, joinCtx), filter.operator, filter.value);
|
|
41
56
|
}
|
|
42
57
|
return appendOrderLimitOffset(qb, query.orderBy, options.skipDefaultOrderBy ? undefined : query.by, options.executionLimit ?? query.limit, query.offset, joinCtx);
|
|
43
58
|
}
|
|
44
59
|
export async function runDatasetQuery(ds, query, options) {
|
|
60
|
+
if (selectedTimeMeasures(ds, query).size) {
|
|
61
|
+
const start = Date.now();
|
|
62
|
+
const { sql, parameters, timeAxisSql } = buildTimeMeasureDatasetSql(ds, query, { ...options, executionLimit: overfetchLimit(query.limit) });
|
|
63
|
+
await options.builderFactory.rawQuery(timeAxisSql, parameters, { abortSignal: options.context?.abortSignal });
|
|
64
|
+
const rows = await options.builderFactory.rawQuery(sql, parameters, { abortSignal: options.context?.abortSignal });
|
|
65
|
+
return toDatasetQueryResult(rows, { dataset: ds, query, sql, timingMs: Date.now() - start, context: options.context });
|
|
66
|
+
}
|
|
45
67
|
if (hasSelectedDerivedMeasure(ds, query)) {
|
|
46
68
|
return runDerivedDatasetQuery(ds, query, options, buildDatasetQueryBuilder);
|
|
47
69
|
}
|
package/dist/dataset.d.ts
CHANGED
|
@@ -29,6 +29,6 @@
|
|
|
29
29
|
* });
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
-
import type { DatasetConfig, DatasetInstance, DatasetMeasureDefinition,
|
|
33
|
-
export declare function dataset<TDatasetName extends string, TDimensions extends Record<string, DimensionDefinition>, TDefinitions extends Record<string, DatasetMeasureDefinition> = {}, TRelationships extends Record<string, RelationshipDefinition> = Record<string, never
|
|
32
|
+
import type { DatasetConfig, DatasetInstance, DatasetMeasureDefinition, DerivedMeasures, DimensionDefinition, RelationshipDefinition, SegmentDefinition } from './types.js';
|
|
33
|
+
export declare function dataset<TDatasetName extends string, TDimensions extends Record<string, DimensionDefinition>, TDefinitions extends Record<string, DatasetMeasureDefinition> = {}, TRelationships extends Record<string, RelationshipDefinition> = Record<string, never>, const TSegments extends Record<string, SegmentDefinition> = {}>(name: TDatasetName, config: DatasetConfig<TDimensions, TDefinitions, TRelationships, TSegments>): DatasetInstance<TDimensions, TDefinitions, TRelationships, TDatasetName, DerivedMeasures<TDefinitions>, TSegments>;
|
|
34
34
|
//# sourceMappingURL=dataset.d.ts.map
|
package/dist/dataset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,wBAAwB,
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,wBAAwB,EAExB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EAKtB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAsBpB,wBAAgB,OAAO,CACrB,YAAY,SAAS,MAAM,EAC3B,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACvD,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,EAAE,EAClE,cAAc,SAAS,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrF,KAAK,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAE9D,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,CAAC,GAC1E,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAoFpH"}
|
package/dist/dataset.js
CHANGED
|
@@ -35,14 +35,17 @@ import { validateBaseMetric, validateDerivedMetric, } from './utils/dataset-vali
|
|
|
35
35
|
import { validateDatasetDefinition } from './utils/dataset-definition-validation.js';
|
|
36
36
|
import { snapshotSemanticMetadata } from './utils/semantic-metadata.js';
|
|
37
37
|
import { validateSemanticMetadata } from './utils/semantic-metadata-validation.js';
|
|
38
|
-
import {
|
|
38
|
+
import { derivedMeasuresView, getBaseMeasure } from './utils/dataset-measures.js';
|
|
39
|
+
import { normalizeSegments } from './utils/segments.js';
|
|
39
40
|
export function dataset(name, config) {
|
|
40
41
|
// Structural validation runs before anything is normalized, so an invalid
|
|
41
42
|
// model fails at definition time rather than on the first query that reaches
|
|
42
43
|
// the broken part of it.
|
|
43
44
|
validateDatasetDefinition(name, config);
|
|
44
45
|
const dimensions = normalizeDimensions(config);
|
|
45
|
-
|
|
46
|
+
// The spread copies the authored keys, but TypeScript widens them through
|
|
47
|
+
// CheckedDatasetMeasures. Preserve their literal names and definition types.
|
|
48
|
+
const measures = { ...config.measures };
|
|
46
49
|
const filters = normalizeFilters(dimensions, config.filters);
|
|
47
50
|
const relationships = normalizeRelationships(config.relationships, config.source);
|
|
48
51
|
function metric(metricName, metricConfig) {
|
|
@@ -53,8 +56,11 @@ export function dataset(name, config) {
|
|
|
53
56
|
return createMetricRef(ds, metricName, derivedSpec, metricConfig.label, metricConfig.description, metricConfig);
|
|
54
57
|
}
|
|
55
58
|
const measureName = metricConfig.measure;
|
|
56
|
-
const measure = ds.measures
|
|
59
|
+
const measure = getBaseMeasure(ds.measures, measureName);
|
|
57
60
|
if (!measure) {
|
|
61
|
+
if (Object.hasOwn(ds.measures, measureName)) {
|
|
62
|
+
throw new Error(`Invalid metric "${metricName}": measure "${measureName}" must be a base measure.`);
|
|
63
|
+
}
|
|
58
64
|
throw new Error(`Invalid metric "${metricName}": measure "${measureName}" does not exist on dataset "${ds.name}".`);
|
|
59
65
|
}
|
|
60
66
|
const spec = measureToAggregationSpec(measureName, measure);
|
|
@@ -75,13 +81,15 @@ export function dataset(name, config) {
|
|
|
75
81
|
},
|
|
76
82
|
tenantKey: config.tenantKey,
|
|
77
83
|
timeKey: config.timeKey,
|
|
84
|
+
...(config.timeGrains === undefined ? {} : { timeGrains: Object.freeze([...config.timeGrains]) }),
|
|
78
85
|
dimensions,
|
|
79
86
|
measures,
|
|
80
|
-
derivedMeasures,
|
|
87
|
+
derivedMeasures: derivedMeasuresView(measures),
|
|
81
88
|
filters,
|
|
82
89
|
relationships,
|
|
83
90
|
limits: config.limits,
|
|
84
91
|
cache: config.cache,
|
|
92
|
+
segments: normalizeSegments(name, { tenantKey: config.tenantKey, dimensions }, config.segments),
|
|
85
93
|
metric,
|
|
86
94
|
};
|
|
87
95
|
return ds;
|
package/dist/executor.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export interface MetricQueryEngineOptions {
|
|
|
15
15
|
builderFactory: QueryBuilderFactoryInput;
|
|
16
16
|
}
|
|
17
17
|
export interface CreateDatasetClientOptions {
|
|
18
|
+
/** Default IANA timezone for buckets and local time-key bounds. Queries can override it. */
|
|
19
|
+
timezone?: string;
|
|
18
20
|
/** Query builder factory for executing semantic metric and dataset queries. */
|
|
19
21
|
queryBuilder?: QueryBuilderFactoryInput;
|
|
20
22
|
/**
|
|
@@ -77,11 +79,14 @@ export declare class MetricQueryEngine {
|
|
|
77
79
|
}
|
|
78
80
|
export declare class DatasetClientImpl extends MetricQueryEngine implements DatasetClient {
|
|
79
81
|
private backend?;
|
|
82
|
+
private readonly defaultTimezone?;
|
|
80
83
|
private readonly queryCache;
|
|
81
84
|
private readonly cacheEnabledByDefault;
|
|
82
85
|
private readonly cacheDefaults;
|
|
83
86
|
private readonly defaultCacheScope?;
|
|
87
|
+
private readonly cacheKeySettings;
|
|
84
88
|
constructor(options: CreateDatasetClientOptions);
|
|
89
|
+
private withTimezone;
|
|
85
90
|
getCacheStats(): SemanticCacheStats;
|
|
86
91
|
clearCache(): Promise<boolean>;
|
|
87
92
|
/**
|
|
@@ -95,7 +100,8 @@ export declare class DatasetClientImpl extends MetricQueryEngine implements Data
|
|
|
95
100
|
* `cache.scope` unless the call sets its own, so clients sharing a custom
|
|
96
101
|
* store can be namespaced apart.
|
|
97
102
|
*/
|
|
98
|
-
|
|
103
|
+
/** The call's cache partition: its own `cache.scope`, else the client default. */
|
|
104
|
+
private cacheScope;
|
|
99
105
|
planMetric(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): PlanNode;
|
|
100
106
|
planDataset(ds: AnyDatasetInstance, query?: DatasetQuery, context?: ExecutionContext): PlanNode;
|
|
101
107
|
/**
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|