@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.
Files changed (202) hide show
  1. package/dist/agent-catalog.d.ts +11 -1
  2. package/dist/agent-catalog.d.ts.map +1 -1
  3. package/dist/aggregations.d.ts +2 -0
  4. package/dist/aggregations.d.ts.map +1 -1
  5. package/dist/aggregations.js +4 -0
  6. package/dist/api.type-test.js +57 -0
  7. package/dist/cache/definition-identity.d.ts +26 -0
  8. package/dist/cache/definition-identity.d.ts.map +1 -0
  9. package/dist/cache/definition-identity.js +164 -0
  10. package/dist/cache/protocol-cache-keys.d.ts +38 -0
  11. package/dist/cache/protocol-cache-keys.d.ts.map +1 -0
  12. package/dist/cache/protocol-cache-keys.js +191 -0
  13. package/dist/cache/query-signature.d.ts +6 -0
  14. package/dist/cache/query-signature.d.ts.map +1 -1
  15. package/dist/cache/query-signature.js +27 -13
  16. package/dist/cache/semantic-query-cache.d.ts +23 -0
  17. package/dist/cache/semantic-query-cache.d.ts.map +1 -1
  18. package/dist/catalog.d.ts +14 -2
  19. package/dist/catalog.d.ts.map +1 -1
  20. package/dist/catalog.js +37 -10
  21. package/dist/constants.d.ts.map +1 -1
  22. package/dist/constants.js +2 -0
  23. package/dist/contract.d.ts +7 -2
  24. package/dist/contract.d.ts.map +1 -1
  25. package/dist/contract.js +9 -0
  26. package/dist/dataset-query.d.ts.map +1 -1
  27. package/dist/dataset-query.js +27 -5
  28. package/dist/dataset.d.ts +2 -2
  29. package/dist/dataset.d.ts.map +1 -1
  30. package/dist/dataset.js +12 -4
  31. package/dist/executor.d.ts +7 -1
  32. package/dist/executor.d.ts.map +1 -1
  33. package/dist/executor.js +75 -22
  34. package/dist/in-memory-backend.d.ts.map +1 -1
  35. package/dist/in-memory-backend.js +34 -7
  36. package/dist/index.d.ts +8 -6
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +3 -2
  39. package/dist/measure.d.ts +17 -2
  40. package/dist/measure.d.ts.map +1 -1
  41. package/dist/measure.js +16 -1
  42. package/dist/portable-execution-errors.d.ts +4 -0
  43. package/dist/portable-execution-errors.d.ts.map +1 -1
  44. package/dist/portable-execution-errors.js +4 -1
  45. package/dist/portable-executor.d.ts.map +1 -1
  46. package/dist/portable-executor.js +6 -3
  47. package/dist/protocol-adapter.d.ts.map +1 -1
  48. package/dist/protocol-adapter.js +25 -8
  49. package/dist/protocol-deployment-adapter.d.ts.map +1 -1
  50. package/dist/protocol-deployment-adapter.js +2 -1
  51. package/dist/protocol-rehydrate.d.ts +5 -1
  52. package/dist/protocol-rehydrate.d.ts.map +1 -1
  53. package/dist/protocol-rehydrate.js +20 -10
  54. package/dist/query-builder-protocol.d.ts +7 -3
  55. package/dist/query-builder-protocol.d.ts.map +1 -1
  56. package/dist/query-planner.d.ts +1 -1
  57. package/dist/query-planner.d.ts.map +1 -1
  58. package/dist/query-planner.js +10 -17
  59. package/dist/relationship-check.d.ts +47 -0
  60. package/dist/relationship-check.d.ts.map +1 -0
  61. package/dist/relationship-check.js +59 -0
  62. package/dist/relationships.d.ts +10 -10
  63. package/dist/relationships.js +10 -10
  64. package/dist/semantic-plan.d.ts +0 -1
  65. package/dist/semantic-plan.d.ts.map +1 -1
  66. package/dist/semantic-planner.d.ts.map +1 -1
  67. package/dist/semantic-planner.js +15 -4
  68. package/dist/semantic-query-schema.d.ts.map +1 -1
  69. package/dist/semantic-query-schema.js +7 -0
  70. package/dist/types.d.ts +99 -18
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/utils/agent-catalog-projection.d.ts +9 -2
  73. package/dist/utils/agent-catalog-projection.d.ts.map +1 -1
  74. package/dist/utils/agent-catalog-projection.js +6 -10
  75. package/dist/utils/approximate-measures.d.ts +10 -0
  76. package/dist/utils/approximate-measures.d.ts.map +1 -0
  77. package/dist/utils/approximate-measures.js +12 -0
  78. package/dist/utils/dataset-contract.d.ts.map +1 -1
  79. package/dist/utils/dataset-contract.js +4 -3
  80. package/dist/utils/dataset-definition-validation.d.ts.map +1 -1
  81. package/dist/utils/dataset-definition-validation.js +6 -24
  82. package/dist/utils/dataset-derived-query.d.ts.map +1 -1
  83. package/dist/utils/dataset-derived-query.js +7 -50
  84. package/dist/utils/dataset-measures.d.ts +13 -6
  85. package/dist/utils/dataset-measures.d.ts.map +1 -1
  86. package/dist/utils/dataset-measures.js +25 -4
  87. package/dist/utils/dataset-metric-ref.d.ts +2 -2
  88. package/dist/utils/dataset-metric-ref.d.ts.map +1 -1
  89. package/dist/utils/dataset-metric-ref.js +5 -0
  90. package/dist/utils/dataset-query-result.d.ts.map +1 -1
  91. package/dist/utils/dataset-query-result.js +2 -1
  92. package/dist/utils/dataset-query-validation.d.ts.map +1 -1
  93. package/dist/utils/dataset-query-validation.js +13 -6
  94. package/dist/utils/dataset-time-grains.d.ts +15 -0
  95. package/dist/utils/dataset-time-grains.d.ts.map +1 -0
  96. package/dist/utils/dataset-time-grains.js +17 -0
  97. package/dist/utils/derived-measure-sql.d.ts +3 -0
  98. package/dist/utils/derived-measure-sql.d.ts.map +1 -0
  99. package/dist/utils/derived-measure-sql.js +46 -0
  100. package/dist/utils/derived-measure-validation.d.ts.map +1 -1
  101. package/dist/utils/derived-measure-validation.js +6 -5
  102. package/dist/utils/filtered-aggregation-sql.d.ts.map +1 -1
  103. package/dist/utils/filtered-aggregation-sql.js +1 -0
  104. package/dist/utils/measure-time-grains.d.ts +4 -0
  105. package/dist/utils/measure-time-grains.d.ts.map +1 -0
  106. package/dist/utils/measure-time-grains.js +16 -0
  107. package/dist/utils/portable-aggregations.d.ts +14 -0
  108. package/dist/utils/portable-aggregations.d.ts.map +1 -0
  109. package/dist/utils/portable-aggregations.js +15 -0
  110. package/dist/utils/portable-grains.d.ts +22 -0
  111. package/dist/utils/portable-grains.d.ts.map +1 -0
  112. package/dist/utils/portable-grains.js +35 -0
  113. package/dist/utils/portable-semantic-query.d.ts.map +1 -1
  114. package/dist/utils/portable-semantic-query.js +2 -1
  115. package/dist/utils/protocol-metric-expressions.d.ts.map +1 -1
  116. package/dist/utils/protocol-metric-expressions.js +2 -1
  117. package/dist/utils/query-timezone.d.ts +9 -0
  118. package/dist/utils/query-timezone.d.ts.map +1 -0
  119. package/dist/utils/query-timezone.js +35 -0
  120. package/dist/utils/relationship-builder-plan.d.ts +6 -3
  121. package/dist/utils/relationship-builder-plan.d.ts.map +1 -1
  122. package/dist/utils/relationship-builder-plan.js +13 -5
  123. package/dist/utils/relationship-key-check.d.ts +43 -0
  124. package/dist/utils/relationship-key-check.d.ts.map +1 -0
  125. package/dist/utils/relationship-key-check.js +72 -0
  126. package/dist/utils/segments.d.ts +31 -0
  127. package/dist/utils/segments.d.ts.map +1 -0
  128. package/dist/utils/segments.js +91 -0
  129. package/dist/utils/semantic-metadata-validation.d.ts.map +1 -1
  130. package/dist/utils/semantic-metadata-validation.js +23 -2
  131. package/dist/utils/semantic-metadata.d.ts.map +1 -1
  132. package/dist/utils/semantic-metadata.js +3 -1
  133. package/dist/utils/shift-measure-definition.d.ts +4 -0
  134. package/dist/utils/shift-measure-definition.d.ts.map +1 -0
  135. package/dist/utils/shift-measure-definition.js +9 -0
  136. package/dist/utils/shift-measure-sql.d.ts +18 -0
  137. package/dist/utils/shift-measure-sql.d.ts.map +1 -0
  138. package/dist/utils/shift-measure-sql.js +46 -0
  139. package/dist/utils/shift-measure-validation.d.ts +3 -0
  140. package/dist/utils/shift-measure-validation.d.ts.map +1 -0
  141. package/dist/utils/shift-measure-validation.js +20 -0
  142. package/dist/utils/sql-under-joins.d.ts +10 -0
  143. package/dist/utils/sql-under-joins.d.ts.map +1 -0
  144. package/dist/utils/sql-under-joins.js +15 -0
  145. package/dist/utils/time-arithmetic-sql.d.ts +4 -0
  146. package/dist/utils/time-arithmetic-sql.d.ts.map +1 -0
  147. package/dist/utils/time-arithmetic-sql.js +9 -0
  148. package/dist/utils/time-axis-bounds.d.ts +24 -0
  149. package/dist/utils/time-axis-bounds.d.ts.map +1 -0
  150. package/dist/utils/time-axis-bounds.js +71 -0
  151. package/dist/utils/time-axis-calendar-guard.d.ts +9 -0
  152. package/dist/utils/time-axis-calendar-guard.d.ts.map +1 -0
  153. package/dist/utils/time-axis-calendar-guard.js +17 -0
  154. package/dist/utils/time-axis-intervals.d.ts +13 -0
  155. package/dist/utils/time-axis-intervals.d.ts.map +1 -0
  156. package/dist/utils/time-axis-intervals.js +81 -0
  157. package/dist/utils/time-measure-axis-sql.d.ts +12 -0
  158. package/dist/utils/time-measure-axis-sql.d.ts.map +1 -0
  159. package/dist/utils/time-measure-axis-sql.js +47 -0
  160. package/dist/utils/time-measure-axis.d.ts +19 -0
  161. package/dist/utils/time-measure-axis.d.ts.map +1 -0
  162. package/dist/utils/time-measure-axis.js +45 -0
  163. package/dist/utils/time-measure-dataset-sql.d.ts +9 -0
  164. package/dist/utils/time-measure-dataset-sql.d.ts.map +1 -0
  165. package/dist/utils/time-measure-dataset-sql.js +63 -0
  166. package/dist/utils/time-measure-result-sql.d.ts +6 -0
  167. package/dist/utils/time-measure-result-sql.d.ts.map +1 -0
  168. package/dist/utils/time-measure-result-sql.js +30 -0
  169. package/dist/utils/time-measure-source-sql.d.ts +22 -0
  170. package/dist/utils/time-measure-source-sql.d.ts.map +1 -0
  171. package/dist/utils/time-measure-source-sql.js +75 -0
  172. package/dist/utils/time-measure-values-sql.d.ts +20 -0
  173. package/dist/utils/time-measure-values-sql.d.ts.map +1 -0
  174. package/dist/utils/time-measure-values-sql.js +87 -0
  175. package/dist/utils/time-query-measures.d.ts +6 -0
  176. package/dist/utils/time-query-measures.d.ts.map +1 -0
  177. package/dist/utils/time-query-measures.js +28 -0
  178. package/dist/utils/unsupported-contract-reasons.d.ts +32 -0
  179. package/dist/utils/unsupported-contract-reasons.d.ts.map +1 -0
  180. package/dist/utils/unsupported-contract-reasons.js +30 -0
  181. package/dist/utils/window-aggregation-sql.d.ts +5 -0
  182. package/dist/utils/window-aggregation-sql.d.ts.map +1 -0
  183. package/dist/utils/window-aggregation-sql.js +17 -0
  184. package/dist/utils/window-catalog-metadata.d.ts +14 -0
  185. package/dist/utils/window-catalog-metadata.d.ts.map +1 -0
  186. package/dist/utils/window-catalog-metadata.js +17 -0
  187. package/dist/utils/window-measure-definition.d.ts +4 -0
  188. package/dist/utils/window-measure-definition.d.ts.map +1 -0
  189. package/dist/utils/window-measure-definition.js +11 -0
  190. package/dist/utils/window-measure-dependencies.d.ts +4 -0
  191. package/dist/utils/window-measure-dependencies.d.ts.map +1 -0
  192. package/dist/utils/window-measure-dependencies.js +5 -0
  193. package/dist/utils/window-measure-validation.d.ts +3 -0
  194. package/dist/utils/window-measure-validation.d.ts.map +1 -0
  195. package/dist/utils/window-measure-validation.js +49 -0
  196. package/dist/utils/window-query-measures.d.ts +4 -0
  197. package/dist/utils/window-query-measures.d.ts.map +1 -0
  198. package/dist/utils/window-query-measures.js +17 -0
  199. package/dist/utils/window-query-signature.d.ts +4 -0
  200. package/dist/utils/window-query-signature.d.ts.map +1 -0
  201. package/dist/utils/window-query-signature.js +25 -0
  202. 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":"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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
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 { SEMANTIC_FILTER_OPERATORS, SUPPORTED_TIME_GRAINS } from './constants.js';
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 measureNames = Object.keys(dataset.measures);
82
- const derivedMeasureNames = Object.keys(dataset.derivedMeasures ?? {});
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 = dataset.timeKey ? [...SUPPORTED_TIME_GRAINS] : [];
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(Object.entries(dataset.measures).map(([name, measure]) => [
105
- name,
106
- measureToCatalog(measure),
107
- ])),
108
- ...(dataset.derivedMeasures && Object.keys(dataset.derivedMeasures).length > 0 ? {
109
- derivedMeasures: Object.fromEntries(Object.entries(dataset.derivedMeasures).map(([name, definition]) => [
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),
@@ -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,CAMrD,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"}
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
@@ -5,6 +5,8 @@
5
5
  * Maps time grain to ClickHouse date truncation functions.
6
6
  */
7
7
  export const GRAIN_FUNCTIONS = {
8
+ minute: 'toStartOfMinute',
9
+ hour: 'toStartOfHour',
8
10
  day: 'toStartOfDay',
9
11
  week: 'toStartOfWeek',
10
12
  month: 'toStartOfMonth',
@@ -1,4 +1,5 @@
1
- import { type DatasetCatalogSource, type DimensionCatalogEntry, type MeasureCatalogEntry, type MetricCatalogEntry, type FilterCatalogEntry, type RelationshipCatalogEntry } from './catalog.js';
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
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":"AAAA,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;AAQ7F,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAexD,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,CA+ClB;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
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"}
@@ -1,14 +1,22 @@
1
- import { appendOrderLimitOffset, applyMeasureDefinition, buildDimensionSelectionPlan, resolveFilterField, resolveTenantFilterColumn, } from './query-planner.js';
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 ?? Object.keys(ds.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
- qb = applyMeasureDefinition(qb, ds, measureName, ds.measures[measureName], joinCtx);
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, BaseMeasures, DerivedMeasures, DimensionDefinition, RelationshipDefinition } 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>>(name: TDatasetName, config: DatasetConfig<TDimensions, TDefinitions, TRelationships>): DatasetInstance<TDimensions, BaseMeasures<TDefinitions>, TRelationships, TDatasetName, DerivedMeasures<TDefinitions>>;
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
@@ -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,EACxB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EAKvB,MAAM,YAAY,CAAC;AAqBpB,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,EAErF,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,GAC/D,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CA6EvH"}
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 { splitDatasetMeasures } from './utils/dataset-measures.js';
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
- const { base: measures, derived: derivedMeasures } = splitDatasetMeasures(config.measures);
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[measureName];
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;
@@ -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
- private signatureContext;
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}