@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.
Files changed (172) hide show
  1. package/README.md +6 -0
  2. package/dist/api.type-test.js +7 -1
  3. package/dist/catalog.d.ts +7 -3
  4. package/dist/catalog.d.ts.map +1 -1
  5. package/dist/catalog.js +15 -3
  6. package/dist/contract.d.ts +1 -1
  7. package/dist/contract.d.ts.map +1 -1
  8. package/dist/dataset-compilation.d.ts +45 -0
  9. package/dist/dataset-compilation.d.ts.map +1 -0
  10. package/dist/dataset-compilation.js +1 -0
  11. package/dist/dataset-query.d.ts +3 -3
  12. package/dist/dataset-query.d.ts.map +1 -1
  13. package/dist/dataset-query.js +7 -71
  14. package/dist/dataset-sql-dialect.d.ts +11 -0
  15. package/dist/dataset-sql-dialect.d.ts.map +1 -0
  16. package/dist/dataset-sql-dialect.js +1 -0
  17. package/dist/dataset.d.ts +3 -2
  18. package/dist/dataset.d.ts.map +1 -1
  19. package/dist/execution-capabilities.d.ts +28 -0
  20. package/dist/execution-capabilities.d.ts.map +1 -0
  21. package/dist/execution-capabilities.js +17 -0
  22. package/dist/execution-capabilities.json +13 -0
  23. package/dist/executor.d.ts +17 -38
  24. package/dist/executor.d.ts.map +1 -1
  25. package/dist/executor.js +37 -400
  26. package/dist/index.d.ts +9 -4
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +3 -2
  29. package/dist/internal.d.ts +3 -0
  30. package/dist/internal.d.ts.map +1 -1
  31. package/dist/internal.js +2 -0
  32. package/dist/measure.d.ts +56 -19
  33. package/dist/measure.d.ts.map +1 -1
  34. package/dist/measure.js +5 -65
  35. package/dist/metric-query-engine.d.ts +29 -0
  36. package/dist/metric-query-engine.d.ts.map +1 -0
  37. package/dist/metric-query-engine.js +106 -0
  38. package/dist/portable-executor.d.ts +20 -6
  39. package/dist/portable-executor.d.ts.map +1 -1
  40. package/dist/portable-executor.js +29 -9
  41. package/dist/query-builder-protocol.d.ts +4 -0
  42. package/dist/query-builder-protocol.d.ts.map +1 -1
  43. package/dist/query-helpers.d.ts +10 -10
  44. package/dist/query-helpers.d.ts.map +1 -1
  45. package/dist/query-helpers.js +1 -3
  46. package/dist/query-planner.d.ts +7 -3
  47. package/dist/query-planner.d.ts.map +1 -1
  48. package/dist/query-planner.js +10 -12
  49. package/dist/semantic-planner.d.ts.map +1 -1
  50. package/dist/semantic-planner.js +2 -0
  51. package/dist/semantic-query-schema.d.ts.map +1 -1
  52. package/dist/semantic-query-schema.js +3 -3
  53. package/dist/types.d.ts +22 -16
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/utils/agent-catalog-projection.d.ts +1 -0
  56. package/dist/utils/agent-catalog-projection.d.ts.map +1 -1
  57. package/dist/utils/agent-catalog-projection.js +2 -1
  58. package/dist/utils/approximate-measures.d.ts +1 -0
  59. package/dist/utils/approximate-measures.d.ts.map +1 -1
  60. package/dist/utils/approximate-measures.js +10 -4
  61. package/dist/utils/base-measure-definition.d.ts +23 -0
  62. package/dist/utils/base-measure-definition.d.ts.map +1 -0
  63. package/dist/utils/base-measure-definition.js +65 -0
  64. package/dist/utils/build-dataset-query-builder.d.ts +5 -0
  65. package/dist/utils/build-dataset-query-builder.d.ts.map +1 -0
  66. package/dist/utils/build-dataset-query-builder.js +62 -0
  67. package/dist/utils/clickhouse-dataset-sql-dialect.d.ts +4 -0
  68. package/dist/utils/clickhouse-dataset-sql-dialect.d.ts.map +1 -0
  69. package/dist/utils/clickhouse-dataset-sql-dialect.js +6 -0
  70. package/dist/utils/compile-dataset-query.d.ts +10 -0
  71. package/dist/utils/compile-dataset-query.d.ts.map +1 -0
  72. package/dist/utils/compile-dataset-query.js +71 -0
  73. package/dist/utils/composite-time-measure-sql.d.ts +10 -0
  74. package/dist/utils/composite-time-measure-sql.d.ts.map +1 -0
  75. package/dist/utils/composite-time-measure-sql.js +61 -0
  76. package/dist/utils/dataset-derived-query.d.ts +1 -2
  77. package/dist/utils/dataset-derived-query.d.ts.map +1 -1
  78. package/dist/utils/dataset-derived-query.js +16 -30
  79. package/dist/utils/dataset-filter-types.d.ts +28 -0
  80. package/dist/utils/dataset-filter-types.d.ts.map +1 -0
  81. package/dist/utils/dataset-filter-types.js +1 -0
  82. package/dist/utils/dataset-query-validation.d.ts.map +1 -1
  83. package/dist/utils/dataset-query-validation.js +15 -3
  84. package/dist/utils/dataset-sql-dialect.d.ts +5 -0
  85. package/dist/utils/dataset-sql-dialect.d.ts.map +1 -0
  86. package/dist/utils/dataset-sql-dialect.js +5 -0
  87. package/dist/utils/dataset-target.d.ts +3 -0
  88. package/dist/utils/dataset-target.d.ts.map +1 -0
  89. package/dist/utils/dataset-target.js +3 -0
  90. package/dist/utils/derived-measure-sql.d.ts +1 -0
  91. package/dist/utils/derived-measure-sql.d.ts.map +1 -1
  92. package/dist/utils/derived-measure-sql.js +9 -6
  93. package/dist/utils/derived-measure-validation.d.ts.map +1 -1
  94. package/dist/utils/derived-measure-validation.js +4 -25
  95. package/dist/utils/filter-definition.d.ts +3 -0
  96. package/dist/utils/filter-definition.d.ts.map +1 -0
  97. package/dist/utils/filter-definition.js +3 -0
  98. package/dist/utils/measure-dependencies.d.ts +8 -0
  99. package/dist/utils/measure-dependencies.d.ts.map +1 -0
  100. package/dist/utils/measure-dependencies.js +44 -0
  101. package/dist/utils/measure-evaluation-graph.d.ts +23 -0
  102. package/dist/utils/measure-evaluation-graph.d.ts.map +1 -0
  103. package/dist/utils/measure-evaluation-graph.js +38 -0
  104. package/dist/utils/measure-time-grains.d.ts.map +1 -1
  105. package/dist/utils/measure-time-grains.js +4 -2
  106. package/dist/utils/metric-derived-query.d.ts +8 -0
  107. package/dist/utils/metric-derived-query.d.ts.map +1 -0
  108. package/dist/utils/metric-derived-query.js +106 -0
  109. package/dist/utils/metric-query-builder.d.ts +5 -0
  110. package/dist/utils/metric-query-builder.d.ts.map +1 -0
  111. package/dist/utils/metric-query-builder.js +50 -0
  112. package/dist/utils/metric-query-result.d.ts +10 -0
  113. package/dist/utils/metric-query-result.d.ts.map +1 -0
  114. package/dist/utils/metric-query-result.js +18 -0
  115. package/dist/utils/metric-query-validation.d.ts +6 -0
  116. package/dist/utils/metric-query-validation.d.ts.map +1 -0
  117. package/dist/utils/metric-query-validation.js +116 -0
  118. package/dist/utils/relationship-builder-plan.d.ts +4 -2
  119. package/dist/utils/relationship-builder-plan.d.ts.map +1 -1
  120. package/dist/utils/relationship-builder-plan.js +10 -13
  121. package/dist/utils/relationship-measure-sql.d.ts +14 -0
  122. package/dist/utils/relationship-measure-sql.d.ts.map +1 -0
  123. package/dist/utils/relationship-measure-sql.js +44 -0
  124. package/dist/utils/relationship-measure-types.d.ts +36 -0
  125. package/dist/utils/relationship-measure-types.d.ts.map +1 -0
  126. package/dist/utils/relationship-measure-types.js +1 -0
  127. package/dist/utils/relationship-measures.d.ts +23 -0
  128. package/dist/utils/relationship-measures.d.ts.map +1 -0
  129. package/dist/utils/relationship-measures.js +62 -0
  130. package/dist/utils/relationship-validation.d.ts +1 -1
  131. package/dist/utils/relationship-validation.d.ts.map +1 -1
  132. package/dist/utils/relationship-validation.js +3 -5
  133. package/dist/utils/semantic-query-syntax.d.ts +6 -0
  134. package/dist/utils/semantic-query-syntax.d.ts.map +1 -0
  135. package/dist/utils/semantic-query-syntax.js +25 -0
  136. package/dist/utils/shift-measure-grains.d.ts +5 -0
  137. package/dist/utils/shift-measure-grains.d.ts.map +1 -0
  138. package/dist/utils/shift-measure-grains.js +10 -0
  139. package/dist/utils/shift-measure-sql.d.ts +5 -2
  140. package/dist/utils/shift-measure-sql.d.ts.map +1 -1
  141. package/dist/utils/shift-measure-sql.js +25 -8
  142. package/dist/utils/shift-measure-validation.js +3 -3
  143. package/dist/utils/shift-wall-time-sql.d.ts +4 -0
  144. package/dist/utils/shift-wall-time-sql.d.ts.map +1 -0
  145. package/dist/utils/shift-wall-time-sql.js +17 -0
  146. package/dist/utils/snapshot-execution-context.d.ts +4 -0
  147. package/dist/utils/snapshot-execution-context.d.ts.map +1 -0
  148. package/dist/utils/snapshot-execution-context.js +16 -0
  149. package/dist/utils/time-measure-axis-sql.d.ts +1 -0
  150. package/dist/utils/time-measure-axis-sql.d.ts.map +1 -1
  151. package/dist/utils/time-measure-axis-sql.js +5 -4
  152. package/dist/utils/time-measure-axis.d.ts.map +1 -1
  153. package/dist/utils/time-measure-axis.js +3 -2
  154. package/dist/utils/time-measure-context-sql.d.ts +6 -0
  155. package/dist/utils/time-measure-context-sql.d.ts.map +1 -0
  156. package/dist/utils/time-measure-context-sql.js +21 -0
  157. package/dist/utils/time-measure-dataset-sql.d.ts.map +1 -1
  158. package/dist/utils/time-measure-dataset-sql.js +27 -9
  159. package/dist/utils/time-measure-leaf-sql.d.ts +14 -0
  160. package/dist/utils/time-measure-leaf-sql.d.ts.map +1 -0
  161. package/dist/utils/time-measure-leaf-sql.js +52 -0
  162. package/dist/utils/time-measure-result-sql.d.ts +1 -1
  163. package/dist/utils/time-measure-result-sql.d.ts.map +1 -1
  164. package/dist/utils/time-measure-result-sql.js +4 -3
  165. package/dist/utils/time-measure-source-sql.d.ts.map +1 -1
  166. package/dist/utils/time-measure-source-sql.js +8 -4
  167. package/dist/utils/time-query-measures.d.ts.map +1 -1
  168. package/dist/utils/time-query-measures.js +4 -8
  169. package/dist/utils/window-query-signature.d.ts.map +1 -1
  170. package/dist/utils/window-query-signature.js +12 -2
  171. package/dist/validation.js +1 -1
  172. package/package.json +8 -7
package/dist/measure.d.ts CHANGED
@@ -1,41 +1,79 @@
1
+ import { createPercentileMeasure, createMedianMeasure, createDerivedMeasure } from './utils/base-measure-definition.js';
2
+ export { validatePercentileLevel } from './utils/base-measure-definition.js';
1
3
  import { type ShiftMeasureOptions } from './utils/shift-measure-definition.js';
2
- import type { DerivedMeasureDefinition, DerivedMeasureOptions, DerivedMeasureUses, MeasureDefinition, MeasureOptions, MeasureTimeInterval, TimeGrain, WindowMeasureDefinition, ShiftMeasureDefinition } from './types.js';
4
+ import type { MeasureTimeInterval, TimeGrain, WindowMeasureDefinition, ShiftMeasureDefinition } from './types.js';
3
5
  import { type WindowMeasureOptions } from './utils/window-measure-definition.js';
4
- export declare function validatePercentileLevel(level: number): void;
5
- declare function createPercentileMeasure(field: string, level: number, opts?: MeasureOptions): MeasureDefinition;
6
- declare function createDerivedMeasure<const TUses extends DerivedMeasureUses>(options: DerivedMeasureOptions<TUses>): DerivedMeasureDefinition<TUses>;
7
6
  export declare const measure: {
8
- readonly sum: (field: string, opts?: MeasureOptions) => MeasureDefinition;
9
- readonly count: (field: string, opts?: MeasureOptions) => MeasureDefinition;
10
- readonly countDistinct: (field: string, opts?: MeasureOptions) => MeasureDefinition;
7
+ readonly sum: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
8
+ aggregation: "sum";
9
+ field: TField;
10
+ } & TOptions;
11
+ readonly count: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
12
+ aggregation: "count";
13
+ field: TField;
14
+ } & TOptions;
15
+ readonly countDistinct: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
16
+ aggregation: "countDistinct";
17
+ field: TField;
18
+ } & TOptions;
11
19
  /**
12
20
  * Estimated number of distinct values (ClickHouse `uniq`). Uses bounded
13
21
  * memory on high-cardinality columns; catalogs mark it `approximate`.
14
22
  */
15
- readonly approxCountDistinct: (field: string, opts?: MeasureOptions) => MeasureDefinition;
16
- readonly avg: (field: string, opts?: MeasureOptions) => MeasureDefinition;
17
- readonly min: (field: string, opts?: MeasureOptions) => MeasureDefinition;
18
- readonly max: (field: string, opts?: MeasureOptions) => MeasureDefinition;
23
+ readonly approxCountDistinct: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
24
+ aggregation: "approxCountDistinct";
25
+ field: TField;
26
+ } & TOptions;
27
+ readonly avg: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
28
+ aggregation: "avg";
29
+ field: TField;
30
+ } & TOptions;
31
+ readonly min: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
32
+ aggregation: "min";
33
+ field: TField;
34
+ } & TOptions;
35
+ readonly max: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
36
+ aggregation: "max";
37
+ field: TField;
38
+ } & TOptions;
19
39
  /** Approximate percentile of a numeric field (ClickHouse `quantile(level)`). */
20
40
  readonly percentile: typeof createPercentileMeasure;
21
41
  /** Median — sugar for `percentile(field, 0.5)`. */
22
- readonly median: (field: string, opts?: MeasureOptions) => MeasureDefinition;
42
+ readonly median: typeof createMedianMeasure;
23
43
  /**
24
44
  * Value of `field` on the row where `by` is greatest (ClickHouse `argMax`).
25
45
  * The runtime value follows `field`'s type; aggregate result columns are
26
46
  * exposed as strings to match the dataset result contract.
27
47
  * Measure filters are not supported on argMax/argMin.
28
48
  */
29
- readonly argMax: (field: string, by: string, opts?: Omit<MeasureOptions, "filters">) => MeasureDefinition;
49
+ readonly argMax: <const TField extends string, const TArg extends string, const TOptions extends Omit<import("./types.js").MeasureOptions, "filters"> = Omit<import("./types.js").MeasureOptions, "filters">>(field: TField, by: TArg, opts?: (TOptions & {
50
+ filters?: never;
51
+ }) | undefined) => import("./types.js").MeasureDefinition & {
52
+ aggregation: "argMax";
53
+ field: TField;
54
+ argField: TArg;
55
+ } & TOptions;
30
56
  /** Value of `field` on the row where `by` is smallest (ClickHouse `argMin`). */
31
- readonly argMin: (field: string, by: string, opts?: Omit<MeasureOptions, "filters">) => MeasureDefinition;
57
+ readonly argMin: <const TField extends string, const TArg extends string, const TOptions extends Omit<import("./types.js").MeasureOptions, "filters"> = Omit<import("./types.js").MeasureOptions, "filters">>(field: TField, by: TArg, opts?: (TOptions & {
58
+ filters?: never;
59
+ }) | undefined) => import("./types.js").MeasureDefinition & {
60
+ aggregation: "argMin";
61
+ field: TField;
62
+ argField: TArg;
63
+ } & TOptions;
32
64
  /** Sample standard deviation (ClickHouse `stddevSamp`). */
33
- readonly stddev: (field: string, opts?: MeasureOptions) => MeasureDefinition;
65
+ readonly stddev: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
66
+ aggregation: "stddev";
67
+ field: TField;
68
+ } & TOptions;
34
69
  /** Sample variance (ClickHouse `varSamp`). */
35
- readonly variance: (field: string, opts?: MeasureOptions) => MeasureDefinition;
36
- /** A formula over base, window, or shifted measures owned by this dataset. */
70
+ readonly variance: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
71
+ aggregation: "variance";
72
+ field: TField;
73
+ } & TOptions;
74
+ /** A formula over measures owned by this dataset. */
37
75
  readonly derived: typeof createDerivedMeasure;
38
- /** Evaluate a base measure in an earlier aligned period. */
76
+ /** Evaluate a measure and its dependencies in an earlier aligned period. */
39
77
  readonly shift: <const TMeasureName extends string>(baseMeasure: TMeasureName, interval: MeasureTimeInterval, options?: ShiftMeasureOptions) => ShiftMeasureDefinition<TMeasureName>;
40
78
  /** Re-aggregate rows over a trailing interval of whole query buckets. */
41
79
  readonly trailing: <const TMeasureName extends string>(baseMeasure: TMeasureName, interval: MeasureTimeInterval, options?: WindowMeasureOptions) => WindowMeasureDefinition<TMeasureName>;
@@ -44,5 +82,4 @@ export declare const measure: {
44
82
  /** Running sum/count/minimum/maximum over all rows through each bucket. */
45
83
  readonly cumulative: <const TMeasureName extends string>(baseMeasure: TMeasureName, options?: WindowMeasureOptions) => WindowMeasureDefinition<TMeasureName>;
46
84
  };
47
- export {};
48
85
  //# sourceMappingURL=measure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAgBtG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3D;AAqBD,iBAAS,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAcvG;AAED,iBAAS,oBAAoB,CAAC,KAAK,CAAC,KAAK,SAAS,kBAAkB,EAClE,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,GACpC,wBAAwB,CAAC,KAAK,CAAC,CASjC;AAED,eAAO,MAAM,OAAO;0BAnEH,MAAM,SAAS,cAAc,KAAG,iBAAiB;4BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;oCAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAuEhE;;;OAGG;0CA1EY,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA+EhE,gFAAgF;;IAEhF,mDAAmD;6BACnC,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAEjE;;;;;OAKG;6BArEY,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAuE7F,gFAAgF;6BAvEjE,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAyE7F,2DAA2D;6BA7F5C,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA+FhE,8CAA8C;+BA/F/B,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAiGhE,8EAA8E;;IAE9E,4DAA4D;2BAC9C,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,mBAAmB,KAAG,sBAAsB,CAAC,YAAY,CAAC;IAEzK,yEAAyE;8BACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAE9K,+EAA+E;4BAChE,YAAY,SAAS,MAAM,eAAe,YAAY,SAAS,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAElL,2EAA2E;gCACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;CAEzI,CAAC"}
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AACrK,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEtG,eAAO,MAAM,OAAO;;;;;;;;;;;;;IAIlB;;;OAGG;;;;;;;;;;;;;;;;;IAKH,gFAAgF;;IAEhF,mDAAmD;;IAEnD;;;;;OAKG;;;;;;;;IAEH,gFAAgF;;;;;;;;IAEhF,2DAA2D;;;;;IAE3D,8CAA8C;;;;;IAE9C,qDAAqD;;IAErD,4EAA4E;2BAC9D,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,mBAAmB,KAAG,sBAAsB,CAAC,YAAY,CAAC;IAEzK,yEAAyE;8BACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAE9K,+EAA+E;4BAChE,YAAY,SAAS,MAAM,eAAe,YAAY,SAAS,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAElL,2EAA2E;gCACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;CAEzI,CAAC"}
package/dist/measure.js CHANGED
@@ -1,67 +1,7 @@
1
+ import { createMeasureHelper, createArgMeasureHelper, createPercentileMeasure, createMedianMeasure, createDerivedMeasure } from './utils/base-measure-definition.js';
2
+ export { validatePercentileLevel } from './utils/base-measure-definition.js';
1
3
  import { createShiftMeasure } from './utils/shift-measure-definition.js';
2
- import { snapshotSemanticMetadata } from './utils/semantic-metadata.js';
3
4
  import { createWindowMeasure } from './utils/window-measure-definition.js';
4
- function createMeasureHelper(aggregation) {
5
- return (field, opts) => ({
6
- __type: 'measure_definition',
7
- aggregation,
8
- field,
9
- sql: opts?.sql,
10
- dependencies: opts?.dependencies,
11
- label: opts?.label,
12
- description: opts?.description,
13
- ...snapshotSemanticMetadata(opts ?? {}),
14
- filters: opts?.filters,
15
- });
16
- }
17
- export function validatePercentileLevel(level) {
18
- if (typeof level !== 'number' || !Number.isFinite(level) || level < 0 || level > 1) {
19
- throw new Error(`Invalid percentile level ${level}: expected a number between 0 and 1.`);
20
- }
21
- }
22
- function createArgMeasureHelper(aggregation) {
23
- return (field, by, opts) => {
24
- if (typeof by !== 'string' || by.trim().length === 0) {
25
- throw new Error(`measure.${aggregation}("${field}", by) requires a "by" field.`);
26
- }
27
- return {
28
- __type: 'measure_definition',
29
- aggregation,
30
- field,
31
- argField: by,
32
- sql: opts?.sql,
33
- dependencies: opts?.dependencies,
34
- label: opts?.label,
35
- description: opts?.description,
36
- ...snapshotSemanticMetadata(opts ?? {}),
37
- };
38
- };
39
- }
40
- function createPercentileMeasure(field, level, opts) {
41
- validatePercentileLevel(level);
42
- return {
43
- __type: 'measure_definition',
44
- aggregation: 'percentile',
45
- field,
46
- level,
47
- sql: opts?.sql,
48
- dependencies: opts?.dependencies,
49
- label: opts?.label,
50
- description: opts?.description,
51
- ...snapshotSemanticMetadata(opts ?? {}),
52
- filters: opts?.filters,
53
- };
54
- }
55
- function createDerivedMeasure(options) {
56
- return {
57
- __type: 'derived_measure_definition',
58
- uses: { ...options.uses },
59
- formula: options.formula,
60
- label: options.label,
61
- description: options.description,
62
- ...snapshotSemanticMetadata(options),
63
- };
64
- }
65
5
  export const measure = {
66
6
  sum: createMeasureHelper('sum'),
67
7
  count: createMeasureHelper('count'),
@@ -77,7 +17,7 @@ export const measure = {
77
17
  /** Approximate percentile of a numeric field (ClickHouse `quantile(level)`). */
78
18
  percentile: createPercentileMeasure,
79
19
  /** Median — sugar for `percentile(field, 0.5)`. */
80
- median: (field, opts) => createPercentileMeasure(field, 0.5, opts),
20
+ median: createMedianMeasure,
81
21
  /**
82
22
  * Value of `field` on the row where `by` is greatest (ClickHouse `argMax`).
83
23
  * The runtime value follows `field`'s type; aggregate result columns are
@@ -91,9 +31,9 @@ export const measure = {
91
31
  stddev: createMeasureHelper('stddev'),
92
32
  /** Sample variance (ClickHouse `varSamp`). */
93
33
  variance: createMeasureHelper('variance'),
94
- /** A formula over base, window, or shifted measures owned by this dataset. */
34
+ /** A formula over measures owned by this dataset. */
95
35
  derived: createDerivedMeasure,
96
- /** Evaluate a base measure in an earlier aligned period. */
36
+ /** Evaluate a measure and its dependencies in an earlier aligned period. */
97
37
  shift: (baseMeasure, interval, options) => createShiftMeasure(baseMeasure, interval, options),
98
38
  /** Re-aggregate rows over a trailing interval of whole query buckets. */
99
39
  trailing: (baseMeasure, interval, options) => createWindowMeasure(baseMeasure, { trailing: { ...interval } }, options),
@@ -0,0 +1,29 @@
1
+ /** Metric validation, compilation orchestration and execution. */
2
+ import type { MetricRef, GrainedMetricRef, MetricQuery, MetricResult, ExecutionContext } from './types.js';
3
+ import type { QueryBuilderFactoryLike, QueryBuilderFactoryInput } from './query-builder-protocol.js';
4
+ import type { ValidationResult } from './validation.js';
5
+ export interface MetricQueryEngineOptions {
6
+ /** Query builder factory for executing metrics. */
7
+ builderFactory: QueryBuilderFactoryInput;
8
+ }
9
+ export declare class MetricQueryEngine {
10
+ private readonly builderFactory;
11
+ constructor(options: MetricQueryEngineOptions);
12
+ protected getBuilderFactory(): QueryBuilderFactoryLike;
13
+ /** Resolve a per-call override against this engine's default factory. */
14
+ protected resolveBuilderFactory(context?: ExecutionContext): QueryBuilderFactoryLike;
15
+ /**
16
+ * Execute a metric query. Generates SQL, applies tenant/filter context, executes.
17
+ */
18
+ run<T = Record<string, unknown>>(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): Promise<MetricResult<T>>;
19
+ /**
20
+ * Generate SQL without executing.
21
+ */
22
+ toSQL(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): string;
23
+ /**
24
+ * Validate a metric query against the metric's contract.
25
+ */
26
+ validate(metric: MetricRef | GrainedMetricRef, query: MetricQuery, context?: ExecutionContext): ValidationResult;
27
+ private runViaBuilder;
28
+ }
29
+ //# sourceMappingURL=metric-query-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-query-engine.d.ts","sourceRoot":"","sources":["../src/metric-query-engine.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAErG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQxD,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,cAAc,EAAE,wBAAwB,CAAC;CAC1C;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;gBAE7C,OAAO,EAAE,wBAAwB;IAI7C,SAAS,CAAC,iBAAiB,IAAI,uBAAuB;IAItD,yEAAyE;IACzE,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,uBAAuB;IAKpF;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAW3B;;OAEG;IACH,KAAK,CACH,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM;IAmBT;;OAEG;IACH,QAAQ,CACN,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB;YA+BL,aAAa;CAiC5B"}
@@ -0,0 +1,106 @@
1
+ import { toQueryBuilderFactory } from './query-builder-protocol.js';
2
+ import { assertMetricHandle, getMetricRef, getMetricGrain } from './utils/metric-handle.js';
3
+ import { validateMetricQueryInput } from './utils/metric-query-validation.js';
4
+ import { buildMetricQueryBuilder } from './utils/metric-query-builder.js';
5
+ import { buildDerivedMetricSql } from './utils/metric-derived-query.js';
6
+ import { overfetchLimit } from './utils/pagination.js';
7
+ import { toMetricQueryResult } from './utils/metric-query-result.js';
8
+ export class MetricQueryEngine {
9
+ builderFactory;
10
+ constructor(options) {
11
+ this.builderFactory = toQueryBuilderFactory(options.builderFactory);
12
+ }
13
+ getBuilderFactory() {
14
+ return this.builderFactory;
15
+ }
16
+ /** Resolve a per-call override against this engine's default factory. */
17
+ resolveBuilderFactory(context) {
18
+ const override = context?.runtime?.builderFactory;
19
+ return override ? toQueryBuilderFactory(override) : this.getBuilderFactory();
20
+ }
21
+ /**
22
+ * Execute a metric query. Generates SQL, applies tenant/filter context, executes.
23
+ */
24
+ async run(metric, query = {}, context) {
25
+ assertMetricHandle(metric);
26
+ const validation = this.validate(metric, query, context);
27
+ if (!validation.valid) {
28
+ throw new Error(`Invalid metric query: ${validation.errors.join('; ')}`);
29
+ }
30
+ const start = Date.now();
31
+ return this.runViaBuilder(metric, query, context, start);
32
+ }
33
+ /**
34
+ * Generate SQL without executing.
35
+ */
36
+ toSQL(metric, query = {}, context) {
37
+ assertMetricHandle(metric);
38
+ const validation = this.validate(metric, query, context);
39
+ if (!validation.valid) {
40
+ throw new Error(`Invalid metric query: ${validation.errors.join('; ')}`);
41
+ }
42
+ const ref = getMetricRef(metric);
43
+ const grain = getMetricGrain(metric, query);
44
+ const spec = ref.spec;
45
+ if (spec.__type === 'derived_metric_spec') {
46
+ return buildDerivedMetricSql(ref, spec, query, grain, this.resolveBuilderFactory(context), context).sql;
47
+ }
48
+ const builder = buildMetricQueryBuilder(ref, spec, ref.dataset, query, grain, this.resolveBuilderFactory(context), context);
49
+ return builder.toSQLWithParams().sql;
50
+ }
51
+ /**
52
+ * Validate a metric query against the metric's contract.
53
+ */
54
+ validate(metric, query, context) {
55
+ assertMetricHandle(metric);
56
+ const queryValidation = validateMetricQueryInput(metric, query, context);
57
+ if (!queryValidation.valid) {
58
+ return queryValidation;
59
+ }
60
+ const ref = getMetricRef(metric);
61
+ const grain = getMetricGrain(metric, query);
62
+ try {
63
+ if (ref.spec.__type === 'derived_metric_spec') {
64
+ buildDerivedMetricSql(ref, ref.spec, query, grain, this.resolveBuilderFactory(context), context);
65
+ }
66
+ else {
67
+ buildMetricQueryBuilder(ref, ref.spec, ref.dataset, query, grain, this.resolveBuilderFactory(context), context).toSQLWithParams();
68
+ }
69
+ }
70
+ catch (error) {
71
+ return {
72
+ valid: false,
73
+ errors: [error instanceof Error ? error.message : String(error)],
74
+ };
75
+ }
76
+ return queryValidation;
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Query builder path
80
+ // ---------------------------------------------------------------------------
81
+ async runViaBuilder(metric, query, context, start) {
82
+ const ref = getMetricRef(metric);
83
+ const grain = getMetricGrain(metric, query);
84
+ const spec = ref.spec;
85
+ const activeBuilderFactory = this.resolveBuilderFactory(context);
86
+ // Over-fetch one row so we can report `hasMore` without a count query.
87
+ const buildQuery = { ...query, limit: overfetchLimit(query.limit) };
88
+ if (spec.__type === 'derived_metric_spec') {
89
+ // Derived metrics: build CTE via builder, outer query via string, execute via rawQuery
90
+ const { sql, params } = buildDerivedMetricSql(ref, spec, buildQuery, grain, activeBuilderFactory, context);
91
+ const rows = await activeBuilderFactory.rawQuery(sql, params, {
92
+ abortSignal: context?.abortSignal,
93
+ });
94
+ return toMetricQueryResult(rows, {
95
+ metric: ref.name, query, sql, timingMs: Date.now() - start, context,
96
+ });
97
+ }
98
+ // Base metrics: fully use the builder's execute()
99
+ const builder = buildMetricQueryBuilder(ref, spec, ref.dataset, buildQuery, grain, activeBuilderFactory, context);
100
+ const { sql } = builder.toSQLWithParams();
101
+ const rows = await builder.execute({ abortSignal: context?.abortSignal });
102
+ return toMetricQueryResult(rows, {
103
+ metric: ref.name, query, sql, timingMs: Date.now() - start, context,
104
+ });
105
+ }
106
+ }
@@ -15,6 +15,7 @@ export { PortableExecutionUnsupportedError, PortableExecutionBudgetError, Portab
15
15
  * `execute` slot.
16
16
  */
17
17
  import type { ProtocolDeploymentDataset, ProtocolSemanticInvocationResult, ProtocolSemanticQuery } from '@hypequery/protocol';
18
+ import type { DatasetCompilation, DatasetCompilationDescription } from './dataset-compilation.js';
18
19
  import type { QueryBuilderFactoryInput } from './query-builder-protocol.js';
19
20
  /** Ceilings the data plane already reduced to the most restrictive value. */
20
21
  export interface PortableSemanticBudget {
@@ -50,11 +51,24 @@ export interface PortableSemanticExecutorOptions {
50
51
  */
51
52
  readonly cacheRebuiltCatalogs?: boolean;
52
53
  }
53
- /**
54
- * Build the executor the deployment data plane injects.
55
- *
56
- * Returns the portable result record; the data plane validates it before it
57
- * reaches a caller.
58
- */
54
+ export interface PortableDatasetCompilation extends DatasetCompilation {
55
+ readonly activationRevision: string;
56
+ describe(): DatasetCompilationDescription & {
57
+ readonly activationRevision: string;
58
+ };
59
+ toJSON(): DatasetCompilationDescription & {
60
+ readonly activationRevision: string;
61
+ };
62
+ }
63
+ export interface PortableSemanticRuntime {
64
+ /** Trusted preview: the same catalog, tenant mapping and budgets as execute.
65
+ * The caller must enforce deployment access before calling either operation.
66
+ */
67
+ compile(input: PortableSemanticExecutionInput): PortableDatasetCompilation;
68
+ execute(input: PortableSemanticExecutionInput): Promise<ProtocolSemanticInvocationResult>;
69
+ }
70
+ /** Shared portable runtime for provider-side authoring preview and execution. */
71
+ export declare function createPortableSemanticRuntime(options: PortableSemanticExecutorOptions): PortableSemanticRuntime;
72
+ /** Backwards-compatible executor adapter for the deployment data plane. */
59
73
  export declare function createPortableSemanticExecutor(options: PortableSemanticExecutorOptions): (input: PortableSemanticExecutionInput) => Promise<ProtocolSemanticInvocationResult>;
60
74
  //# sourceMappingURL=portable-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portable-executor.d.ts","sourceRoot":"","sources":["../src/portable-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAK/I;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAA;KAAE,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAID;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,CAAC,KAAK,EAAE,8BAA8B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CA4EtF"}
1
+ {"version":3,"file":"portable-executor.d.ts","sourceRoot":"","sources":["../src/portable-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAK/I;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAQlG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAA;KAAE,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAID,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,IAAI,6BAA6B,GAAG;QAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IACpF,MAAM,IAAI,6BAA6B,GAAG;QAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;CACnF;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,8BAA8B,GAAG,0BAA0B,CAAC;IAC3E,OAAO,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;CAC3F;AAED,iFAAiF;AACjF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,+BAA+B,GACvC,uBAAuB,CAiGzB;AAED,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,CAAC,KAAK,EAAE,8BAA8B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAEtF"}
@@ -5,13 +5,8 @@ import { bounded } from './utils/portable-result-budget.js';
5
5
  import { withDeadline } from './utils/portable-execution-deadline.js';
6
6
  import { createDatasetClient } from './executor.js';
7
7
  import { rehydrateProtocolDatasets, UNSUPPORTED_CONTRACT_REASONS, UnsupportedContractFeatureError, } from './protocol-rehydrate.js';
8
- /**
9
- * Build the executor the deployment data plane injects.
10
- *
11
- * Returns the portable result record; the data plane validates it before it
12
- * reaches a caller.
13
- */
14
- export function createPortableSemanticExecutor(options) {
8
+ /** Shared portable runtime for provider-side authoring preview and execution. */
9
+ export function createPortableSemanticRuntime(options) {
15
10
  const client = createDatasetClient({ queryBuilder: options.queryBuilder });
16
11
  let memo;
17
12
  function registryFor(input) {
@@ -36,7 +31,7 @@ export function createPortableSemanticExecutor(options) {
36
31
  memo = { revision: input.activationRevision, registry };
37
32
  return registry;
38
33
  }
39
- return async function execute(input) {
34
+ function resolve(input) {
40
35
  const registry = registryFor(input);
41
36
  const rebuilt = registry[String(input.dataset.name)];
42
37
  if (rebuilt === undefined) {
@@ -55,9 +50,14 @@ export function createPortableSemanticExecutor(options) {
55
50
  + 'cannot be applied to it.');
56
51
  }
57
52
  const query = semanticQuery(input.operation, input.budget.maxRows);
53
+ const context = tenant === undefined ? {} : { runtime: { tenant } };
54
+ return { target, query, context };
55
+ }
56
+ async function execute(input) {
57
+ const { target, query, context } = resolve(input);
58
58
  const output = await withDeadline(input.budget, input.signal, async (signal) => (await client.execute(target, query, {
59
59
  abortSignal: signal,
60
- ...(tenant === undefined ? {} : { runtime: { tenant } }),
60
+ ...context,
61
61
  })));
62
62
  const rows = output.data ?? [];
63
63
  const pagination = output.meta?.pagination;
@@ -71,5 +71,25 @@ export function createPortableSemanticExecutor(options) {
71
71
  ...(pagination === undefined ? {} : { pagination }),
72
72
  },
73
73
  }), input.budget);
74
+ }
75
+ return {
76
+ compile(input) {
77
+ const { target, query, context } = resolve(input);
78
+ const compilation = client.compileDataset(target, query, context);
79
+ const description = Object.freeze({
80
+ ...compilation.describe(), activationRevision: input.activationRevision,
81
+ });
82
+ return Object.freeze({
83
+ ...compilation,
84
+ activationRevision: input.activationRevision,
85
+ describe: () => description,
86
+ toJSON: () => description,
87
+ });
88
+ },
89
+ execute,
74
90
  };
75
91
  }
92
+ /** Backwards-compatible executor adapter for the deployment data plane. */
93
+ export function createPortableSemanticExecutor(options) {
94
+ return createPortableSemanticRuntime(options).execute;
95
+ }
@@ -8,6 +8,7 @@
8
8
  *
9
9
  * This keeps @hypequery/serve DB-agnostic while enabling first-class builder usage.
10
10
  */
11
+ import type { DatasetSqlDialect } from './dataset-sql-dialect.js';
11
12
  /** A chainable query builder instance (what `.table(name)` returns). */
12
13
  export interface QueryBuilderLike {
13
14
  select(columns: string[] | string): QueryBuilderLike;
@@ -58,6 +59,8 @@ export interface QueryBuilderJoinCondition {
58
59
  }
59
60
  /** A query builder factory (what `createQueryBuilder(config)` returns). */
60
61
  export interface QueryBuilderFactoryLike {
62
+ /** Advanced datasets rendering hook. Omission preserves legacy ClickHouse SQL. */
63
+ readonly datasetSqlDialect?: DatasetSqlDialect;
61
64
  table(name: string): QueryBuilderLike;
62
65
  rawQuery<T = Record<string, unknown>>(sql: string, params?: unknown[], options?: {
63
66
  abortSignal?: AbortSignal;
@@ -74,6 +77,7 @@ export interface QueryBuilderFactoryLike {
74
77
  * schema-typed builders; entry points adapt with `toQueryBuilderFactory`.
75
78
  */
76
79
  export interface QueryBuilderFactoryCompatible {
80
+ readonly datasetSqlDialect?: DatasetSqlDialect;
77
81
  table(name: never): unknown;
78
82
  rawQuery(sql: string, params?: never): Promise<unknown>;
79
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder-protocol.d.ts","sourceRoot":"","sources":["../src/query-builder-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,gBAAgB,CAAC;IAGrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACxD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAChE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAGtD,kEAAkE;IAClE,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC7E,kEAAkE;IAClE,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC7E,+DAA+D;IAC/D,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC3E,6CAA6C;IAC7C,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC1D,mCAAmC;IACnC,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5D,gEAAgE;IAChE,mBAAmB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAGvE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAI1E,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,yBAAyB,GAAG,yBAAyB,EAAE,GAC3D,gBAAgB,CAAC;IAEpB;;;;;;OAMG;IACH,WAAW,CAAC,CACV,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,yBAAyB,GAAG,yBAAyB,EAAE,GAC3D,gBAAgB,CAAC;IAGpB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAGtD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,gBAAgB,CAAC;IACtE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAGxC,eAAe,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAC1D,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAC7F;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,2EAA2E;AAC3E,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,EAClB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GACtC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED,iEAAiE;AACjE,MAAM,MAAM,wBAAwB,GAChC,uBAAuB,GACvB,6BAA6B,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CAEzB"}
1
+ {"version":3,"file":"query-builder-protocol.d.ts","sourceRoot":"","sources":["../src/query-builder-protocol.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import type { MetricFilter, MetricOrderBy } from './types.js';
2
- export declare function eq<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue>;
3
- export declare function neq<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue>;
4
- export declare function gt<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue>;
5
- export declare function gte<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue>;
6
- export declare function lt<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue>;
7
- export declare function lte<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue>;
8
- export declare function inList<const TField extends string, const TValue>(field: TField, value: TValue[]): MetricFilter<TField, TValue[]>;
9
- export declare function notInList<const TField extends string, const TValue>(field: TField, value: TValue[]): MetricFilter<TField, TValue[]>;
10
- export declare function between<const TField extends string, const TLower, const TUpper>(field: TField, lower: TLower, upper: TUpper): MetricFilter<TField, [TLower, TUpper]>;
11
- export declare function like<const TField extends string>(field: TField, value: string): MetricFilter<TField, string>;
2
+ export declare function eq<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue, 'eq'>;
3
+ export declare function neq<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue, 'neq'>;
4
+ export declare function gt<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue, 'gt'>;
5
+ export declare function gte<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue, 'gte'>;
6
+ export declare function lt<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue, 'lt'>;
7
+ export declare function lte<const TField extends string, const TValue>(field: TField, value: TValue): MetricFilter<TField, TValue, 'lte'>;
8
+ export declare function inList<const TField extends string, const TValue>(field: TField, value: TValue[]): MetricFilter<TField, TValue[], 'in'>;
9
+ export declare function notInList<const TField extends string, const TValue>(field: TField, value: TValue[]): MetricFilter<TField, TValue[], 'notIn'>;
10
+ export declare function between<const TField extends string, const TLower, const TUpper>(field: TField, lower: TLower, upper: TUpper): MetricFilter<TField, [TLower, TUpper], 'between'>;
11
+ export declare function like<const TField extends string>(field: TField, value: string): MetricFilter<TField, string, 'like'>;
12
12
  export declare function asc<const TField extends string>(field: TField): MetricOrderBy<TField>;
13
13
  export declare function desc<const TField extends string>(field: TField): MetricOrderBy<TField>;
14
14
  export declare const filter: {
@@ -1 +1 @@
1
- {"version":3,"file":"query-helpers.d.ts","sourceRoot":"","sources":["../src/query-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU9D,wBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAExH;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzH;AAED,wBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAExH;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzH;AAED,wBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAExH;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzH;AAED,wBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAEhI;AAED,wBAAgB,SAAS,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAEnI;AAED,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEpK;AAED,wBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5G;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAErF;AAED,wBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAEtF;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;CAWT,CAAC;AAEX,eAAO,MAAM,KAAK;;;CAGR,CAAC"}
1
+ {"version":3,"file":"query-helpers.d.ts","sourceRoot":"","sources":["../src/query-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAE9H;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAEhI;AAED,wBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAE9H;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAEhI;AAED,wBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAE9H;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAEhI;AAED,wBAAgB,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAEtI;AAED,wBAAgB,SAAS,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAE5I;AAED,wBAAgB,OAAO,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAE/K;AAED,wBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEpH;AAED,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAErF;AAED,wBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAEtF;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;CAWT,CAAC;AAEX,eAAO,MAAM,KAAK;;;CAGR,CAAC"}
@@ -1,6 +1,4 @@
1
- function createFilter(field, operator, value) {
2
- return { field, operator, value };
3
- }
1
+ import { createFilter } from './utils/filter-definition.js';
4
2
  export function eq(field, value) {
5
3
  return createFilter(field, 'eq', value);
6
4
  }
@@ -1,16 +1,20 @@
1
1
  import type { AggregationSpec, AnyDatasetInstance, ExecutionContext, MeasureDefinition, MetricOrderBy, TimeGrain } from "./types.js";
2
2
  import type { QueryBuilderLike } from "./query-builder-protocol.js";
3
+ import type { DatasetSqlDialect } from './dataset-sql-dialect.js';
3
4
  import { type RelationshipBuilderContext } from './utils/relationship-builder-plan.js';
4
5
  type DatasetShape = AnyDatasetInstance;
5
6
  export declare function resolveDimensionExpression(ds: DatasetShape, dimensionName: string, joinCtx?: RelationshipBuilderContext): string;
6
7
  export declare function resolveFilterField(ds: DatasetShape, filterField: string, joinCtx?: RelationshipBuilderContext): string;
7
- export declare function buildDimensionSelectionPlan(ds: DatasetShape, dimensions: string[], grain: TimeGrain | undefined, joinCtx?: RelationshipBuilderContext, timezone?: string): {
8
+ export declare function buildDimensionSelectionPlan(ds: DatasetShape, dimensions: string[], grain: TimeGrain | undefined, joinCtx?: RelationshipBuilderContext, timezone?: string, dialect?: DatasetSqlDialect): {
8
9
  selectParts: string[];
9
10
  groupByParts: string[];
10
11
  };
11
- export declare function applyAggregationSpec(qb: QueryBuilderLike, ds: DatasetShape, spec: AggregationSpec, alias: string, joinCtx?: RelationshipBuilderContext): QueryBuilderLike;
12
+ export declare function applyAggregationSpec(qb: QueryBuilderLike, ds: DatasetShape, spec: AggregationSpec, alias: string, joinCtx?: RelationshipBuilderContext, expressions?: {
13
+ field: string;
14
+ arg?: string;
15
+ }): QueryBuilderLike;
12
16
  export declare function applyMeasureDefinition(qb: QueryBuilderLike, ds: DatasetShape, name: string, definition: MeasureDefinition, joinCtx?: RelationshipBuilderContext): QueryBuilderLike;
13
- export declare function appendOrderLimitOffset(qb: QueryBuilderLike, orderBy: MetricOrderBy[] | undefined, grain: TimeGrain | undefined, limit?: number, offset?: number, joinCtx?: RelationshipBuilderContext): QueryBuilderLike;
17
+ export declare function appendOrderLimitOffset(qb: QueryBuilderLike, orderBy: MetricOrderBy[] | undefined, grain: TimeGrain | undefined, limit?: number, offset?: number, joinCtx?: RelationshipBuilderContext, dialect?: DatasetSqlDialect): QueryBuilderLike;
14
18
  export declare function resolveTenantFilterColumn(ds: DatasetShape, context?: ExecutionContext): string | undefined;
15
19
  export {};
16
20
  //# sourceMappingURL=query-planner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-planner.d.ts","sourceRoot":"","sources":["../src/query-planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAMpE,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,sCAAsC,CAAC;AAI9C,KAAK,YAAY,GAAG,kBAAkB,CAAC;AAMvC,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,YAAY,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,0BAA0B,GACnC,MAAM,CAUR;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,0BAA0B,GACnC,MAAM,CAMR;AAED,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,0BAA0B,EACpC,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAmCnD;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,0BAA0B,GACnC,gBAAgB,CAqElB;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iBAAiB,EAC7B,OAAO,CAAC,EAAE,0BAA0B,GACnC,gBAAgB,CAElB;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,aAAa,EAAE,GAAG,SAAS,EACpC,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,0BAA0B,GACnC,gBAAgB,CAoBlB;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,YAAY,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAMpB"}
1
+ {"version":3,"file":"query-planner.d.ts","sourceRoot":"","sources":["../src/query-planner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAIpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,sCAAsC,CAAC;AAI9C,KAAK,YAAY,GAAG,kBAAkB,CAAC;AAEvC,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,YAAY,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,0BAA0B,GACnC,MAAM,CAUR;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,YAAY,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,0BAA0B,GACnC,MAAM,CAMR;AAED,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,0BAA0B,EACpC,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,iBAA+C,GACvD;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAmCnD;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,0BAA0B,EACpC,WAAW,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,gBAAgB,CAqElB;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iBAAiB,EAC7B,OAAO,CAAC,EAAE,0BAA0B,GACnC,gBAAgB,CAElB;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,aAAa,EAAE,GAAG,SAAS,EACpC,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,0BAA0B,EACpC,OAAO,GAAE,iBAA+C,GACvD,gBAAgB,CAoBlB;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,YAAY,EAChB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAMpB"}