@hypequery/datasets 0.20.0 → 0.22.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/README.md +6 -0
- package/dist/api.type-test.js +7 -1
- package/dist/catalog.d.ts +7 -3
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +15 -3
- package/dist/contract.d.ts +1 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/dataset-compilation.d.ts +45 -0
- package/dist/dataset-compilation.d.ts.map +1 -0
- package/dist/dataset-compilation.js +1 -0
- package/dist/dataset-query.d.ts +3 -3
- package/dist/dataset-query.d.ts.map +1 -1
- package/dist/dataset-query.js +7 -71
- package/dist/dataset-sql-dialect.d.ts +11 -0
- package/dist/dataset-sql-dialect.d.ts.map +1 -0
- package/dist/dataset-sql-dialect.js +1 -0
- package/dist/dataset.d.ts +3 -2
- package/dist/dataset.d.ts.map +1 -1
- package/dist/execution-capabilities.d.ts +28 -0
- package/dist/execution-capabilities.d.ts.map +1 -0
- package/dist/execution-capabilities.js +17 -0
- package/dist/execution-capabilities.json +13 -0
- package/dist/executor.d.ts +17 -38
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +37 -400
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/measure.d.ts +56 -19
- package/dist/measure.d.ts.map +1 -1
- package/dist/measure.js +5 -65
- package/dist/metric-query-engine.d.ts +29 -0
- package/dist/metric-query-engine.d.ts.map +1 -0
- package/dist/metric-query-engine.js +106 -0
- package/dist/portable-executor.d.ts +20 -6
- package/dist/portable-executor.d.ts.map +1 -1
- package/dist/portable-executor.js +29 -9
- package/dist/query-builder-protocol.d.ts +4 -0
- package/dist/query-builder-protocol.d.ts.map +1 -1
- package/dist/query-helpers.d.ts +10 -10
- package/dist/query-helpers.d.ts.map +1 -1
- package/dist/query-helpers.js +1 -3
- package/dist/query-planner.d.ts +7 -3
- package/dist/query-planner.d.ts.map +1 -1
- package/dist/query-planner.js +10 -12
- package/dist/semantic-planner.d.ts.map +1 -1
- package/dist/semantic-planner.js +2 -0
- package/dist/semantic-query-schema.d.ts.map +1 -1
- package/dist/semantic-query-schema.js +3 -3
- package/dist/types.d.ts +22 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/agent-catalog-projection.d.ts +1 -0
- package/dist/utils/agent-catalog-projection.d.ts.map +1 -1
- package/dist/utils/agent-catalog-projection.js +2 -1
- package/dist/utils/approximate-measures.d.ts +1 -0
- package/dist/utils/approximate-measures.d.ts.map +1 -1
- package/dist/utils/approximate-measures.js +10 -4
- package/dist/utils/base-measure-definition.d.ts +23 -0
- package/dist/utils/base-measure-definition.d.ts.map +1 -0
- package/dist/utils/base-measure-definition.js +65 -0
- package/dist/utils/build-dataset-query-builder.d.ts +5 -0
- package/dist/utils/build-dataset-query-builder.d.ts.map +1 -0
- package/dist/utils/build-dataset-query-builder.js +62 -0
- package/dist/utils/clickhouse-dataset-sql-dialect.d.ts +4 -0
- package/dist/utils/clickhouse-dataset-sql-dialect.d.ts.map +1 -0
- package/dist/utils/clickhouse-dataset-sql-dialect.js +6 -0
- package/dist/utils/compile-dataset-query.d.ts +10 -0
- package/dist/utils/compile-dataset-query.d.ts.map +1 -0
- package/dist/utils/compile-dataset-query.js +71 -0
- package/dist/utils/composite-time-measure-sql.d.ts +10 -0
- package/dist/utils/composite-time-measure-sql.d.ts.map +1 -0
- package/dist/utils/composite-time-measure-sql.js +61 -0
- package/dist/utils/dataset-derived-query.d.ts +1 -2
- package/dist/utils/dataset-derived-query.d.ts.map +1 -1
- package/dist/utils/dataset-derived-query.js +16 -30
- package/dist/utils/dataset-filter-types.d.ts +28 -0
- package/dist/utils/dataset-filter-types.d.ts.map +1 -0
- package/dist/utils/dataset-filter-types.js +1 -0
- package/dist/utils/dataset-query-validation.d.ts.map +1 -1
- package/dist/utils/dataset-query-validation.js +15 -3
- package/dist/utils/dataset-sql-dialect.d.ts +5 -0
- package/dist/utils/dataset-sql-dialect.d.ts.map +1 -0
- package/dist/utils/dataset-sql-dialect.js +5 -0
- package/dist/utils/dataset-target.d.ts +3 -0
- package/dist/utils/dataset-target.d.ts.map +1 -0
- package/dist/utils/dataset-target.js +3 -0
- package/dist/utils/derived-measure-sql.d.ts +1 -0
- package/dist/utils/derived-measure-sql.d.ts.map +1 -1
- package/dist/utils/derived-measure-sql.js +9 -6
- package/dist/utils/derived-measure-validation.d.ts.map +1 -1
- package/dist/utils/derived-measure-validation.js +4 -25
- package/dist/utils/filter-definition.d.ts +3 -0
- package/dist/utils/filter-definition.d.ts.map +1 -0
- package/dist/utils/filter-definition.js +3 -0
- package/dist/utils/measure-dependencies.d.ts +8 -0
- package/dist/utils/measure-dependencies.d.ts.map +1 -0
- package/dist/utils/measure-dependencies.js +44 -0
- package/dist/utils/measure-evaluation-graph.d.ts +23 -0
- package/dist/utils/measure-evaluation-graph.d.ts.map +1 -0
- package/dist/utils/measure-evaluation-graph.js +38 -0
- package/dist/utils/measure-time-grains.d.ts.map +1 -1
- package/dist/utils/measure-time-grains.js +4 -2
- package/dist/utils/metric-derived-query.d.ts +8 -0
- package/dist/utils/metric-derived-query.d.ts.map +1 -0
- package/dist/utils/metric-derived-query.js +106 -0
- package/dist/utils/metric-query-builder.d.ts +5 -0
- package/dist/utils/metric-query-builder.d.ts.map +1 -0
- package/dist/utils/metric-query-builder.js +50 -0
- package/dist/utils/metric-query-result.d.ts +10 -0
- package/dist/utils/metric-query-result.d.ts.map +1 -0
- package/dist/utils/metric-query-result.js +18 -0
- package/dist/utils/metric-query-validation.d.ts +6 -0
- package/dist/utils/metric-query-validation.d.ts.map +1 -0
- package/dist/utils/metric-query-validation.js +116 -0
- package/dist/utils/relationship-builder-plan.d.ts +4 -2
- package/dist/utils/relationship-builder-plan.d.ts.map +1 -1
- package/dist/utils/relationship-builder-plan.js +10 -13
- package/dist/utils/relationship-measure-sql.d.ts +14 -0
- package/dist/utils/relationship-measure-sql.d.ts.map +1 -0
- package/dist/utils/relationship-measure-sql.js +44 -0
- package/dist/utils/relationship-measure-types.d.ts +36 -0
- package/dist/utils/relationship-measure-types.d.ts.map +1 -0
- package/dist/utils/relationship-measure-types.js +1 -0
- package/dist/utils/relationship-measures.d.ts +23 -0
- package/dist/utils/relationship-measures.d.ts.map +1 -0
- package/dist/utils/relationship-measures.js +62 -0
- package/dist/utils/relationship-validation.d.ts +1 -1
- package/dist/utils/relationship-validation.d.ts.map +1 -1
- package/dist/utils/relationship-validation.js +3 -5
- package/dist/utils/semantic-query-syntax.d.ts +6 -0
- package/dist/utils/semantic-query-syntax.d.ts.map +1 -0
- package/dist/utils/semantic-query-syntax.js +25 -0
- package/dist/utils/shift-measure-grains.d.ts +5 -0
- package/dist/utils/shift-measure-grains.d.ts.map +1 -0
- package/dist/utils/shift-measure-grains.js +10 -0
- package/dist/utils/shift-measure-sql.d.ts +5 -2
- package/dist/utils/shift-measure-sql.d.ts.map +1 -1
- package/dist/utils/shift-measure-sql.js +25 -8
- package/dist/utils/shift-measure-validation.js +3 -3
- package/dist/utils/shift-wall-time-sql.d.ts +4 -0
- package/dist/utils/shift-wall-time-sql.d.ts.map +1 -0
- package/dist/utils/shift-wall-time-sql.js +17 -0
- package/dist/utils/snapshot-execution-context.d.ts +4 -0
- package/dist/utils/snapshot-execution-context.d.ts.map +1 -0
- package/dist/utils/snapshot-execution-context.js +16 -0
- package/dist/utils/time-measure-axis-sql.d.ts +1 -0
- package/dist/utils/time-measure-axis-sql.d.ts.map +1 -1
- package/dist/utils/time-measure-axis-sql.js +5 -4
- package/dist/utils/time-measure-axis.d.ts.map +1 -1
- package/dist/utils/time-measure-axis.js +3 -2
- package/dist/utils/time-measure-context-sql.d.ts +6 -0
- package/dist/utils/time-measure-context-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-context-sql.js +21 -0
- package/dist/utils/time-measure-dataset-sql.d.ts.map +1 -1
- package/dist/utils/time-measure-dataset-sql.js +27 -9
- package/dist/utils/time-measure-leaf-sql.d.ts +14 -0
- package/dist/utils/time-measure-leaf-sql.d.ts.map +1 -0
- package/dist/utils/time-measure-leaf-sql.js +52 -0
- package/dist/utils/time-measure-result-sql.d.ts +1 -1
- package/dist/utils/time-measure-result-sql.d.ts.map +1 -1
- package/dist/utils/time-measure-result-sql.js +4 -3
- package/dist/utils/time-measure-source-sql.d.ts.map +1 -1
- package/dist/utils/time-measure-source-sql.js +8 -4
- package/dist/utils/time-query-measures.d.ts.map +1 -1
- package/dist/utils/time-query-measures.js +4 -8
- package/dist/utils/window-query-signature.d.ts.map +1 -1
- package/dist/utils/window-query-signature.js +12 -2
- package/dist/validation.js +1 -1
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -102,6 +102,12 @@ Metric changes travel through the workflow your team already trusts: TypeScript,
|
|
|
102
102
|
- [Relationships](https://hypequery.com/docs/datasets/relationships)
|
|
103
103
|
- [MCP tool generation](https://hypequery.com/docs/datasets/tool-generation)
|
|
104
104
|
|
|
105
|
+
## Contributing
|
|
106
|
+
|
|
107
|
+
For repository contributors, see the [implementation guide](./ARCHITECTURE.md)
|
|
108
|
+
for module boundaries and verification requirements, and the
|
|
109
|
+
[testing review](./TESTING_REVIEW.md) for coverage, CI gates, and remaining gaps.
|
|
110
|
+
|
|
105
111
|
## License
|
|
106
112
|
|
|
107
113
|
Apache-2.0.
|
package/dist/api.type-test.js
CHANGED
|
@@ -48,7 +48,6 @@ dataset('derivedDependency', {
|
|
|
48
48
|
measures: {
|
|
49
49
|
revenue: measure.sum('amount'),
|
|
50
50
|
doubled: measure.derived({ uses: { value: 'revenue' }, formula: ({ value }) => add(value, value) }),
|
|
51
|
-
// @ts-expect-error v1 derived inputs cannot depend on another derived measure.
|
|
52
51
|
quadrupled: measure.derived({ uses: { value: 'doubled' }, formula: ({ value }) => add(value, value) }),
|
|
53
52
|
},
|
|
54
53
|
});
|
|
@@ -204,6 +203,13 @@ const builderFactory = {
|
|
|
204
203
|
rawQuery: async () => [],
|
|
205
204
|
};
|
|
206
205
|
const analytics = createDatasetClient({ queryBuilder: builderFactory });
|
|
206
|
+
const _datasetCompilation = analytics.compileDataset(Orders, { measures: ['doubledRevenue'] });
|
|
207
|
+
// @ts-expect-error compilation accepts declared dataset measures only.
|
|
208
|
+
analytics.compileDataset(Orders, { measures: ['missing'] });
|
|
209
|
+
// @ts-expect-error compilation accepts declared dataset dimensions only.
|
|
210
|
+
analytics.compileDataset(Orders, { dimensions: ['missing'] });
|
|
211
|
+
// @ts-expect-error standalone metric handles are not dataset compilation targets.
|
|
212
|
+
analytics.compileDataset(Orders.metric('revenue', { measure: 'revenue' }));
|
|
207
213
|
const explicitAnalytics = analytics;
|
|
208
214
|
const datasetQuery = { dimensions: ['status'], measures: ['revenue'] };
|
|
209
215
|
analytics.validate(revenueMetric, { dimensions: ['status'] }, runtimeContext);
|
package/dist/catalog.d.ts
CHANGED
|
@@ -10,8 +10,8 @@ export interface DimensionCatalogEntry extends SemanticMetadata {
|
|
|
10
10
|
groupable: boolean;
|
|
11
11
|
}
|
|
12
12
|
export interface MeasureCatalogEntry extends SemanticMetadata, WindowCatalogMetadata {
|
|
13
|
-
aggregation
|
|
14
|
-
field
|
|
13
|
+
aggregation?: MeasureDefinition['aggregation'];
|
|
14
|
+
field?: string;
|
|
15
15
|
/** Second column for argMax/argMin. */
|
|
16
16
|
argField?: string;
|
|
17
17
|
/** Percentile level in [0, 1]. */
|
|
@@ -19,7 +19,7 @@ export interface MeasureCatalogEntry extends SemanticMetadata, WindowCatalogMeta
|
|
|
19
19
|
sql?: string;
|
|
20
20
|
label?: string;
|
|
21
21
|
description?: string;
|
|
22
|
-
filterCount
|
|
22
|
+
filterCount?: number;
|
|
23
23
|
/** Present, as `true`, when the measure returns an estimate. */
|
|
24
24
|
approximate?: true;
|
|
25
25
|
}
|
|
@@ -66,6 +66,8 @@ export interface RelationshipCatalogEntry {
|
|
|
66
66
|
* supplied catalog that predates it still resolves, falling back to `fields`.
|
|
67
67
|
*/
|
|
68
68
|
groupableFields?: string[];
|
|
69
|
+
/** Safe selectable base aggregates, keyed by qualified name. */
|
|
70
|
+
measures?: Record<string, MeasureCatalogEntry>;
|
|
69
71
|
}
|
|
70
72
|
export interface DatasetCatalog extends SemanticMetadata {
|
|
71
73
|
name: string;
|
|
@@ -97,6 +99,8 @@ export type DatasetCatalogSource = AnyDatasetInstance & {
|
|
|
97
99
|
};
|
|
98
100
|
/** All queryable relationship field names (`<relationship>.<dimension>`) a catalog advertises. */
|
|
99
101
|
export declare function getQueryableRelationshipFields(catalog: DatasetCatalog): string[];
|
|
102
|
+
/** Safe relationship aggregates advertised by a catalog. */
|
|
103
|
+
export declare function getQueryableRelationshipMeasures(catalog: DatasetCatalog): string[];
|
|
100
104
|
/** The queryable relationship fields a catalog also allows as grouping keys. */
|
|
101
105
|
export declare function getGroupableRelationshipFields(catalog: DatasetCatalog): string[];
|
|
102
106
|
export declare function getDatasetCatalog(dataset: DatasetCatalogSource): DatasetCatalog;
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/catalog.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { listRelationshipMeasures } from './utils/relationship-measures.js';
|
|
2
|
+
import { inheritedBaseMeasure } from './utils/measure-dependencies.js';
|
|
1
3
|
import { windowCatalogMetadata } from './utils/window-catalog-metadata.js';
|
|
2
4
|
import { splitDatasetMeasures } from './utils/dataset-measures.js';
|
|
3
5
|
import { SEMANTIC_FILTER_OPERATORS } from './constants.js';
|
|
4
6
|
import { datasetTimeGrains } from './utils/dataset-time-grains.js';
|
|
5
|
-
import { isApproximateAggregation, isApproximateDerivedMeasure } from './utils/approximate-measures.js';
|
|
7
|
+
import { isApproximateAggregation, isApproximateDerivedMeasure, isApproximateMeasure } from './utils/approximate-measures.js';
|
|
6
8
|
import { usesTimeMeasure } from './utils/time-query-measures.js';
|
|
7
9
|
import { measureSupportedGrains } from './utils/measure-time-grains.js';
|
|
8
10
|
import { listGroupableRelationshipFields, listQueryableRelationshipFields, } from './utils/relationship-fields.js';
|
|
@@ -61,6 +63,8 @@ function metricToCatalog(metric) {
|
|
|
61
63
|
};
|
|
62
64
|
}
|
|
63
65
|
function relationshipToCatalog(name, relationship) {
|
|
66
|
+
const measures = Object.fromEntries(Object.entries(listRelationshipMeasures(name, relationship))
|
|
67
|
+
.map(([key, definition]) => [key, measureToCatalog(definition)]));
|
|
64
68
|
return {
|
|
65
69
|
kind: relationship.kind,
|
|
66
70
|
target: relationship.target().name,
|
|
@@ -69,6 +73,7 @@ function relationshipToCatalog(name, relationship) {
|
|
|
69
73
|
queryable: relationship.kind !== 'hasMany',
|
|
70
74
|
fields: listQueryableRelationshipFields(name, relationship),
|
|
71
75
|
groupableFields: listGroupableRelationshipFields(name, relationship),
|
|
76
|
+
...(Object.keys(measures).length ? { measures } : {}),
|
|
72
77
|
};
|
|
73
78
|
}
|
|
74
79
|
/** All queryable relationship field names (`<relationship>.<dimension>`) a catalog advertises. */
|
|
@@ -77,6 +82,11 @@ export function getQueryableRelationshipFields(catalog) {
|
|
|
77
82
|
.filter(relationship => relationship.queryable)
|
|
78
83
|
.flatMap(relationship => relationship.fields);
|
|
79
84
|
}
|
|
85
|
+
/** Safe relationship aggregates advertised by a catalog. */
|
|
86
|
+
export function getQueryableRelationshipMeasures(catalog) {
|
|
87
|
+
return Object.values(catalog.relationships).filter(relationship => relationship.queryable)
|
|
88
|
+
.flatMap(relationship => Object.keys(relationship.measures ?? {}));
|
|
89
|
+
}
|
|
80
90
|
/** The queryable relationship fields a catalog also allows as grouping keys. */
|
|
81
91
|
export function getGroupableRelationshipFields(catalog) {
|
|
82
92
|
return Object.values(catalog.relationships)
|
|
@@ -113,7 +123,9 @@ export function getDatasetCatalog(dataset) {
|
|
|
113
123
|
measures: Object.fromEntries([
|
|
114
124
|
...Object.entries(baseMeasures).map(([name, measure]) => [name, measureToCatalog(measure)]),
|
|
115
125
|
...[...Object.entries(windows), ...Object.entries(shifts)].map(([name, window]) => [name, {
|
|
116
|
-
...
|
|
126
|
+
...(inheritedBaseMeasure(dataset.measures, window.measure)
|
|
127
|
+
? measureToCatalog(inheritedBaseMeasure(dataset.measures, window.measure)) : {}),
|
|
128
|
+
...(isApproximateMeasure(dataset.measures, name) ? { approximate: true } : {}),
|
|
117
129
|
...snapshotSemanticMetadata(window),
|
|
118
130
|
label: window.label,
|
|
119
131
|
description: window.description,
|
|
@@ -159,7 +171,7 @@ export function getDatasetCatalog(dataset) {
|
|
|
159
171
|
...measureNames,
|
|
160
172
|
...derivedMeasureNames,
|
|
161
173
|
...metricNames,
|
|
162
|
-
...Object.values(relationships).flatMap(relationship => relationship.fields),
|
|
174
|
+
...Object.values(relationships).flatMap(relationship => [...relationship.fields, ...Object.keys(relationship.measures ?? {})]),
|
|
163
175
|
...(dataset.timeKey ? ['period'] : []),
|
|
164
176
|
],
|
|
165
177
|
maxLimit,
|
package/dist/contract.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface ContractDimension extends SemanticMetadata {
|
|
|
17
17
|
}
|
|
18
18
|
export interface ContractMeasure extends SemanticMetadata, WindowCatalogMetadata {
|
|
19
19
|
aggregation: MeasureCatalogEntry['aggregation'];
|
|
20
|
-
field
|
|
20
|
+
field?: string;
|
|
21
21
|
/** Second column for argMax/argMin. */
|
|
22
22
|
argField?: string;
|
|
23
23
|
/** Percentile level in [0, 1]. */
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAGvG,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB,EAAE,qBAAqB;IAC9E,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { DatasetQuery } from './types.js';
|
|
2
|
+
/** Trusted compiler output. SQL may contain literals supplied by a custom builder. */
|
|
3
|
+
export interface DatasetCompiledStatement {
|
|
4
|
+
readonly sql: string;
|
|
5
|
+
readonly parameters: readonly unknown[];
|
|
6
|
+
}
|
|
7
|
+
/** Structural diagnostics: no SQL, physical columns, filter values or tenant IDs. */
|
|
8
|
+
export interface DatasetCompilationDescription {
|
|
9
|
+
readonly kind: 'dataset-compilation';
|
|
10
|
+
readonly version: 1;
|
|
11
|
+
readonly dataset: string;
|
|
12
|
+
readonly plan: 'aggregate' | 'derived' | 'time';
|
|
13
|
+
readonly dimensions: readonly string[];
|
|
14
|
+
readonly measures: readonly string[];
|
|
15
|
+
readonly measureDependencies: readonly string[];
|
|
16
|
+
readonly filters: readonly {
|
|
17
|
+
readonly field: string;
|
|
18
|
+
readonly operator: string;
|
|
19
|
+
}[];
|
|
20
|
+
readonly segments: readonly string[];
|
|
21
|
+
readonly by?: string;
|
|
22
|
+
readonly timezone?: string;
|
|
23
|
+
readonly effectiveLimit?: number;
|
|
24
|
+
/** Includes the extra row used to determine pagination.hasMore. */
|
|
25
|
+
readonly executionLimit?: number;
|
|
26
|
+
readonly offset: number;
|
|
27
|
+
readonly parameterCount: number;
|
|
28
|
+
readonly preflightStatementCount: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Dataset-level envelope around the current query-builder output. This is not
|
|
32
|
+
* an RFC 0010 CompiledQuery: native named parameter binding remains an adapter
|
|
33
|
+
* responsibility. Use describe()/JSON serialization for structural diagnostics;
|
|
34
|
+
* inspect SQL and parameters only in an authorized, trusted debugger.
|
|
35
|
+
*/
|
|
36
|
+
export interface DatasetCompilation extends DatasetCompiledStatement {
|
|
37
|
+
/** Normalized query, including its effective result limit and default measures. */
|
|
38
|
+
readonly query: Readonly<DatasetQuery>;
|
|
39
|
+
/** Statements executed before the result query, such as time-axis guards. */
|
|
40
|
+
readonly preflightStatements: readonly DatasetCompiledStatement[];
|
|
41
|
+
describe(): DatasetCompilationDescription;
|
|
42
|
+
/** JSON serialization deliberately omits trusted SQL, parameters and values. */
|
|
43
|
+
toJSON(): DatasetCompilationDescription;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=dataset-compilation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-compilation.d.ts","sourceRoot":"","sources":["../src/dataset-compilation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,sFAAsF;AACtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;CACzC;AAED,qFAAqF;AACrF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnF,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAmB,SAAQ,wBAAwB;IAClE,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,mBAAmB,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAClE,QAAQ,IAAI,6BAA6B,CAAC;IAC1C,gFAAgF;IAChF,MAAM,IAAI,6BAA6B,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/dataset-query.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AnyDatasetInstance, DatasetQuery, DatasetQueryResult, ExecutionContext } from './types.js';
|
|
2
|
-
import type { QueryBuilderFactoryLike
|
|
3
|
-
import {
|
|
2
|
+
import type { QueryBuilderFactoryLike } from './query-builder-protocol.js';
|
|
3
|
+
import type { ValidationResult } from './validation.js';
|
|
4
|
+
export { buildDatasetQueryBuilder } from './utils/build-dataset-query-builder.js';
|
|
4
5
|
export interface DatasetQueryExecutionOptions {
|
|
5
6
|
builderFactory: QueryBuilderFactoryLike;
|
|
6
7
|
context?: ExecutionContext;
|
|
@@ -13,6 +14,5 @@ export interface DatasetQueryExecutionOptions {
|
|
|
13
14
|
skipDefaultOrderBy?: boolean;
|
|
14
15
|
}
|
|
15
16
|
export declare function validateDatasetQuery(ds: AnyDatasetInstance, query: DatasetQuery, context?: ExecutionContext): ValidationResult;
|
|
16
|
-
export declare function buildDatasetQueryBuilder(ds: AnyDatasetInstance, query: DatasetQuery, options: DatasetQueryExecutionOptions): QueryBuilderLike;
|
|
17
17
|
export declare function runDatasetQuery(ds: AnyDatasetInstance, query: DatasetQuery, options: DatasetQueryExecutionOptions): Promise<DatasetQueryResult>;
|
|
18
18
|
//# sourceMappingURL=dataset-query.d.ts.map
|
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,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,wBAAsB,eAAe,CACnC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,kBAAkB,CAAC,CAW7B"}
|
package/dist/dataset-query.js
CHANGED
|
@@ -1,83 +1,19 @@
|
|
|
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';
|
|
6
1
|
import { validateDatasetQueryInput } from './utils/dataset-query-validation.js';
|
|
7
|
-
import {
|
|
8
|
-
import { overfetchLimit } from './utils/pagination.js';
|
|
9
|
-
import { applyRelationshipJoins, buildRelationshipBuilderContext, qualifyBaseColumn, } from './utils/relationship-builder-plan.js';
|
|
10
|
-
import { hasSelectedDerivedMeasure, runDerivedDatasetQuery, } from './utils/dataset-derived-query.js';
|
|
2
|
+
import { prepareDatasetQuery } from './utils/compile-dataset-query.js';
|
|
11
3
|
import { toDatasetQueryResult } from './utils/dataset-query-result.js';
|
|
12
|
-
|
|
4
|
+
// Preserve the shipped builder helper while keeping compilation helpers focused.
|
|
5
|
+
export { buildDatasetQueryBuilder } from './utils/build-dataset-query-builder.js';
|
|
13
6
|
export function validateDatasetQuery(ds, query, context) {
|
|
14
7
|
return validateDatasetQueryInput(ds, query, context);
|
|
15
8
|
}
|
|
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
|
-
}
|
|
20
|
-
if (hasSelectedDerivedMeasure(ds, query)) {
|
|
21
|
-
throw new Error('A derived dataset query needs the outer SQL projection; use createDatasetClient().toSQL().');
|
|
22
|
-
}
|
|
23
|
-
const validation = validateDatasetQuery(ds, query, options.context);
|
|
24
|
-
if (!validation.valid) {
|
|
25
|
-
throw new Error(`Invalid dataset query: ${validation.errors.join('; ')}`);
|
|
26
|
-
}
|
|
27
|
-
const joinCtx = buildRelationshipBuilderContext(ds, query, options.context);
|
|
28
|
-
let qb = options.builderFactory.table(ds.source);
|
|
29
|
-
qb = applyRelationshipJoins(qb, joinCtx);
|
|
30
|
-
const { selectParts, groupByParts } = buildDimensionSelectionPlan(ds, query.dimensions ?? [], query.by, joinCtx, query.timezone);
|
|
31
|
-
const measureNames = query.measures ?? baseMeasureNames(ds.measures);
|
|
32
|
-
if (selectParts.length > 0) {
|
|
33
|
-
qb = qb.select(selectParts);
|
|
34
|
-
}
|
|
35
|
-
for (const measureName of measureNames) {
|
|
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);
|
|
40
|
-
}
|
|
41
|
-
if (groupByParts.length > 0) {
|
|
42
|
-
qb = qb.groupBy(groupByParts);
|
|
43
|
-
}
|
|
44
|
-
const tenantColumn = resolveTenantFilterColumn(ds, options.context);
|
|
45
|
-
const tenantPredicate = getRuntimeTenantPredicate(options.context);
|
|
46
|
-
if (tenantPredicate && tenantColumn) {
|
|
47
|
-
qb = qb.where(qualifyBaseColumn(joinCtx, tenantColumn), tenantPredicate.operator, tenantPredicate.value);
|
|
48
|
-
}
|
|
49
|
-
for (const filter of query.filters ?? []) {
|
|
50
|
-
const resolvedField = resolveFilterField(ds, filter.field, joinCtx);
|
|
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);
|
|
56
|
-
}
|
|
57
|
-
return appendOrderLimitOffset(qb, query.orderBy, options.skipDefaultOrderBy ? undefined : query.by, options.executionLimit ?? query.limit, query.offset, joinCtx);
|
|
58
|
-
}
|
|
59
9
|
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
|
-
}
|
|
67
|
-
if (hasSelectedDerivedMeasure(ds, query)) {
|
|
68
|
-
return runDerivedDatasetQuery(ds, query, options, buildDatasetQueryBuilder);
|
|
69
|
-
}
|
|
70
10
|
const start = Date.now();
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
...options,
|
|
74
|
-
executionLimit: overfetchLimit(query.limit),
|
|
75
|
-
});
|
|
76
|
-
const rows = await qb.execute({ abortSignal: options.context?.abortSignal });
|
|
11
|
+
const prepared = prepareDatasetQuery(ds, query, options);
|
|
12
|
+
const rows = await prepared.execute();
|
|
77
13
|
return toDatasetQueryResult(rows, {
|
|
78
14
|
dataset: ds,
|
|
79
|
-
query,
|
|
80
|
-
sql:
|
|
15
|
+
query: prepared.compilation.query,
|
|
16
|
+
sql: prepared.compilation.sql,
|
|
81
17
|
timingMs: Date.now() - start,
|
|
82
18
|
context: options.context,
|
|
83
19
|
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL rendering owned by the semantic datasets layer, separate from a query
|
|
3
|
+
* builder's compiler dialect. Extend this contract as emission sites migrate.
|
|
4
|
+
* Only the ClickHouse implementation is supported today.
|
|
5
|
+
*/
|
|
6
|
+
export interface DatasetSqlDialect {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
/** Quote one output identifier; dots in a qualified semantic alias are literal. */
|
|
9
|
+
quoteIdentifier(identifier: string): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=dataset-sql-dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-sql-dialect.d.ts","sourceRoot":"","sources":["../src/dataset-sql-dialect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/dataset.d.ts
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
* });
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
-
import type {
|
|
33
|
-
|
|
32
|
+
import type { NormalizedDatasetFilters } from './utils/dataset-filter-types.js';
|
|
33
|
+
import type { DatasetConfig, DatasetInstance, DatasetMeasureDefinition, DerivedMeasures, DimensionDefinition, RelationshipDefinition, SegmentDefinition, SemanticFiltersDefinition } from './types.js';
|
|
34
|
+
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> = {}, const TFilters extends SemanticFiltersDefinition | undefined = SemanticFiltersDefinition | undefined>(name: TDatasetName, config: DatasetConfig<TDimensions, TDefinitions, TRelationships, TSegments, TFilters>): DatasetInstance<TDimensions, TDefinitions, TRelationships, TDatasetName, DerivedMeasures<TDefinitions>, TSegments, NormalizedDatasetFilters<TDimensions, TFilters>>;
|
|
34
35
|
//# 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,EAExB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EAKtB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,wBAAwB,EAExB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EAKtB,iBAAiB,EACjB,yBAAyB,EAC1B,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,EAC9D,KAAK,CAAC,QAAQ,SAAS,yBAAyB,GAAG,SAAS,GAAG,yBAAyB,GAAG,SAAS,EAEpG,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,aAAa,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,GACpF,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAoFrK"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type DatasetFeature = 'baseMeasures' | 'derivedMeasures' | 'segments' | 'windowMeasures' | 'shiftMeasures' | 'approxCountDistinct' | 'subDayGrains';
|
|
2
|
+
export interface DatasetFeatureSupport {
|
|
3
|
+
readonly feature: DatasetFeature;
|
|
4
|
+
/** Versions capable of representing the feature, independently of runtime support. */
|
|
5
|
+
readonly protocolVersions: readonly number[];
|
|
6
|
+
readonly typescript: {
|
|
7
|
+
readonly local: boolean;
|
|
8
|
+
readonly publish: boolean;
|
|
9
|
+
};
|
|
10
|
+
readonly python: {
|
|
11
|
+
readonly local: boolean;
|
|
12
|
+
readonly publish: boolean;
|
|
13
|
+
};
|
|
14
|
+
/** Repository portable runtime support, not qualification of a hosted service. */
|
|
15
|
+
readonly cloud: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface DatasetExecutionCapabilities {
|
|
18
|
+
readonly version: 1;
|
|
19
|
+
readonly cloudDeploymentVersion: 2;
|
|
20
|
+
readonly features: readonly DatasetFeatureSupport[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Conservative feature matrix tested against TS, Python and portable execution.
|
|
24
|
+
* Support assumes a compatible builder and a valid definition/query. This is a
|
|
25
|
+
* discovery aid, not a replacement for contract validation or authorization.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DATASET_EXECUTION_CAPABILITIES: DatasetExecutionCapabilities;
|
|
28
|
+
//# sourceMappingURL=execution-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-capabilities.d.ts","sourceRoot":"","sources":["../src/execution-capabilities.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,GACxE,gBAAgB,GAAG,eAAe,GAAG,qBAAqB,GAAG,cAAc,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,sFAAsF;IACtF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,4BAU3C,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import matrix from './execution-capabilities.json' with { type: 'json' };
|
|
2
|
+
/**
|
|
3
|
+
* Conservative feature matrix tested against TS, Python and portable execution.
|
|
4
|
+
* Support assumes a compatible builder and a valid definition/query. This is a
|
|
5
|
+
* discovery aid, not a replacement for contract validation or authorization.
|
|
6
|
+
*/
|
|
7
|
+
export const DATASET_EXECUTION_CAPABILITIES = Object.freeze({
|
|
8
|
+
version: 1,
|
|
9
|
+
cloudDeploymentVersion: 2,
|
|
10
|
+
features: Object.freeze(matrix.features.map(entry => Object.freeze({
|
|
11
|
+
feature: entry.feature,
|
|
12
|
+
protocolVersions: Object.freeze([...entry.protocolVersions]),
|
|
13
|
+
typescript: Object.freeze({ ...entry.typescript }),
|
|
14
|
+
python: Object.freeze({ ...entry.python }),
|
|
15
|
+
cloud: entry.cloud,
|
|
16
|
+
}))),
|
|
17
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"cloudDeploymentVersion": 2,
|
|
4
|
+
"features": [
|
|
5
|
+
{ "feature": "baseMeasures", "protocolVersions": [2, 3], "typescript": { "local": true, "publish": true }, "python": { "local": true, "publish": true }, "cloud": true },
|
|
6
|
+
{ "feature": "derivedMeasures", "protocolVersions": [2, 3], "typescript": { "local": true, "publish": true }, "python": { "local": false, "publish": false }, "cloud": true },
|
|
7
|
+
{ "feature": "segments", "protocolVersions": [3], "typescript": { "local": true, "publish": false }, "python": { "local": false, "publish": false }, "cloud": false },
|
|
8
|
+
{ "feature": "windowMeasures", "protocolVersions": [3], "typescript": { "local": true, "publish": false }, "python": { "local": false, "publish": false }, "cloud": false },
|
|
9
|
+
{ "feature": "shiftMeasures", "protocolVersions": [3], "typescript": { "local": true, "publish": false }, "python": { "local": false, "publish": false }, "cloud": false },
|
|
10
|
+
{ "feature": "approxCountDistinct", "protocolVersions": [3], "typescript": { "local": true, "publish": false }, "python": { "local": false, "publish": false }, "cloud": false },
|
|
11
|
+
{ "feature": "subDayGrains", "protocolVersions": [3], "typescript": { "local": true, "publish": false }, "python": { "local": true, "publish": false }, "cloud": false }
|
|
12
|
+
]
|
|
13
|
+
}
|
package/dist/executor.d.ts
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic dataset client internals.
|
|
3
|
-
*
|
|
4
|
-
* Public callers use `createDatasetClient(...).execute(...)`. The implementation
|
|
5
|
-
* stays database-agnostic via query-builder and backend protocol interfaces.
|
|
6
|
-
*/
|
|
1
|
+
/** Dataset client orchestration: runtime defaults, caching, limits and target dispatch. */
|
|
7
2
|
import type { MetricRef, GrainedMetricRef, MetricQuery, MetricQueryFor, MetricResult, MetricResultFor, DatasetQuery, DatasetQueryFor, DatasetQueryResult, DatasetQueryResultFor, ExecutionContext, AnyDatasetInstance, DatasetInstance } from './types.js';
|
|
8
|
-
import type {
|
|
3
|
+
import type { QueryBuilderFactoryInput } from './query-builder-protocol.js';
|
|
9
4
|
import type { PlanNode, SemanticBackend } from './semantic-plan.js';
|
|
10
|
-
import {
|
|
5
|
+
import type { ValidationResult } from './validation.js';
|
|
6
|
+
import { MetricQueryEngine } from './metric-query-engine.js';
|
|
11
7
|
import { type DatasetQueryExecutionOptions } from './dataset-query.js';
|
|
8
|
+
import type { DatasetCompilation } from './dataset-compilation.js';
|
|
12
9
|
import { type SemanticCacheOptions, type SemanticCacheStats } from './cache/semantic-query-cache.js';
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
builderFactory: QueryBuilderFactoryInput;
|
|
16
|
-
}
|
|
10
|
+
export { MetricQueryEngine } from './metric-query-engine.js';
|
|
11
|
+
export type { MetricQueryEngineOptions } from './metric-query-engine.js';
|
|
17
12
|
export interface CreateDatasetClientOptions {
|
|
18
13
|
/** Default IANA timezone for buckets and local time-key bounds. Queries can override it. */
|
|
19
14
|
timezone?: string;
|
|
@@ -46,7 +41,14 @@ export interface DatasetClient {
|
|
|
46
41
|
execute<TDataset extends TypedDataset, const TQuery extends DatasetQueryFor<TDataset> = DatasetQueryFor<TDataset>>(target: TDataset, query?: TQuery, context?: ExecutionContext): Promise<DatasetQueryResultFor<TDataset, TQuery>>;
|
|
47
42
|
execute<TDatasetName extends string, TMetricName extends string, TDataset extends TypedDataset<TDatasetName>, const TQuery extends MetricQueryFor<TDataset, TMetricName> = MetricQueryFor<TDataset, TMetricName>>(target: TypedMetricRef<TDatasetName, TMetricName, TDataset>, query?: TQuery, context?: ExecutionContext): Promise<MetricResultFor<TDataset, TMetricName, TQuery>>;
|
|
48
43
|
execute<TDatasetName extends string, TMetricName extends string, TDataset extends TypedDataset<TDatasetName>, const TQuery extends MetricQueryFor<TDataset, TMetricName> = MetricQueryFor<TDataset, TMetricName>>(target: TypedGrainedMetricRef<TDatasetName, TMetricName, TDataset>, query?: TQuery, context?: ExecutionContext): Promise<MetricResultFor<TDataset, TMetricName, TQuery>>;
|
|
49
|
-
execute<
|
|
44
|
+
execute<TDatasetName extends string, TMetricName extends string, TDataset extends TypedDataset<TDatasetName>, const TQuery extends MetricQueryFor<TDataset, TMetricName> = MetricQueryFor<TDataset, TMetricName>>(target: TypedMetricRef<TDatasetName, TMetricName, TDataset> | TypedGrainedMetricRef<TDatasetName, TMetricName, TDataset>, query?: TQuery, context?: ExecutionContext): Promise<MetricResultFor<TDataset, TMetricName, TQuery>>;
|
|
45
|
+
/** Explicit row types opt into the legacy dynamic query contract. */
|
|
46
|
+
execute<TRow = never, TTarget extends SemanticTarget = SemanticTarget>(target: [TRow] extends [never] ? never : TTarget, query?: SemanticQuery<TTarget>, context?: ExecutionContext): Promise<SemanticResult<TTarget, TRow>>;
|
|
47
|
+
/** Compile the actual dataset execution SQL, including ceilings and pagination overfetch.
|
|
48
|
+
* SQL and parameters are trusted-only; describe()/JSON serialization omit values.
|
|
49
|
+
* Frozen semantic backends and standalone metric handles are not supported.
|
|
50
|
+
*/
|
|
51
|
+
compileDataset<TDataset extends TypedDataset>(target: TDataset, query?: DatasetQueryFor<TDataset>, context?: ExecutionContext): DatasetCompilation;
|
|
50
52
|
toSQL<TTarget extends SemanticTarget>(target: TTarget, query?: SemanticQuery<TTarget>, context?: ExecutionContext): string;
|
|
51
53
|
validate<TTarget extends SemanticTarget>(target: TTarget, query?: SemanticQuery<TTarget>, context?: ExecutionContext): ValidationResult;
|
|
52
54
|
/** Lookup counters for this client's semantic result cache. */
|
|
@@ -57,26 +59,6 @@ export interface DatasetClient {
|
|
|
57
59
|
*/
|
|
58
60
|
clearCache(): Promise<boolean>;
|
|
59
61
|
}
|
|
60
|
-
export declare class MetricQueryEngine {
|
|
61
|
-
private builderFactory;
|
|
62
|
-
constructor(options: MetricQueryEngineOptions);
|
|
63
|
-
protected getBuilderFactory(): QueryBuilderFactoryLike;
|
|
64
|
-
/**
|
|
65
|
-
* Execute a metric query. Generates SQL, applies tenant/filter context, executes.
|
|
66
|
-
*/
|
|
67
|
-
run<T = Record<string, unknown>>(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): Promise<MetricResult<T>>;
|
|
68
|
-
/**
|
|
69
|
-
* Generate SQL without executing.
|
|
70
|
-
*/
|
|
71
|
-
toSQL(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): string;
|
|
72
|
-
/**
|
|
73
|
-
* Validate a metric query against the metric's contract.
|
|
74
|
-
*/
|
|
75
|
-
validate(metric: MetricRef | GrainedMetricRef, query: MetricQuery, context?: ExecutionContext): ValidationResult;
|
|
76
|
-
private runViaBuilder;
|
|
77
|
-
private buildBaseQuery;
|
|
78
|
-
private buildDerivedSQLViaBuilder;
|
|
79
|
-
}
|
|
80
62
|
export declare class DatasetClientImpl extends MetricQueryEngine implements DatasetClient {
|
|
81
63
|
private backend?;
|
|
82
64
|
private readonly defaultTimezone?;
|
|
@@ -95,11 +77,6 @@ export declare class DatasetClientImpl extends MetricQueryEngine implements Data
|
|
|
95
77
|
* the common uncached path.
|
|
96
78
|
*/
|
|
97
79
|
private isCacheable;
|
|
98
|
-
/**
|
|
99
|
-
* Context used for cache-key building: fills in the client-level default
|
|
100
|
-
* `cache.scope` unless the call sets its own, so clients sharing a custom
|
|
101
|
-
* store can be namespaced apart.
|
|
102
|
-
*/
|
|
103
80
|
/** The call's cache partition: its own `cache.scope`, else the client default. */
|
|
104
81
|
private cacheScope;
|
|
105
82
|
planMetric(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): PlanNode;
|
|
@@ -110,6 +87,8 @@ export declare class DatasetClientImpl extends MetricQueryEngine implements Data
|
|
|
110
87
|
execute<TDataset extends DatasetInstance<any, any, any, any>, const TQuery extends DatasetQueryFor<TDataset> = DatasetQueryFor<TDataset>>(target: TDataset, query?: TQuery, context?: ExecutionContext): Promise<DatasetQueryResultFor<TDataset, TQuery>>;
|
|
111
88
|
execute<TDatasetName extends string, TMetricName extends string, TDataset extends DatasetInstance<any, any, any, TDatasetName>, const TQuery extends MetricQueryFor<TDataset, TMetricName> = MetricQueryFor<TDataset, TMetricName>>(target: MetricRef<TDatasetName, TMetricName, any, TDataset>, query?: TQuery, context?: ExecutionContext): Promise<MetricResultFor<TDataset, TMetricName, TQuery>>;
|
|
112
89
|
execute<TDatasetName extends string, TMetricName extends string, TDataset extends DatasetInstance<any, any, any, TDatasetName>, const TQuery extends MetricQueryFor<TDataset, TMetricName> = MetricQueryFor<TDataset, TMetricName>>(target: GrainedMetricRef<TDatasetName, TMetricName, any, TDataset>, query?: TQuery, context?: ExecutionContext): Promise<MetricResultFor<TDataset, TMetricName, TQuery>>;
|
|
90
|
+
execute<TDatasetName extends string, TMetricName extends string, TDataset extends TypedDataset<TDatasetName>, const TQuery extends MetricQueryFor<TDataset, TMetricName> = MetricQueryFor<TDataset, TMetricName>>(target: TypedMetricRef<TDatasetName, TMetricName, TDataset> | TypedGrainedMetricRef<TDatasetName, TMetricName, TDataset>, query?: TQuery, context?: ExecutionContext): Promise<MetricResultFor<TDataset, TMetricName, TQuery>>;
|
|
91
|
+
compileDataset<TDataset extends TypedDataset>(target: TDataset, query?: DatasetQueryFor<TDataset>, context?: ExecutionContext): DatasetCompilation;
|
|
113
92
|
toSQL<TTarget extends SemanticTarget>(target: TTarget, query?: SemanticQuery<TTarget>, context?: ExecutionContext): string;
|
|
114
93
|
validate<TTarget extends SemanticTarget>(target: TTarget, query?: SemanticQuery<TTarget>, context?: ExecutionContext): ValidationResult;
|
|
115
94
|
private executeMetric;
|
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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"}
|