drizzle-cube 0.4.30 → 0.4.31

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 (119) hide show
  1. package/dist/adapters/express/index.cjs +1 -1
  2. package/dist/adapters/express/index.d.ts +1 -1
  3. package/dist/adapters/express/index.js +7 -7
  4. package/dist/adapters/fastify/index.cjs +1 -1
  5. package/dist/adapters/fastify/index.d.ts +1 -1
  6. package/dist/adapters/fastify/index.js +7 -7
  7. package/dist/adapters/{handler-D-2-6uLM.js → handler-BiVT5Sa4.js} +4 -4
  8. package/dist/adapters/{handler-B8vuFQYP.cjs → handler-GLMhjuwG.cjs} +2 -2
  9. package/dist/adapters/hono/index.cjs +1 -1
  10. package/dist/adapters/hono/index.d.ts +1 -1
  11. package/dist/adapters/hono/index.js +3 -3
  12. package/dist/adapters/{mcp-transport-CuugoG8t.js → mcp-transport-Cs6gEFCi.js} +1254 -948
  13. package/dist/adapters/mcp-transport-nyTtswLM.cjs +254 -0
  14. package/dist/adapters/nextjs/index.cjs +1 -1
  15. package/dist/adapters/nextjs/index.d.ts +1 -1
  16. package/dist/adapters/nextjs/index.js +3 -3
  17. package/dist/adapters/{openai-DhLE0A9Z.cjs → openai-C5Brybjm.cjs} +1 -1
  18. package/dist/adapters/openai-D1zCEi6A.cjs +16 -0
  19. package/dist/adapters/{openai-CjBvA6mK.js → openai-DPuFtYsB.js} +659 -637
  20. package/dist/adapters/{openai-Zjw4Zo4R.js → openai-wU05wYGL.js} +1 -1
  21. package/dist/adapters/{utils-ChhNGUOF.js → utils-Dj1adfDc.js} +6 -3
  22. package/dist/adapters/{utils-CwJplXR5.cjs → utils-cb6OWP7J.cjs} +1 -1
  23. package/dist/adapters/utils.cjs +1 -1
  24. package/dist/adapters/utils.d.ts +1 -1
  25. package/dist/adapters/utils.js +1 -1
  26. package/dist/client/charts.js +13 -13
  27. package/dist/client/chunks/{DashboardEditModal-C076pscL.js → DashboardEditModal-DenRJiYr.js} +11 -11
  28. package/dist/client/chunks/{DashboardEditModal-C076pscL.js.map → DashboardEditModal-DenRJiYr.js.map} +1 -1
  29. package/dist/client/chunks/{FieldSearchModal-C0DjSWk3.js → FieldSearchModal-BQS1v1up.js} +3 -3
  30. package/dist/client/chunks/{FieldSearchModal-C0DjSWk3.js.map → FieldSearchModal-BQS1v1up.js.map} +1 -1
  31. package/dist/client/chunks/{RetentionCombinedChart-DuGXc-AP.js → RetentionCombinedChart-D4Yf1TnQ.js} +3 -3
  32. package/dist/client/chunks/{RetentionCombinedChart-DuGXc-AP.js.map → RetentionCombinedChart-D4Yf1TnQ.js.map} +1 -1
  33. package/dist/client/chunks/{analysis-builder-DF0XntqC.js → analysis-builder-DG38V1gO.js} +14 -20
  34. package/dist/client/chunks/{analysis-builder-DF0XntqC.js.map → analysis-builder-DG38V1gO.js.map} +1 -1
  35. package/dist/client/chunks/{analysis-builder-shared-2QhKYbs6.js → analysis-builder-shared-DaFu78dk.js} +19 -17
  36. package/dist/client/chunks/analysis-builder-shared-DaFu78dk.js.map +1 -0
  37. package/dist/client/chunks/{chart-activity-grid-CNES9VBk.js → chart-activity-grid-wR2Twpo7.js} +9 -6
  38. package/dist/client/chunks/chart-activity-grid-wR2Twpo7.js.map +1 -0
  39. package/dist/client/chunks/{chart-area-CRJc3KOu.js → chart-area-e9ysnatQ.js} +2 -2
  40. package/dist/client/chunks/{chart-area-CRJc3KOu.js.map → chart-area-e9ysnatQ.js.map} +1 -1
  41. package/dist/client/chunks/{chart-bar-DD2PjJ5n.js → chart-bar-Bx4oKlqo.js} +3 -3
  42. package/dist/client/chunks/{chart-bar-DD2PjJ5n.js.map → chart-bar-Bx4oKlqo.js.map} +1 -1
  43. package/dist/client/chunks/{chart-box-plot-BcqleldJ.js → chart-box-plot-CVIi1aM5.js} +2 -2
  44. package/dist/client/chunks/{chart-box-plot-BcqleldJ.js.map → chart-box-plot-CVIi1aM5.js.map} +1 -1
  45. package/dist/client/chunks/{chart-bubble-BmQkVk4K.js → chart-bubble-DvyG15UB.js} +2 -2
  46. package/dist/client/chunks/{chart-bubble-BmQkVk4K.js.map → chart-bubble-DvyG15UB.js.map} +1 -1
  47. package/dist/client/chunks/{chart-candlestick-C3Rep469.js → chart-candlestick-caHyxB9O.js} +2 -2
  48. package/dist/client/chunks/{chart-candlestick-C3Rep469.js.map → chart-candlestick-caHyxB9O.js.map} +1 -1
  49. package/dist/client/chunks/{chart-data-table-DehW1C1G.js → chart-data-table-B2m_6EZe.js} +2 -2
  50. package/dist/client/chunks/{chart-data-table-DehW1C1G.js.map → chart-data-table-B2m_6EZe.js.map} +1 -1
  51. package/dist/client/chunks/{chart-funnel-BjkpnG5g.js → chart-funnel-C9JRW79j.js} +2 -2
  52. package/dist/client/chunks/{chart-funnel-BjkpnG5g.js.map → chart-funnel-C9JRW79j.js.map} +1 -1
  53. package/dist/client/chunks/{chart-gauge-BWW_HEfg.js → chart-gauge-BLLJqeXo.js} +2 -2
  54. package/dist/client/chunks/{chart-gauge-BWW_HEfg.js.map → chart-gauge-BLLJqeXo.js.map} +1 -1
  55. package/dist/client/chunks/{chart-heat-map-BWuOuDcm.js → chart-heat-map-f2fM2mDC.js} +2 -2
  56. package/dist/client/chunks/{chart-heat-map-BWuOuDcm.js.map → chart-heat-map-f2fM2mDC.js.map} +1 -1
  57. package/dist/client/chunks/{chart-kpi-delta-D5OHtDJx.js → chart-kpi-delta-S6qDEoJO.js} +3 -3
  58. package/dist/client/chunks/{chart-kpi-delta-D5OHtDJx.js.map → chart-kpi-delta-S6qDEoJO.js.map} +1 -1
  59. package/dist/client/chunks/{chart-kpi-number-C9zH-aKC.js → chart-kpi-number-CEUBsVW2.js} +5 -5
  60. package/dist/client/chunks/{chart-kpi-number-C9zH-aKC.js.map → chart-kpi-number-CEUBsVW2.js.map} +1 -1
  61. package/dist/client/chunks/{chart-kpi-text-ChVn3S7j.js → chart-kpi-text-DgRig_jQ.js} +3 -3
  62. package/dist/client/chunks/{chart-kpi-text-ChVn3S7j.js.map → chart-kpi-text-DgRig_jQ.js.map} +1 -1
  63. package/dist/client/chunks/{chart-line-DOIMkP0b.js → chart-line-CPhQRMZ7.js} +4 -3
  64. package/dist/client/chunks/chart-line-CPhQRMZ7.js.map +1 -0
  65. package/dist/client/chunks/{chart-measure-profile-C6wrr9il.js → chart-measure-profile-CVlqGslU.js} +3 -3
  66. package/dist/client/chunks/{chart-measure-profile-C6wrr9il.js.map → chart-measure-profile-CVlqGslU.js.map} +1 -1
  67. package/dist/client/chunks/{chart-pie-BU_FgwDc.js → chart-pie-DafSc9sE.js} +3 -3
  68. package/dist/client/chunks/{chart-pie-BU_FgwDc.js.map → chart-pie-DafSc9sE.js.map} +1 -1
  69. package/dist/client/chunks/{chart-radar-DlufwnAX.js → chart-radar-Dz9F5k-B.js} +3 -3
  70. package/dist/client/chunks/{chart-radar-DlufwnAX.js.map → chart-radar-Dz9F5k-B.js.map} +1 -1
  71. package/dist/client/chunks/{chart-radial-bar-B5vS_Aw5.js → chart-radial-bar-N3MNUL7o.js} +3 -3
  72. package/dist/client/chunks/{chart-radial-bar-B5vS_Aw5.js.map → chart-radial-bar-N3MNUL7o.js.map} +1 -1
  73. package/dist/client/chunks/{chart-sankey-FChb26UX.js → chart-sankey-8nRYnupt.js} +2 -2
  74. package/dist/client/chunks/{chart-sankey-FChb26UX.js.map → chart-sankey-8nRYnupt.js.map} +1 -1
  75. package/dist/client/chunks/{chart-scatter-DW0cAZ2H.js → chart-scatter-J2JNi88S.js} +3 -3
  76. package/dist/client/chunks/{chart-scatter-DW0cAZ2H.js.map → chart-scatter-J2JNi88S.js.map} +1 -1
  77. package/dist/client/chunks/{chart-sunburst-Clf-6WxW.js → chart-sunburst-D1NFQjqk.js} +3 -3
  78. package/dist/client/chunks/{chart-sunburst-Clf-6WxW.js.map → chart-sunburst-D1NFQjqk.js.map} +1 -1
  79. package/dist/client/chunks/{chart-tree-map-p_VwUJPF.js → chart-tree-map-CbYjko2s.js} +3 -3
  80. package/dist/client/chunks/{chart-tree-map-p_VwUJPF.js.map → chart-tree-map-CbYjko2s.js.map} +1 -1
  81. package/dist/client/chunks/{chart-waterfall-jt44IQ-w.js → chart-waterfall-Z65TGMUO.js} +3 -3
  82. package/dist/client/chunks/{chart-waterfall-jt44IQ-w.js.map → chart-waterfall-Z65TGMUO.js.map} +1 -1
  83. package/dist/client/chunks/{charts-core-CUVzf4cV.js → charts-core-CJlGzwsW.js} +2 -2
  84. package/dist/client/chunks/{charts-core-CUVzf4cV.js.map → charts-core-CJlGzwsW.js.map} +1 -1
  85. package/dist/client/chunks/{charts-loader-AGpph8_I.js → charts-loader-BI07yxaQ.js} +25 -25
  86. package/dist/client/chunks/{charts-loader-AGpph8_I.js.map → charts-loader-BI07yxaQ.js.map} +1 -1
  87. package/dist/client/chunks/{schema-visualization-ZugB4Io9.js → schema-visualization-DPL5_Tkh.js} +2 -2
  88. package/dist/client/chunks/{schema-visualization-ZugB4Io9.js.map → schema-visualization-DPL5_Tkh.js.map} +1 -1
  89. package/dist/client/chunks/{useDebounce-BQjNWndQ.js → useDebounce-DkuM7nQk.js} +4 -4
  90. package/dist/client/chunks/{useDebounce-BQjNWndQ.js.map → useDebounce-DkuM7nQk.js.map} +1 -1
  91. package/dist/client/chunks/{useExplainAI-c_bHxZe5.js → useExplainAI-RflLTDVL.js} +7 -7
  92. package/dist/client/chunks/useExplainAI-RflLTDVL.js.map +1 -0
  93. package/dist/client/chunks/{utils-A54Ny29G.js → utils--32ZtfbZ.js} +2 -2
  94. package/dist/client/chunks/{utils-A54Ny29G.js.map → utils--32ZtfbZ.js.map} +1 -1
  95. package/dist/client/chunks/{vendor-CoPBRumI.js → vendor-CZX7UVzM.js} +2 -2
  96. package/dist/client/chunks/{vendor-CoPBRumI.js.map → vendor-CZX7UVzM.js.map} +1 -1
  97. package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +0 -1
  98. package/dist/client/components.js +3 -3
  99. package/dist/client/hooks.js +3 -3
  100. package/dist/client/icons.js +1 -1
  101. package/dist/client/index.js +15 -15
  102. package/dist/client/providers.js +1 -1
  103. package/dist/client/utils.js +5 -5
  104. package/dist/client-bundle-stats.html +1 -1
  105. package/dist/server/index.cjs +41 -40
  106. package/dist/server/index.d.ts +43 -9
  107. package/dist/server/index.js +1421 -1112
  108. package/dist/server/openai-CucrxPHM.cjs +16 -0
  109. package/dist/server/{openai-CLsoLaue.cjs → openai-DiyuZ3ds.cjs} +1 -1
  110. package/dist/server/{openai-BPhmb8mi.js → openai-nZJcAzON.js} +659 -637
  111. package/dist/server/{openai-D1kZ5sdM.js → openai-owPdq1yN.js} +1 -1
  112. package/package.json +14 -4
  113. package/dist/adapters/mcp-transport-Dpp6hdZe.cjs +0 -253
  114. package/dist/adapters/openai-eJBw3LfQ.cjs +0 -16
  115. package/dist/client/chunks/analysis-builder-shared-2QhKYbs6.js.map +0 -1
  116. package/dist/client/chunks/chart-activity-grid-CNES9VBk.js.map +0 -1
  117. package/dist/client/chunks/chart-line-DOIMkP0b.js.map +0 -1
  118. package/dist/client/chunks/useExplainAI-c_bHxZe5.js.map +0 -1
  119. package/dist/server/openai-DkOKbVLC.cjs +0 -16
@@ -1,4 +1,4 @@
1
- import { c as e, d as t, h as n, p as r, s as i } from "./utils-ChhNGUOF.js";
1
+ import { c as e, d as t, h as n, p as r, s as i } from "./utils-Dj1adfDc.js";
2
2
  import { a } from "./mcp-prompts-BAutSQYA.js";
3
3
  //#region node_modules/drizzle-orm/entity.js
4
4
  var o = Symbol.for("drizzle:entityKind");
@@ -196,7 +196,7 @@ var y = class extends l {
196
196
  foreignKeyConfigs = [];
197
197
  static [o] = "PgColumnBuilder";
198
198
  array(e) {
199
- return new ee(this.config.name, this, e);
199
+ return new S(this.config.name, this, e);
200
200
  }
201
201
  references(e, t = {}) {
202
202
  return this.foreignKeyConfigs.push({
@@ -264,16 +264,16 @@ var y = class extends l {
264
264
  op(e) {
265
265
  return this.indexConfig.opClass = e, this;
266
266
  }
267
- }, ee = class extends y {
267
+ }, S = class extends y {
268
268
  static [o] = "PgArrayBuilder";
269
269
  constructor(e, t, n) {
270
270
  super(e, "array", "PgArray"), this.config.baseBuilder = t, this.config.size = n;
271
271
  }
272
272
  build(e) {
273
273
  let t = this.config.baseBuilder.build(e);
274
- return new te(e, this.config, t);
274
+ return new ee(e, this.config, t);
275
275
  }
276
- }, te = class e extends b {
276
+ }, ee = class e extends b {
277
277
  constructor(e, t, n, r) {
278
278
  super(e, t), this.baseColumn = n, this.range = r, this.size = t.size;
279
279
  }
@@ -289,11 +289,11 @@ var y = class extends l {
289
289
  let r = t.map((t) => t === null ? null : s(this.baseColumn, e) ? this.baseColumn.mapToDriverValue(t, !0) : this.baseColumn.mapToDriverValue(t));
290
290
  return n ? r : v(r);
291
291
  }
292
- }, S = Symbol.for("drizzle:isPgEnum");
293
- function C(e) {
294
- return !!e && typeof e == "function" && S in e && e[S] === !0;
292
+ }, C = Symbol.for("drizzle:isPgEnum");
293
+ function w(e) {
294
+ return !!e && typeof e == "function" && C in e && e[C] === !0;
295
295
  }
296
- var w = class {
296
+ var T = class {
297
297
  static [o] = "Subquery";
298
298
  constructor(e, t, n, r = !1, i = []) {
299
299
  this._ = {
@@ -305,37 +305,37 @@ var w = class {
305
305
  usedTables: i
306
306
  };
307
307
  }
308
- }, ne = { startActiveSpan(e, t) {
308
+ }, te = { startActiveSpan(e, t) {
309
309
  return t();
310
- } }, T = Symbol.for("drizzle:ViewBaseConfig"), E = Symbol.for("drizzle:Schema"), D = Symbol.for("drizzle:Columns"), re = Symbol.for("drizzle:ExtraConfigColumns"), O = Symbol.for("drizzle:OriginalName"), k = Symbol.for("drizzle:BaseName"), ie = Symbol.for("drizzle:IsAlias"), ae = Symbol.for("drizzle:ExtraConfigBuilder"), oe = Symbol.for("drizzle:IsDrizzleTable"), A = class {
310
+ } }, E = Symbol.for("drizzle:ViewBaseConfig"), D = Symbol.for("drizzle:Schema"), O = Symbol.for("drizzle:Columns"), ne = Symbol.for("drizzle:ExtraConfigColumns"), k = Symbol.for("drizzle:OriginalName"), A = Symbol.for("drizzle:BaseName"), re = Symbol.for("drizzle:IsAlias"), ie = Symbol.for("drizzle:ExtraConfigBuilder"), ae = Symbol.for("drizzle:IsDrizzleTable"), j = class {
311
311
  static [o] = "Table";
312
312
  static Symbol = {
313
313
  Name: u,
314
- Schema: E,
315
- OriginalName: O,
316
- Columns: D,
317
- ExtraConfigColumns: re,
318
- BaseName: k,
319
- IsAlias: ie,
320
- ExtraConfigBuilder: ae
314
+ Schema: D,
315
+ OriginalName: k,
316
+ Columns: O,
317
+ ExtraConfigColumns: ne,
318
+ BaseName: A,
319
+ IsAlias: re,
320
+ ExtraConfigBuilder: ie
321
321
  };
322
322
  [u];
323
- [O];
324
- [E];
325
- [D];
326
- [re];
327
323
  [k];
328
- [ie] = !1;
329
- [oe] = !0;
330
- [ae] = void 0;
324
+ [D];
325
+ [O];
326
+ [ne];
327
+ [A];
328
+ [re] = !1;
329
+ [ae] = !0;
330
+ [ie] = void 0;
331
331
  constructor(e, t, n) {
332
- this[u] = this[O] = e, this[E] = t, this[k] = n;
332
+ this[u] = this[k] = e, this[D] = t, this[A] = n;
333
333
  }
334
334
  };
335
- function se(e) {
335
+ function oe(e) {
336
336
  return e != null && typeof e.getSQL == "function";
337
337
  }
338
- function ce(e) {
338
+ function se(e) {
339
339
  let t = {
340
340
  sql: "",
341
341
  params: []
@@ -343,32 +343,32 @@ function ce(e) {
343
343
  for (let n of e) t.sql += n.sql, t.params.push(...n.params), n.typings?.length && (t.typings ||= [], t.typings.push(...n.typings));
344
344
  return t;
345
345
  }
346
- var j = class {
346
+ var M = class {
347
347
  static [o] = "StringChunk";
348
348
  value;
349
349
  constructor(e) {
350
350
  this.value = Array.isArray(e) ? e : [e];
351
351
  }
352
352
  getSQL() {
353
- return new M([this]);
353
+ return new N([this]);
354
354
  }
355
- }, M = class e {
355
+ }, N = class e {
356
356
  constructor(e) {
357
357
  this.queryChunks = e;
358
- for (let t of e) if (s(t, A)) {
359
- let e = t[A.Symbol.Schema];
360
- this.usedTables.push(e === void 0 ? t[A.Symbol.Name] : e + "." + t[A.Symbol.Name]);
358
+ for (let t of e) if (s(t, j)) {
359
+ let e = t[j.Symbol.Schema];
360
+ this.usedTables.push(e === void 0 ? t[j.Symbol.Name] : e + "." + t[j.Symbol.Name]);
361
361
  }
362
362
  }
363
363
  static [o] = "SQL";
364
- decoder = de;
364
+ decoder = ue;
365
365
  shouldInlineParams = !1;
366
366
  usedTables = [];
367
367
  append(e) {
368
368
  return this.queryChunks.push(...e.queryChunks), this;
369
369
  }
370
370
  toQuery(e) {
371
- return ne.startActiveSpan("drizzle.buildSQL", (t) => {
371
+ return te.startActiveSpan("drizzle.buildSQL", (t) => {
372
372
  let n = this.buildQueryFromSourceParams(this.queryChunks, e);
373
373
  return t?.setAttributes({
374
374
  "drizzle.query.text": n.sql,
@@ -381,12 +381,12 @@ var j = class {
381
381
  inlineParams: n.inlineParams || this.shouldInlineParams,
382
382
  paramStartIndex: n.paramStartIndex || { value: 0 }
383
383
  }), { casing: i, escapeName: a, escapeParam: o, prepareTyping: l, inlineParams: u, paramStartIndex: d } = r;
384
- return ce(t.map((t) => {
385
- if (s(t, j)) return {
384
+ return se(t.map((t) => {
385
+ if (s(t, M)) return {
386
386
  sql: t.value.join(""),
387
387
  params: []
388
388
  };
389
- if (s(t, le)) return {
389
+ if (s(t, ce)) return {
390
390
  sql: a(t.value),
391
391
  params: []
392
392
  };
@@ -395,18 +395,18 @@ var j = class {
395
395
  params: []
396
396
  };
397
397
  if (Array.isArray(t)) {
398
- let e = [new j("(")];
399
- for (let [n, r] of t.entries()) e.push(r), n < t.length - 1 && e.push(new j(", "));
400
- return e.push(new j(")")), this.buildQueryFromSourceParams(e, r);
398
+ let e = [new M("(")];
399
+ for (let [n, r] of t.entries()) e.push(r), n < t.length - 1 && e.push(new M(", "));
400
+ return e.push(new M(")")), this.buildQueryFromSourceParams(e, r);
401
401
  }
402
402
  if (s(t, e)) return this.buildQueryFromSourceParams(t.queryChunks, {
403
403
  ...r,
404
404
  inlineParams: u || t.shouldInlineParams
405
405
  });
406
- if (s(t, A)) {
407
- let e = t[A.Symbol.Schema], n = t[A.Symbol.Name];
406
+ if (s(t, j)) {
407
+ let e = t[j.Symbol.Schema], n = t[j.Symbol.Name];
408
408
  return {
409
- sql: e === void 0 || t[ie] ? a(n) : a(e) + "." + a(n),
409
+ sql: e === void 0 || t[re] ? a(n) : a(e) + "." + a(n),
410
410
  params: []
411
411
  };
412
412
  }
@@ -416,21 +416,21 @@ var j = class {
416
416
  sql: a(e),
417
417
  params: []
418
418
  };
419
- let r = t.table[A.Symbol.Schema];
419
+ let r = t.table[j.Symbol.Schema];
420
420
  return {
421
- sql: t.table[ie] || r === void 0 ? a(t.table[A.Symbol.Name]) + "." + a(e) : a(r) + "." + a(t.table[A.Symbol.Name]) + "." + a(e),
421
+ sql: t.table[re] || r === void 0 ? a(t.table[j.Symbol.Name]) + "." + a(e) : a(r) + "." + a(t.table[j.Symbol.Name]) + "." + a(e),
422
422
  params: []
423
423
  };
424
424
  }
425
- if (s(t, he)) {
426
- let e = t[T].schema, n = t[T].name;
425
+ if (s(t, me)) {
426
+ let e = t[E].schema, n = t[E].name;
427
427
  return {
428
- sql: e === void 0 || t[T].isAlias ? a(n) : a(e) + "." + a(n),
428
+ sql: e === void 0 || t[E].isAlias ? a(n) : a(e) + "." + a(n),
429
429
  params: []
430
430
  };
431
431
  }
432
- if (s(t, pe)) {
433
- if (s(t.value, P)) return {
432
+ if (s(t, P)) {
433
+ if (s(t.value, fe)) return {
434
434
  sql: o(d.value++, t),
435
435
  params: [t],
436
436
  typings: ["none"]
@@ -448,31 +448,31 @@ var j = class {
448
448
  typings: i
449
449
  };
450
450
  }
451
- return s(t, P) ? {
451
+ return s(t, fe) ? {
452
452
  sql: o(d.value++, t),
453
453
  params: [t],
454
454
  typings: ["none"]
455
455
  } : s(t, e.Aliased) && t.fieldAlias !== void 0 ? {
456
456
  sql: a(t.fieldAlias),
457
457
  params: []
458
- } : s(t, w) ? t._.isWith ? {
458
+ } : s(t, T) ? t._.isWith ? {
459
459
  sql: a(t._.alias),
460
460
  params: []
461
461
  } : this.buildQueryFromSourceParams([
462
- new j("("),
462
+ new M("("),
463
463
  t._.sql,
464
- new j(") "),
465
- new le(t._.alias)
466
- ], r) : C(t) ? t.schema ? {
464
+ new M(") "),
465
+ new ce(t._.alias)
466
+ ], r) : w(t) ? t.schema ? {
467
467
  sql: a(t.schema) + "." + a(t.enumName),
468
468
  params: []
469
469
  } : {
470
470
  sql: a(t.enumName),
471
471
  params: []
472
- } : se(t) ? t.shouldOmitSQLParens?.() ? this.buildQueryFromSourceParams([t.getSQL()], r) : this.buildQueryFromSourceParams([
473
- new j("("),
472
+ } : oe(t) ? t.shouldOmitSQLParens?.() ? this.buildQueryFromSourceParams([t.getSQL()], r) : this.buildQueryFromSourceParams([
473
+ new M("("),
474
474
  t.getSQL(),
475
- new j(")")
475
+ new M(")")
476
476
  ], r) : u ? {
477
477
  sql: this.mapInlineParam(t, r),
478
478
  params: []
@@ -508,72 +508,72 @@ var j = class {
508
508
  if(e) {
509
509
  return e ? this : void 0;
510
510
  }
511
- }, le = class {
511
+ }, ce = class {
512
512
  constructor(e) {
513
513
  this.value = e;
514
514
  }
515
515
  static [o] = "Name";
516
516
  brand;
517
517
  getSQL() {
518
- return new M([this]);
518
+ return new N([this]);
519
519
  }
520
520
  };
521
- function ue(e) {
521
+ function le(e) {
522
522
  return typeof e == "object" && !!e && "mapToDriverValue" in e && typeof e.mapToDriverValue == "function";
523
523
  }
524
- var de = { mapFromDriverValue: (e) => e }, fe = { mapToDriverValue: (e) => e };
524
+ var ue = { mapFromDriverValue: (e) => e }, de = { mapToDriverValue: (e) => e };
525
525
  ({
526
- ...de,
527
- ...fe
526
+ ...ue,
527
+ ...de
528
528
  });
529
- var pe = class {
530
- constructor(e, t = fe) {
529
+ var P = class {
530
+ constructor(e, t = de) {
531
531
  this.value = e, this.encoder = t;
532
532
  }
533
533
  static [o] = "Param";
534
534
  brand;
535
535
  getSQL() {
536
- return new M([this]);
536
+ return new N([this]);
537
537
  }
538
538
  };
539
- function N(e, ...t) {
539
+ function F(e, ...t) {
540
540
  let n = [];
541
- (t.length > 0 || e.length > 0 && e[0] !== "") && n.push(new j(e[0]));
542
- for (let [r, i] of t.entries()) n.push(i, new j(e[r + 1]));
543
- return new M(n);
541
+ (t.length > 0 || e.length > 0 && e[0] !== "") && n.push(new M(e[0]));
542
+ for (let [r, i] of t.entries()) n.push(i, new M(e[r + 1]));
543
+ return new N(n);
544
544
  }
545
545
  ((e) => {
546
546
  function t() {
547
- return new M([]);
547
+ return new N([]);
548
548
  }
549
549
  e.empty = t;
550
550
  function n(e) {
551
- return new M(e);
551
+ return new N(e);
552
552
  }
553
553
  e.fromList = n;
554
554
  function r(e) {
555
- return new M([new j(e)]);
555
+ return new N([new M(e)]);
556
556
  }
557
557
  e.raw = r;
558
558
  function i(e, t) {
559
559
  let n = [];
560
560
  for (let [r, i] of e.entries()) r > 0 && t !== void 0 && n.push(t), n.push(i);
561
- return new M(n);
561
+ return new N(n);
562
562
  }
563
563
  e.join = i;
564
564
  function a(e) {
565
- return new le(e);
565
+ return new ce(e);
566
566
  }
567
567
  e.identifier = a;
568
568
  function o(e) {
569
- return new P(e);
569
+ return new fe(e);
570
570
  }
571
571
  e.placeholder = o;
572
572
  function s(e, t) {
573
- return new pe(e, t);
573
+ return new P(e, t);
574
574
  }
575
575
  e.param = s;
576
- })(N ||= {}), ((e) => {
576
+ })(F ||= {}), ((e) => {
577
577
  class t {
578
578
  constructor(e, t) {
579
579
  this.sql = e, this.fieldAlias = t;
@@ -588,21 +588,21 @@ function N(e, ...t) {
588
588
  }
589
589
  }
590
590
  e.Aliased = t;
591
- })(M ||= {});
592
- var P = class {
591
+ })(N ||= {});
592
+ var fe = class {
593
593
  constructor(e) {
594
594
  this.name = e;
595
595
  }
596
596
  static [o] = "Placeholder";
597
597
  getSQL() {
598
- return new M([this]);
598
+ return new N([this]);
599
599
  }
600
- }, me = Symbol.for("drizzle:IsDrizzleView"), he = class {
600
+ }, pe = Symbol.for("drizzle:IsDrizzleView"), me = class {
601
601
  static [o] = "View";
602
- [T];
603
- [me] = !0;
602
+ [E];
603
+ [pe] = !0;
604
604
  constructor({ name: e, schema: t, selectedFields: n, query: r }) {
605
- this[T] = {
605
+ this[E] = {
606
606
  name: e,
607
607
  originalName: e,
608
608
  schema: t,
@@ -613,96 +613,96 @@ var P = class {
613
613
  };
614
614
  }
615
615
  getSQL() {
616
- return new M([this]);
616
+ return new N([this]);
617
617
  }
618
618
  };
619
619
  c.prototype.getSQL = function() {
620
- return new M([this]);
621
- }, A.prototype.getSQL = function() {
622
- return new M([this]);
623
- }, w.prototype.getSQL = function() {
624
- return new M([this]);
620
+ return new N([this]);
621
+ }, j.prototype.getSQL = function() {
622
+ return new N([this]);
623
+ }, T.prototype.getSQL = function() {
624
+ return new N([this]);
625
625
  };
626
626
  //#endregion
627
627
  //#region node_modules/drizzle-orm/sql/expressions/conditions.js
628
- function F(e, t) {
629
- return ue(t) && !se(e) && !s(e, pe) && !s(e, P) && !s(e, c) && !s(e, A) && !s(e, he) ? new pe(e, t) : e;
628
+ function I(e, t) {
629
+ return le(t) && !oe(e) && !s(e, P) && !s(e, fe) && !s(e, c) && !s(e, j) && !s(e, me) ? new P(e, t) : e;
630
630
  }
631
- var I = (e, t) => N`${e} = ${F(t, e)}`, ge = (e, t) => N`${e} <> ${F(t, e)}`;
632
- function L(...e) {
631
+ var L = (e, t) => F`${e} = ${I(t, e)}`, he = (e, t) => F`${e} <> ${I(t, e)}`;
632
+ function R(...e) {
633
633
  let t = e.filter((e) => e !== void 0);
634
- if (t.length !== 0) return t.length === 1 ? new M(t) : new M([
635
- new j("("),
636
- N.join(t, new j(" and ")),
637
- new j(")")
634
+ if (t.length !== 0) return t.length === 1 ? new N(t) : new N([
635
+ new M("("),
636
+ F.join(t, new M(" and ")),
637
+ new M(")")
638
638
  ]);
639
639
  }
640
- function _e(...e) {
640
+ function ge(...e) {
641
641
  let t = e.filter((e) => e !== void 0);
642
- if (t.length !== 0) return t.length === 1 ? new M(t) : new M([
643
- new j("("),
644
- N.join(t, new j(" or ")),
645
- new j(")")
642
+ if (t.length !== 0) return t.length === 1 ? new N(t) : new N([
643
+ new M("("),
644
+ F.join(t, new M(" or ")),
645
+ new M(")")
646
646
  ]);
647
647
  }
648
- var ve = (e, t) => N`${e} > ${F(t, e)}`, R = (e, t) => N`${e} >= ${F(t, e)}`, ye = (e, t) => N`${e} < ${F(t, e)}`, z = (e, t) => N`${e} <= ${F(t, e)}`;
648
+ var _e = (e, t) => F`${e} > ${I(t, e)}`, z = (e, t) => F`${e} >= ${I(t, e)}`, ve = (e, t) => F`${e} < ${I(t, e)}`, B = (e, t) => F`${e} <= ${I(t, e)}`;
649
+ function ye(e, t) {
650
+ return Array.isArray(t) ? t.length === 0 ? F`false` : F`${e} in ${t.map((t) => I(t, e))}` : F`${e} in ${I(t, e)}`;
651
+ }
649
652
  function be(e, t) {
650
- return Array.isArray(t) ? t.length === 0 ? N`false` : N`${e} in ${t.map((t) => F(t, e))}` : N`${e} in ${F(t, e)}`;
653
+ return Array.isArray(t) ? t.length === 0 ? F`true` : F`${e} not in ${t.map((t) => I(t, e))}` : F`${e} not in ${I(t, e)}`;
651
654
  }
652
- function xe(e, t) {
653
- return Array.isArray(t) ? t.length === 0 ? N`true` : N`${e} not in ${t.map((t) => F(t, e))}` : N`${e} not in ${F(t, e)}`;
655
+ function xe(e) {
656
+ return F`${e} is null`;
654
657
  }
655
658
  function Se(e) {
656
- return N`${e} is null`;
657
- }
658
- function Ce(e) {
659
- return N`${e} is not null`;
659
+ return F`${e} is not null`;
660
660
  }
661
- function we(e, t) {
661
+ function Ce(e, t) {
662
662
  if (Array.isArray(t)) {
663
663
  if (t.length === 0) throw Error("arrayContains requires at least one value");
664
- return N`${e} @> ${N`${F(t, e)}`}`;
664
+ return F`${e} @> ${F`${I(t, e)}`}`;
665
665
  }
666
- return N`${e} @> ${F(t, e)}`;
666
+ return F`${e} @> ${I(t, e)}`;
667
667
  }
668
- function Te(e, t) {
668
+ function we(e, t) {
669
669
  if (Array.isArray(t)) {
670
670
  if (t.length === 0) throw Error("arrayContained requires at least one value");
671
- return N`${e} <@ ${N`${F(t, e)}`}`;
671
+ return F`${e} <@ ${F`${I(t, e)}`}`;
672
672
  }
673
- return N`${e} <@ ${F(t, e)}`;
673
+ return F`${e} <@ ${I(t, e)}`;
674
674
  }
675
- function Ee(e, t) {
675
+ function Te(e, t) {
676
676
  if (Array.isArray(t)) {
677
677
  if (t.length === 0) throw Error("arrayOverlaps requires at least one value");
678
- return N`${e} && ${N`${F(t, e)}`}`;
678
+ return F`${e} && ${F`${I(t, e)}`}`;
679
679
  }
680
- return N`${e} && ${F(t, e)}`;
680
+ return F`${e} && ${I(t, e)}`;
681
681
  }
682
682
  //#endregion
683
683
  //#region node_modules/drizzle-orm/sql/expressions/select.js
684
- function De(e) {
685
- return N`${e} asc`;
684
+ function Ee(e) {
685
+ return F`${e} asc`;
686
686
  }
687
- function Oe(e) {
688
- return N`${e} desc`;
687
+ function De(e) {
688
+ return F`${e} desc`;
689
689
  }
690
690
  //#endregion
691
691
  //#region node_modules/drizzle-orm/sql/functions/aggregate.js
692
- function ke(e) {
693
- return N`count(${e || N.raw("*")})`.mapWith(Number);
694
- }
695
- function Ae(e) {
696
- return N`count(distinct ${e})`.mapWith(Number);
692
+ function Oe(e) {
693
+ return F`count(${e || F.raw("*")})`.mapWith(Number);
697
694
  }
698
- function B(e) {
699
- return N`sum(${e})`.mapWith(String);
695
+ function ke(e) {
696
+ return F`count(distinct ${e})`.mapWith(Number);
700
697
  }
701
698
  function V(e) {
702
- return N`max(${e})`.mapWith(s(e, c) ? e : String);
699
+ return F`sum(${e})`.mapWith(String);
703
700
  }
704
701
  function H(e) {
705
- return N`min(${e})`.mapWith(s(e, c) ? e : String);
702
+ return F`max(${e})`.mapWith(s(e, c) ? e : String);
703
+ }
704
+ function Ae(e) {
705
+ return F`min(${e})`.mapWith(s(e, c) ? e : String);
706
706
  }
707
707
  //#endregion
708
708
  //#region src/server/adapters/base-adapter.ts
@@ -746,73 +746,73 @@ var U = class {
746
746
  let t = this.parseISODuration(e), n = [];
747
747
  t.years && n.push(`${t.years} years`), t.months && n.push(`${t.months} months`), t.days && n.push(`${t.days} days`), t.hours && n.push(`${t.hours} hours`), t.minutes && n.push(`${t.minutes} minutes`), t.seconds && n.push(`${t.seconds} seconds`);
748
748
  let r = n.join(" ") || "0 seconds";
749
- return N`INTERVAL '${N.raw(r)}'`;
749
+ return F`INTERVAL '${F.raw(r)}'`;
750
750
  }
751
751
  buildTimeDifferenceSeconds(e, t) {
752
- return N`EXTRACT(EPOCH FROM (${e} - ${t}))`;
752
+ return F`EXTRACT(EPOCH FROM (${e} - ${t}))`;
753
753
  }
754
754
  buildDateAddInterval(e, t) {
755
- return N`(${e} + ${this.buildIntervalFromISO(t)})`;
755
+ return F`(${e} + ${this.buildIntervalFromISO(t)})`;
756
756
  }
757
757
  buildConditionalAggregation(e, t, n) {
758
758
  let r = e.toUpperCase();
759
- return e === "count" && !t ? N`COUNT(*) FILTER (WHERE ${n})` : N`${N.raw(r)}(${t}) FILTER (WHERE ${n})`;
759
+ return e === "count" && !t ? F`COUNT(*) FILTER (WHERE ${n})` : F`${F.raw(r)}(${t}) FILTER (WHERE ${n})`;
760
760
  }
761
761
  buildDateDiffPeriods(e, t, n) {
762
762
  switch (n) {
763
- case "day": return N`(${t}::date - ${e}::date)`;
764
- case "week": return N`FLOOR((${t}::date - ${e}::date) / 7)`;
765
- case "month": return N`(EXTRACT(YEAR FROM AGE(${t}::timestamp, ${e}::timestamp)) * 12 + EXTRACT(MONTH FROM AGE(${t}::timestamp, ${e}::timestamp)))::integer`;
763
+ case "day": return F`(${t}::date - ${e}::date)`;
764
+ case "week": return F`FLOOR((${t}::date - ${e}::date) / 7)`;
765
+ case "month": return F`(EXTRACT(YEAR FROM AGE(${t}::timestamp, ${e}::timestamp)) * 12 + EXTRACT(MONTH FROM AGE(${t}::timestamp, ${e}::timestamp)))::integer`;
766
766
  default: throw Error(`Unsupported date diff unit: ${n}`);
767
767
  }
768
768
  }
769
769
  buildPeriodSeriesSubquery(e) {
770
- return N`(SELECT generate_series(0, ${e}) as period_number) p`;
770
+ return F`(SELECT generate_series(0, ${e}) as period_number) p`;
771
771
  }
772
772
  buildTimeDimension(e, t) {
773
773
  switch (e) {
774
- case "year": return N`DATE_TRUNC('year', ${t}::timestamp)`;
775
- case "quarter": return N`DATE_TRUNC('quarter', ${t}::timestamp)`;
776
- case "month": return N`DATE_TRUNC('month', ${t}::timestamp)`;
777
- case "week": return N`DATE_TRUNC('week', ${t}::timestamp)`;
778
- case "day": return N`DATE_TRUNC('day', ${t}::timestamp)::timestamp`;
779
- case "hour": return N`DATE_TRUNC('hour', ${t}::timestamp)`;
780
- case "minute": return N`DATE_TRUNC('minute', ${t}::timestamp)`;
781
- case "second": return N`DATE_TRUNC('second', ${t}::timestamp)`;
774
+ case "year": return F`DATE_TRUNC('year', ${t}::timestamp)`;
775
+ case "quarter": return F`DATE_TRUNC('quarter', ${t}::timestamp)`;
776
+ case "month": return F`DATE_TRUNC('month', ${t}::timestamp)`;
777
+ case "week": return F`DATE_TRUNC('week', ${t}::timestamp)`;
778
+ case "day": return F`DATE_TRUNC('day', ${t}::timestamp)::timestamp`;
779
+ case "hour": return F`DATE_TRUNC('hour', ${t}::timestamp)`;
780
+ case "minute": return F`DATE_TRUNC('minute', ${t}::timestamp)`;
781
+ case "second": return F`DATE_TRUNC('second', ${t}::timestamp)`;
782
782
  default: return t;
783
783
  }
784
784
  }
785
785
  buildStringCondition(e, t, n) {
786
786
  switch (t) {
787
- case "contains": return N`${e} ILIKE ${`%${n}%`}`;
788
- case "notContains": return N`${e} NOT ILIKE ${`%${n}%`}`;
789
- case "startsWith": return N`${e} ILIKE ${`${n}%`}`;
790
- case "endsWith": return N`${e} ILIKE ${`%${n}`}`;
791
- case "like": return N`${e} LIKE ${n}`;
792
- case "notLike": return N`${e} NOT LIKE ${n}`;
793
- case "ilike": return N`${e} ILIKE ${n}`;
794
- case "regex": return N`${e} ~* ${n}`;
795
- case "notRegex": return N`${e} !~* ${n}`;
787
+ case "contains": return F`${e} ILIKE ${`%${n}%`}`;
788
+ case "notContains": return F`${e} NOT ILIKE ${`%${n}%`}`;
789
+ case "startsWith": return F`${e} ILIKE ${`${n}%`}`;
790
+ case "endsWith": return F`${e} ILIKE ${`%${n}`}`;
791
+ case "like": return F`${e} LIKE ${n}`;
792
+ case "notLike": return F`${e} NOT LIKE ${n}`;
793
+ case "ilike": return F`${e} ILIKE ${n}`;
794
+ case "regex": return F`${e} ~* ${n}`;
795
+ case "notRegex": return F`${e} !~* ${n}`;
796
796
  default: throw Error(`Unsupported string operator: ${t}`);
797
797
  }
798
798
  }
799
799
  castToType(e, t) {
800
800
  switch (t) {
801
- case "timestamp": return N`${e}::timestamp`;
802
- case "decimal": return N`${e}::decimal`;
803
- case "integer": return N`${e}::integer`;
801
+ case "timestamp": return F`${e}::timestamp`;
802
+ case "decimal": return F`${e}::decimal`;
803
+ case "integer": return F`${e}::integer`;
804
804
  default: throw Error(`Unsupported cast type: ${t}`);
805
805
  }
806
806
  }
807
807
  buildAvg(e) {
808
- return N`COALESCE(AVG(${e}), 0)`;
808
+ return F`COALESCE(AVG(${e}), 0)`;
809
809
  }
810
810
  buildCaseWhen(e, t) {
811
- let n = e.map((e) => N`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => N`${e} ${t}`);
812
- return t === void 0 ? N`CASE ${n} END` : N`CASE ${n} ELSE ${t} END`;
811
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
812
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
813
813
  }
814
814
  buildBooleanLiteral(e) {
815
- return e ? N`TRUE` : N`FALSE`;
815
+ return e ? F`TRUE` : F`FALSE`;
816
816
  }
817
817
  convertFilterValue(e) {
818
818
  return e;
@@ -834,40 +834,41 @@ var U = class {
834
834
  supportsWindowFunctions: !0,
835
835
  supportsFrameClause: !0,
836
836
  supportsLateralJoins: !0,
837
- supportsPercentileSubqueries: !0
837
+ supportsPercentileSubqueries: !0,
838
+ supportsDerivedTablesInCTE: !0
838
839
  };
839
840
  }
840
841
  buildStddev(e, t = !1) {
841
842
  let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
842
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
843
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
843
844
  }
844
845
  buildVariance(e, t = !1) {
845
846
  let n = t ? "VAR_SAMP" : "VAR_POP";
846
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
847
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
847
848
  }
848
849
  buildPercentile(e, t) {
849
- return N`PERCENTILE_CONT(${t / 100}) WITHIN GROUP (ORDER BY ${e})`;
850
+ return F`PERCENTILE_CONT(${t / 100}) WITHIN GROUP (ORDER BY ${e})`;
850
851
  }
851
852
  buildWindowFunction(e, t, n, r, i) {
852
- let a = n && n.length > 0 ? N`PARTITION BY ${N.join(n, N`, `)}` : N``, o = r && r.length > 0 ? N`ORDER BY ${N.join(r.map((e) => e.direction === "desc" ? N`${e.field} DESC` : N`${e.field} ASC`), N`, `)}` : N``, s = N``;
853
+ let a = n && n.length > 0 ? F`PARTITION BY ${F.join(n, F`, `)}` : F``, o = r && r.length > 0 ? F`ORDER BY ${F.join(r.map((e) => e.direction === "desc" ? F`${e.field} DESC` : F`${e.field} ASC`), F`, `)}` : F``, s = F``;
853
854
  if (i?.frame) {
854
855
  let { type: e, start: t, end: n } = i.frame, r = e.toUpperCase(), a = t === "unbounded" ? "UNBOUNDED PRECEDING" : typeof t == "number" ? `${t} PRECEDING` : "CURRENT ROW", o = n === "unbounded" ? "UNBOUNDED FOLLOWING" : n === "current" ? "CURRENT ROW" : typeof n == "number" ? `${n} FOLLOWING` : "CURRENT ROW";
855
- s = N`${N.raw(r)} BETWEEN ${N.raw(a)} AND ${N.raw(o)}`;
856
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
856
857
  }
857
858
  let c = [];
858
859
  n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
859
- let l = N`OVER (${c.length > 0 ? N.join(c, N` `) : N``})`;
860
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
860
861
  switch (e) {
861
- case "lag": return N`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
862
- case "lead": return N`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
863
- case "rank": return N`RANK() ${l}`;
864
- case "denseRank": return N`DENSE_RANK() ${l}`;
865
- case "rowNumber": return N`ROW_NUMBER() ${l}`;
866
- case "ntile": return N`NTILE(${i?.nTile ?? 4}) ${l}`;
867
- case "firstValue": return N`FIRST_VALUE(${t}) ${l}`;
868
- case "lastValue": return N`LAST_VALUE(${t}) ${l}`;
869
- case "movingAvg": return N`AVG(${t}) ${l}`;
870
- case "movingSum": return N`SUM(${t}) ${l}`;
862
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
863
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
864
+ case "rank": return F`RANK() ${l}`;
865
+ case "denseRank": return F`DENSE_RANK() ${l}`;
866
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
867
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
868
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
869
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
870
+ case "movingAvg": return F`AVG(${t}) ${l}`;
871
+ case "movingSum": return F`SUM(${t}) ${l}`;
871
872
  default: throw Error(`Unsupported window function: ${e}`);
872
873
  }
873
874
  }
@@ -880,25 +881,25 @@ var U = class {
880
881
  }
881
882
  buildIntervalFromISO(e) {
882
883
  let t = this.parseISODuration(e), n = [];
883
- return t.years && n.push(`${t.years} YEAR`), t.months && n.push(`${t.months} MONTH`), t.days && n.push(`${t.days} DAY`), t.hours && n.push(`${t.hours} HOUR`), t.minutes && n.push(`${t.minutes} MINUTE`), t.seconds && n.push(`${t.seconds} SECOND`), N`${this.durationToSeconds(e)}`;
884
+ return t.years && n.push(`${t.years} YEAR`), t.months && n.push(`${t.months} MONTH`), t.days && n.push(`${t.days} DAY`), t.hours && n.push(`${t.hours} HOUR`), t.minutes && n.push(`${t.minutes} MINUTE`), t.seconds && n.push(`${t.seconds} SECOND`), F`${this.durationToSeconds(e)}`;
884
885
  }
885
886
  buildTimeDifferenceSeconds(e, t) {
886
- return N`TIMESTAMPDIFF(SECOND, ${t}, ${e})`;
887
+ return F`TIMESTAMPDIFF(SECOND, ${t}, ${e})`;
887
888
  }
888
889
  buildDateAddInterval(e, t) {
889
890
  let n = this.parseISODuration(t), r = e;
890
- return n.years && (r = N`DATE_ADD(${r}, INTERVAL ${n.years} YEAR)`), n.months && (r = N`DATE_ADD(${r}, INTERVAL ${n.months} MONTH)`), n.days && (r = N`DATE_ADD(${r}, INTERVAL ${n.days} DAY)`), n.hours && (r = N`DATE_ADD(${r}, INTERVAL ${n.hours} HOUR)`), n.minutes && (r = N`DATE_ADD(${r}, INTERVAL ${n.minutes} MINUTE)`), n.seconds && (r = N`DATE_ADD(${r}, INTERVAL ${n.seconds} SECOND)`), r;
891
+ return n.years && (r = F`DATE_ADD(${r}, INTERVAL ${n.years} YEAR)`), n.months && (r = F`DATE_ADD(${r}, INTERVAL ${n.months} MONTH)`), n.days && (r = F`DATE_ADD(${r}, INTERVAL ${n.days} DAY)`), n.hours && (r = F`DATE_ADD(${r}, INTERVAL ${n.hours} HOUR)`), n.minutes && (r = F`DATE_ADD(${r}, INTERVAL ${n.minutes} MINUTE)`), n.seconds && (r = F`DATE_ADD(${r}, INTERVAL ${n.seconds} SECOND)`), r;
891
892
  }
892
893
  buildConditionalAggregation(e, t, n) {
893
894
  let r = e.toUpperCase();
894
- return e === "count" && !t ? N`COUNT(CASE WHEN ${n} THEN 1 END)` : N`${N.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
895
+ return e === "count" && !t ? F`COUNT(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
895
896
  }
896
897
  buildDateDiffPeriods(e, t, n) {
897
898
  let r = n.toUpperCase();
898
- return N`TIMESTAMPDIFF(${N.raw(r)}, ${e}, ${t})`;
899
+ return F`TIMESTAMPDIFF(${F.raw(r)}, ${e}, ${t})`;
899
900
  }
900
901
  buildPeriodSeriesSubquery(e) {
901
- return N`(
902
+ return F`(
902
903
  WITH RECURSIVE periods(period_number) AS (
903
904
  SELECT 0
904
905
  UNION ALL
@@ -919,45 +920,45 @@ var U = class {
919
920
  second: "%Y-%m-%d %H:%i:%s"
920
921
  };
921
922
  switch (e) {
922
- case "quarter": return N`DATE_ADD(MAKEDATE(YEAR(${t}), 1), INTERVAL (QUARTER(${t}) - 1) * 3 MONTH)`;
923
- case "week": return N`DATE_SUB(${t}, INTERVAL WEEKDAY(${t}) DAY)`;
923
+ case "quarter": return F`DATE_ADD(MAKEDATE(YEAR(${t}), 1), INTERVAL (QUARTER(${t}) - 1) * 3 MONTH)`;
924
+ case "week": return F`DATE_SUB(${t}, INTERVAL WEEKDAY(${t}) DAY)`;
924
925
  default: {
925
926
  let r = n[e];
926
- return r ? N`STR_TO_DATE(DATE_FORMAT(${t}, ${r}), '%Y-%m-%d %H:%i:%s')` : t;
927
+ return r ? F`STR_TO_DATE(DATE_FORMAT(${t}, ${r}), '%Y-%m-%d %H:%i:%s')` : t;
927
928
  }
928
929
  }
929
930
  }
930
931
  buildStringCondition(e, t, n) {
931
932
  switch (t) {
932
- case "contains": return N`LOWER(${e}) LIKE ${`%${n.toLowerCase()}%`}`;
933
- case "notContains": return N`LOWER(${e}) NOT LIKE ${`%${n.toLowerCase()}%`}`;
934
- case "startsWith": return N`LOWER(${e}) LIKE ${`${n.toLowerCase()}%`}`;
935
- case "endsWith": return N`LOWER(${e}) LIKE ${`%${n.toLowerCase()}`}`;
936
- case "like": return N`${e} LIKE ${n}`;
937
- case "notLike": return N`${e} NOT LIKE ${n}`;
938
- case "ilike": return N`LOWER(${e}) LIKE ${n.toLowerCase()}`;
939
- case "regex": return N`${e} REGEXP ${n}`;
940
- case "notRegex": return N`${e} NOT REGEXP ${n}`;
933
+ case "contains": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}%`}`;
934
+ case "notContains": return F`LOWER(${e}) NOT LIKE ${`%${n.toLowerCase()}%`}`;
935
+ case "startsWith": return F`LOWER(${e}) LIKE ${`${n.toLowerCase()}%`}`;
936
+ case "endsWith": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}`}`;
937
+ case "like": return F`${e} LIKE ${n}`;
938
+ case "notLike": return F`${e} NOT LIKE ${n}`;
939
+ case "ilike": return F`LOWER(${e}) LIKE ${n.toLowerCase()}`;
940
+ case "regex": return F`${e} REGEXP ${n}`;
941
+ case "notRegex": return F`${e} NOT REGEXP ${n}`;
941
942
  default: throw Error(`Unsupported string operator: ${t}`);
942
943
  }
943
944
  }
944
945
  castToType(e, t) {
945
946
  switch (t) {
946
- case "timestamp": return N`CAST(${e} AS DATETIME)`;
947
- case "decimal": return N`CAST(${e} AS DECIMAL(10,2))`;
948
- case "integer": return N`CAST(${e} AS SIGNED INTEGER)`;
947
+ case "timestamp": return F`CAST(${e} AS DATETIME)`;
948
+ case "decimal": return F`CAST(${e} AS DECIMAL(10,2))`;
949
+ case "integer": return F`CAST(${e} AS SIGNED INTEGER)`;
949
950
  default: throw Error(`Unsupported cast type: ${t}`);
950
951
  }
951
952
  }
952
953
  buildAvg(e) {
953
- return N`IFNULL(AVG(${e}), 0)`;
954
+ return F`IFNULL(AVG(${e}), 0)`;
954
955
  }
955
956
  buildCaseWhen(e, t) {
956
- let n = e.map((e) => N`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => N`${e} ${t}`);
957
- return t === void 0 ? N`CASE ${n} END` : N`CASE ${n} ELSE ${t} END`;
957
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
958
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
958
959
  }
959
960
  buildBooleanLiteral(e) {
960
- return e ? N`TRUE` : N`FALSE`;
961
+ return e ? F`TRUE` : F`FALSE`;
961
962
  }
962
963
  convertFilterValue(e) {
963
964
  return e;
@@ -979,40 +980,41 @@ var U = class {
979
980
  supportsWindowFunctions: !0,
980
981
  supportsFrameClause: !0,
981
982
  supportsLateralJoins: !0,
982
- supportsPercentileSubqueries: !1
983
+ supportsPercentileSubqueries: !1,
984
+ supportsDerivedTablesInCTE: !0
983
985
  };
984
986
  }
985
987
  buildStddev(e, t = !1) {
986
988
  let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
987
- return N`IFNULL(${N.raw(n)}(${e}), 0)`;
989
+ return F`IFNULL(${F.raw(n)}(${e}), 0)`;
988
990
  }
989
991
  buildVariance(e, t = !1) {
990
992
  let n = t ? "VAR_SAMP" : "VAR_POP";
991
- return N`IFNULL(${N.raw(n)}(${e}), 0)`;
993
+ return F`IFNULL(${F.raw(n)}(${e}), 0)`;
992
994
  }
993
995
  buildPercentile(e, t) {
994
996
  return null;
995
997
  }
996
998
  buildWindowFunction(e, t, n, r, i) {
997
- let a = n && n.length > 0 ? N`PARTITION BY ${N.join(n, N`, `)}` : N``, o = r && r.length > 0 ? N`ORDER BY ${N.join(r.map((e) => e.direction === "desc" ? N`${e.field} DESC` : N`${e.field} ASC`), N`, `)}` : N``, s = N``;
999
+ let a = n && n.length > 0 ? F`PARTITION BY ${F.join(n, F`, `)}` : F``, o = r && r.length > 0 ? F`ORDER BY ${F.join(r.map((e) => e.direction === "desc" ? F`${e.field} DESC` : F`${e.field} ASC`), F`, `)}` : F``, s = F``;
998
1000
  if (i?.frame) {
999
1001
  let { type: e, start: t, end: n } = i.frame, r = e.toUpperCase(), a = t === "unbounded" ? "UNBOUNDED PRECEDING" : typeof t == "number" ? `${t} PRECEDING` : "CURRENT ROW", o = n === "unbounded" ? "UNBOUNDED FOLLOWING" : n === "current" ? "CURRENT ROW" : typeof n == "number" ? `${n} FOLLOWING` : "CURRENT ROW";
1000
- s = N`${N.raw(r)} BETWEEN ${N.raw(a)} AND ${N.raw(o)}`;
1002
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1001
1003
  }
1002
1004
  let c = [];
1003
1005
  n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
1004
- let l = N`OVER (${c.length > 0 ? N.join(c, N` `) : N``})`;
1006
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1005
1007
  switch (e) {
1006
- case "lag": return N`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
1007
- case "lead": return N`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
1008
- case "rank": return N`RANK() ${l}`;
1009
- case "denseRank": return N`DENSE_RANK() ${l}`;
1010
- case "rowNumber": return N`ROW_NUMBER() ${l}`;
1011
- case "ntile": return N`NTILE(${i?.nTile ?? 4}) ${l}`;
1012
- case "firstValue": return N`FIRST_VALUE(${t}) ${l}`;
1013
- case "lastValue": return N`LAST_VALUE(${t}) ${l}`;
1014
- case "movingAvg": return N`AVG(${t}) ${l}`;
1015
- case "movingSum": return N`SUM(${t}) ${l}`;
1008
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1009
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1010
+ case "rank": return F`RANK() ${l}`;
1011
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1012
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1013
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1014
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1015
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1016
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1017
+ case "movingSum": return F`SUM(${t}) ${l}`;
1016
1018
  default: throw Error(`Unsupported window function: ${e}`);
1017
1019
  }
1018
1020
  }
@@ -1024,28 +1026,28 @@ var U = class {
1024
1026
  return !1;
1025
1027
  }
1026
1028
  buildIntervalFromISO(e) {
1027
- return N`${this.durationToSeconds(e)}`;
1029
+ return F`${this.durationToSeconds(e)}`;
1028
1030
  }
1029
1031
  buildTimeDifferenceSeconds(e, t) {
1030
- return N`(${e} - ${t})`;
1032
+ return F`(${e} - ${t})`;
1031
1033
  }
1032
1034
  buildDateAddInterval(e, t) {
1033
- return N`(${e} + ${this.durationToSeconds(t)})`;
1035
+ return F`(${e} + ${this.durationToSeconds(t)})`;
1034
1036
  }
1035
1037
  buildConditionalAggregation(e, t, n) {
1036
1038
  let r = e.toUpperCase();
1037
- return e === "count" && !t ? N`COUNT(CASE WHEN ${n} THEN 1 END)` : N`${N.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
1039
+ return e === "count" && !t ? F`COUNT(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
1038
1040
  }
1039
1041
  buildDateDiffPeriods(e, t, n) {
1040
1042
  switch (n) {
1041
- case "day": return N`CAST((julianday(datetime(${t}, 'unixepoch')) - julianday(datetime(${e}, 'unixepoch'))) AS INTEGER)`;
1042
- case "week": return N`CAST((julianday(datetime(${t}, 'unixepoch')) - julianday(datetime(${e}, 'unixepoch'))) / 7 AS INTEGER)`;
1043
- case "month": return N`((CAST(strftime('%Y', datetime(${t}, 'unixepoch')) AS INTEGER) - CAST(strftime('%Y', datetime(${e}, 'unixepoch')) AS INTEGER)) * 12 + (CAST(strftime('%m', datetime(${t}, 'unixepoch')) AS INTEGER) - CAST(strftime('%m', datetime(${e}, 'unixepoch')) AS INTEGER)))`;
1043
+ case "day": return F`CAST((julianday(datetime(${t}, 'unixepoch')) - julianday(datetime(${e}, 'unixepoch'))) AS INTEGER)`;
1044
+ case "week": return F`CAST((julianday(datetime(${t}, 'unixepoch')) - julianday(datetime(${e}, 'unixepoch'))) / 7 AS INTEGER)`;
1045
+ case "month": return F`((CAST(strftime('%Y', datetime(${t}, 'unixepoch')) AS INTEGER) - CAST(strftime('%Y', datetime(${e}, 'unixepoch')) AS INTEGER)) * 12 + (CAST(strftime('%m', datetime(${t}, 'unixepoch')) AS INTEGER) - CAST(strftime('%m', datetime(${e}, 'unixepoch')) AS INTEGER)))`;
1044
1046
  default: throw Error(`Unsupported date diff unit for SQLite: ${n}`);
1045
1047
  }
1046
1048
  }
1047
1049
  buildPeriodSeriesSubquery(e) {
1048
- return N`(
1050
+ return F`(
1049
1051
  WITH RECURSIVE periods(period_number) AS (
1050
1052
  SELECT 0
1051
1053
  UNION ALL
@@ -1056,55 +1058,55 @@ var U = class {
1056
1058
  }
1057
1059
  buildTimeDimension(e, t) {
1058
1060
  switch (e) {
1059
- case "year": return N`datetime(${t}, 'unixepoch', 'start of year')`;
1061
+ case "year": return F`datetime(${t}, 'unixepoch', 'start of year')`;
1060
1062
  case "quarter": {
1061
- let e = N`datetime(${t}, 'unixepoch')`;
1062
- return N`datetime(${e}, 'start of year',
1063
+ let e = F`datetime(${t}, 'unixepoch')`;
1064
+ return F`datetime(${e}, 'start of year',
1063
1065
  '+' || (((CAST(strftime('%m', ${e}) AS INTEGER) - 1) / 3) * 3) || ' months')`;
1064
1066
  }
1065
- case "month": return N`datetime(${t}, 'unixepoch', 'start of month')`;
1066
- case "week": return N`date(datetime(${t}, 'unixepoch'), 'weekday 1', '-6 days')`;
1067
- case "day": return N`datetime(${t}, 'unixepoch', 'start of day')`;
1068
- case "hour": return N`datetime(strftime('%Y-%m-%d %H:00:00', ${N`datetime(${t}, 'unixepoch')`}))`;
1069
- case "minute": return N`datetime(strftime('%Y-%m-%d %H:%M:00', ${N`datetime(${t}, 'unixepoch')`}))`;
1070
- case "second": return N`datetime(strftime('%Y-%m-%d %H:%M:%S', ${N`datetime(${t}, 'unixepoch')`}))`;
1071
- default: return N`datetime(${t}, 'unixepoch')`;
1067
+ case "month": return F`datetime(${t}, 'unixepoch', 'start of month')`;
1068
+ case "week": return F`date(datetime(${t}, 'unixepoch'), 'weekday 1', '-6 days')`;
1069
+ case "day": return F`datetime(${t}, 'unixepoch', 'start of day')`;
1070
+ case "hour": return F`datetime(strftime('%Y-%m-%d %H:00:00', ${F`datetime(${t}, 'unixepoch')`}))`;
1071
+ case "minute": return F`datetime(strftime('%Y-%m-%d %H:%M:00', ${F`datetime(${t}, 'unixepoch')`}))`;
1072
+ case "second": return F`datetime(strftime('%Y-%m-%d %H:%M:%S', ${F`datetime(${t}, 'unixepoch')`}))`;
1073
+ default: return F`datetime(${t}, 'unixepoch')`;
1072
1074
  }
1073
1075
  }
1074
1076
  buildStringCondition(e, t, n) {
1075
1077
  switch (t) {
1076
- case "contains": return N`LOWER(${e}) LIKE ${`%${n.toLowerCase()}%`}`;
1077
- case "notContains": return N`LOWER(${e}) NOT LIKE ${`%${n.toLowerCase()}%`}`;
1078
- case "startsWith": return N`LOWER(${e}) LIKE ${`${n.toLowerCase()}%`}`;
1079
- case "endsWith": return N`LOWER(${e}) LIKE ${`%${n.toLowerCase()}`}`;
1080
- case "like": return N`${e} LIKE ${n}`;
1081
- case "notLike": return N`${e} NOT LIKE ${n}`;
1082
- case "ilike": return N`LOWER(${e}) LIKE ${n.toLowerCase()}`;
1083
- case "regex": return N`${e} GLOB ${n}`;
1084
- case "notRegex": return N`${e} NOT GLOB ${n}`;
1078
+ case "contains": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}%`}`;
1079
+ case "notContains": return F`LOWER(${e}) NOT LIKE ${`%${n.toLowerCase()}%`}`;
1080
+ case "startsWith": return F`LOWER(${e}) LIKE ${`${n.toLowerCase()}%`}`;
1081
+ case "endsWith": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}`}`;
1082
+ case "like": return F`${e} LIKE ${n}`;
1083
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1084
+ case "ilike": return F`LOWER(${e}) LIKE ${n.toLowerCase()}`;
1085
+ case "regex": return F`${e} GLOB ${n}`;
1086
+ case "notRegex": return F`${e} NOT GLOB ${n}`;
1085
1087
  default: throw Error(`Unsupported string operator: ${t}`);
1086
1088
  }
1087
1089
  }
1088
1090
  castToType(e, t) {
1089
1091
  switch (t) {
1090
- case "timestamp": return N`datetime(${e} / 1000, 'unixepoch')`;
1091
- case "decimal": return N`CAST(${e} AS REAL)`;
1092
- case "integer": return N`CAST(${e} AS INTEGER)`;
1092
+ case "timestamp": return F`datetime(${e} / 1000, 'unixepoch')`;
1093
+ case "decimal": return F`CAST(${e} AS REAL)`;
1094
+ case "integer": return F`CAST(${e} AS INTEGER)`;
1093
1095
  default: throw Error(`Unsupported cast type: ${t}`);
1094
1096
  }
1095
1097
  }
1096
1098
  buildAvg(e) {
1097
- return N`IFNULL(AVG(${e}), 0)`;
1099
+ return F`IFNULL(AVG(${e}), 0)`;
1098
1100
  }
1099
1101
  buildCaseWhen(e, t) {
1100
- let n = e.map((e) => e.then && typeof e.then == "object" && (e.then.queryChunks || e.then._ || e.then.sql) ? N`WHEN ${e.when} THEN ${N.raw("(")}${e.then}${N.raw(")")}` : N`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => N`${e} ${t}`);
1101
- return t === void 0 ? N`CASE ${n} END` : t && typeof t == "object" && (t.queryChunks || t._ || t.sql) ? N`CASE ${n} ELSE ${N.raw("(")}${t}${N.raw(")")} END` : N`CASE ${n} ELSE ${t} END`;
1102
+ let n = e.map((e) => e.then && typeof e.then == "object" && (e.then.queryChunks || e.then._ || e.then.sql) ? F`WHEN ${e.when} THEN ${F.raw("(")}${e.then}${F.raw(")")}` : F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
1103
+ return t === void 0 ? F`CASE ${n} END` : t && typeof t == "object" && (t.queryChunks || t._ || t.sql) ? F`CASE ${n} ELSE ${F.raw("(")}${t}${F.raw(")")} END` : F`CASE ${n} ELSE ${t} END`;
1102
1104
  }
1103
1105
  buildBooleanLiteral(e) {
1104
- return e ? N`1` : N`0`;
1106
+ return e ? F`1` : F`0`;
1105
1107
  }
1106
1108
  preprocessCalculatedTemplate(e) {
1107
- return e.replace(/(\{[^}]+\})\s*\/\s*/g, (e, t) => `${t.replace(/\{([^}]+)\}/, "CAST({$1} AS REAL)")} / `);
1109
+ return e.length > 1e3 ? e : e.replace(/(\{[^}]+\})\s*\/\s*/g, (e, t) => `${t.replace(/\{([^}]+)\}/, "CAST({$1} AS REAL)")} / `);
1108
1110
  }
1109
1111
  convertFilterValue(e) {
1110
1112
  return typeof e == "boolean" ? e ? 1 : 0 : e instanceof Date ? e.getTime() : Array.isArray(e) ? e.map((e) => this.convertFilterValue(e)) : e;
@@ -1131,7 +1133,8 @@ var U = class {
1131
1133
  supportsWindowFunctions: !0,
1132
1134
  supportsFrameClause: !0,
1133
1135
  supportsLateralJoins: !1,
1134
- supportsPercentileSubqueries: !1
1136
+ supportsPercentileSubqueries: !1,
1137
+ supportsDerivedTablesInCTE: !0
1135
1138
  };
1136
1139
  }
1137
1140
  buildStddev(e, t = !1) {
@@ -1144,25 +1147,25 @@ var U = class {
1144
1147
  return null;
1145
1148
  }
1146
1149
  buildWindowFunction(e, t, n, r, i) {
1147
- let a = n && n.length > 0 ? N`PARTITION BY ${N.join(n, N`, `)}` : N``, o = r && r.length > 0 ? N`ORDER BY ${N.join(r.map((e) => e.direction === "desc" ? N`${e.field} DESC` : N`${e.field} ASC`), N`, `)}` : N``, s = N``;
1150
+ let a = n && n.length > 0 ? F`PARTITION BY ${F.join(n, F`, `)}` : F``, o = r && r.length > 0 ? F`ORDER BY ${F.join(r.map((e) => e.direction === "desc" ? F`${e.field} DESC` : F`${e.field} ASC`), F`, `)}` : F``, s = F``;
1148
1151
  if (i?.frame) {
1149
1152
  let { type: e, start: t, end: n } = i.frame, r = e.toUpperCase(), a = t === "unbounded" ? "UNBOUNDED PRECEDING" : typeof t == "number" ? `${t} PRECEDING` : "CURRENT ROW", o = n === "unbounded" ? "UNBOUNDED FOLLOWING" : n === "current" ? "CURRENT ROW" : typeof n == "number" ? `${n} FOLLOWING` : "CURRENT ROW";
1150
- s = N`${N.raw(r)} BETWEEN ${N.raw(a)} AND ${N.raw(o)}`;
1153
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1151
1154
  }
1152
1155
  let c = [];
1153
1156
  n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
1154
- let l = N`OVER (${c.length > 0 ? N.join(c, N` `) : N``})`;
1157
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1155
1158
  switch (e) {
1156
- case "lag": return N`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
1157
- case "lead": return N`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
1158
- case "rank": return N`RANK() ${l}`;
1159
- case "denseRank": return N`DENSE_RANK() ${l}`;
1160
- case "rowNumber": return N`ROW_NUMBER() ${l}`;
1161
- case "ntile": return N`NTILE(${i?.nTile ?? 4}) ${l}`;
1162
- case "firstValue": return N`FIRST_VALUE(${t}) ${l}`;
1163
- case "lastValue": return N`LAST_VALUE(${t}) ${l}`;
1164
- case "movingAvg": return N`AVG(${t}) ${l}`;
1165
- case "movingSum": return N`SUM(${t}) ${l}`;
1159
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1160
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1161
+ case "rank": return F`RANK() ${l}`;
1162
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1163
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1164
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1165
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1166
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1167
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1168
+ case "movingSum": return F`SUM(${t}) ${l}`;
1166
1169
  default: throw Error(`Unsupported window function: ${e}`);
1167
1170
  }
1168
1171
  }
@@ -1181,68 +1184,68 @@ var U = class {
1181
1184
  let t = this.parseISODuration(e), n = [];
1182
1185
  t.years && n.push(`${t.years} years`), t.months && n.push(`${t.months} months`), t.days && n.push(`${t.days} days`), t.hours && n.push(`${t.hours} hours`), t.minutes && n.push(`${t.minutes} minutes`), t.seconds && n.push(`${t.seconds} seconds`);
1183
1186
  let r = n.join(" ") || "0 seconds";
1184
- return N`INTERVAL '${N.raw(r)}'`;
1187
+ return F`INTERVAL '${F.raw(r)}'`;
1185
1188
  }
1186
1189
  buildTimeDifferenceSeconds(e, t) {
1187
- return N`(EPOCH(${e}) - EPOCH(${t}))`;
1190
+ return F`(EPOCH(${e}) - EPOCH(${t}))`;
1188
1191
  }
1189
1192
  buildDateAddInterval(e, t) {
1190
- return N`(${e} + ${this.buildIntervalFromISO(t)})`;
1193
+ return F`(${e} + ${this.buildIntervalFromISO(t)})`;
1191
1194
  }
1192
1195
  buildConditionalAggregation(e, t, n) {
1193
1196
  let r = e.toUpperCase();
1194
- return e === "count" && !t ? N`COUNT(*) FILTER (WHERE ${n})` : N`${N.raw(r)}(${t}) FILTER (WHERE ${n})`;
1197
+ return e === "count" && !t ? F`COUNT(*) FILTER (WHERE ${n})` : F`${F.raw(r)}(${t}) FILTER (WHERE ${n})`;
1195
1198
  }
1196
1199
  buildDateDiffPeriods(e, t, n) {
1197
- return N`DATE_DIFF('${N.raw(n)}', ${e}::timestamp, ${t}::timestamp)`;
1200
+ return F`DATE_DIFF('${F.raw(n)}', ${e}::timestamp, ${t}::timestamp)`;
1198
1201
  }
1199
1202
  buildPeriodSeriesSubquery(e) {
1200
- return N`(SELECT UNNEST(generate_series(0, ${e})) as period_number) p`;
1203
+ return F`(SELECT UNNEST(generate_series(0, ${e})) as period_number) p`;
1201
1204
  }
1202
1205
  buildTimeDimension(e, t) {
1203
1206
  switch (e) {
1204
- case "year": return N`DATE_TRUNC('year', ${t}::timestamp)`;
1205
- case "quarter": return N`DATE_TRUNC('quarter', ${t}::timestamp)`;
1206
- case "month": return N`DATE_TRUNC('month', ${t}::timestamp)`;
1207
- case "week": return N`DATE_TRUNC('week', ${t}::timestamp)`;
1208
- case "day": return N`DATE_TRUNC('day', ${t}::timestamp)::timestamp`;
1209
- case "hour": return N`DATE_TRUNC('hour', ${t}::timestamp)`;
1210
- case "minute": return N`DATE_TRUNC('minute', ${t}::timestamp)`;
1211
- case "second": return N`DATE_TRUNC('second', ${t}::timestamp)`;
1207
+ case "year": return F`DATE_TRUNC('year', ${t}::timestamp)`;
1208
+ case "quarter": return F`DATE_TRUNC('quarter', ${t}::timestamp)`;
1209
+ case "month": return F`DATE_TRUNC('month', ${t}::timestamp)`;
1210
+ case "week": return F`DATE_TRUNC('week', ${t}::timestamp)`;
1211
+ case "day": return F`DATE_TRUNC('day', ${t}::timestamp)::timestamp`;
1212
+ case "hour": return F`DATE_TRUNC('hour', ${t}::timestamp)`;
1213
+ case "minute": return F`DATE_TRUNC('minute', ${t}::timestamp)`;
1214
+ case "second": return F`DATE_TRUNC('second', ${t}::timestamp)`;
1212
1215
  default: return t;
1213
1216
  }
1214
1217
  }
1215
1218
  buildStringCondition(e, t, n) {
1216
1219
  switch (t) {
1217
- case "contains": return N`${e} ILIKE ${`%${n}%`}`;
1218
- case "notContains": return N`${e} NOT ILIKE ${`%${n}%`}`;
1219
- case "startsWith": return N`${e} ILIKE ${`${n}%`}`;
1220
- case "endsWith": return N`${e} ILIKE ${`%${n}`}`;
1221
- case "like": return N`${e} LIKE ${n}`;
1222
- case "notLike": return N`${e} NOT LIKE ${n}`;
1223
- case "ilike": return N`${e} ILIKE ${n}`;
1224
- case "regex": return N`regexp_matches(${e}, ${n})`;
1225
- case "notRegex": return N`NOT regexp_matches(${e}, ${n})`;
1220
+ case "contains": return F`${e} ILIKE ${`%${n}%`}`;
1221
+ case "notContains": return F`${e} NOT ILIKE ${`%${n}%`}`;
1222
+ case "startsWith": return F`${e} ILIKE ${`${n}%`}`;
1223
+ case "endsWith": return F`${e} ILIKE ${`%${n}`}`;
1224
+ case "like": return F`${e} LIKE ${n}`;
1225
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1226
+ case "ilike": return F`${e} ILIKE ${n}`;
1227
+ case "regex": return F`regexp_matches(${e}, ${n})`;
1228
+ case "notRegex": return F`NOT regexp_matches(${e}, ${n})`;
1226
1229
  default: throw Error(`Unsupported string operator: ${t}`);
1227
1230
  }
1228
1231
  }
1229
1232
  castToType(e, t) {
1230
1233
  switch (t) {
1231
- case "timestamp": return N`${e}::timestamp`;
1232
- case "decimal": return N`${e}::decimal`;
1233
- case "integer": return N`${e}::integer`;
1234
+ case "timestamp": return F`${e}::timestamp`;
1235
+ case "decimal": return F`${e}::decimal`;
1236
+ case "integer": return F`${e}::integer`;
1234
1237
  default: throw Error(`Unsupported cast type: ${t}`);
1235
1238
  }
1236
1239
  }
1237
1240
  buildAvg(e) {
1238
- return N`COALESCE(AVG(${e}), 0)`;
1241
+ return F`COALESCE(AVG(${e}), 0)`;
1239
1242
  }
1240
1243
  buildCaseWhen(e, t) {
1241
- let n = e.map((e) => N`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => N`${e} ${t}`);
1242
- return t === void 0 ? N`CASE ${n} END` : N`CASE ${n} ELSE ${t} END`;
1244
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
1245
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
1243
1246
  }
1244
1247
  buildBooleanLiteral(e) {
1245
- return e ? N`TRUE` : N`FALSE`;
1248
+ return e ? F`TRUE` : F`FALSE`;
1246
1249
  }
1247
1250
  convertFilterValue(e) {
1248
1251
  return e;
@@ -1264,53 +1267,188 @@ var U = class {
1264
1267
  supportsWindowFunctions: !0,
1265
1268
  supportsFrameClause: !0,
1266
1269
  supportsLateralJoins: !1,
1267
- supportsPercentileSubqueries: !1
1270
+ supportsPercentileSubqueries: !1,
1271
+ supportsDerivedTablesInCTE: !0
1268
1272
  };
1269
1273
  }
1270
1274
  buildStddev(e, t = !1) {
1271
1275
  let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
1272
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
1276
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1273
1277
  }
1274
1278
  buildVariance(e, t = !1) {
1275
1279
  let n = t ? "VAR_SAMP" : "VAR_POP";
1276
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
1280
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1281
+ }
1282
+ buildPercentile(e, t) {
1283
+ return F`QUANTILE_CONT(${e}, ${t / 100})`;
1284
+ }
1285
+ buildWindowFunction(e, t, n, r, i) {
1286
+ let a = n && n.length > 0 ? F`PARTITION BY ${F.join(n, F`, `)}` : F``, o = r && r.length > 0 ? F`ORDER BY ${F.join(r.map((e) => e.direction === "desc" ? F`${e.field} DESC` : F`${e.field} ASC`), F`, `)}` : F``, s = F``;
1287
+ if (i?.frame) {
1288
+ let { type: e, start: t, end: n } = i.frame, r = e.toUpperCase(), a = t === "unbounded" ? "UNBOUNDED PRECEDING" : typeof t == "number" ? `${t} PRECEDING` : "CURRENT ROW", o = n === "unbounded" ? "UNBOUNDED FOLLOWING" : n === "current" ? "CURRENT ROW" : typeof n == "number" ? `${n} FOLLOWING` : "CURRENT ROW";
1289
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1290
+ }
1291
+ let c = [];
1292
+ n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
1293
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1294
+ switch (e) {
1295
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1296
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1297
+ case "rank": return F`RANK() ${l}`;
1298
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1299
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1300
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1301
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1302
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1303
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1304
+ case "movingSum": return F`SUM(${t}) ${l}`;
1305
+ default: throw Error(`Unsupported window function: ${e}`);
1306
+ }
1307
+ }
1308
+ }, Ie = class extends U {
1309
+ getEngineType() {
1310
+ return "databend";
1311
+ }
1312
+ supportsLateralJoins() {
1313
+ return !1;
1314
+ }
1315
+ buildIntervalFromISO(e) {
1316
+ let t = this.parseISODuration(e), n = [];
1317
+ if (t.years && n.push(`${t.years} YEAR`), t.months && n.push(`${t.months} MONTH`), t.days && n.push(`${t.days} DAY`), t.hours && n.push(`${t.hours} HOUR`), t.minutes && n.push(`${t.minutes} MINUTE`), t.seconds && n.push(`${t.seconds} SECOND`), n.length === 0) return F`INTERVAL 0 SECOND`;
1318
+ if (n.length === 1) return F`INTERVAL ${F.raw(n[0])}`;
1319
+ let r = n.map((e) => `INTERVAL ${e}`);
1320
+ return F`(${F.raw(r.join(" + "))})`;
1321
+ }
1322
+ buildTimeDifferenceSeconds(e, t) {
1323
+ return F`EXTRACT(EPOCH FROM TIMESTAMP_DIFF(${e}, ${t}))`;
1324
+ }
1325
+ buildDateAddInterval(e, t) {
1326
+ return F`(${e} + ${this.buildIntervalFromISO(t)})`;
1327
+ }
1328
+ buildConditionalAggregation(e, t, n) {
1329
+ let r = e.toUpperCase();
1330
+ return e === "count" && !t ? F`${F.raw(r)}(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
1331
+ }
1332
+ buildDateDiffPeriods(e, t, n) {
1333
+ return F`DATE_DIFF('${F.raw(n)}', ${e}::TIMESTAMP, ${t}::TIMESTAMP)`;
1334
+ }
1335
+ buildPeriodSeriesSubquery(e) {
1336
+ return F`(SELECT number as period_number FROM numbers(${e + 1})) p`;
1337
+ }
1338
+ buildTimeDimension(e, t) {
1339
+ switch (e) {
1340
+ case "year": return F`DATE_TRUNC(YEAR, ${t}::TIMESTAMP)`;
1341
+ case "quarter": return F`DATE_TRUNC(QUARTER, ${t}::TIMESTAMP)`;
1342
+ case "month": return F`DATE_TRUNC(MONTH, ${t}::TIMESTAMP)`;
1343
+ case "week": return F`DATE_TRUNC(WEEK, ${t}::TIMESTAMP)`;
1344
+ case "day": return F`DATE_TRUNC(DAY, ${t}::TIMESTAMP)::TIMESTAMP`;
1345
+ case "hour": return F`DATE_TRUNC(HOUR, ${t}::TIMESTAMP)`;
1346
+ case "minute": return F`DATE_TRUNC(MINUTE, ${t}::TIMESTAMP)`;
1347
+ case "second": return F`DATE_TRUNC(SECOND, ${t}::TIMESTAMP)`;
1348
+ default: return t;
1349
+ }
1350
+ }
1351
+ buildStringCondition(e, t, n) {
1352
+ switch (t) {
1353
+ case "contains": return F`LOWER(${e}) LIKE LOWER(${`%${n}%`})`;
1354
+ case "notContains": return F`LOWER(${e}) NOT LIKE LOWER(${`%${n}%`})`;
1355
+ case "startsWith": return F`LOWER(${e}) LIKE LOWER(${`${n}%`})`;
1356
+ case "endsWith": return F`LOWER(${e}) LIKE LOWER(${`%${n}`})`;
1357
+ case "like": return F`${e} LIKE ${n}`;
1358
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1359
+ case "ilike": return F`LOWER(${e}) LIKE LOWER(${n})`;
1360
+ case "regex": return F`${e} REGEXP ${n}`;
1361
+ case "notRegex": return F`NOT (${e} REGEXP ${n})`;
1362
+ default: throw Error(`Unsupported string operator: ${t}`);
1363
+ }
1364
+ }
1365
+ castToType(e, t) {
1366
+ switch (t) {
1367
+ case "timestamp": return F`${e}::TIMESTAMP`;
1368
+ case "decimal": return F`${e}::DECIMAL`;
1369
+ case "integer": return F`${e}::INTEGER`;
1370
+ default: throw Error(`Unsupported cast type: ${t}`);
1371
+ }
1372
+ }
1373
+ buildAvg(e) {
1374
+ return F`COALESCE(AVG(${e}), 0)`;
1375
+ }
1376
+ buildCaseWhen(e, t) {
1377
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
1378
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
1379
+ }
1380
+ buildBooleanLiteral(e) {
1381
+ return e ? F`TRUE` : F`FALSE`;
1382
+ }
1383
+ convertFilterValue(e) {
1384
+ return e;
1385
+ }
1386
+ prepareDateValue(e) {
1387
+ return e;
1388
+ }
1389
+ isTimestampInteger() {
1390
+ return !1;
1391
+ }
1392
+ convertTimeDimensionResult(e) {
1393
+ return e;
1394
+ }
1395
+ getCapabilities() {
1396
+ return {
1397
+ supportsStddev: !0,
1398
+ supportsVariance: !0,
1399
+ supportsPercentile: !1,
1400
+ supportsWindowFunctions: !0,
1401
+ supportsFrameClause: !0,
1402
+ supportsLateralJoins: !1,
1403
+ supportsPercentileSubqueries: !1,
1404
+ supportsDerivedTablesInCTE: !1
1405
+ };
1406
+ }
1407
+ buildStddev(e, t = !1) {
1408
+ let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
1409
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1410
+ }
1411
+ buildVariance(e, t = !1) {
1412
+ let n = t ? "COVAR_SAMP" : "COVAR_POP";
1413
+ return F`COALESCE(${F.raw(n)}(${e}, ${e}), 0)`;
1277
1414
  }
1278
1415
  buildPercentile(e, t) {
1279
- return N`QUANTILE_CONT(${e}, ${t / 100})`;
1416
+ throw Error("Percentile functions are not yet supported for Databend");
1280
1417
  }
1281
1418
  buildWindowFunction(e, t, n, r, i) {
1282
- let a = n && n.length > 0 ? N`PARTITION BY ${N.join(n, N`, `)}` : N``, o = r && r.length > 0 ? N`ORDER BY ${N.join(r.map((e) => e.direction === "desc" ? N`${e.field} DESC` : N`${e.field} ASC`), N`, `)}` : N``, s = N``;
1419
+ let a = n && n.length > 0 ? F`PARTITION BY ${F.join(n, F`, `)}` : F``, o = r && r.length > 0 ? F`ORDER BY ${F.join(r.map((e) => e.direction === "desc" ? F`${e.field} DESC` : F`${e.field} ASC`), F`, `)}` : F``, s = F``;
1283
1420
  if (i?.frame) {
1284
1421
  let { type: e, start: t, end: n } = i.frame, r = e.toUpperCase(), a = t === "unbounded" ? "UNBOUNDED PRECEDING" : typeof t == "number" ? `${t} PRECEDING` : "CURRENT ROW", o = n === "unbounded" ? "UNBOUNDED FOLLOWING" : n === "current" ? "CURRENT ROW" : typeof n == "number" ? `${n} FOLLOWING` : "CURRENT ROW";
1285
- s = N`${N.raw(r)} BETWEEN ${N.raw(a)} AND ${N.raw(o)}`;
1422
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1286
1423
  }
1287
1424
  let c = [];
1288
1425
  n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
1289
- let l = N`OVER (${c.length > 0 ? N.join(c, N` `) : N``})`;
1426
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1290
1427
  switch (e) {
1291
- case "lag": return N`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
1292
- case "lead": return N`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? N`` : N`, ${i.defaultValue}`}) ${l}`;
1293
- case "rank": return N`RANK() ${l}`;
1294
- case "denseRank": return N`DENSE_RANK() ${l}`;
1295
- case "rowNumber": return N`ROW_NUMBER() ${l}`;
1296
- case "ntile": return N`NTILE(${i?.nTile ?? 4}) ${l}`;
1297
- case "firstValue": return N`FIRST_VALUE(${t}) ${l}`;
1298
- case "lastValue": return N`LAST_VALUE(${t}) ${l}`;
1299
- case "movingAvg": return N`AVG(${t}) ${l}`;
1300
- case "movingSum": return N`SUM(${t}) ${l}`;
1428
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1429
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1430
+ case "rank": return F`RANK() ${l}`;
1431
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1432
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1433
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1434
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1435
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1436
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1437
+ case "movingSum": return F`SUM(${t}) ${l}`;
1301
1438
  default: throw Error(`Unsupported window function: ${e}`);
1302
1439
  }
1303
1440
  }
1304
1441
  };
1305
1442
  //#endregion
1306
1443
  //#region src/server/database-utils.ts
1307
- function Ie(e) {
1444
+ function Le(e) {
1308
1445
  switch (e) {
1309
1446
  case "postgres": return new je();
1310
1447
  case "mysql": return new Me();
1311
1448
  case "sqlite": return new Ne();
1312
1449
  case "singlestore": return new Pe();
1313
1450
  case "duckdb": return new Fe();
1451
+ case "databend": return new Ie();
1314
1452
  default: throw Error(`Unsupported database engine: ${e}`);
1315
1453
  }
1316
1454
  }
@@ -1319,12 +1457,12 @@ function Ie(e) {
1319
1457
  var W = class {
1320
1458
  databaseAdapter;
1321
1459
  constructor(e, t, n) {
1322
- this.db = e, this.schema = t, this.databaseAdapter = Ie(n || this.getEngineType());
1460
+ this.db = e, this.schema = t, this.databaseAdapter = Le(n || this.getEngineType());
1323
1461
  }
1324
1462
  };
1325
1463
  //#endregion
1326
1464
  //#region src/server/explain/postgres-parser.ts
1327
- function Le(e, t) {
1465
+ function Re(e, t) {
1328
1466
  let n = [], r = [], i = !1, a, o, s, c = [];
1329
1467
  for (let t of e) {
1330
1468
  let e = t.match(/Planning Time:\s*([\d.]+)\s*ms/i);
@@ -1337,7 +1475,7 @@ function Le(e, t) {
1337
1475
  o = parseFloat(l[1]);
1338
1476
  continue;
1339
1477
  }
1340
- let u = Re(t);
1478
+ let u = ze(t);
1341
1479
  if (u) {
1342
1480
  u.type.includes("Seq Scan") && (i = !0), u.index && r.push(u.index), n.length === 0 && u.estimatedCost !== void 0 && (s = u.estimatedCost);
1343
1481
  let e = t.search(/\S/);
@@ -1367,7 +1505,7 @@ function Le(e, t) {
1367
1505
  sql: t
1368
1506
  };
1369
1507
  }
1370
- function Re(e) {
1508
+ function ze(e) {
1371
1509
  let t = e.replace(/^[\s->]+/, "").trim();
1372
1510
  if (!t) return null;
1373
1511
  let n = t.match(/^([A-Za-z][A-Za-z0-9 ]+?)(?:\s+using\s+(\S+))?(?:\s+on\s+(\S+))?(?:\s+\w+)?(?:\s+\(cost=([\d.]+)\.\.([\d.]+)\s+rows=(\d+)(?:\s+width=\d+)?\))?(?:\s+\(actual time=([\d.]+)\.\.([\d.]+)\s+rows=(\d+)\s+loops=(\d+)\))?/i);
@@ -1385,7 +1523,7 @@ function Re(e) {
1385
1523
  }
1386
1524
  //#endregion
1387
1525
  //#region src/server/executors/postgres-executor.ts
1388
- var ze = class extends W {
1526
+ var Be = class extends W {
1389
1527
  async execute(e, t) {
1390
1528
  if (e && typeof e == "object" && typeof e.execute == "function") {
1391
1529
  let n = await e.execute();
@@ -1427,7 +1565,7 @@ var ze = class extends W {
1427
1565
  async explainQuery(e, t, n) {
1428
1566
  let r = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
1429
1567
  if (!this.db.execute) throw Error("PostgreSQL database instance must have an execute method");
1430
- let i = await this.db.execute(N`${N.raw(r)} ${N.raw(e.replace(/\$(\d+)/g, (e, n) => {
1568
+ let i = await this.db.execute(F`${F.raw(r)} ${F.raw(e.replace(/\$(\d+)/g, (e, n) => {
1431
1569
  let r = t[parseInt(n, 10) - 1];
1432
1570
  return r === null ? "NULL" : typeof r == "number" ? String(r) : typeof r == "boolean" ? r ? "TRUE" : "FALSE" : r instanceof Date ? `'${r.toISOString()}'` : `'${String(r).replace(/'/g, "''")}'`;
1433
1571
  }))}`), a = [];
@@ -1437,7 +1575,7 @@ var ze = class extends W {
1437
1575
  typeof t == "string" && a.push(t);
1438
1576
  }
1439
1577
  }
1440
- return Le(a, {
1578
+ return Re(a, {
1441
1579
  sql: e,
1442
1580
  params: t
1443
1581
  });
@@ -1446,7 +1584,7 @@ var ze = class extends W {
1446
1584
  if (!e || e.length === 0) return [];
1447
1585
  if (!this.db.execute) throw Error("PostgreSQL database instance must have an execute method");
1448
1586
  try {
1449
- let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(N`
1587
+ let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(F`
1450
1588
  SELECT
1451
1589
  t.relname as table_name,
1452
1590
  i.relname as index_name,
@@ -1460,7 +1598,7 @@ var ze = class extends W {
1460
1598
  JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, n) ON true
1461
1599
  JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum
1462
1600
  WHERE n.nspname = 'public'
1463
- AND t.relname IN (${N.raw(t)})
1601
+ AND t.relname IN (${F.raw(t)})
1464
1602
  GROUP BY t.relname, i.relname, ix.indisunique, ix.indisprimary
1465
1603
  ORDER BY t.relname, i.relname
1466
1604
  `);
@@ -1476,12 +1614,12 @@ var ze = class extends W {
1476
1614
  }
1477
1615
  }
1478
1616
  };
1479
- function Be(e, t) {
1480
- return new ze(e, t, "postgres");
1617
+ function Ve(e, t) {
1618
+ return new Be(e, t, "postgres");
1481
1619
  }
1482
1620
  //#endregion
1483
1621
  //#region src/server/explain/mysql-parser.ts
1484
- function Ve(e, t) {
1622
+ function He(e, t) {
1485
1623
  let n = t?.toLowerCase() || "";
1486
1624
  switch (e.toLowerCase()) {
1487
1625
  case "all": return "Seq Scan";
@@ -1495,10 +1633,10 @@ function Ve(e, t) {
1495
1633
  default: return `MySQL ${e}`;
1496
1634
  }
1497
1635
  }
1498
- function He(e, t) {
1636
+ function Ue(e, t) {
1499
1637
  let n = [], r = [], i = !1, a = 0;
1500
1638
  for (let t of e) {
1501
- let e = Ve(t.type, t.Extra);
1639
+ let e = He(t.type, t.Extra);
1502
1640
  t.type.toLowerCase() === "all" && (i = !0), t.key && r.push(t.key);
1503
1641
  let o = {
1504
1642
  type: e,
@@ -1529,7 +1667,7 @@ function He(e, t) {
1529
1667
  }
1530
1668
  //#endregion
1531
1669
  //#region src/server/executors/mysql-executor.ts
1532
- var Ue = class extends W {
1670
+ var We = class extends W {
1533
1671
  async execute(e, t) {
1534
1672
  if (e && typeof e == "object" && typeof e.execute == "function") {
1535
1673
  let n = await e.execute();
@@ -1564,7 +1702,7 @@ var Ue = class extends W {
1564
1702
  });
1565
1703
  let a = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
1566
1704
  if (!this.db.execute) throw Error("MySQL database instance must have an execute method");
1567
- let o = await this.db.execute(N.raw(`${a} ${r}`)), s = [];
1705
+ let o = await this.db.execute(F.raw(`${a} ${r}`)), s = [];
1568
1706
  if (Array.isArray(o)) for (let e of o) e && typeof e == "object" && s.push({
1569
1707
  id: e.id || 1,
1570
1708
  select_type: e.select_type || "SIMPLE",
@@ -1579,7 +1717,7 @@ var Ue = class extends W {
1579
1717
  filtered: Number(e.filtered) || 100,
1580
1718
  Extra: e.Extra || null
1581
1719
  });
1582
- return He(s, {
1720
+ return Ue(s, {
1583
1721
  sql: e,
1584
1722
  params: t
1585
1723
  });
@@ -1588,7 +1726,7 @@ var Ue = class extends W {
1588
1726
  if (!e || e.length === 0) return [];
1589
1727
  if (!this.db.execute) throw Error("MySQL database instance must have an execute method");
1590
1728
  try {
1591
- let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(N`
1729
+ let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(F`
1592
1730
  SELECT
1593
1731
  TABLE_NAME as table_name,
1594
1732
  INDEX_NAME as index_name,
@@ -1597,7 +1735,7 @@ var Ue = class extends W {
1597
1735
  CASE WHEN INDEX_NAME = 'PRIMARY' THEN TRUE ELSE FALSE END as is_primary
1598
1736
  FROM INFORMATION_SCHEMA.STATISTICS
1599
1737
  WHERE TABLE_SCHEMA = DATABASE()
1600
- AND LOWER(TABLE_NAME) IN (${N.raw(t)})
1738
+ AND LOWER(TABLE_NAME) IN (${F.raw(t)})
1601
1739
  GROUP BY TABLE_NAME, INDEX_NAME, NON_UNIQUE
1602
1740
  ORDER BY TABLE_NAME, INDEX_NAME
1603
1741
  `);
@@ -1613,12 +1751,12 @@ var Ue = class extends W {
1613
1751
  }
1614
1752
  }
1615
1753
  };
1616
- function We(e, t) {
1617
- return new Ue(e, t, "mysql");
1754
+ function Ge(e, t) {
1755
+ return new We(e, t, "mysql");
1618
1756
  }
1619
1757
  //#endregion
1620
1758
  //#region src/server/explain/sqlite-parser.ts
1621
- function Ge(e) {
1759
+ function Ke(e) {
1622
1760
  let t = e.toLowerCase(), n = e.match(/^SCAN\s+(\S+)/i);
1623
1761
  if (n) return {
1624
1762
  type: "Seq Scan",
@@ -1643,10 +1781,10 @@ function Ge(e) {
1643
1781
  table: a[1]
1644
1782
  } : t.includes("temp b-tree") ? t.includes("order by") ? { type: "Sort" } : t.includes("group by") ? { type: "Group" } : t.includes("distinct") ? { type: "Distinct" } : { type: "Temp B-Tree" } : t.includes("compound") ? { type: "Compound Query" } : t.includes("subquery") ? { type: "Subquery" } : t.includes("co-routine") ? { type: "Coroutine" } : { type: e };
1645
1783
  }
1646
- function Ke(e, t) {
1784
+ function qe(e, t) {
1647
1785
  let n = [], r = [], i = !1, a = /* @__PURE__ */ new Map();
1648
1786
  for (let t of e) {
1649
- let e = Ge(t.detail);
1787
+ let e = Ke(t.detail);
1650
1788
  e.type === "Seq Scan" && (i = !0), e.index && r.push(e.index);
1651
1789
  let o = {
1652
1790
  type: e.type,
@@ -1677,7 +1815,7 @@ function Ke(e, t) {
1677
1815
  }
1678
1816
  //#endregion
1679
1817
  //#region src/server/executors/sqlite-executor.ts
1680
- var qe = class extends W {
1818
+ var Je = class extends W {
1681
1819
  async execute(e, t) {
1682
1820
  if (e && typeof e == "object" && typeof e.execute == "function") {
1683
1821
  let n = await e.execute();
@@ -1717,7 +1855,7 @@ var qe = class extends W {
1717
1855
  return e === null ? "NULL" : typeof e == "number" ? String(e) : typeof e == "boolean" ? e ? "1" : "0" : e instanceof Date ? `'${e.toISOString()}'` : `'${String(e).replace(/'/g, "''")}'`;
1718
1856
  });
1719
1857
  let a = `EXPLAIN QUERY PLAN ${r}`, o;
1720
- if (this.db.all) o = this.db.all(N.raw(a));
1858
+ if (this.db.all) o = this.db.all(F.raw(a));
1721
1859
  else throw Error("SQLite database instance must have an all() method for EXPLAIN");
1722
1860
  let s = [];
1723
1861
  if (Array.isArray(o)) for (let e of o) e && typeof e == "object" && s.push({
@@ -1726,7 +1864,7 @@ var qe = class extends W {
1726
1864
  notused: Number(e.notused) || 0,
1727
1865
  detail: String(e.detail || "")
1728
1866
  });
1729
- return Ke(s, {
1867
+ return qe(s, {
1730
1868
  sql: e,
1731
1869
  params: t
1732
1870
  });
@@ -1737,9 +1875,9 @@ var qe = class extends W {
1737
1875
  try {
1738
1876
  let t = [];
1739
1877
  for (let n of e) {
1740
- let e = this.db.all(N.raw(`SELECT name, "unique", origin FROM pragma_index_list('${n.toLowerCase()}')`));
1878
+ let e = this.db.all(F.raw(`SELECT name, "unique", origin FROM pragma_index_list('${n.toLowerCase()}')`));
1741
1879
  if (Array.isArray(e)) for (let r of e) {
1742
- let e = r.name, i = !!r.unique, a = r.origin, o = this.db.all(N.raw(`SELECT name FROM pragma_index_info('${e}') ORDER BY seqno`)), s = [];
1880
+ let e = r.name, i = !!r.unique, a = r.origin, o = this.db.all(F.raw(`SELECT name FROM pragma_index_info('${e}') ORDER BY seqno`)), s = [];
1743
1881
  if (Array.isArray(o)) for (let e of o) {
1744
1882
  let t = e.name;
1745
1883
  typeof t == "string" && s.push(t);
@@ -1759,29 +1897,29 @@ var qe = class extends W {
1759
1897
  }
1760
1898
  }
1761
1899
  };
1762
- function Je(e, t) {
1763
- return new qe(e, t, "sqlite");
1900
+ function Ye(e, t) {
1901
+ return new Je(e, t, "sqlite");
1764
1902
  }
1765
1903
  //#endregion
1766
1904
  //#region src/server/executors/singlestore-executor.ts
1767
- var Ye = class extends Ue {
1905
+ var Xe = class extends We {
1768
1906
  getEngineType() {
1769
1907
  return "singlestore";
1770
1908
  }
1771
1909
  };
1772
- function Xe(e, t) {
1773
- return new Ye(e, t);
1910
+ function Ze(e, t) {
1911
+ return new Xe(e, t);
1774
1912
  }
1775
1913
  //#endregion
1776
1914
  //#region src/server/explain/duckdb-parser.ts
1777
- function Ze(e, t) {
1915
+ function Qe(e, t) {
1778
1916
  let n = [], r = [], i = !1, a, o = [];
1779
1917
  for (let t of e) {
1780
1918
  if (/^[┌├└│─┐┤┘]+$/.test(t.trim()) || /EXPLANATION|QUERY PLAN/i.test(t)) continue;
1781
- let e = $e(t);
1919
+ let e = et(t);
1782
1920
  if (e) {
1783
1921
  (e.type.includes("SEQ_SCAN") || e.type.includes("TABLE_SCAN")) && (i = !0), e.type.includes("INDEX_SCAN") && e.index && r.push(e.index), n.length === 0 && e.estimatedCost !== void 0 && (a = e.estimatedCost);
1784
- let s = Qe(t);
1922
+ let s = $e(t);
1785
1923
  for (; o.length > 0 && o[o.length - 1].indent >= s;) o.pop();
1786
1924
  if (o.length === 0) n.push(e);
1787
1925
  else {
@@ -1808,13 +1946,13 @@ function Ze(e, t) {
1808
1946
  sql: t
1809
1947
  };
1810
1948
  }
1811
- function Qe(e) {
1949
+ function $e(e) {
1812
1950
  let t = 0;
1813
1951
  for (let n of e) if (n === " " || n === "│" || n === "├" || n === "└" || n === "─") t++;
1814
1952
  else break;
1815
1953
  return t;
1816
1954
  }
1817
- function $e(e) {
1955
+ function et(e) {
1818
1956
  let t = e.replace(/[┌├└│─┐┤┘]/g, "").replace(/^\s*/, "").trim();
1819
1957
  if (!t || t.match(/^\(cost=([\d.]+)\s+rows=(\d+)\)$/i)) return null;
1820
1958
  let n = t.match(/^([A-Z_]+)(?:\s+(\S+))?(?:\s+on\s+(\S+))?(?:\s+\(cost=([\d.]+)\s+rows=(\d+)\))?/i);
@@ -1840,7 +1978,7 @@ function $e(e) {
1840
1978
  }
1841
1979
  //#endregion
1842
1980
  //#region src/server/executors/duckdb-executor.ts
1843
- var et = class extends W {
1981
+ var tt = class extends W {
1844
1982
  async execute(e, t) {
1845
1983
  if (e && typeof e == "object" && typeof e.execute == "function") try {
1846
1984
  let n = await e.execute();
@@ -1924,7 +2062,7 @@ var et = class extends W {
1924
2062
  async explainQuery(e, t, n) {
1925
2063
  let r = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
1926
2064
  if (!this.db.execute) throw Error("DuckDB database instance must have an execute method");
1927
- let i = await this.db.execute(N`${N.raw(r)} ${N.raw(e.replace(/\$(\d+)/g, (e, n) => {
2065
+ let i = await this.db.execute(F`${F.raw(r)} ${F.raw(e.replace(/\$(\d+)/g, (e, n) => {
1928
2066
  let r = t[parseInt(n, 10) - 1];
1929
2067
  return r === null ? "NULL" : typeof r == "number" ? String(r) : typeof r == "boolean" ? r ? "TRUE" : "FALSE" : r instanceof Date ? `'${r.toISOString()}'` : `'${String(r).replace(/'/g, "''")}'`;
1930
2068
  }))}`), a = [];
@@ -1934,7 +2072,7 @@ var et = class extends W {
1934
2072
  typeof t == "string" && a.push(t);
1935
2073
  }
1936
2074
  }
1937
- return Ze(a, {
2075
+ return Qe(a, {
1938
2076
  sql: e,
1939
2077
  params: t
1940
2078
  });
@@ -1943,7 +2081,7 @@ var et = class extends W {
1943
2081
  if (!e || e.length === 0) return [];
1944
2082
  if (!this.db.execute) throw Error("DuckDB database instance must have an execute method");
1945
2083
  try {
1946
- let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(N`
2084
+ let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(F`
1947
2085
  SELECT
1948
2086
  table_name,
1949
2087
  index_name,
@@ -1951,7 +2089,7 @@ var et = class extends W {
1951
2089
  is_unique,
1952
2090
  is_primary
1953
2091
  FROM duckdb_indexes()
1954
- WHERE LOWER(table_name) IN (${N.raw(t)})
2092
+ WHERE LOWER(table_name) IN (${F.raw(t)})
1955
2093
  GROUP BY table_name, index_name, is_unique, is_primary
1956
2094
  ORDER BY table_name, index_name
1957
2095
  `);
@@ -1967,21 +2105,184 @@ var et = class extends W {
1967
2105
  }
1968
2106
  }
1969
2107
  };
1970
- function tt(e, t) {
1971
- return new et(e, t, "duckdb");
2108
+ function nt(e, t) {
2109
+ return new tt(e, t, "duckdb");
2110
+ }
2111
+ //#endregion
2112
+ //#region src/server/explain/databend-parser.ts
2113
+ function rt(e, t) {
2114
+ let n = [], r = [], i = !1, a, o = [];
2115
+ for (let t of e) {
2116
+ if (!t.trim()) continue;
2117
+ let e = at(t);
2118
+ if (e) {
2119
+ (e.type.includes("TableScan") || e.type.includes("SCAN")) && (i = !0), e.type.includes("IndexScan") && e.index && r.push(e.index), n.length === 0 && e.estimatedCost !== void 0 && (a = e.estimatedCost);
2120
+ let s = it(t);
2121
+ for (; o.length > 0 && o[o.length - 1].indent >= s;) o.pop();
2122
+ if (o.length === 0) n.push(e);
2123
+ else {
2124
+ let t = o[o.length - 1].op;
2125
+ t.children ||= [], t.children.push(e);
2126
+ }
2127
+ o.push({
2128
+ indent: s,
2129
+ op: e
2130
+ });
2131
+ }
2132
+ }
2133
+ return {
2134
+ operations: n,
2135
+ summary: {
2136
+ database: "databend",
2137
+ planningTime: void 0,
2138
+ executionTime: void 0,
2139
+ totalCost: a,
2140
+ hasSequentialScans: i,
2141
+ usedIndexes: [...new Set(r)]
2142
+ },
2143
+ raw: e.join("\n"),
2144
+ sql: t
2145
+ };
2146
+ }
2147
+ function it(e) {
2148
+ let t = 0;
2149
+ for (let n of e) if (n === " " || n === "│" || n === "├" || n === "└" || n === "─") t++;
2150
+ else break;
2151
+ return t;
2152
+ }
2153
+ function at(e) {
2154
+ let t = e.replace(/[┌├└│─┐┤┘]/g, "").replace(/^\s*/, "").trim();
2155
+ if (!t || /^(filters|table|estimated rows|output columns|push downs):/.test(t)) return null;
2156
+ let n = t.match(/^([A-Z][A-Za-z_]+(?:\s+[A-Z][A-Za-z_]+)*)(?:\s+(\S+))?/);
2157
+ if (!n) return null;
2158
+ let r = n[1], i = n[2] || void 0, a = t.match(/estimated rows:\s*(\d+)/i);
2159
+ return {
2160
+ type: r,
2161
+ table: i,
2162
+ estimatedRows: a ? parseInt(a[1], 10) : void 0
2163
+ };
2164
+ }
2165
+ //#endregion
2166
+ //#region src/server/executors/databend-executor.ts
2167
+ var ot = class extends W {
2168
+ async execute(e, t) {
2169
+ if (e && typeof e == "object" && typeof e.execute == "function") try {
2170
+ let n = await e.execute();
2171
+ return Array.isArray(n) ? n.map((e) => this.convertNumericFields(e, t)) : n;
2172
+ } catch (t) {
2173
+ let n = this.extractSqlFromQuery(e);
2174
+ throw console.error("[Databend] Query execution failed:", {
2175
+ error: t instanceof Error ? t.message : String(t),
2176
+ sql: n.sql,
2177
+ params: n.params
2178
+ }), t;
2179
+ }
2180
+ if (!this.db.execute) throw Error("Databend database instance must have an execute method");
2181
+ try {
2182
+ let n = await this.db.execute(e);
2183
+ return Array.isArray(n) ? n.map((e) => this.convertNumericFields(e, t)) : n;
2184
+ } catch (t) {
2185
+ let n = this.extractSqlFromQuery(e);
2186
+ throw console.error("[Databend] Query execution failed:", {
2187
+ error: t instanceof Error ? t.message : String(t),
2188
+ sql: n.sql,
2189
+ params: n.params
2190
+ }), t;
2191
+ }
2192
+ }
2193
+ extractSqlFromQuery(e) {
2194
+ try {
2195
+ if (e && typeof e.toSQL == "function") {
2196
+ let { sql: t, params: n } = e.toSQL();
2197
+ return {
2198
+ sql: t,
2199
+ params: n
2200
+ };
2201
+ }
2202
+ if (e && typeof e.getSQL == "function") {
2203
+ let t = e.getSQL();
2204
+ if (t && typeof t.toSQL == "function") {
2205
+ let { sql: e, params: n } = t.toSQL();
2206
+ return {
2207
+ sql: e,
2208
+ params: n
2209
+ };
2210
+ }
2211
+ }
2212
+ return {
2213
+ sql: String(e),
2214
+ params: []
2215
+ };
2216
+ } catch {
2217
+ return {
2218
+ sql: "[unable to extract SQL]",
2219
+ params: []
2220
+ };
2221
+ }
2222
+ }
2223
+ convertNumericFields(e, t) {
2224
+ if (!e || typeof e != "object") return e;
2225
+ let n = {};
2226
+ for (let [r, i] of Object.entries(e)) t && t.includes(r) ? n[r] = this.coerceToNumber(i) : n[r] = i;
2227
+ return n;
2228
+ }
2229
+ coerceToNumber(e) {
2230
+ if (e == null || typeof e == "number") return e;
2231
+ if (typeof e == "bigint") return Number(e);
2232
+ if (e && typeof e == "object") {
2233
+ if (typeof e.toString == "function") {
2234
+ let t = e.toString();
2235
+ if (/^-?\d+(\.\d+)?$/.test(t)) return t.includes(".") ? parseFloat(t) : parseInt(t, 10);
2236
+ }
2237
+ return e;
2238
+ }
2239
+ if (typeof e == "string") {
2240
+ if (/^-?\d+(\.\d+)?$/.test(e)) return e.includes(".") ? parseFloat(e) : parseInt(e, 10);
2241
+ if (!isNaN(parseFloat(e)) && isFinite(parseFloat(e))) return parseFloat(e);
2242
+ }
2243
+ return e;
2244
+ }
2245
+ getEngineType() {
2246
+ return "databend";
2247
+ }
2248
+ async explainQuery(e, t, n) {
2249
+ let r = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
2250
+ if (!this.db.execute) throw Error("Databend database instance must have an execute method");
2251
+ let i = await this.db.execute(F`${F.raw(r)} ${F.raw(e.replace(/\$(\d+)/g, (e, n) => {
2252
+ let r = t[parseInt(n, 10) - 1];
2253
+ return r === null ? "NULL" : typeof r == "number" ? String(r) : typeof r == "boolean" ? r ? "TRUE" : "FALSE" : r instanceof Date ? `'${r.toISOString()}'` : `'${String(r).replace(/'/g, "''")}'`;
2254
+ }))}`), a = [];
2255
+ if (Array.isArray(i)) {
2256
+ for (let e of i) if (e && typeof e == "object") {
2257
+ let t = e.explain || e["QUERY PLAN"] || e.query_plan || e.Plan || Object.values(e)[0];
2258
+ typeof t == "string" && a.push(t);
2259
+ }
2260
+ }
2261
+ return rt(a, {
2262
+ sql: e,
2263
+ params: t
2264
+ });
2265
+ }
2266
+ async getTableIndexes(e) {
2267
+ return !e || e.length, [];
2268
+ }
2269
+ };
2270
+ function st(e, t) {
2271
+ return new ot(e, t, "databend");
1972
2272
  }
1973
2273
  //#endregion
1974
2274
  //#region src/server/executors/index.ts
1975
- function nt(e, t, n) {
2275
+ function ct(e, t, n) {
1976
2276
  if (n) switch (n) {
1977
- case "postgres": return Be(e, t);
1978
- case "mysql": return We(e, t);
1979
- case "sqlite": return Je(e, t);
1980
- case "singlestore": return Xe(e, t);
1981
- case "duckdb": return tt(e, t);
1982
- }
1983
- if (e.all && e.run) return Je(e, t);
1984
- if (e.execute) return Be(e, t);
2277
+ case "postgres": return Ve(e, t);
2278
+ case "mysql": return Ge(e, t);
2279
+ case "sqlite": return Ye(e, t);
2280
+ case "singlestore": return Ze(e, t);
2281
+ case "duckdb": return nt(e, t);
2282
+ case "databend": return st(e, t);
2283
+ }
2284
+ if (e.all && e.run) return Ye(e, t);
2285
+ if (e.execute) return Ve(e, t);
1985
2286
  throw Error("Unable to determine database engine type. Please specify engineType parameter.");
1986
2287
  }
1987
2288
  //#endregion
@@ -1989,7 +2290,7 @@ function nt(e, t, n) {
1989
2290
  function G(e, t) {
1990
2291
  return typeof e == "string" ? t ? t.get(e) || (console.warn(`[drizzle-cube] Cannot resolve cube reference '${e}': no cube with that name is registered. Registered cubes: ${Array.from(t.keys()).join(", ") || "(none)"}. Join will be skipped.`), null) : (console.warn(`[drizzle-cube] Cannot resolve string cube reference '${e}': no cube registry provided. Join will be skipped.`), null) : typeof e == "function" ? e() : e;
1991
2292
  }
1992
- function rt(e) {
2293
+ function lt(e) {
1993
2294
  switch (e) {
1994
2295
  case "belongsTo": return "hasMany";
1995
2296
  case "hasMany": return "belongsTo";
@@ -1998,7 +2299,7 @@ function rt(e) {
1998
2299
  default: return e;
1999
2300
  }
2000
2301
  }
2001
- function it(e, t) {
2302
+ function ut(e, t) {
2002
2303
  if (t) return t;
2003
2304
  switch (e) {
2004
2305
  case "belongsTo": return "inner";
@@ -2008,22 +2309,26 @@ function it(e, t) {
2008
2309
  default: return "left";
2009
2310
  }
2010
2311
  }
2011
- function at(e) {
2012
- return e && typeof e == "object" ? N`${N`${e}`}` : e;
2312
+ function dt(e) {
2313
+ return e && typeof e == "object" ? F`${F`${e}`}` : e;
2314
+ }
2315
+ function ft(e) {
2316
+ if (e === "__proto__" || e === "constructor" || e === "prototype") throw Error(`Unsafe property key: ${e}`);
2317
+ return e;
2013
2318
  }
2014
2319
  function K(e, t) {
2015
- return at(typeof e == "function" ? e(t) : e);
2320
+ return dt(typeof e == "function" ? e(t) : e);
2016
2321
  }
2017
- function ot(e, t) {
2322
+ function pt(e, t) {
2018
2323
  if (e.relationship !== "belongsToMany" || !e.through) throw Error("expandBelongsToManyJoin can only be called on belongsToMany relationships with through configuration");
2019
2324
  let { table: n, sourceKey: r, targetKey: i, securitySql: a } = e.through, o = [];
2020
2325
  for (let e of r) {
2021
- let t = e.as || I;
2326
+ let t = e.as || L;
2022
2327
  o.push(t(e.source, e.target));
2023
2328
  }
2024
2329
  let s = [];
2025
2330
  for (let e of i) {
2026
- let t = e.as || I;
2331
+ let t = e.as || L;
2027
2332
  s.push(t(e.source, e.target));
2028
2333
  }
2029
2334
  let c;
@@ -2031,29 +2336,29 @@ function ot(e, t) {
2031
2336
  let e = a(t);
2032
2337
  c = Array.isArray(e) ? e : [e];
2033
2338
  }
2034
- let l = it("belongsToMany", e.sqlJoinType);
2339
+ let l = ut("belongsToMany", e.sqlJoinType);
2035
2340
  return {
2036
2341
  junctionJoins: [{
2037
2342
  joinType: l,
2038
2343
  table: n,
2039
- condition: L(...o)
2344
+ condition: R(...o)
2040
2345
  }, {
2041
2346
  joinType: l,
2042
2347
  table: n,
2043
- condition: L(...s)
2348
+ condition: R(...s)
2044
2349
  }],
2045
2350
  junctionSecurityConditions: c
2046
2351
  };
2047
2352
  }
2048
2353
  //#endregion
2049
2354
  //#region src/server/filter-cache.ts
2050
- function st(e) {
2051
- if ("and" in e) return `and:[${e.and.map(st).sort().join(",")}]`;
2052
- if ("or" in e) return `or:[${e.or.map(st).sort().join(",")}]`;
2355
+ function mt(e) {
2356
+ if ("and" in e) return `and:[${e.and.map(mt).sort().join(",")}]`;
2357
+ if ("or" in e) return `or:[${e.or.map(mt).sort().join(",")}]`;
2053
2358
  let t = e, n = JSON.stringify(Array.isArray(t.values) ? [...t.values].sort() : t.values), r = t.dateRange ? `:dr:${JSON.stringify(t.dateRange)}` : "";
2054
2359
  return `${t.member}:${t.operator}:${n}${r}`;
2055
2360
  }
2056
- function ct(e, t) {
2361
+ function ht(e, t) {
2057
2362
  return `timeDim:${e}:${JSON.stringify(t)}`;
2058
2363
  }
2059
2364
  var q = class {
@@ -2094,37 +2399,37 @@ var q = class {
2094
2399
  };
2095
2400
  }
2096
2401
  };
2097
- function lt(e) {
2402
+ function gt(e) {
2098
2403
  let t = [];
2099
- for (let n of e) "and" in n && n.and ? t.push(...lt(n.and)) : "or" in n && n.or ? t.push(...lt(n.or)) : "member" in n && t.push(n);
2404
+ for (let n of e) "and" in n && n.and ? t.push(...gt(n.and)) : "or" in n && n.or ? t.push(...gt(n.or)) : "member" in n && t.push(n);
2100
2405
  return t;
2101
2406
  }
2102
2407
  //#endregion
2103
2408
  //#region src/server/cache-utils.ts
2104
- function ut(e, t, n = {}) {
2105
- let r = n.keyPrefix ?? "drizzle-cube:", i = dt(e), a = `${r}query:${gt(JSON.stringify(i))}`;
2409
+ function _t(e, t, n = {}) {
2410
+ let r = n.keyPrefix ?? "drizzle-cube:", i = vt(e), a = `${r}query:${wt(JSON.stringify(i))}`;
2106
2411
  if (n.includeSecurityContext !== !1) {
2107
- let e = gt(n.securityContextSerializer ? n.securityContextSerializer(t) : JSON.stringify(Y(t)));
2412
+ let e = wt(n.securityContextSerializer ? n.securityContextSerializer(t) : JSON.stringify(Ct(t)));
2108
2413
  a += `:ctx:${e}`;
2109
2414
  }
2110
2415
  return a;
2111
2416
  }
2112
- function dt(e) {
2417
+ function vt(e) {
2113
2418
  return {
2114
2419
  measures: e.measures ? [...e.measures].sort() : void 0,
2115
2420
  dimensions: e.dimensions ? [...e.dimensions].sort() : void 0,
2116
2421
  filters: e.filters ? J(e.filters) : void 0,
2117
- timeDimensions: e.timeDimensions ? ht(e.timeDimensions) : void 0,
2422
+ timeDimensions: e.timeDimensions ? St(e.timeDimensions) : void 0,
2118
2423
  limit: e.limit,
2119
2424
  offset: e.offset,
2120
- order: e.order ? Y(e.order) : void 0,
2425
+ order: e.order ? Ct(e.order) : void 0,
2121
2426
  fillMissingDatesValue: e.fillMissingDatesValue,
2122
- funnel: e.funnel ? ft(e.funnel) : void 0,
2123
- flow: e.flow ? pt(e.flow) : void 0,
2124
- retention: e.retention ? mt(e.retention) : void 0
2427
+ funnel: e.funnel ? yt(e.funnel) : void 0,
2428
+ flow: e.flow ? bt(e.flow) : void 0,
2429
+ retention: e.retention ? xt(e.retention) : void 0
2125
2430
  };
2126
2431
  }
2127
- function ft(e) {
2432
+ function yt(e) {
2128
2433
  return {
2129
2434
  bindingKey: e.bindingKey,
2130
2435
  timeDimension: e.timeDimension,
@@ -2140,7 +2445,7 @@ function ft(e) {
2140
2445
  globalTimeWindow: e.globalTimeWindow
2141
2446
  };
2142
2447
  }
2143
- function pt(e) {
2448
+ function bt(e) {
2144
2449
  return {
2145
2450
  bindingKey: e.bindingKey,
2146
2451
  timeDimension: e.timeDimension,
@@ -2156,7 +2461,7 @@ function pt(e) {
2156
2461
  joinStrategy: e.joinStrategy
2157
2462
  };
2158
2463
  }
2159
- function mt(e) {
2464
+ function xt(e) {
2160
2465
  return {
2161
2466
  timeDimension: e.timeDimension,
2162
2467
  bindingKey: e.bindingKey,
@@ -2180,7 +2485,7 @@ function J(e) {
2180
2485
  };
2181
2486
  }).sort((e, t) => JSON.stringify(e).localeCompare(JSON.stringify(t)));
2182
2487
  }
2183
- function ht(e) {
2488
+ function St(e) {
2184
2489
  return [...e].map((e) => ({
2185
2490
  dimension: e.dimension,
2186
2491
  granularity: e.granularity,
@@ -2192,23 +2497,23 @@ function ht(e) {
2192
2497
  }) : void 0
2193
2498
  })).sort((e, t) => e.dimension.localeCompare(t.dimension));
2194
2499
  }
2195
- function Y(e) {
2196
- return typeof e != "object" || !e ? e : Array.isArray(e) ? e.map(Y) : Object.keys(e).sort().reduce((t, n) => (t[n] = Y(e[n]), t), {});
2500
+ function Ct(e) {
2501
+ return typeof e != "object" || !e ? e : Array.isArray(e) ? e.map(Ct) : Object.keys(e).sort().reduce((t, n) => (t[n] = Ct(e[n]), t), {});
2197
2502
  }
2198
- function gt(e) {
2199
- let t = 2166136261;
2200
- for (let n = 0; n < e.length; n++) t ^= e.charCodeAt(n), t = t * 16777619 >>> 0;
2503
+ function wt(e) {
2504
+ let t = 2166136261, n = Math.min(e.length, 65536);
2505
+ for (let r = 0; r < n; r++) t ^= e.charCodeAt(r), t = t * 16777619 >>> 0;
2201
2506
  return t.toString(16).padStart(8, "0");
2202
2507
  }
2203
2508
  //#endregion
2204
2509
  //#region src/server/builders/date-time-builder.ts
2205
- var X = class {
2510
+ var Y = class {
2206
2511
  constructor(e) {
2207
2512
  this.databaseAdapter = e;
2208
2513
  }
2209
2514
  buildTimeDimensionExpression(e, t, n) {
2210
2515
  let r = K(e, n);
2211
- return t ? this.databaseAdapter.buildTimeDimension(t, r) : r instanceof M ? r : N`${r}`;
2516
+ return t ? this.databaseAdapter.buildTimeDimension(t, r) : r instanceof N ? r : F`${r}`;
2212
2517
  }
2213
2518
  buildDateRangeCondition(e, t) {
2214
2519
  if (!t) return null;
@@ -2219,13 +2524,13 @@ var X = class {
2219
2524
  let e = typeof r == "number" ? /* @__PURE__ */ new Date(r * (this.databaseAdapter.getEngineType() === "sqlite" ? 1e3 : 1)) : new Date(r), t = new Date(e);
2220
2525
  t.setUTCHours(23, 59, 59, 999), r = this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? Math.floor(t.getTime() / 1e3) : t.getTime() : t.toISOString();
2221
2526
  }
2222
- return L(R(e, n), z(e, r));
2527
+ return R(z(e, n), B(e, r));
2223
2528
  }
2224
2529
  if (typeof t == "string") {
2225
2530
  let n = this.parseRelativeDateRange(t);
2226
2531
  if (n) {
2227
2532
  let t, r;
2228
- return this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? (t = Math.floor(n.start.getTime() / 1e3), r = Math.floor(n.end.getTime() / 1e3)) : (t = n.start.getTime(), r = n.end.getTime()) : (t = n.start.toISOString(), r = n.end.toISOString()), L(R(e, t), z(e, r));
2533
+ return this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? (t = Math.floor(n.start.getTime() / 1e3), r = Math.floor(n.end.getTime() / 1e3)) : (t = n.start.getTime(), r = n.end.getTime()) : (t = n.start.toISOString(), r = n.end.toISOString()), R(z(e, t), B(e, r));
2229
2534
  }
2230
2535
  let r = this.normalizeDate(t);
2231
2536
  if (!r) return null;
@@ -2234,7 +2539,7 @@ var X = class {
2234
2539
  let o = new Date(i);
2235
2540
  o.setUTCHours(23, 59, 59, 999);
2236
2541
  let s, c;
2237
- return this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? (s = Math.floor(a.getTime() / 1e3), c = Math.floor(o.getTime() / 1e3)) : (s = a.getTime(), c = o.getTime()) : (s = a.toISOString(), c = o.toISOString()), L(R(e, s), z(e, c));
2542
+ return this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? (s = Math.floor(a.getTime() / 1e3), c = Math.floor(o.getTime() / 1e3)) : (s = a.getTime(), c = o.getTime()) : (s = a.toISOString(), c = o.toISOString()), R(z(e, s), B(e, c));
2238
2543
  }
2239
2544
  return null;
2240
2545
  }
@@ -2369,7 +2674,7 @@ var X = class {
2369
2674
  let t = new Date(e);
2370
2675
  return isNaN(t.getTime()) ? null : this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? Math.floor(t.getTime() / 1e3) : t.getTime() : t.toISOString();
2371
2676
  }
2372
- }, _t = class {
2677
+ }, Tt = class {
2373
2678
  constructor(e, t) {
2374
2679
  this.databaseAdapter = e, this.dateTimeBuilder = t;
2375
2680
  }
@@ -2384,18 +2689,18 @@ var X = class {
2384
2689
  if (a.length === 0 && !["set", "notSet"].includes(t)) return t === "equals" ? this.databaseAdapter.buildBooleanLiteral(!1) : null;
2385
2690
  let o = a[0];
2386
2691
  switch (t) {
2387
- case "equals": return a.length > 1 ? r?.type === "time" ? be(e, a.map((e) => this.dateTimeBuilder.normalizeDate(e) || e)) : be(e, a) : a.length === 1 ? I(e, r?.type === "time" && this.dateTimeBuilder.normalizeDate(o) || o) : this.databaseAdapter.buildBooleanLiteral(!1);
2388
- case "notEquals": return a.length > 1 ? xe(e, a) : a.length === 1 ? ge(e, o) : null;
2692
+ case "equals": return a.length > 1 ? r?.type === "time" ? ye(e, a.map((e) => this.dateTimeBuilder.normalizeDate(e) || e)) : ye(e, a) : a.length === 1 ? L(e, r?.type === "time" && this.dateTimeBuilder.normalizeDate(o) || o) : this.databaseAdapter.buildBooleanLiteral(!1);
2693
+ case "notEquals": return a.length > 1 ? be(e, a) : a.length === 1 ? he(e, o) : null;
2389
2694
  case "contains": return this.databaseAdapter.buildStringCondition(e, "contains", o);
2390
2695
  case "notContains": return this.databaseAdapter.buildStringCondition(e, "notContains", o);
2391
2696
  case "startsWith": return this.databaseAdapter.buildStringCondition(e, "startsWith", o);
2392
2697
  case "endsWith": return this.databaseAdapter.buildStringCondition(e, "endsWith", o);
2393
- case "gt": return ve(e, o);
2394
- case "gte": return R(e, o);
2395
- case "lt": return ye(e, o);
2396
- case "lte": return z(e, o);
2397
- case "set": return Ce(e);
2398
- case "notSet": return Se(e);
2698
+ case "gt": return _e(e, o);
2699
+ case "gte": return z(e, o);
2700
+ case "lt": return ve(e, o);
2701
+ case "lte": return B(e, o);
2702
+ case "set": return Se(e);
2703
+ case "notSet": return xe(e);
2399
2704
  case "inDateRange":
2400
2705
  if (a.length >= 2) {
2401
2706
  let t = this.dateTimeBuilder.normalizeDate(a[0]), r = this.dateTimeBuilder.normalizeDate(a[1]);
@@ -2405,43 +2710,43 @@ var X = class {
2405
2710
  let e = typeof r == "number" ? /* @__PURE__ */ new Date(r * (this.databaseAdapter.getEngineType() === "sqlite" ? 1e3 : 1)) : new Date(r), t = new Date(e);
2406
2711
  t.setUTCHours(23, 59, 59, 999), r = this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? Math.floor(t.getTime() / 1e3) : t.getTime() : t.toISOString();
2407
2712
  }
2408
- return L(R(e, t), z(e, r));
2713
+ return R(z(e, t), B(e, r));
2409
2714
  }
2410
2715
  }
2411
2716
  return null;
2412
2717
  case "beforeDate": {
2413
2718
  let t = this.dateTimeBuilder.normalizeDate(o);
2414
- return t ? ye(e, t) : null;
2719
+ return t ? ve(e, t) : null;
2415
2720
  }
2416
2721
  case "afterDate": {
2417
2722
  let t = this.dateTimeBuilder.normalizeDate(o);
2418
- return t ? ve(e, t) : null;
2723
+ return t ? _e(e, t) : null;
2419
2724
  }
2420
- case "between": return a.length >= 2 ? L(R(e, a[0]), z(e, a[1])) : null;
2421
- case "notBetween": return a.length >= 2 ? _e(ye(e, a[0]), ve(e, a[1])) : null;
2422
- case "in": return a.length > 0 ? be(e, a) : null;
2423
- case "notIn": return a.length > 0 ? xe(e, a) : null;
2725
+ case "between": return a.length >= 2 ? R(z(e, a[0]), B(e, a[1])) : null;
2726
+ case "notBetween": return a.length >= 2 ? ge(ve(e, a[0]), _e(e, a[1])) : null;
2727
+ case "in": return a.length > 0 ? ye(e, a) : null;
2728
+ case "notIn": return a.length > 0 ? be(e, a) : null;
2424
2729
  case "like": return this.databaseAdapter.buildStringCondition(e, "like", o);
2425
2730
  case "notLike": return this.databaseAdapter.buildStringCondition(e, "notLike", o);
2426
2731
  case "ilike": return this.databaseAdapter.buildStringCondition(e, "ilike", o);
2427
2732
  case "regex": return this.databaseAdapter.buildStringCondition(e, "regex", o);
2428
2733
  case "notRegex": return this.databaseAdapter.buildStringCondition(e, "notRegex", o);
2429
- case "isEmpty": return _e(Se(e), I(e, ""));
2430
- case "isNotEmpty": return L(Ce(e), ge(e, ""));
2431
- case "arrayContains": return this.databaseAdapter.getEngineType() === "postgres" ? we(e, a) : null;
2432
- case "arrayOverlaps": return this.databaseAdapter.getEngineType() === "postgres" ? Ee(e, a) : null;
2433
- case "arrayContained": return this.databaseAdapter.getEngineType() === "postgres" ? Te(e, a) : null;
2734
+ case "isEmpty": return ge(xe(e), L(e, ""));
2735
+ case "isNotEmpty": return R(Se(e), he(e, ""));
2736
+ case "arrayContains": return this.databaseAdapter.getEngineType() === "postgres" ? Ce(e, a) : null;
2737
+ case "arrayOverlaps": return this.databaseAdapter.getEngineType() === "postgres" ? Te(e, a) : null;
2738
+ case "arrayContained": return this.databaseAdapter.getEngineType() === "postgres" ? we(e, a) : null;
2434
2739
  default: return null;
2435
2740
  }
2436
2741
  }
2437
2742
  buildLogicalFilter(e, t, n) {
2438
2743
  if ("and" in e && e.and) {
2439
2744
  let r = e.and.map((e) => this.buildSingleFilter(e, t, n)).filter((e) => e !== null);
2440
- return r.length > 0 ? r.length === 1 ? r[0] : L(...r) : null;
2745
+ return r.length > 0 ? r.length === 1 ? r[0] : R(...r) : null;
2441
2746
  }
2442
2747
  if ("or" in e && e.or) {
2443
2748
  let r = e.or.map((e) => this.buildSingleFilter(e, t, n)).filter((e) => e !== null);
2444
- return r.length > 0 ? r.length === 1 ? r[0] : _e(...r) : null;
2749
+ return r.length > 0 ? r.length === 1 ? r[0] : ge(...r) : null;
2445
2750
  }
2446
2751
  return null;
2447
2752
  }
@@ -2454,13 +2759,14 @@ var X = class {
2454
2759
  let c = s.type === "time" ? K(s.sql, n) : typeof s.sql == "function" ? s.sql(n) : s.sql;
2455
2760
  return this.buildFilterCondition(c, r.operator, r.values, s, r.dateRange);
2456
2761
  }
2457
- }, Z = class {
2762
+ }, X = class {
2458
2763
  dependencyGraph;
2459
2764
  cubes;
2460
2765
  constructor(e) {
2461
2766
  this.cubes = e instanceof Map ? e : new Map([[e.name, e]]), this.dependencyGraph = /* @__PURE__ */ new Map();
2462
2767
  }
2463
2768
  extractDependencies(e) {
2769
+ if (e.length > 1e3) return [];
2464
2770
  let t = e.matchAll(/\{([^}]+)\}/g), n = [];
2465
2771
  for (let e of t) {
2466
2772
  let t = e[1].trim();
@@ -2581,14 +2887,14 @@ var X = class {
2581
2887
  };
2582
2888
  //#endregion
2583
2889
  //#region src/server/template-substitution.ts
2584
- function vt(e, t) {
2585
- let { cube: n, allCubes: r, resolvedMeasures: i } = t, a = yt(e), o = /* @__PURE__ */ new Map();
2890
+ function Et(e, t) {
2891
+ let { cube: n, allCubes: r, resolvedMeasures: i } = t, a = Dt(e), o = /* @__PURE__ */ new Map();
2586
2892
  for (let e of a) {
2587
2893
  let { originalRef: t, cubeName: a, fieldName: s } = e, c = a || n.name;
2588
2894
  if (!r.get(c)) throw Error(`Cannot substitute {${t}}: cube '${c}' not found`);
2589
2895
  let l = `${c}.${s}`, u = i.get(l);
2590
2896
  if (!u) throw Error(`Cannot substitute {${t}}: measure '${l}' not resolved yet. Ensure measures are resolved in dependency order.`);
2591
- let d = N`${u()}`;
2897
+ let d = F`${u()}`;
2592
2898
  o.set(t, d);
2593
2899
  }
2594
2900
  let s = [], c = [], l = 0;
@@ -2600,12 +2906,13 @@ function vt(e, t) {
2600
2906
  i && c.push(i), l = r + n.length;
2601
2907
  }
2602
2908
  }
2603
- if (s.push(e.substring(l)), c.length === 0) return N.raw(e);
2909
+ if (s.push(e.substring(l)), c.length === 0) return F.raw(e);
2604
2910
  let u = [];
2605
- for (let e = 0; e < s.length; e++) s[e] && u.push(new j(s[e])), e < c.length && u.push(c[e]);
2606
- return N.join(u, N.raw(""));
2911
+ for (let e = 0; e < s.length; e++) s[e] && u.push(new M(s[e])), e < c.length && u.push(c[e]);
2912
+ return F.join(u, F.raw(""));
2607
2913
  }
2608
- function yt(e) {
2914
+ function Dt(e) {
2915
+ if (e.length > 1e3) return [];
2609
2916
  let t = e.matchAll(/\{([^}]+)\}/g), n = [];
2610
2917
  for (let e of t) {
2611
2918
  let t = e[1].trim();
@@ -2624,7 +2931,7 @@ function yt(e) {
2624
2931
  }
2625
2932
  return n;
2626
2933
  }
2627
- function bt(e) {
2934
+ function Ot(e) {
2628
2935
  let t = [], n = 0;
2629
2936
  for (let r = 0; r < e.length; r++) if (e[r] === "{") n++;
2630
2937
  else if (e[r] === "}" && (n--, n < 0)) {
@@ -2632,7 +2939,7 @@ function bt(e) {
2632
2939
  break;
2633
2940
  }
2634
2941
  n > 0 && t.push("Unmatched opening brace in template"), /\{\s*\}/.test(e) && t.push("Empty member reference {} found in template"), /\{[^}]*\{/.test(e) && t.push("Nested braces are not allowed in member references");
2635
- let r = yt(e);
2942
+ let r = Dt(e);
2636
2943
  for (let e of r) {
2637
2944
  let n = e.cubeName ? `${e.cubeName}.${e.fieldName}` : e.fieldName;
2638
2945
  /^[a-zA-Z_][a-zA-Z0-9_.]*$/.test(n) || t.push(`Invalid member reference {${e.originalRef}}: must start with letter or underscore, and contain only letters, numbers, underscores, and dots`), n.split(".").length > 2 && t.push(`Invalid member reference {${e.originalRef}}: only one dot allowed (Cube.measure format)`);
@@ -2642,8 +2949,8 @@ function bt(e) {
2642
2949
  errors: t
2643
2950
  };
2644
2951
  }
2645
- function xt(e, t) {
2646
- let n = yt(e), r = /* @__PURE__ */ new Set();
2952
+ function kt(e, t) {
2953
+ let n = Dt(e), r = /* @__PURE__ */ new Set();
2647
2954
  for (let e of n) {
2648
2955
  let n = `${e.cubeName || t}.${e.fieldName}`;
2649
2956
  r.add(n);
@@ -2652,12 +2959,12 @@ function xt(e, t) {
2652
2959
  }
2653
2960
  //#endregion
2654
2961
  //#region src/server/builders/measure-builder.ts
2655
- var Q = class e {
2962
+ var Z = class e {
2656
2963
  constructor(e) {
2657
2964
  this.databaseAdapter = e;
2658
2965
  }
2659
2966
  buildResolvedMeasures(t, n, r, i) {
2660
- let a = /* @__PURE__ */ new Map(), o = [], s = [], c = new Set(t), l = new Z(n);
2967
+ let a = /* @__PURE__ */ new Map(), o = [], s = [], c = new Set(t), l = new X(n);
2661
2968
  for (let e of n.values()) l.buildGraph(e);
2662
2969
  let u = [];
2663
2970
  for (let r of t) {
@@ -2670,11 +2977,11 @@ var Q = class e {
2670
2977
  n && c.add(n);
2671
2978
  continue;
2672
2979
  }
2673
- Z.isCalculatedMeasure(d) ? (s.push(r), xt(d.calculatedSql, t).forEach((e) => c.add(e)), l.getAllDependencies(r).forEach((e) => {
2980
+ X.isCalculatedMeasure(d) ? (s.push(r), kt(d.calculatedSql, t).forEach((e) => c.add(e)), l.getAllDependencies(r).forEach((e) => {
2674
2981
  let [t, r] = e.split("."), i = n.get(t);
2675
2982
  if (i && i.measures[r]) {
2676
2983
  let e = i.measures[r];
2677
- Z.isCalculatedMeasure(e) && xt(e.calculatedSql, t).forEach((e) => c.add(e));
2984
+ X.isCalculatedMeasure(e) && kt(e.calculatedSql, t).forEach((e) => c.add(e));
2678
2985
  }
2679
2986
  })) : o.push(r);
2680
2987
  }
@@ -2684,7 +2991,7 @@ var Q = class e {
2684
2991
  if (a && a.measures && a.measures[i]) {
2685
2992
  let n = a.measures[i];
2686
2993
  if (e.isPostAggregationWindow(n)) continue;
2687
- Z.isCalculatedMeasure(n) ? s.includes(t) || s.push(t) : o.includes(t) || o.push(t);
2994
+ X.isCalculatedMeasure(n) ? s.includes(t) || s.push(t) : o.includes(t) || o.push(t);
2688
2995
  }
2689
2996
  }
2690
2997
  for (let e of o) {
@@ -2705,7 +3012,7 @@ var Q = class e {
2705
3012
  }
2706
3013
  buildCalculatedMeasure(e, t, n, r, i) {
2707
3014
  if (!e.calculatedSql) throw Error(`Calculated measure '${t.name}.${e.name}' missing calculatedSql property`);
2708
- return vt(this.databaseAdapter.preprocessCalculatedTemplate(e.calculatedSql), {
3015
+ return Et(this.databaseAdapter.preprocessCalculatedTemplate(e.calculatedSql), {
2709
3016
  cube: t,
2710
3017
  allCubes: n,
2711
3018
  resolvedMeasures: r,
@@ -2714,32 +3021,32 @@ var Q = class e {
2714
3021
  }
2715
3022
  buildCTECalculatedMeasure(e, t, n, r, i) {
2716
3023
  if (!e.calculatedSql) throw Error(`Calculated measure '${t.name}.${e.name || "unknown"}' missing calculatedSql property`);
2717
- let a = /* @__PURE__ */ new Map(), o = xt(e.calculatedSql, t.name);
3024
+ let a = /* @__PURE__ */ new Map(), o = kt(e.calculatedSql, t.name);
2718
3025
  for (let e of o) {
2719
3026
  let [t, i] = e.split("."), o = r.get(t);
2720
3027
  if (o && o.measures[i]) {
2721
3028
  let t = o.measures[i];
2722
3029
  if (n.measures.includes(e)) {
2723
- let r = N`${N.identifier(n.cteAlias)}.${N.identifier(i)}`, o;
3030
+ let r = F`${F.identifier(n.cteAlias)}.${F.identifier(i)}`, o;
2724
3031
  switch (t.type) {
2725
3032
  case "count":
2726
3033
  case "countDistinct":
2727
3034
  case "sum":
2728
- o = B(r);
3035
+ o = V(r);
2729
3036
  break;
2730
3037
  case "avg":
2731
3038
  o = this.databaseAdapter.buildAvg(r);
2732
3039
  break;
2733
3040
  case "min":
2734
- o = H(r);
3041
+ o = Ae(r);
2735
3042
  break;
2736
3043
  case "max":
2737
- o = V(r);
3044
+ o = H(r);
2738
3045
  break;
2739
3046
  case "number":
2740
- o = B(r);
3047
+ o = V(r);
2741
3048
  break;
2742
- default: o = B(r);
3049
+ default: o = V(r);
2743
3050
  }
2744
3051
  a.set(e, () => o);
2745
3052
  }
@@ -2757,16 +3064,16 @@ var Q = class e {
2757
3064
  if (i.joinCubes) for (let e of i.joinCubes) o.set(e.cube.name, e.cube);
2758
3065
  return this.buildCTECalculatedMeasure(n, t, a, o, r);
2759
3066
  } else {
2760
- let e = N`${N.identifier(a.cteAlias)}.${N.identifier(t)}`;
3067
+ let e = F`${F.identifier(a.cteAlias)}.${F.identifier(t)}`;
2761
3068
  switch (n.type) {
2762
3069
  case "count":
2763
3070
  case "countDistinct":
2764
- case "sum": return B(e);
3071
+ case "sum": return V(e);
2765
3072
  case "avg": return this.databaseAdapter.buildAvg(e);
2766
- case "min": return H(e);
2767
- case "max": return V(e);
2768
- case "number": return B(e);
2769
- default: return B(e);
3073
+ case "min": return Ae(e);
3074
+ case "max": return H(e);
3075
+ case "number": return V(e);
3076
+ default: return V(e);
2770
3077
  }
2771
3078
  }
2772
3079
  }
@@ -2780,10 +3087,10 @@ var Q = class e {
2780
3087
  if (t.filters && t.filters.length > 0) {
2781
3088
  let e = t.filters.map((e) => {
2782
3089
  let t = e(n);
2783
- return t ? N`(${t})` : void 0;
3090
+ return t ? F`(${t})` : void 0;
2784
3091
  }).filter(Boolean);
2785
3092
  if (e.length > 0) {
2786
- let t = e.length === 1 ? e[0] : L(...e);
3093
+ let t = e.length === 1 ? e[0] : R(...e);
2787
3094
  i = this.databaseAdapter.buildCaseWhen([{
2788
3095
  when: t,
2789
3096
  then: i
@@ -2791,22 +3098,22 @@ var Q = class e {
2791
3098
  }
2792
3099
  }
2793
3100
  switch (t.type) {
2794
- case "count": return ke(i);
2795
- case "countDistinct": return Ae(i);
2796
- case "sum": return B(i);
3101
+ case "count": return Oe(i);
3102
+ case "countDistinct": return ke(i);
3103
+ case "sum": return V(i);
2797
3104
  case "avg": return this.databaseAdapter.buildAvg(i);
2798
- case "min": return H(i);
2799
- case "max": return V(i);
3105
+ case "min": return Ae(i);
3106
+ case "max": return H(i);
2800
3107
  case "number": return i;
2801
3108
  case "stddev":
2802
3109
  case "stddevSamp": {
2803
3110
  let e = t.type === "stddevSamp" || t.statisticalConfig?.useSample, n = this.databaseAdapter.buildStddev(i, e);
2804
- return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), N`MAX(NULL)`) : n;
3111
+ return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`MAX(NULL)`) : n;
2805
3112
  }
2806
3113
  case "variance":
2807
3114
  case "varianceSamp": {
2808
3115
  let e = t.type === "varianceSamp" || t.statisticalConfig?.useSample, n = this.databaseAdapter.buildVariance(i, e);
2809
- return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), N`MAX(NULL)`) : n;
3116
+ return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`MAX(NULL)`) : n;
2810
3117
  }
2811
3118
  case "percentile":
2812
3119
  case "median":
@@ -2826,7 +3133,7 @@ var Q = class e {
2826
3133
  default: e = t.statisticalConfig?.percentile ?? 50;
2827
3134
  }
2828
3135
  let n = this.databaseAdapter.buildPercentile(i, e);
2829
- return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), N`MAX(NULL)`) : n;
3136
+ return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`MAX(NULL)`) : n;
2830
3137
  }
2831
3138
  case "lag":
2832
3139
  case "lead":
@@ -2872,9 +3179,9 @@ var Q = class e {
2872
3179
  nTile: e.nTile,
2873
3180
  frame: e.frame
2874
3181
  });
2875
- return s === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), N`NULL`) : s;
3182
+ return s === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`NULL`) : s;
2876
3183
  }
2877
- default: return ke(i);
3184
+ default: return Oe(i);
2878
3185
  }
2879
3186
  }
2880
3187
  static WINDOW_FUNCTION_TYPES = [
@@ -2948,7 +3255,7 @@ var Q = class e {
2948
3255
  let { postAggWindowMeasures: r } = e.categorizeForPostAggregation(t, n);
2949
3256
  return r.length > 0;
2950
3257
  }
2951
- }, St = class {
3258
+ }, At = class {
2952
3259
  constructor(e) {
2953
3260
  this.dateTimeBuilder = e;
2954
3261
  }
@@ -2995,8 +3302,8 @@ var Q = class e {
2995
3302
  l = !0;
2996
3303
  break;
2997
3304
  }
2998
- if (Q.isPostAggregationWindow(e)) {
2999
- let n = Q.getWindowBaseMeasure(e, t);
3305
+ if (Z.isPostAggregationWindow(e)) {
3306
+ let n = Z.getWindowBaseMeasure(e, t);
3000
3307
  if (n) {
3001
3308
  let [e, t] = n.split("."), r = a.get(e)?.measures?.[t];
3002
3309
  if (r && this.isAggregateFunctionType(r.type)) {
@@ -3016,7 +3323,7 @@ var Q = class e {
3016
3323
  let t = e.joinKeys.find((e) => e.targetColumn === o);
3017
3324
  if (t && t.sourceColumnObj) i.push(t.sourceColumnObj);
3018
3325
  else {
3019
- let t = N`${N.identifier(e.cteAlias)}.${N.identifier(o)}`;
3326
+ let t = F`${F.identifier(e.cteAlias)}.${F.identifier(o)}`;
3020
3327
  i.push(t);
3021
3328
  }
3022
3329
  } else {
@@ -3035,7 +3342,7 @@ var Q = class e {
3035
3342
  let r = this.dateTimeBuilder.buildTimeDimensionExpression(t.sourceColumnObj, e.granularity, n);
3036
3343
  i.push(r);
3037
3344
  } else {
3038
- let e = N`${N.identifier(a.cteAlias)}.${N.identifier(o)}`;
3345
+ let e = F`${F.identifier(a.cteAlias)}.${F.identifier(o)}`;
3039
3346
  i.push(e);
3040
3347
  }
3041
3348
  } else {
@@ -3046,13 +3353,13 @@ var Q = class e {
3046
3353
  }
3047
3354
  return i;
3048
3355
  }
3049
- }, Ct = class {
3356
+ }, jt = class {
3050
3357
  dateTimeBuilder;
3051
3358
  filterBuilder;
3052
3359
  groupByBuilder;
3053
3360
  measureBuilder;
3054
3361
  constructor(e) {
3055
- this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder), this.groupByBuilder = new St(this.dateTimeBuilder), this.measureBuilder = new Q(e);
3362
+ this.dateTimeBuilder = new Y(e), this.filterBuilder = new Tt(e, this.dateTimeBuilder), this.groupByBuilder = new At(this.dateTimeBuilder), this.measureBuilder = new Z(e);
3056
3363
  }
3057
3364
  buildResolvedMeasures(e, t, n, r) {
3058
3365
  return this.measureBuilder.buildResolvedMeasures(e, t, n, r);
@@ -3063,24 +3370,24 @@ var Q = class e {
3063
3370
  let [t, a] = e.split("."), o = i.get(t);
3064
3371
  if (o && o.dimensions && o.dimensions[a]) {
3065
3372
  let t = o.dimensions[a];
3066
- r[e] = N`${K(t.sql, n)}`.as(e);
3373
+ r[e] = F`${K(t.sql, n)}`.as(e);
3067
3374
  }
3068
3375
  }
3069
3376
  if (t.measures) {
3070
3377
  let e = this.buildResolvedMeasures(t.measures, i, n);
3071
3378
  for (let n of t.measures) {
3072
3379
  let t = e.get(n);
3073
- t && (r[n] = N`${t()}`.as(n));
3380
+ t && typeof t == "function" && (r[n] = F`${t()}`.as(n));
3074
3381
  }
3075
3382
  }
3076
3383
  if (t.timeDimensions) for (let e of t.timeDimensions) {
3077
3384
  let [t, a] = e.dimension.split("."), o = i.get(t);
3078
3385
  if (o && o.dimensions && o.dimensions[a]) {
3079
3386
  let t = o.dimensions[a], i = this.buildTimeDimensionExpression(t.sql, e.granularity, n);
3080
- r[e.dimension] = N`${i}`.as(e.dimension);
3387
+ r[e.dimension] = F`${i}`.as(e.dimension);
3081
3388
  }
3082
3389
  }
3083
- return Object.keys(r).length === 0 && (r.count = ke()), r;
3390
+ return Object.keys(r).length === 0 && (r.count = Oe()), r;
3084
3391
  }
3085
3392
  buildCalculatedMeasure(e, t, n, r, i) {
3086
3393
  return this.measureBuilder.buildCalculatedMeasure(e, t, n, r, i);
@@ -3116,7 +3423,7 @@ var Q = class e {
3116
3423
  if (s && s.dimensions[i] && e.dateRange) {
3117
3424
  if (r?.preAggregationCTEs && r.preAggregationCTEs.some((e) => e.cube.name === t)) continue;
3118
3425
  if (n.filterCache) {
3119
- let t = ct(e.dimension, e.dateRange), r = n.filterCache.get(t);
3426
+ let t = ht(e.dimension, e.dateRange), r = n.filterCache.get(t);
3120
3427
  if (r) {
3121
3428
  a.push(r);
3122
3429
  continue;
@@ -3141,11 +3448,11 @@ var Q = class e {
3141
3448
  let a = e;
3142
3449
  if (a.and) {
3143
3450
  let e = a.and.map((e) => this.processFilter(e, t, n, r, i)).filter((e) => e !== null);
3144
- return e.length > 0 ? L(...e) : null;
3451
+ return e.length > 0 ? R(...e) : null;
3145
3452
  }
3146
3453
  if (a.or) {
3147
3454
  let e = a.or.map((e) => this.processFilter(e, t, n, r, i)).filter((e) => e !== null);
3148
- return e.length > 0 ? _e(...e) : null;
3455
+ return e.length > 0 ? ge(...e) : null;
3149
3456
  }
3150
3457
  }
3151
3458
  let a = e, [o, s] = a.member.split("."), c = t.get(o);
@@ -3156,7 +3463,7 @@ var Q = class e {
3156
3463
  if (i?.preAggregationCTEs && i.preAggregationCTEs.some((e) => e.cube.name === o)) return null;
3157
3464
  let t = l.type === "time";
3158
3465
  if (n.filterCache) {
3159
- let t = st(e), r = n.filterCache.get(t);
3466
+ let t = mt(e), r = n.filterCache.get(t);
3160
3467
  if (r) return r;
3161
3468
  }
3162
3469
  let r = t ? K(l.sql, n) : typeof l.sql == "function" ? l.sql(n) : l.sql;
@@ -3185,12 +3492,12 @@ var Q = class e {
3185
3492
  ];
3186
3493
  if (e.order && Object.keys(e.order).length > 0) for (let [t, i] of Object.entries(e.order)) {
3187
3494
  if (!r.includes(t)) throw Error(`Cannot order by '${t}': field is not selected in the query`);
3188
- let e = i === "desc" ? Oe(N.identifier(t)) : De(N.identifier(t));
3495
+ let e = i === "desc" ? De(F.identifier(t)) : Ee(F.identifier(t));
3189
3496
  n.push(e);
3190
3497
  }
3191
3498
  if (e.timeDimensions && e.timeDimensions.length > 0) {
3192
3499
  let t = new Set(Object.keys(e.order || {})), r = [...e.timeDimensions].sort((e, t) => e.dimension.localeCompare(t.dimension));
3193
- for (let e of r) t.has(e.dimension) || n.push(De(N.identifier(e.dimension)));
3500
+ for (let e of r) t.has(e.dimension) || n.push(Ee(F.identifier(e.dimension)));
3194
3501
  }
3195
3502
  return n;
3196
3503
  }
@@ -3225,7 +3532,7 @@ var Q = class e {
3225
3532
  buildLogicalFilter(e, t, n) {
3226
3533
  return this.filterBuilder.buildLogicalFilter(e, t, n);
3227
3534
  }
3228
- }, wt = class {
3535
+ }, Mt = class {
3229
3536
  cubes;
3230
3537
  connectivityCache = /* @__PURE__ */ new Map();
3231
3538
  reverseIndex;
@@ -3432,10 +3739,10 @@ var Q = class e {
3432
3739
  buildJoinCondition(e, t, n) {
3433
3740
  let r = [];
3434
3741
  for (let i of e.on) {
3435
- let e = t ? N`${N.identifier(t)}.${N.identifier(i.source.name)}` : at(i.source), a = n ? N`${N.identifier(n)}.${N.identifier(i.target.name)}` : at(i.target), o = i.as || I;
3742
+ let e = t ? F`${F.identifier(t)}.${F.identifier(i.source.name)}` : dt(i.source), a = n ? F`${F.identifier(n)}.${F.identifier(i.target.name)}` : dt(i.target), o = i.as || L;
3436
3743
  r.push(o(e, a));
3437
3744
  }
3438
- return L(...r);
3745
+ return R(...r);
3439
3746
  }
3440
3747
  getReachableCubes(e) {
3441
3748
  let t = new Set([e]), n = [e];
@@ -3462,11 +3769,11 @@ var Q = class e {
3462
3769
  setInCache(e, t) {
3463
3770
  this.connectivityCache.set(e, { path: t });
3464
3771
  }
3465
- }, Tt = class {
3772
+ }, Nt = class {
3466
3773
  resolverCache = /* @__PURE__ */ new WeakMap();
3467
3774
  getResolver(e) {
3468
3775
  let t = this.resolverCache.get(e);
3469
- return t || (t = new wt(e), this.resolverCache.set(e, t)), t;
3776
+ return t || (t = new Mt(e), this.resolverCache.set(e, t)), t;
3470
3777
  }
3471
3778
  analyzeCubeUsage(e) {
3472
3779
  let t = /* @__PURE__ */ new Set();
@@ -3555,9 +3862,9 @@ var Q = class e {
3555
3862
  if (s.has(n)) continue;
3556
3863
  let c = e.get(n);
3557
3864
  if (!c) throw Error(`Cube '${n}' not found`);
3558
- let u = l ? rt(i.relationship) : i.relationship;
3865
+ let u = l ? lt(i.relationship) : i.relationship;
3559
3866
  if (u === "belongsToMany" && i.through) {
3560
- let e = ot(i, r.securityContext);
3867
+ let e = pt(i, r.securityContext);
3561
3868
  o.push({
3562
3869
  cube: c,
3563
3870
  alias: `${n.toLowerCase()}_cube`,
@@ -3574,7 +3881,7 @@ var Q = class e {
3574
3881
  }
3575
3882
  });
3576
3883
  } else {
3577
- let e = a.buildJoinCondition(i, null, null), t = it(u, i.sqlJoinType);
3884
+ let e = a.buildJoinCondition(i, null, null), t = ut(u, i.sqlJoinType);
3578
3885
  o.push({
3579
3886
  cube: c,
3580
3887
  alias: `${n.toLowerCase()}_cube`,
@@ -3632,7 +3939,7 @@ var Q = class e {
3632
3939
  targetColumnObj: e.target
3633
3940
  })), h = void 0;
3634
3941
  }
3635
- let g = this.findPropagatingFilters(r, c, e), _ = new Map([[c.name, c]]), { aggregateMeasures: v, requiredBaseMeasures: y } = Q.categorizeForPostAggregation(f, _), b = [...new Set([...v, ...Array.from(y).filter((e) => e.startsWith(c.name + "."))])];
3942
+ let g = this.findPropagatingFilters(r, c, e), _ = new Map([[c.name, c]]), { aggregateMeasures: v, requiredBaseMeasures: y } = Z.categorizeForPostAggregation(f, _), b = [...new Set([...v, ...Array.from(y).filter((e) => e.startsWith(c.name + "."))])];
3636
3943
  if (b.length > 0) {
3637
3944
  let t = this.expandCalculatedMeasureDependencies(c, b), i = this.findDownstreamJoinKeys(c, r, e);
3638
3945
  a.push({
@@ -3670,7 +3977,7 @@ var Q = class e {
3670
3977
  joinDef: e.joinDef,
3671
3978
  reversed: e.reversed
3672
3979
  }));
3673
- if (!c.slice(0, -1).some((e) => (e.reversed ? rt(e.joinDef.relationship) : e.joinDef.relationship) === "hasMany")) return {
3980
+ if (!c.slice(0, -1).some((e) => (e.reversed ? lt(e.joinDef.relationship) : e.joinDef.relationship) === "hasMany")) return {
3674
3981
  path: c,
3675
3982
  hasIntermediateHasMany: !1,
3676
3983
  intermediateJoins: [],
@@ -3793,6 +4100,7 @@ var Q = class e {
3793
4100
  return Array.from(n);
3794
4101
  }
3795
4102
  extractDependenciesFromTemplate(e, t) {
4103
+ if (e.length > 1e3) return [];
3796
4104
  let n = e.matchAll(/\{([^}]+)\}/g), r = [];
3797
4105
  for (let e of n) {
3798
4106
  let n = e[1].trim();
@@ -3973,7 +4281,7 @@ var Q = class e {
3973
4281
  }
3974
4282
  convertInternalPathToJoinPathSteps(e) {
3975
4283
  return e.map((e) => {
3976
- let t = e.reversed ? rt(e.joinDef.relationship) : e.joinDef.relationship, n = it(t, e.joinDef.sqlJoinType), r = e.joinDef.on.map((e) => ({
4284
+ let t = e.reversed ? lt(e.joinDef.relationship) : e.joinDef.relationship, n = ut(t, e.joinDef.sqlJoinType), r = e.joinDef.on.map((e) => ({
3977
4285
  sourceColumn: e.source.name,
3978
4286
  targetColumn: e.target.name
3979
4287
  })), i = {
@@ -4038,7 +4346,7 @@ var Q = class e {
4038
4346
  suggestion: "Add a dimension to see per-group breakdowns, or add a time dimension with granularity."
4039
4347
  };
4040
4348
  }
4041
- }, Et = class {
4349
+ }, Pt = class {
4042
4350
  constructor(e) {
4043
4351
  this.queryBuilder = e;
4044
4352
  }
@@ -4052,19 +4360,19 @@ var Q = class e {
4052
4360
  }
4053
4361
  } else for (let t of e.joinKeys) if (t.targetColumnObj) {
4054
4362
  c[t.targetColumn] = t.targetColumnObj;
4055
- for (let [e, n] of Object.entries(a.dimensions || {})) n.sql === t.targetColumnObj && e !== t.targetColumn && (c[e] = N`${t.targetColumnObj}`.as(e));
4363
+ for (let [e, n] of Object.entries(a.dimensions || {})) n.sql === t.targetColumnObj && e !== t.targetColumn && (c[e] = F`${t.targetColumnObj}`.as(e));
4056
4364
  }
4057
4365
  if (e.downstreamJoinKeys) for (let t of e.downstreamJoinKeys) for (let e of t.joinKeys) e.sourceColumnObj && (c[e.sourceColumn] = e.sourceColumnObj);
4058
4366
  let l = a.name, u = new Map([[l, a]]), d = this.queryBuilder.buildResolvedMeasures(e.measures, u, n);
4059
4367
  for (let t of e.measures) {
4060
4368
  let [, e] = t.split("."), n = d.get(t);
4061
- n && (c[e] = N`${n()}`.as(e));
4369
+ n && (c[e] = F`${n()}`.as(e));
4062
4370
  }
4063
4371
  if (t.dimensions) for (let e of t.dimensions) {
4064
4372
  let [t, r] = e.split(".");
4065
4373
  if (t === l && a.dimensions && a.dimensions[r]) {
4066
4374
  let e = a.dimensions[r];
4067
- c[r] = N`${this.queryBuilder.buildMeasureExpression({
4375
+ c[r] = F`${this.queryBuilder.buildMeasureExpression({
4068
4376
  sql: e.sql,
4069
4377
  type: "number"
4070
4378
  }, n)}`.as(r);
@@ -4074,7 +4382,7 @@ var Q = class e {
4074
4382
  let [t, r] = e.dimension.split(".");
4075
4383
  if (t === l && a.dimensions && a.dimensions[r]) {
4076
4384
  let t = a.dimensions[r];
4077
- c[r] = N`${this.queryBuilder.buildTimeDimensionExpression(t.sql, e.granularity, n)}`.as(r);
4385
+ c[r] = F`${this.queryBuilder.buildTimeDimensionExpression(t.sql, e.granularity, n)}`.as(r);
4078
4386
  }
4079
4387
  }
4080
4388
  if (Object.keys(c).length === 0) return null;
@@ -4082,8 +4390,8 @@ var Q = class e {
4082
4390
  if (s && e.intermediateJoins) {
4083
4391
  let t = [...e.intermediateJoins].reverse();
4084
4392
  for (let e of t) {
4085
- let t = e.cube.sql(n), r = [I(e.cteJoinColumn, e.joinDef.on[0]?.target)];
4086
- e.securityFilter && r.push(e.securityFilter), f = f.leftJoin(t.from, L(...r));
4393
+ let t = e.cube.sql(n), r = [L(e.cteJoinColumn, e.joinDef.on[0]?.target)];
4394
+ e.securityFilter && r.push(e.securityFilter), f = f.leftJoin(t.from, R(...r));
4087
4395
  }
4088
4396
  }
4089
4397
  let p = r ? {
@@ -4121,7 +4429,7 @@ var Q = class e {
4121
4429
  }
4122
4430
  let g = [];
4123
4431
  if (o.where && g.push(o.where), g.push(...m, ...h), g.length > 0) {
4124
- let e = g.length === 1 ? g[0] : L(...g);
4432
+ let e = g.length === 1 ? g[0] : R(...g);
4125
4433
  f = f.where(e);
4126
4434
  }
4127
4435
  let _ = [], v = /* @__PURE__ */ new Set(), y = (e) => {
@@ -4154,20 +4462,20 @@ var Q = class e {
4154
4462
  if (!r) throw Error(`CTE info not found for cube ${e.cube.name}`);
4155
4463
  let i = [];
4156
4464
  if (r.intermediateJoins && r.intermediateJoins.length > 0) {
4157
- let e = r.intermediateJoins[0], a = this.resolveCTEJoinSourceColumn(r.joinKeys[0], r, n), o = N`${N.identifier(t)}.${N.identifier(e.primaryJoinColumn.name)}`;
4158
- i.push(I(a, o));
4465
+ let e = r.intermediateJoins[0], a = this.resolveCTEJoinSourceColumn(r.joinKeys[0], r, n), o = F`${F.identifier(t)}.${F.identifier(e.primaryJoinColumn.name)}`;
4466
+ i.push(L(a, o));
4159
4467
  } else for (let e of r.joinKeys) {
4160
- let a = this.resolveCTEJoinSourceColumn(e, r, n), o = N`${N.identifier(t)}.${N.identifier(e.targetColumn)}`;
4161
- i.push(I(a, o));
4468
+ let a = this.resolveCTEJoinSourceColumn(e, r, n), o = F`${F.identifier(t)}.${F.identifier(e.targetColumn)}`;
4469
+ i.push(L(a, o));
4162
4470
  }
4163
- return i.length === 1 ? i[0] : L(...i);
4471
+ return i.length === 1 ? i[0] : R(...i);
4164
4472
  }
4165
4473
  resolveCTEJoinSourceColumn(e, t, n) {
4166
4474
  if (!e) throw Error(`Missing join key while building CTE join condition for '${t.cube.name}'`);
4167
- let r = e.sourceColumnObj || N.identifier(e.sourceColumn);
4475
+ let r = e.sourceColumnObj || F.identifier(e.sourceColumn);
4168
4476
  if (!e.sourceColumnObj || !n.preAggregationCTEs) return r;
4169
4477
  for (let r of n.preAggregationCTEs) if (r.cube.name !== t.cube.name) {
4170
- for (let [t, n] of Object.entries(r.cube.dimensions || {})) if (typeof n.sql != "function" && n.sql === e.sourceColumnObj) return N`${N.identifier(r.cteAlias)}.${N.identifier(t)}`;
4478
+ for (let [t, n] of Object.entries(r.cube.dimensions || {})) if (typeof n.sql != "function" && n.sql === e.sourceColumnObj) return F`${F.identifier(r.cteAlias)}.${F.identifier(t)}`;
4171
4479
  }
4172
4480
  return r;
4173
4481
  }
@@ -4179,24 +4487,24 @@ var Q = class e {
4179
4487
  i.push(...o);
4180
4488
  }
4181
4489
  if (i.length === 0) return null;
4182
- let a = i.length === 1 ? i[0] : L(...i), o = e.joinConditions;
4490
+ let a = i.length === 1 ? i[0] : R(...i), o = e.joinConditions;
4183
4491
  if (o.length === 1) {
4184
4492
  let { source: e, target: n } = o[0];
4185
- return N`${n} IN ${t.db.select({ pk: e }).from(r.from).where(a)}`;
4493
+ return F`${n} IN ${t.db.select({ pk: e }).from(r.from).where(a)}`;
4186
4494
  } else {
4187
- let e = L(...o.map((e) => I(e.source, e.target)), a);
4188
- return N`EXISTS ${t.db.select({ one: N`1` }).from(r.from).where(e)}`;
4495
+ let e = R(...o.map((e) => L(e.source, e.target)), a);
4496
+ return F`EXISTS ${t.db.select({ one: F`1` }).from(r.from).where(e)}`;
4189
4497
  }
4190
4498
  }
4191
4499
  };
4192
4500
  //#endregion
4193
4501
  //#region src/server/gap-filler.ts
4194
- function Dt(e, t, n) {
4195
- let r = [], i = Ot(new Date(e), n), a = Ot(new Date(t), n);
4196
- for (; i <= a && r.length < 1e4;) r.push(new Date(i)), i = kt(i, n);
4502
+ function Ft(e, t, n) {
4503
+ let r = [], i = It(new Date(e), n), a = It(new Date(t), n);
4504
+ for (; i <= a && r.length < 1e4;) r.push(new Date(i)), i = Lt(i, n);
4197
4505
  return r;
4198
4506
  }
4199
- function Ot(e, t) {
4507
+ function It(e, t) {
4200
4508
  let n = new Date(e);
4201
4509
  switch (t) {
4202
4510
  case "second":
@@ -4230,7 +4538,7 @@ function Ot(e, t) {
4230
4538
  }
4231
4539
  return n;
4232
4540
  }
4233
- function kt(e, t) {
4541
+ function Lt(e, t) {
4234
4542
  let n = new Date(e);
4235
4543
  switch (t) {
4236
4544
  case "second":
@@ -4260,7 +4568,7 @@ function kt(e, t) {
4260
4568
  }
4261
4569
  return n;
4262
4570
  }
4263
- function At(e) {
4571
+ function Rt(e) {
4264
4572
  if (e instanceof Date) return e.toISOString();
4265
4573
  if (typeof e == "string") {
4266
4574
  let t = new Date(e);
@@ -4268,15 +4576,15 @@ function At(e) {
4268
4576
  }
4269
4577
  return String(e);
4270
4578
  }
4271
- function jt(e, t) {
4579
+ function zt(e, t) {
4272
4580
  return t.length === 0 ? "__all__" : t.map((t) => String(e[t] ?? "")).join("|||");
4273
4581
  }
4274
- function Mt(e, t) {
4275
- let { timeDimensionKey: n, granularity: r, dateRange: i, fillValue: a, measures: o, dimensions: s } = t, c = Dt(i[0], i[1], r);
4582
+ function Bt(e, t) {
4583
+ let { timeDimensionKey: n, granularity: r, dateRange: i, fillValue: a, measures: o, dimensions: s } = t, c = Ft(i[0], i[1], r);
4276
4584
  if (c.length === 0) return e;
4277
4585
  let l = /* @__PURE__ */ new Map();
4278
4586
  for (let t of e) {
4279
- let e = jt(t, s), r = At(t[n]);
4587
+ let e = zt(t, s), r = Rt(t[n]);
4280
4588
  l.has(e) || l.set(e, /* @__PURE__ */ new Map()), l.get(e).set(r, t);
4281
4589
  }
4282
4590
  l.size === 0 && s.length === 0 && l.set("__all__", /* @__PURE__ */ new Map());
@@ -4296,7 +4604,7 @@ function Mt(e, t) {
4296
4604
  }
4297
4605
  return u;
4298
4606
  }
4299
- function Nt(e) {
4607
+ function Vt(e) {
4300
4608
  if (!e) return null;
4301
4609
  if (Array.isArray(e)) {
4302
4610
  if (e.length < 2) return null;
@@ -4306,7 +4614,7 @@ function Nt(e) {
4306
4614
  let t = new Date(e);
4307
4615
  return isNaN(t.getTime()) ? null : [t, t];
4308
4616
  }
4309
- function Pt(e, t, n) {
4617
+ function Ht(e, t, n) {
4310
4618
  if (!t.timeDimensions || t.timeDimensions.length === 0) return e;
4311
4619
  let r = t.timeDimensions.filter((e) => {
4312
4620
  let t = e.fillMissingDates !== !1, n = e.granularity && e.dateRange;
@@ -4315,7 +4623,7 @@ function Pt(e, t, n) {
4315
4623
  if (r.length === 0) return e;
4316
4624
  let i = t.fillMissingDatesValue === void 0 ? 0 : t.fillMissingDatesValue, a = new Set(t.timeDimensions.map((e) => e.dimension)), o = (t.dimensions || []).filter((e) => !a.has(e)), s = e;
4317
4625
  for (let e of r) {
4318
- let t = Nt(e.dateRange);
4626
+ let t = Vt(e.dateRange);
4319
4627
  if (!t) continue;
4320
4628
  let r = {
4321
4629
  timeDimensionKey: e.dimension,
@@ -4325,16 +4633,16 @@ function Pt(e, t, n) {
4325
4633
  measures: n,
4326
4634
  dimensions: o
4327
4635
  };
4328
- s = Mt(s, r);
4636
+ s = Bt(s, r);
4329
4637
  }
4330
4638
  return s;
4331
4639
  }
4332
4640
  //#endregion
4333
4641
  //#region src/server/builders/comparison-query-builder.ts
4334
- var Ft = class {
4642
+ var Ut = class {
4335
4643
  dateTimeBuilder;
4336
4644
  constructor(e) {
4337
- this.dateTimeBuilder = new X(e);
4645
+ this.dateTimeBuilder = new Y(e);
4338
4646
  }
4339
4647
  hasComparison(e) {
4340
4648
  return e.timeDimensions?.some((e) => e.compareDateRange && e.compareDateRange.length >= 2) ?? !1;
@@ -4462,11 +4770,11 @@ var Ft = class {
4462
4770
  return typeof i == "string" && typeof a == "string" ? new Date(i).getTime() - new Date(a).getTime() : 0;
4463
4771
  });
4464
4772
  }
4465
- }, It = class {
4773
+ }, Wt = class {
4466
4774
  filterBuilder;
4467
4775
  dateTimeBuilder;
4468
4776
  constructor(e) {
4469
- this.databaseAdapter = e, this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder);
4777
+ this.databaseAdapter = e, this.dateTimeBuilder = new Y(e), this.filterBuilder = new Tt(e, this.dateTimeBuilder);
4470
4778
  }
4471
4779
  hasFunnel(e) {
4472
4780
  return e.funnel !== void 0 && e.funnel.steps.length >= 2;
@@ -4501,7 +4809,7 @@ var Ft = class {
4501
4809
  if (i.name || n.push(`Step ${r} must have a name`), "cube" in i && i.cube && (t.get(i.cube) || n.push(`Step ${r} cube not found: ${i.cube}`)), i.filter) {
4502
4810
  let a;
4503
4811
  "cube" in i && i.cube ? a = i.cube : typeof e.bindingKey == "string" && ([a] = e.bindingKey.split("."));
4504
- let o = a ? new wt(t) : null, s = Array.isArray(i.filter) ? i.filter : [i.filter];
4812
+ let o = a ? new Mt(t) : null, s = Array.isArray(i.filter) ? i.filter : [i.filter];
4505
4813
  for (let e of s) if ("member" in e) {
4506
4814
  let [i, s] = e.member.split("."), c = t.get(i);
4507
4815
  if (!c) n.push(`Step ${r} filter cube not found: ${i}`);
@@ -4564,7 +4872,7 @@ var Ft = class {
4564
4872
  return t;
4565
4873
  }
4566
4874
  resolveSteps(e, t, n) {
4567
- let r = new wt(t);
4875
+ let r = new Mt(t);
4568
4876
  return e.steps.map((i, a) => {
4569
4877
  let o = this.resolveCubeForStep(i, e, t), s = this.resolveBindingKey(e, o, n), c = this.resolveTimeDimension(e, o, n), l = this.buildStepFilters(i, o, t, n), u = this.extractFilterCubeNames(i), d = [];
4570
4878
  for (let e of u) if (e !== o.name) {
@@ -4655,15 +4963,15 @@ var Ft = class {
4655
4963
  a && i.push(a);
4656
4964
  }
4657
4965
  }
4658
- return i.length === 0 ? null : i.length === 1 ? i[0] : o ? L(...i) : N`(${N.join(i, N` OR `)})`;
4966
+ return i.length === 0 ? null : i.length === 1 ? i[0] : o ? R(...i) : F`(${F.join(i, F` OR `)})`;
4659
4967
  }
4660
4968
  let o = e, [s, c] = o.member.split("."), l = o.dateRange !== void 0;
4661
4969
  if (o.operator !== "set" && o.operator !== "notSet" && !l && (!o.values || o.values.length === 0 || o.values[0] === void 0 || o.values[0] === "")) return null;
4662
4970
  let u = n.get(s);
4663
4971
  if (!u) return null;
4664
4972
  if (s !== t.name) {
4665
- let e = new wt(n).findPath(t.name, s);
4666
- if (!e || e.length === 0) return console.warn(`Funnel filter: Cannot filter by '${s}.${c}' in step using '${t.name}'. No join path found. Filter will be skipped.`), null;
4973
+ let e = new Mt(n).findPath(t.name, s);
4974
+ if (!e || e.length === 0) return console.warn(`Funnel filter: Cannot filter by '${String(s).replace(/\n|\r/g, "")}.${String(c).replace(/\n|\r/g, "")}' in step using '${String(t.name).replace(/\n|\r/g, "")}'. No join path found. Filter will be skipped.`), null;
4667
4975
  }
4668
4976
  let d = u.dimensions?.[c];
4669
4977
  if (!d) return null;
@@ -4677,11 +4985,11 @@ var Ft = class {
4677
4985
  let n = `step_${e.index}`, r = e.cube.sql(t), i = [];
4678
4986
  r.where && i.push(r.where), i.push(...e.filterConditions);
4679
4987
  let a = t.db.select({
4680
- binding_key: N`${e.bindingKeyExpr}`.as("binding_key"),
4681
- step_time: N`MIN(${e.timeExpr})`.as("step_time")
4988
+ binding_key: F`${e.bindingKeyExpr}`.as("binding_key"),
4989
+ step_time: F`MIN(${e.timeExpr})`.as("step_time")
4682
4990
  }).from(r.from);
4683
4991
  if (a = this.addCrossJoinsToQuery(a, e, t, i), i.length > 0) {
4684
- let e = i.length === 1 ? i[0] : L(...i);
4992
+ let e = i.length === 1 ? i[0] : R(...i);
4685
4993
  a = a.where(e);
4686
4994
  }
4687
4995
  return a = a.groupBy(e.bindingKeyExpr), t.db.$with(n).as(a);
@@ -4689,18 +4997,18 @@ var Ft = class {
4689
4997
  buildSubsequentStepCTE(e, t, n) {
4690
4998
  let r = `step_${e.index}`, i = `step_${e.index - 1}`, a = e.cube.sql(t), o = [];
4691
4999
  a.where && o.push(a.where), o.push(...e.filterConditions);
4692
- let s = N`${N.identifier(i)}.step_time`, c = N`${e.timeExpr} > ${s}`;
5000
+ let s = F`${F.identifier(i)}.step_time`, c = F`${e.timeExpr} > ${s}`;
4693
5001
  if (e.timeToConvert) {
4694
5002
  let t = this.databaseAdapter.buildDateAddInterval(s, e.timeToConvert);
4695
- c = N`${c} AND ${e.timeExpr} <= ${t}`;
5003
+ c = F`${c} AND ${e.timeExpr} <= ${t}`;
4696
5004
  }
4697
5005
  o.push(c);
4698
5006
  let l = t.db.select({
4699
- binding_key: N`${e.bindingKeyExpr}`.as("binding_key"),
4700
- step_time: N`MIN(${e.timeExpr})`.as("step_time")
4701
- }).from(a.from).innerJoin(n, N`${e.bindingKeyExpr} = ${N.identifier(i)}.binding_key`);
5007
+ binding_key: F`${e.bindingKeyExpr}`.as("binding_key"),
5008
+ step_time: F`MIN(${e.timeExpr})`.as("step_time")
5009
+ }).from(a.from).innerJoin(n, F`${e.bindingKeyExpr} = ${F.identifier(i)}.binding_key`);
4702
5010
  if (l = this.addCrossJoinsToQuery(l, e, t, o), o.length > 0) {
4703
- let e = o.length === 1 ? o[0] : L(...o);
5011
+ let e = o.length === 1 ? o[0] : R(...o);
4704
5012
  l = l.where(e);
4705
5013
  }
4706
5014
  return l = l.groupBy(e.bindingKeyExpr), t.db.$with(r).as(l);
@@ -4709,49 +5017,46 @@ var Ft = class {
4709
5017
  if (t.joinedCubes.length === 0) return e;
4710
5018
  for (let i of t.joinedCubes) for (let t of i.joinPath) {
4711
5019
  let a = t.joinDef, o = [];
4712
- for (let e of a.on) e.as ? o.push(e.as(e.source, e.target)) : o.push(I(e.source, e.target));
4713
- let s = o.length === 1 ? o[0] : L(...o), c = i.cube.sql(n);
5020
+ for (let e of a.on) e.as ? o.push(e.as(e.source, e.target)) : o.push(L(e.source, e.target));
5021
+ let s = o.length === 1 ? o[0] : R(...o), c = i.cube.sql(n);
4714
5022
  e = e.leftJoin(c.from, s), c.where && r.push(c.where);
4715
5023
  }
4716
5024
  return e;
4717
5025
  }
4718
5026
  buildFunnelResultsCTE(e, t, n, r) {
4719
5027
  let i = {
4720
- binding_key: N`s0.binding_key`,
4721
- step_0_time: N`s0.step_time`
4722
- };
4723
- for (let e = 1; e < t.length; e++) i[`step_${e}_time`] = N`s${N.raw(String(e))}.step_time`;
4724
- let a = N`${N.identifier("step_0")} s0`;
4725
- for (let e = 1; e < t.length; e++) a = N`${a}
4726
- LEFT JOIN ${N.identifier(`step_${e}`)} s${N.raw(String(e))} ON s0.binding_key = s${N.raw(String(e))}.binding_key`;
4727
- let o = Object.entries(i).map(([e, t]) => N`${t} AS ${N.identifier(e)}`), s = N`SELECT ${N.join(o, N`, `)} FROM ${a}`, c = {
4728
- binding_key: N`binding_key`.as("binding_key"),
4729
- step_0_time: N`step_0_time`.as("step_0_time")
5028
+ binding_key: F`s0.binding_key`,
5029
+ step_0_time: F`s0.step_time`
4730
5030
  };
4731
- for (let e = 1; e < t.length; e++) c[`step_${e}_time`] = N`${N.identifier(`step_${e}_time`)}`.as(`step_${e}_time`);
4732
- return r.db.$with("funnel_joined").as(r.db.select(c).from(N`(${s}) as _inner`));
5031
+ for (let e = 1; e < t.length; e++) i[`step_${e}_time`] = F`s${F.raw(String(e))}.step_time`;
5032
+ let a = F`${F.identifier("step_0")} s0`;
5033
+ for (let e = 1; e < t.length; e++) a = F`${a}
5034
+ LEFT JOIN ${F.identifier(`step_${e}`)} s${F.raw(String(e))} ON s0.binding_key = s${F.raw(String(e))}.binding_key`;
5035
+ let o = Object.entries(i).map(([e, t]) => F`${t} AS ${F.identifier(e)}`), s = F`SELECT ${F.join(o, F`, `)} FROM ${a}`;
5036
+ return r.db.$with("funnel_joined").as(s);
4733
5037
  }
4734
5038
  buildAggregationCTE(e, t, n, r, i) {
4735
5039
  let a = {};
4736
- a.step_0_count = N`COUNT(*)`.as("step_0_count");
4737
- for (let e = 1; e < n.length; e++) a[`step_${e}_count`] = N`COUNT(${N.identifier(`step_${e}_time`)})`.as(`step_${e}_count`);
5040
+ a.step_0_count = F`COUNT(*)`.as("step_0_count");
5041
+ for (let e = 1; e < n.length; e++) a[`step_${e}_count`] = F`COUNT(${F.identifier(`step_${e}_time`)})`.as(`step_${e}_count`);
4738
5042
  if (r.includeTimeMetrics) for (let e = 1; e < n.length; e++) {
4739
- let t = N.identifier(`step_${e}_time`), n = N.identifier(`step_${e - 1}_time`), r = this.databaseAdapter.buildTimeDifferenceSeconds(N`${t}`, N`${n}`), i = N`${t} IS NOT NULL`;
4740
- a[`step_${e}_avg_seconds`] = this.databaseAdapter.buildConditionalAggregation("avg", r, i).as(`step_${e}_avg_seconds`), a[`step_${e}_min_seconds`] = this.databaseAdapter.buildConditionalAggregation("min", r, i).as(`step_${e}_min_seconds`), a[`step_${e}_max_seconds`] = this.databaseAdapter.buildConditionalAggregation("max", r, i).as(`step_${e}_max_seconds`);
4741
- let o = this.databaseAdapter.getCapabilities(), s = this.databaseAdapter.buildPercentile(r, 50);
4742
- s && o.supportsPercentileSubqueries && (a[`step_${e}_median_seconds`] = N`(SELECT ${s} FROM ${N.identifier("funnel_joined")} WHERE ${t} IS NOT NULL)`.as(`step_${e}_median_seconds`));
4743
- let c = this.databaseAdapter.buildPercentile(r, 90);
4744
- c && o.supportsPercentileSubqueries && (a[`step_${e}_p90_seconds`] = N`(SELECT ${c} FROM ${N.identifier("funnel_joined")} WHERE ${t} IS NOT NULL)`.as(`step_${e}_p90_seconds`));
5043
+ let t = F.identifier(`step_${e}_time`), n = F.identifier(`step_${e - 1}_time`), r = this.databaseAdapter.buildTimeDifferenceSeconds(F`${t}`, F`${n}`), i = F`${t} IS NOT NULL`;
5044
+ if (a[`step_${e}_avg_seconds`] = this.databaseAdapter.buildConditionalAggregation("avg", r, i).as(`step_${e}_avg_seconds`), a[`step_${e}_min_seconds`] = this.databaseAdapter.buildConditionalAggregation("min", r, i).as(`step_${e}_min_seconds`), a[`step_${e}_max_seconds`] = this.databaseAdapter.buildConditionalAggregation("max", r, i).as(`step_${e}_max_seconds`), this.databaseAdapter.getCapabilities().supportsPercentileSubqueries) {
5045
+ let n = this.databaseAdapter.buildPercentile(r, 50);
5046
+ n && (a[`step_${e}_median_seconds`] = F`(SELECT ${n} FROM ${F.identifier("funnel_joined")} WHERE ${t} IS NOT NULL)`.as(`step_${e}_median_seconds`));
5047
+ let i = this.databaseAdapter.buildPercentile(r, 90);
5048
+ i && (a[`step_${e}_p90_seconds`] = F`(SELECT ${i} FROM ${F.identifier("funnel_joined")} WHERE ${t} IS NOT NULL)`.as(`step_${e}_p90_seconds`));
5049
+ }
4745
5050
  }
4746
5051
  let o = i.db.select(a).from(e);
4747
5052
  return i.db.$with("funnel_metrics").as(o);
4748
5053
  }
4749
- }, Lt = class {
5054
+ }, Gt = class {
4750
5055
  filterBuilder;
4751
5056
  dateTimeBuilder;
4752
5057
  databaseAdapter;
4753
5058
  constructor(e) {
4754
- this.databaseAdapter = e, this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder);
5059
+ this.databaseAdapter = e, this.dateTimeBuilder = new Y(e), this.filterBuilder = new Tt(e, this.dateTimeBuilder);
4755
5060
  }
4756
5061
  hasFlow(e) {
4757
5062
  return e.flow !== void 0 && e.flow.startingStep !== void 0 && e.flow.eventDimension !== void 0;
@@ -4913,7 +5218,7 @@ var Ft = class {
4913
5218
  let r = this.buildFilterCondition(e, t, n);
4914
5219
  r && i.push(r);
4915
5220
  }
4916
- return i.length === 0 ? null : i.length === 1 ? i[0] : "and" in e ? L(...i) : N`(${N.join(i, N` OR `)})`;
5221
+ return i.length === 0 ? null : i.length === 1 ? i[0] : "and" in e ? R(...i) : F`(${F.join(i, F` OR `)})`;
4917
5222
  }
4918
5223
  if ("type" in e && "filters" in e) {
4919
5224
  let r = e, i = [];
@@ -4921,7 +5226,7 @@ var Ft = class {
4921
5226
  let r = this.buildFilterCondition(e, t, n);
4922
5227
  r && i.push(r);
4923
5228
  }
4924
- return i.length === 0 ? null : i.length === 1 ? i[0] : r.type === "and" ? L(...i) : N`(${N.join(i, N` OR `)})`;
5229
+ return i.length === 0 ? null : i.length === 1 ? i[0] : r.type === "and" ? R(...i) : F`(${F.join(i, F` OR `)})`;
4925
5230
  }
4926
5231
  let r = e, [, i] = r.member.split("."), a = t.dimensions?.[i];
4927
5232
  if (!a) return null;
@@ -4932,13 +5237,13 @@ var Ft = class {
4932
5237
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o, startingStepFilters: s } = t, c = [];
4933
5238
  r.where && c.push(r.where), c.push(...s);
4934
5239
  let l = n.db.select({
4935
- binding_key: N`${i}`.as("binding_key"),
4936
- start_time: N`MIN(${a})`.as("start_time"),
4937
- event_type: N`${o}`.as("event_type"),
4938
- event_path: N`${o}`.as("event_path")
5240
+ binding_key: F`${i}`.as("binding_key"),
5241
+ start_time: F`MIN(${a})`.as("start_time"),
5242
+ event_type: F`${o}`.as("event_type"),
5243
+ event_path: F`${o}`.as("event_path")
4939
5244
  }).from(r.from);
4940
5245
  if (c.length > 0) {
4941
- let e = c.length === 1 ? c[0] : L(...c);
5246
+ let e = c.length === 1 ? c[0] : R(...c);
4942
5247
  l = l.where(e);
4943
5248
  }
4944
5249
  return l = l.groupBy(i, o), e.entityLimit && (l = l.limit(e.entityLimit)), n.db.$with("starting_entities").as(l);
@@ -4947,18 +5252,18 @@ var Ft = class {
4947
5252
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
4948
5253
  for (let t = 1; t <= e.stepsBefore; t++) {
4949
5254
  let e = t === 1 ? "starting_entities" : `before_step_${t - 1}`, l = t === 1 ? "start_time" : "step_time", u = `before_step_${t}`, d = [];
4950
- r.where && d.push(r.where), d.push(N`${i} = ${N.identifier(e)}.binding_key`, N`${a} < ${N.identifier(e)}.${N.identifier(l)}`);
4951
- let f = d.length === 1 ? d[0] : L(...d), p = c ? N`${o} || ${"→"} || ${N.identifier(e)}.event_path` : N`${o}`, m = n.db.select({
4952
- binding_key: N`${i}`.as("binding_key"),
4953
- step_time: N`${a}`.as("step_time"),
4954
- event_type: N`${o}`.as("event_type"),
5255
+ r.where && d.push(r.where), d.push(F`${i} = ${F.identifier(e)}.binding_key`, F`${a} < ${F.identifier(e)}.${F.identifier(l)}`);
5256
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${o} || ${"→"} || ${F.identifier(e)}.event_path` : F`${o}`, m = n.db.select({
5257
+ binding_key: F`${i}`.as("binding_key"),
5258
+ step_time: F`${a}`.as("step_time"),
5259
+ event_type: F`${o}`.as("event_type"),
4955
5260
  event_path: p.as("event_path")
4956
- }).from(r.from).where(f).orderBy(N`${a} DESC`).limit(1), h = n.db.$with(u).as(n.db.select({
4957
- binding_key: N`e.binding_key`.as("binding_key"),
4958
- step_time: N`e.step_time`.as("step_time"),
4959
- event_type: N`e.event_type`.as("event_type"),
4960
- event_path: N`e.event_path`.as("event_path")
4961
- }).from(N`${N.identifier(e)}`).crossJoinLateral(m.as("e")));
5261
+ }).from(r.from).where(f).orderBy(F`${a} DESC`).limit(1), h = n.db.$with(u).as(n.db.select({
5262
+ binding_key: F`e.binding_key`.as("binding_key"),
5263
+ step_time: F`e.step_time`.as("step_time"),
5264
+ event_type: F`e.event_type`.as("event_type"),
5265
+ event_path: F`e.event_path`.as("event_path")
5266
+ }).from(F`${F.identifier(e)}`).crossJoinLateral(m.as("e")));
4962
5267
  s.push(h);
4963
5268
  }
4964
5269
  return s;
@@ -4967,18 +5272,18 @@ var Ft = class {
4967
5272
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
4968
5273
  for (let t = 1; t <= e.stepsAfter; t++) {
4969
5274
  let e = t === 1 ? "starting_entities" : `after_step_${t - 1}`, l = t === 1 ? "start_time" : "step_time", u = `after_step_${t}`, d = [];
4970
- r.where && d.push(r.where), d.push(N`${i} = ${N.identifier(e)}.binding_key`, N`${a} > ${N.identifier(e)}.${N.identifier(l)}`);
4971
- let f = d.length === 1 ? d[0] : L(...d), p = c ? N`${N.identifier(e)}.event_path || ${"→"} || ${o}` : N`${o}`, m = n.db.select({
4972
- binding_key: N`${i}`.as("binding_key"),
4973
- step_time: N`${a}`.as("step_time"),
4974
- event_type: N`${o}`.as("event_type"),
5275
+ r.where && d.push(r.where), d.push(F`${i} = ${F.identifier(e)}.binding_key`, F`${a} > ${F.identifier(e)}.${F.identifier(l)}`);
5276
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${F.identifier(e)}.event_path || ${"→"} || ${o}` : F`${o}`, m = n.db.select({
5277
+ binding_key: F`${i}`.as("binding_key"),
5278
+ step_time: F`${a}`.as("step_time"),
5279
+ event_type: F`${o}`.as("event_type"),
4975
5280
  event_path: p.as("event_path")
4976
- }).from(r.from).where(f).orderBy(N`${a} ASC`).limit(1), h = n.db.$with(u).as(n.db.select({
4977
- binding_key: N`e.binding_key`.as("binding_key"),
4978
- step_time: N`e.step_time`.as("step_time"),
4979
- event_type: N`e.event_type`.as("event_type"),
4980
- event_path: N`e.event_path`.as("event_path")
4981
- }).from(N`${N.identifier(e)}`).crossJoinLateral(m.as("e")));
5281
+ }).from(r.from).where(f).orderBy(F`${a} ASC`).limit(1), h = n.db.$with(u).as(n.db.select({
5282
+ binding_key: F`e.binding_key`.as("binding_key"),
5283
+ step_time: F`e.step_time`.as("step_time"),
5284
+ event_type: F`e.event_type`.as("event_type"),
5285
+ event_path: F`e.event_path`.as("event_path")
5286
+ }).from(F`${F.identifier(e)}`).crossJoinLateral(m.as("e")));
4982
5287
  s.push(h);
4983
5288
  }
4984
5289
  return s;
@@ -4987,19 +5292,19 @@ var Ft = class {
4987
5292
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
4988
5293
  for (let t = 1; t <= e.stepsBefore; t++) {
4989
5294
  let e = t === 1 ? "starting_entities" : `before_step_${t - 1}`, l = t === 1 ? "start_time" : "step_time", u = `before_step_${t}`, d = [];
4990
- r.where && d.push(r.where), d.push(N`${a} < ${N.identifier(e)}.${N.identifier(l)}`);
4991
- let f = d.length === 1 ? d[0] : L(...d), p = c ? N`${o} || ${"→"} || ${N.identifier(e)}.event_path` : N`${o}`, m = n.db.select({
4992
- binding_key: N`${i}`.as("binding_key"),
4993
- step_time: N`${a}`.as("step_time"),
4994
- event_type: N`${o}`.as("event_type"),
5295
+ r.where && d.push(r.where), d.push(F`${a} < ${F.identifier(e)}.${F.identifier(l)}`);
5296
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${o} || ${"→"} || ${F.identifier(e)}.event_path` : F`${o}`, m = n.db.select({
5297
+ binding_key: F`${i}`.as("binding_key"),
5298
+ step_time: F`${a}`.as("step_time"),
5299
+ event_type: F`${o}`.as("event_type"),
4995
5300
  event_path: p.as("event_path"),
4996
- rn: N`ROW_NUMBER() OVER (PARTITION BY ${i} ORDER BY ${a} DESC)`.as("rn")
4997
- }).from(r.from).innerJoin(N`${N.identifier(e)}`, N`${i} = ${N.identifier(e)}.binding_key`).where(f), h = n.db.select({
4998
- binding_key: N`binding_key`.as("binding_key"),
4999
- step_time: N`step_time`.as("step_time"),
5000
- event_type: N`event_type`.as("event_type"),
5001
- event_path: N`event_path`.as("event_path")
5002
- }).from(m.as("ranked")).where(N`rn = 1`);
5301
+ rn: F`ROW_NUMBER() OVER (PARTITION BY ${i} ORDER BY ${a} DESC)`.as("rn")
5302
+ }).from(r.from).innerJoin(F`${F.identifier(e)}`, F`${i} = ${F.identifier(e)}.binding_key`).where(f), h = n.db.select({
5303
+ binding_key: F`binding_key`.as("binding_key"),
5304
+ step_time: F`step_time`.as("step_time"),
5305
+ event_type: F`event_type`.as("event_type"),
5306
+ event_path: F`event_path`.as("event_path")
5307
+ }).from(m.as("ranked")).where(F`rn = 1`);
5003
5308
  s.push(n.db.$with(u).as(h));
5004
5309
  }
5005
5310
  return s;
@@ -5008,19 +5313,19 @@ var Ft = class {
5008
5313
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
5009
5314
  for (let t = 1; t <= e.stepsAfter; t++) {
5010
5315
  let e = t === 1 ? "starting_entities" : `after_step_${t - 1}`, l = t === 1 ? "start_time" : "step_time", u = `after_step_${t}`, d = [];
5011
- r.where && d.push(r.where), d.push(N`${a} > ${N.identifier(e)}.${N.identifier(l)}`);
5012
- let f = d.length === 1 ? d[0] : L(...d), p = c ? N`${N.identifier(e)}.event_path || ${"→"} || ${o}` : N`${o}`, m = n.db.select({
5013
- binding_key: N`${i}`.as("binding_key"),
5014
- step_time: N`${a}`.as("step_time"),
5015
- event_type: N`${o}`.as("event_type"),
5316
+ r.where && d.push(r.where), d.push(F`${a} > ${F.identifier(e)}.${F.identifier(l)}`);
5317
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${F.identifier(e)}.event_path || ${"→"} || ${o}` : F`${o}`, m = n.db.select({
5318
+ binding_key: F`${i}`.as("binding_key"),
5319
+ step_time: F`${a}`.as("step_time"),
5320
+ event_type: F`${o}`.as("event_type"),
5016
5321
  event_path: p.as("event_path"),
5017
- rn: N`ROW_NUMBER() OVER (PARTITION BY ${i} ORDER BY ${a} ASC)`.as("rn")
5018
- }).from(r.from).innerJoin(N`${N.identifier(e)}`, N`${i} = ${N.identifier(e)}.binding_key`).where(f), h = n.db.select({
5019
- binding_key: N`binding_key`.as("binding_key"),
5020
- step_time: N`step_time`.as("step_time"),
5021
- event_type: N`event_type`.as("event_type"),
5022
- event_path: N`event_path`.as("event_path")
5023
- }).from(m.as("ranked")).where(N`rn = 1`);
5322
+ rn: F`ROW_NUMBER() OVER (PARTITION BY ${i} ORDER BY ${a} ASC)`.as("rn")
5323
+ }).from(r.from).innerJoin(F`${F.identifier(e)}`, F`${i} = ${F.identifier(e)}.binding_key`).where(f), h = n.db.select({
5324
+ binding_key: F`binding_key`.as("binding_key"),
5325
+ step_time: F`step_time`.as("step_time"),
5326
+ event_type: F`event_type`.as("event_type"),
5327
+ event_path: F`event_path`.as("event_path")
5328
+ }).from(m.as("ranked")).where(F`rn = 1`);
5024
5329
  s.push(n.db.$with(u).as(h));
5025
5330
  }
5026
5331
  return s;
@@ -5029,27 +5334,27 @@ var Ft = class {
5029
5334
  let n = [], r = e.outputMode === "sunburst";
5030
5335
  for (let t = e.stepsBefore; t >= 1; t--) {
5031
5336
  let e = -t, i = `before_step_${t}`;
5032
- r ? n.push(N`
5337
+ r ? n.push(F`
5033
5338
  SELECT
5034
- ${N.raw(`'before_${t}_'`)} || event_path AS node_id,
5339
+ ${F.raw(`'before_${t}_'`)} || event_path AS node_id,
5035
5340
  event_type AS name,
5036
- ${N.raw(String(e))} AS layer,
5341
+ ${F.raw(String(e))} AS layer,
5037
5342
  COUNT(*) AS value
5038
- FROM ${N.identifier(i)}
5343
+ FROM ${F.identifier(i)}
5039
5344
  GROUP BY event_path, event_type
5040
- `) : n.push(N`
5345
+ `) : n.push(F`
5041
5346
  SELECT
5042
- ${N.raw(`'before_${t}_'`)} || event_type AS node_id,
5347
+ ${F.raw(`'before_${t}_'`)} || event_type AS node_id,
5043
5348
  event_type AS name,
5044
- ${N.raw(String(e))} AS layer,
5349
+ ${F.raw(String(e))} AS layer,
5045
5350
  COUNT(*) AS value
5046
- FROM ${N.identifier(i)}
5351
+ FROM ${F.identifier(i)}
5047
5352
  GROUP BY event_type
5048
5353
  `);
5049
5354
  }
5050
- n.push(N`
5355
+ n.push(F`
5051
5356
  SELECT
5052
- ${N.raw("'start_'")} || event_type AS node_id,
5357
+ ${F.raw("'start_'")} || event_type AS node_id,
5053
5358
  event_type AS name,
5054
5359
  0 AS layer,
5055
5360
  COUNT(*) AS value
@@ -5058,82 +5363,82 @@ var Ft = class {
5058
5363
  `);
5059
5364
  for (let t = 1; t <= e.stepsAfter; t++) {
5060
5365
  let e = t, i = `after_step_${t}`;
5061
- r ? n.push(N`
5366
+ r ? n.push(F`
5062
5367
  SELECT
5063
- ${N.raw(`'after_${t}_'`)} || event_path AS node_id,
5368
+ ${F.raw(`'after_${t}_'`)} || event_path AS node_id,
5064
5369
  event_type AS name,
5065
- ${N.raw(String(e))} AS layer,
5370
+ ${F.raw(String(e))} AS layer,
5066
5371
  COUNT(*) AS value
5067
- FROM ${N.identifier(i)}
5372
+ FROM ${F.identifier(i)}
5068
5373
  GROUP BY event_path, event_type
5069
- `) : n.push(N`
5374
+ `) : n.push(F`
5070
5375
  SELECT
5071
- ${N.raw(`'after_${t}_'`)} || event_type AS node_id,
5376
+ ${F.raw(`'after_${t}_'`)} || event_type AS node_id,
5072
5377
  event_type AS name,
5073
- ${N.raw(String(e))} AS layer,
5378
+ ${F.raw(String(e))} AS layer,
5074
5379
  COUNT(*) AS value
5075
- FROM ${N.identifier(i)}
5380
+ FROM ${F.identifier(i)}
5076
5381
  GROUP BY event_type
5077
5382
  `);
5078
5383
  }
5079
- let i = N.join(n, N` UNION ALL `), a = t.db.select({
5080
- node_id: N`node_id`.as("node_id"),
5081
- name: N`name`.as("name"),
5082
- layer: N`layer`.as("layer"),
5083
- value: N`value`.as("value")
5084
- }).from(N`(${i}) AS nodes_union`);
5384
+ let i = F.join(n, F` UNION ALL `), a = t.db.select({
5385
+ node_id: F`node_id`.as("node_id"),
5386
+ name: F`name`.as("name"),
5387
+ layer: F`layer`.as("layer"),
5388
+ value: F`value`.as("value")
5389
+ }).from(F`(${i}) AS nodes_union`);
5085
5390
  return t.db.$with("nodes_agg").as(a);
5086
5391
  }
5087
5392
  buildLinksAggregationCTE(e, t) {
5088
5393
  let n = [], r = e.outputMode === "sunburst";
5089
5394
  for (let t = e.stepsBefore; t >= 2; t--) {
5090
5395
  let e = `before_step_${t}`, i = `before_step_${t - 1}`;
5091
- r ? n.push(N`
5396
+ r ? n.push(F`
5092
5397
  SELECT
5093
- ${N.raw(`'before_${t}_'`)} || f.event_path AS source_id,
5094
- ${N.raw(`'before_${t - 1}_'`)} || t.event_path AS target_id,
5398
+ ${F.raw(`'before_${t}_'`)} || f.event_path AS source_id,
5399
+ ${F.raw(`'before_${t - 1}_'`)} || t.event_path AS target_id,
5095
5400
  COUNT(*) AS value
5096
- FROM ${N.identifier(e)} f
5097
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5401
+ FROM ${F.identifier(e)} f
5402
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5098
5403
  GROUP BY f.event_path, t.event_path
5099
- `) : n.push(N`
5404
+ `) : n.push(F`
5100
5405
  SELECT
5101
- ${N.raw(`'before_${t}_'`)} || f.event_type AS source_id,
5102
- ${N.raw(`'before_${t - 1}_'`)} || t.event_type AS target_id,
5406
+ ${F.raw(`'before_${t}_'`)} || f.event_type AS source_id,
5407
+ ${F.raw(`'before_${t - 1}_'`)} || t.event_type AS target_id,
5103
5408
  COUNT(*) AS value
5104
- FROM ${N.identifier(e)} f
5105
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5409
+ FROM ${F.identifier(e)} f
5410
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5106
5411
  GROUP BY f.event_type, t.event_type
5107
5412
  `);
5108
5413
  }
5109
- e.stepsBefore >= 1 && (r ? n.push(N`
5414
+ e.stepsBefore >= 1 && (r ? n.push(F`
5110
5415
  SELECT
5111
- ${N.raw("'before_1_'")} || b.event_path AS source_id,
5112
- ${N.raw("'start_'")} || s.event_type AS target_id,
5416
+ ${F.raw("'before_1_'")} || b.event_path AS source_id,
5417
+ ${F.raw("'start_'")} || s.event_type AS target_id,
5113
5418
  COUNT(*) AS value
5114
5419
  FROM before_step_1 b
5115
5420
  INNER JOIN starting_entities s ON b.binding_key = s.binding_key
5116
5421
  GROUP BY b.event_path, s.event_type
5117
- `) : n.push(N`
5422
+ `) : n.push(F`
5118
5423
  SELECT
5119
- ${N.raw("'before_1_'")} || b.event_type AS source_id,
5120
- ${N.raw("'start_'")} || s.event_type AS target_id,
5424
+ ${F.raw("'before_1_'")} || b.event_type AS source_id,
5425
+ ${F.raw("'start_'")} || s.event_type AS target_id,
5121
5426
  COUNT(*) AS value
5122
5427
  FROM before_step_1 b
5123
5428
  INNER JOIN starting_entities s ON b.binding_key = s.binding_key
5124
5429
  GROUP BY b.event_type, s.event_type
5125
- `)), e.stepsAfter >= 1 && (r ? n.push(N`
5430
+ `)), e.stepsAfter >= 1 && (r ? n.push(F`
5126
5431
  SELECT
5127
- ${N.raw("'start_'")} || s.event_type AS source_id,
5128
- ${N.raw("'after_1_'")} || a.event_path AS target_id,
5432
+ ${F.raw("'start_'")} || s.event_type AS source_id,
5433
+ ${F.raw("'after_1_'")} || a.event_path AS target_id,
5129
5434
  COUNT(*) AS value
5130
5435
  FROM starting_entities s
5131
5436
  INNER JOIN after_step_1 a ON s.binding_key = a.binding_key
5132
5437
  GROUP BY s.event_type, a.event_path
5133
- `) : n.push(N`
5438
+ `) : n.push(F`
5134
5439
  SELECT
5135
- ${N.raw("'start_'")} || s.event_type AS source_id,
5136
- ${N.raw("'after_1_'")} || a.event_type AS target_id,
5440
+ ${F.raw("'start_'")} || s.event_type AS source_id,
5441
+ ${F.raw("'after_1_'")} || a.event_type AS target_id,
5137
5442
  COUNT(*) AS value
5138
5443
  FROM starting_entities s
5139
5444
  INNER JOIN after_step_1 a ON s.binding_key = a.binding_key
@@ -5141,41 +5446,41 @@ var Ft = class {
5141
5446
  `));
5142
5447
  for (let t = 1; t < e.stepsAfter; t++) {
5143
5448
  let e = `after_step_${t}`, i = `after_step_${t + 1}`;
5144
- r ? n.push(N`
5449
+ r ? n.push(F`
5145
5450
  SELECT
5146
- ${N.raw(`'after_${t}_'`)} || f.event_path AS source_id,
5147
- ${N.raw(`'after_${t + 1}_'`)} || t.event_path AS target_id,
5451
+ ${F.raw(`'after_${t}_'`)} || f.event_path AS source_id,
5452
+ ${F.raw(`'after_${t + 1}_'`)} || t.event_path AS target_id,
5148
5453
  COUNT(*) AS value
5149
- FROM ${N.identifier(e)} f
5150
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5454
+ FROM ${F.identifier(e)} f
5455
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5151
5456
  GROUP BY f.event_path, t.event_path
5152
- `) : n.push(N`
5457
+ `) : n.push(F`
5153
5458
  SELECT
5154
- ${N.raw(`'after_${t}_'`)} || f.event_type AS source_id,
5155
- ${N.raw(`'after_${t + 1}_'`)} || t.event_type AS target_id,
5459
+ ${F.raw(`'after_${t}_'`)} || f.event_type AS source_id,
5460
+ ${F.raw(`'after_${t + 1}_'`)} || t.event_type AS target_id,
5156
5461
  COUNT(*) AS value
5157
- FROM ${N.identifier(e)} f
5158
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5462
+ FROM ${F.identifier(e)} f
5463
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5159
5464
  GROUP BY f.event_type, t.event_type
5160
5465
  `);
5161
5466
  }
5162
5467
  if (n.length === 0) {
5163
5468
  let e = t.db.select({
5164
- source_id: N`NULL`.as("source_id"),
5165
- target_id: N`NULL`.as("target_id"),
5166
- value: N`0`.as("value")
5167
- }).from(N`(SELECT 1) AS empty`).where(N`1 = 0`);
5469
+ source_id: F`NULL`.as("source_id"),
5470
+ target_id: F`NULL`.as("target_id"),
5471
+ value: F`0`.as("value")
5472
+ }).from(F`(SELECT 1) AS empty`).where(F`1 = 0`);
5168
5473
  return t.db.$with("links_agg").as(e);
5169
5474
  }
5170
- let i = N.join(n, N` UNION ALL `), a = t.db.select({
5171
- source_id: N`source_id`.as("source_id"),
5172
- target_id: N`target_id`.as("target_id"),
5173
- value: N`value`.as("value")
5174
- }).from(N`(${i}) AS links_union`);
5475
+ let i = F.join(n, F` UNION ALL `), a = t.db.select({
5476
+ source_id: F`source_id`.as("source_id"),
5477
+ target_id: F`target_id`.as("target_id"),
5478
+ value: F`value`.as("value")
5479
+ }).from(F`(${i}) AS links_union`);
5175
5480
  return t.db.$with("links_agg").as(a);
5176
5481
  }
5177
5482
  buildFinalResultCTE(e) {
5178
- let t = N`
5483
+ let t = F`
5179
5484
  SELECT
5180
5485
  'node' AS record_type,
5181
5486
  node_id AS id,
@@ -5197,44 +5502,44 @@ var Ft = class {
5197
5502
  FROM links_agg
5198
5503
  WHERE source_id IS NOT NULL
5199
5504
  `, n = e.db.select({
5200
- record_type: N`record_type`.as("record_type"),
5201
- id: N`id`.as("id"),
5202
- name: N`name`.as("name"),
5203
- layer: N`layer`.as("layer"),
5204
- value: N`value`.as("value"),
5205
- source_id: N`source_id`.as("source_id"),
5206
- target_id: N`target_id`.as("target_id")
5207
- }).from(N`(${t}) AS final_union`);
5505
+ record_type: F`record_type`.as("record_type"),
5506
+ id: F`id`.as("id"),
5507
+ name: F`name`.as("name"),
5508
+ layer: F`layer`.as("layer"),
5509
+ value: F`value`.as("value"),
5510
+ source_id: F`source_id`.as("source_id"),
5511
+ target_id: F`target_id`.as("target_id")
5512
+ }).from(F`(${t}) AS final_union`);
5208
5513
  return e.db.$with("final_result").as(n);
5209
5514
  }
5210
5515
  };
5211
5516
  //#endregion
5212
5517
  //#region src/server/types/retention.ts
5213
- function Rt(e) {
5518
+ function Kt(e) {
5214
5519
  return Array.isArray(e);
5215
5520
  }
5216
- function zt(e) {
5521
+ function qt(e) {
5217
5522
  return typeof e == "object" && !!e && "cube" in e;
5218
5523
  }
5219
- function Bt(e) {
5220
- if (zt(e)) return e.cube;
5524
+ function Jt(e) {
5525
+ if (qt(e)) return e.cube;
5221
5526
  let t = e.indexOf(".");
5222
5527
  if (t === -1) throw Error(`Invalid time dimension format: ${e}. Expected 'CubeName.dimensionName'`);
5223
5528
  return e.substring(0, t);
5224
5529
  }
5225
- function Vt(e) {
5226
- if (zt(e)) return e.dimension;
5530
+ function Yt(e) {
5531
+ if (qt(e)) return e.dimension;
5227
5532
  let t = e.indexOf(".");
5228
5533
  if (t === -1) throw Error(`Invalid time dimension format: ${e}. Expected 'CubeName.dimensionName'`);
5229
5534
  return e.substring(t + 1);
5230
5535
  }
5231
5536
  //#endregion
5232
5537
  //#region src/server/builders/retention-query-builder.ts
5233
- var Ht = class {
5538
+ var Xt = class {
5234
5539
  filterBuilder;
5235
5540
  dateTimeBuilder;
5236
5541
  constructor(e) {
5237
- this.databaseAdapter = e, this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder);
5542
+ this.databaseAdapter = e, this.dateTimeBuilder = new Y(e), this.filterBuilder = new Tt(e, this.dateTimeBuilder);
5238
5543
  }
5239
5544
  hasRetention(e) {
5240
5545
  return e.retention !== void 0 && e.retention.timeDimension != null && e.retention.bindingKey != null;
@@ -5242,12 +5547,12 @@ var Ht = class {
5242
5547
  validateConfig(e, t) {
5243
5548
  let n = [];
5244
5549
  try {
5245
- let r = Bt(e.timeDimension), i = Vt(e.timeDimension), a = t.get(r);
5550
+ let r = Jt(e.timeDimension), i = Yt(e.timeDimension), a = t.get(r);
5246
5551
  a ? a.dimensions?.[i] || n.push(`Time dimension not found: ${i} in cube ${r}`) : n.push(`Cube not found: ${r}`);
5247
5552
  } catch {
5248
5553
  n.push(`Invalid time dimension format: ${e.timeDimension}`);
5249
5554
  }
5250
- if (Rt(e.bindingKey)) for (let r of e.bindingKey) {
5555
+ if (Kt(e.bindingKey)) for (let r of e.bindingKey) {
5251
5556
  let e = t.get(r.cube);
5252
5557
  if (!e) n.push(`Binding key mapping cube not found: ${r.cube}`);
5253
5558
  else {
@@ -5299,23 +5604,23 @@ var Ht = class {
5299
5604
  }
5300
5605
  buildRetentionQuery(e, t, n) {
5301
5606
  let r = this.resolveConfig(e, t, n), i = r.breakdowns.length, a = this.buildCohortBaseCTE(e, r, n), o = this.buildActivityPeriodsCTE(e, r, n), s = this.buildCohortSizesCTE(e, n, i), c = this.buildRetentionCountsCTE(e, n, i), l = r.breakdowns.length > 0, u = {
5302
- period: N`rc.period_number`.as("period"),
5303
- cohort_size: N`cs.cohort_size`.as("cohort_size"),
5304
- retained_users: N`rc.retained_users`.as("retained_users"),
5305
- retention_rate: N`CAST(rc.retained_users AS NUMERIC) / NULLIF(cs.cohort_size, 0)`.as("retention_rate")
5607
+ period: F`rc.period_number`.as("period"),
5608
+ cohort_size: F`cs.cohort_size`.as("cohort_size"),
5609
+ retained_users: F`rc.retained_users`.as("retained_users"),
5610
+ retention_rate: F`CAST(rc.retained_users AS NUMERIC) / NULLIF(cs.cohort_size, 0)`.as("retention_rate")
5306
5611
  };
5307
- for (let e = 0; e < r.breakdowns.length; e++) u[`breakdown_${e}`] = N.raw(`rc.breakdown_${e}`).as(`breakdown_${e}`);
5308
- let d = n.db.with(a, o, s, c).select(u).from(N`retention_counts rc`);
5612
+ for (let e = 0; e < r.breakdowns.length; e++) u[`breakdown_${e}`] = F.raw(`rc.breakdown_${e}`).as(`breakdown_${e}`);
5613
+ let d = n.db.with(a, o, s, c).select(u).from(F`retention_counts rc`);
5309
5614
  if (l) {
5310
- let e = r.breakdowns.map((e, t) => N`COALESCE(CAST(rc.breakdown_${N.raw(String(t))} AS TEXT), '') = COALESCE(CAST(cs.breakdown_${N.raw(String(t))} AS TEXT), '')`), t = e.length === 1 ? e[0] : N.join(e, N` AND `);
5311
- d = d.innerJoin(N`cohort_sizes cs`, t);
5312
- } else d = d.innerJoin(N`cohort_sizes cs`, N`1 = 1`);
5615
+ let e = r.breakdowns.map((e, t) => F`COALESCE(CAST(rc.breakdown_${F.raw(String(t))} AS TEXT), '') = COALESCE(CAST(cs.breakdown_${F.raw(String(t))} AS TEXT), '')`), t = e.length === 1 ? e[0] : F.join(e, F` AND `);
5616
+ d = d.innerJoin(F`cohort_sizes cs`, t);
5617
+ } else d = d.innerJoin(F`cohort_sizes cs`, F`1 = 1`);
5313
5618
  let f = [];
5314
- for (let e = 0; e < r.breakdowns.length; e++) f.push(N.raw(`rc.breakdown_${e}`));
5315
- return f.push(N`rc.period_number`), d = d.orderBy(...f), d;
5619
+ for (let e = 0; e < r.breakdowns.length; e++) f.push(F.raw(`rc.breakdown_${e}`));
5620
+ return f.push(F`rc.period_number`), d = d.orderBy(...f), d;
5316
5621
  }
5317
5622
  transformResult(e, t) {
5318
- let n = t.breakdownDimensions || [], r = n.length > 0;
5623
+ let n = t.breakdownDimensions || [], r = Math.min(n.length, 100), i = r > 0;
5319
5624
  return e.map((e) => {
5320
5625
  let t = {
5321
5626
  period: Number(e.period),
@@ -5323,19 +5628,19 @@ var Ht = class {
5323
5628
  retainedUsers: Number(e.retained_users),
5324
5629
  retentionRate: e.retention_rate === null ? 0 : Number(e.retention_rate)
5325
5630
  };
5326
- if (r) {
5327
- let r = {};
5328
- for (let t = 0; t < n.length; t++) {
5329
- let i = n[t], a = e[`breakdown_${t}`];
5330
- r[i] = a === void 0 ? null : String(a);
5631
+ if (i) {
5632
+ let i = {};
5633
+ for (let t = 0; t < r; t++) {
5634
+ let r = n[t], a = e[`breakdown_${t}`];
5635
+ i[r] = a === void 0 ? null : String(a);
5331
5636
  }
5332
- t.breakdownValues = r;
5637
+ t.breakdownValues = i;
5333
5638
  }
5334
5639
  return t;
5335
5640
  });
5336
5641
  }
5337
5642
  resolveConfig(e, t, n) {
5338
- let r = Bt(e.timeDimension), i = Vt(e.timeDimension), a = t.get(r);
5643
+ let r = Jt(e.timeDimension), i = Yt(e.timeDimension), a = t.get(r);
5339
5644
  if (!a) throw Error(`Cube not found: ${r}`);
5340
5645
  let o = a.dimensions?.[i];
5341
5646
  if (!o) throw Error(`Time dimension not found: ${i}`);
@@ -5360,7 +5665,7 @@ var Ht = class {
5360
5665
  };
5361
5666
  }
5362
5667
  resolveBindingKey(e, t, n, r) {
5363
- if (Rt(e)) {
5668
+ if (Kt(e)) {
5364
5669
  let i = e.find((e) => e.cube === t.name);
5365
5670
  if (!i) throw Error(`No binding key mapping found for cube: ${t.name}`);
5366
5671
  let a = this.extractDimensionName(i.dimension), o = n.get(i.cube);
@@ -5391,7 +5696,7 @@ var Ht = class {
5391
5696
  let i = this.buildSingleFilterCondition(e, t, n, r);
5392
5697
  i && a.push(i);
5393
5698
  }
5394
- return a.length === 0 ? null : a.length === 1 ? a[0] : o ? L(...a) : N`(${N.join(a, N` OR `)})`;
5699
+ return a.length === 0 ? null : a.length === 1 ? a[0] : o ? R(...a) : F`(${F.join(a, F` OR `)})`;
5395
5700
  }
5396
5701
  let i = e, [a, o] = i.member.split("."), s = n.get(a);
5397
5702
  if (!s) return null;
@@ -5407,16 +5712,16 @@ var Ht = class {
5407
5712
  i.push(n);
5408
5713
  }
5409
5714
  let a = this.databaseAdapter.buildTimeDimension(e.granularity, t.timeExpr), o = {
5410
- binding_key: N`${t.bindingKeyExpr}`.as("binding_key"),
5411
- cohort_entry: N`MIN(${a})`.as("cohort_entry")
5715
+ binding_key: F`${t.bindingKeyExpr}`.as("binding_key"),
5716
+ cohort_entry: F`MIN(${a})`.as("cohort_entry")
5412
5717
  };
5413
5718
  for (let e = 0; e < t.breakdowns.length; e++) {
5414
5719
  let { expr: n } = t.breakdowns[e];
5415
- o[`breakdown_${e}`] = N`MIN(${n})`.as(`breakdown_${e}`);
5720
+ o[`breakdown_${e}`] = F`MIN(${n})`.as(`breakdown_${e}`);
5416
5721
  }
5417
5722
  let s = n.db.select(o).from(r.from);
5418
5723
  if (i.length > 0) {
5419
- let e = i.length === 1 ? i[0] : L(...i);
5724
+ let e = i.length === 1 ? i[0] : R(...i);
5420
5725
  s = s.where(e);
5421
5726
  }
5422
5727
  let c = [t.bindingKeyExpr];
@@ -5428,36 +5733,36 @@ var Ht = class {
5428
5733
  return n.db.$with("cohort_base").as(s);
5429
5734
  }
5430
5735
  buildDateRangeCondition(e, t) {
5431
- return N`${e} >= ${t.start}::date AND ${e} < (${t.end}::date + interval '1 day')`;
5736
+ return F`${e} >= ${t.start}::date AND ${e} < (${t.end}::date + interval '1 day')`;
5432
5737
  }
5433
5738
  buildDateRangeHavingCondition(e, t) {
5434
- return N`MIN(${e}) >= ${t.start}::date AND MIN(${e}) < (${t.end}::date + interval '1 day')`;
5739
+ return F`MIN(${e}) >= ${t.start}::date AND MIN(${e}) < (${t.end}::date + interval '1 day')`;
5435
5740
  }
5436
5741
  buildActivityPeriodsCTE(e, t, n) {
5437
5742
  let r = t.cube.sql(n), i = [];
5438
- r.where && i.push(r.where), i.push(...t.activityFilterConditions), i.push(N`${t.timeExpr} >= cohort_base.cohort_entry`);
5439
- let a = this.databaseAdapter.buildTimeDimension(e.granularity, t.timeExpr), o = this.buildPeriodNumberExpression(N`cohort_base.cohort_entry`, a, e.granularity), s = {
5440
- binding_key: N`cohort_base.binding_key`.as("binding_key"),
5743
+ r.where && i.push(r.where), i.push(...t.activityFilterConditions), i.push(F`${t.timeExpr} >= cohort_base.cohort_entry`);
5744
+ let a = this.databaseAdapter.buildTimeDimension(e.granularity, t.timeExpr), o = this.buildPeriodNumberExpression(F`cohort_base.cohort_entry`, a, e.granularity), s = {
5745
+ binding_key: F`cohort_base.binding_key`.as("binding_key"),
5441
5746
  period_number: o.as("period_number")
5442
5747
  };
5443
- for (let e = 0; e < t.breakdowns.length; e++) s[`breakdown_${e}`] = N.raw(`cohort_base.breakdown_${e}`).as(`breakdown_${e}`);
5444
- let c = n.db.select(s).from(r.from).innerJoin(N`cohort_base`, N`${t.bindingKeyExpr} = cohort_base.binding_key`);
5748
+ for (let e = 0; e < t.breakdowns.length; e++) s[`breakdown_${e}`] = F.raw(`cohort_base.breakdown_${e}`).as(`breakdown_${e}`);
5749
+ let c = n.db.select(s).from(r.from).innerJoin(F`cohort_base`, F`${t.bindingKeyExpr} = cohort_base.binding_key`);
5445
5750
  if (i.length > 0) {
5446
- let e = i.length === 1 ? i[0] : L(...i);
5751
+ let e = i.length === 1 ? i[0] : R(...i);
5447
5752
  c = c.where(e);
5448
5753
  }
5449
- let l = [N`cohort_base.binding_key`, o];
5450
- for (let e = 0; e < t.breakdowns.length; e++) l.push(N.raw(`cohort_base.breakdown_${e}`));
5754
+ let l = [F`cohort_base.binding_key`, o];
5755
+ for (let e = 0; e < t.breakdowns.length; e++) l.push(F.raw(`cohort_base.breakdown_${e}`));
5451
5756
  return c = c.groupBy(...l), n.db.$with("activity_periods").as(c);
5452
5757
  }
5453
5758
  buildCohortSizesCTE(e, t, n) {
5454
5759
  if (n > 0) {
5455
- let e = { cohort_size: N`COUNT(*)`.as("cohort_size") }, r = [];
5456
- for (let t = 0; t < n; t++) e[`breakdown_${t}`] = N.raw(`breakdown_${t}`).as(`breakdown_${t}`), r.push(N.raw(`breakdown_${t}`));
5457
- let i = t.db.select(e).from(N`cohort_base`).groupBy(...r);
5760
+ let e = { cohort_size: F`COUNT(*)`.as("cohort_size") }, r = [];
5761
+ for (let t = 0; t < n; t++) e[`breakdown_${t}`] = F.raw(`breakdown_${t}`).as(`breakdown_${t}`), r.push(F.raw(`breakdown_${t}`));
5762
+ let i = t.db.select(e).from(F`cohort_base`).groupBy(...r);
5458
5763
  return t.db.$with("cohort_sizes").as(i);
5459
5764
  }
5460
- let r = t.db.select({ cohort_size: N`COUNT(*)`.as("cohort_size") }).from(N`cohort_base`);
5765
+ let r = t.db.select({ cohort_size: F`COUNT(*)`.as("cohort_size") }).from(F`cohort_base`);
5461
5766
  return t.db.$with("cohort_sizes").as(r);
5462
5767
  }
5463
5768
  buildRetentionCountsCTE(e, t, n) {
@@ -5465,31 +5770,32 @@ var Ht = class {
5465
5770
  if (e.retentionType === "rolling") r = this.buildRollingRetentionCountsQuery(e, t, n);
5466
5771
  else {
5467
5772
  let i = {
5468
- period_number: N`period_number`.as("period_number"),
5469
- retained_users: N`COUNT(DISTINCT binding_key)`.as("retained_users")
5470
- }, a = [N`period_number`];
5471
- for (let e = 0; e < n; e++) i[`breakdown_${e}`] = N.raw(`breakdown_${e}`).as(`breakdown_${e}`), a.push(N.raw(`breakdown_${e}`));
5472
- r = t.db.select(i).from(N`activity_periods`).where(N`period_number >= 0 AND period_number <= ${e.periods}`).groupBy(...a);
5773
+ period_number: F`period_number`.as("period_number"),
5774
+ retained_users: F`COUNT(DISTINCT binding_key)`.as("retained_users")
5775
+ }, a = [F`period_number`];
5776
+ for (let e = 0; e < n; e++) i[`breakdown_${e}`] = F.raw(`breakdown_${e}`).as(`breakdown_${e}`), a.push(F.raw(`breakdown_${e}`));
5777
+ let o = Math.min(e.periods, 52);
5778
+ r = t.db.select(i).from(F`activity_periods`).where(F`period_number >= 0 AND period_number <= ${o}`).groupBy(...a);
5473
5779
  }
5474
5780
  return t.db.$with("retention_counts").as(r);
5475
5781
  }
5476
5782
  buildRollingRetentionCountsQuery(e, t, n) {
5477
5783
  let r = [];
5478
5784
  for (let e = 0; e < n; e++) r.push(`breakdown_${e}`);
5479
- let i = r.length > 0 ? `, ${r.join(", ")}` : "", a = N`(
5785
+ let i = r.length > 0 ? `, ${r.join(", ")}` : "", a = F`(
5480
5786
  SELECT
5481
5787
  binding_key,
5482
- ${N.raw(r.map((e) => `${e}`).join(", ") + (r.length > 0 ? "," : ""))}
5788
+ ${F.raw(r.map((e) => `${e}`).join(", ") + (r.length > 0 ? "," : ""))}
5483
5789
  MAX(period_number) as max_period
5484
5790
  FROM activity_periods
5485
5791
  WHERE period_number >= 0 AND period_number <= ${e.periods}
5486
- GROUP BY binding_key${N.raw(i)}
5792
+ GROUP BY binding_key${F.raw(i)}
5487
5793
  )`, o = this.databaseAdapter.buildPeriodSeriesSubquery(e.periods), s = {
5488
- period_number: N`p.period_number`.as("period_number"),
5489
- retained_users: N`COUNT(DISTINCT CASE WHEN ump.max_period >= p.period_number THEN ump.binding_key END)`.as("retained_users")
5490
- }, c = [N`p.period_number`];
5491
- for (let e = 0; e < n; e++) s[`breakdown_${e}`] = N.raw(`ump.breakdown_${e}`).as(`breakdown_${e}`), c.push(N.raw(`ump.breakdown_${e}`));
5492
- return t.db.select(s).from(N`${a} ump`).crossJoin(o).groupBy(...c);
5794
+ period_number: F`p.period_number`.as("period_number"),
5795
+ retained_users: F`COUNT(DISTINCT CASE WHEN ump.max_period >= p.period_number THEN ump.binding_key END)`.as("retained_users")
5796
+ }, c = [F`p.period_number`];
5797
+ for (let e = 0; e < n; e++) s[`breakdown_${e}`] = F.raw(`ump.breakdown_${e}`).as(`breakdown_${e}`), c.push(F.raw(`ump.breakdown_${e}`));
5798
+ return t.db.select(s).from(F`${a} ump`).innerJoin(o, F`TRUE`).groupBy(...c);
5493
5799
  }
5494
5800
  buildPeriodNumberExpression(e, t, n) {
5495
5801
  return this.databaseAdapter.buildDateDiffPeriods(e, t, n);
@@ -5498,7 +5804,7 @@ var Ht = class {
5498
5804
  let t = e.split(".");
5499
5805
  return t.length > 1 ? t[1] : t[0];
5500
5806
  }
5501
- }, Ut = class {
5807
+ }, Zt = class {
5502
5808
  constructor(e) {
5503
5809
  this.queryPlanner = e;
5504
5810
  }
@@ -5515,7 +5821,7 @@ var Ht = class {
5515
5821
  let n = e.get(t);
5516
5822
  n && h.set(t, n);
5517
5823
  }
5518
- let g = Q.hasPostAggregationWindows(t.measures ?? [], h), _ = [...s.filter((e) => !e.pathFound && e.error).map((e) => e.error), ...u.map((e) => e.message)];
5824
+ let g = Z.hasPostAggregationWindows(t.measures ?? [], h), _ = [...s.filter((e) => !e.pathFound && e.error).map((e) => e.error), ...u.map((e) => e.message)];
5519
5825
  return {
5520
5826
  plan: p,
5521
5827
  analysis: {
@@ -5933,7 +6239,7 @@ var Ht = class {
5933
6239
  timeDimensions: []
5934
6240
  };
5935
6241
  }
5936
- }, Wt = class {
6242
+ }, Qt = class {
5937
6243
  name = "identity";
5938
6244
  optimise(e) {
5939
6245
  return e;
@@ -5941,7 +6247,7 @@ var Ht = class {
5941
6247
  };
5942
6248
  //#endregion
5943
6249
  //#region src/server/physical-plan/processors/cte-processor.ts
5944
- function Gt(e, t, n, r) {
6250
+ function $t(e, t, n, r) {
5945
6251
  let i = /* @__PURE__ */ new Map();
5946
6252
  if (e.preAggregationCTEs && e.preAggregationCTEs.length > 0) {
5947
6253
  for (let t of e.preAggregationCTEs) if (t.propagatingFilters && t.propagatingFilters.length > 0) for (let e of t.propagatingFilters) {
@@ -5951,7 +6257,7 @@ function Gt(e, t, n, r) {
5951
6257
  i.set(t, s);
5952
6258
  }
5953
6259
  let a = i.get(t);
5954
- a && a.length > 0 && (e.preBuiltFilterSQL = a.length === 1 ? a[0] : L(...a));
6260
+ a && a.length > 0 && (e.preBuiltFilterSQL = a.length === 1 ? a[0] : R(...a));
5955
6261
  }
5956
6262
  }
5957
6263
  let a = [], o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
@@ -5971,27 +6277,27 @@ function Gt(e, t, n, r) {
5971
6277
  }
5972
6278
  //#endregion
5973
6279
  //#region src/server/physical-plan/processors/window-processor.ts
5974
- function Kt(e, t, n, r, i, a) {
6280
+ function en(e, t, n, r, i, a) {
5975
6281
  if (n.measures) for (let o of n.measures) {
5976
6282
  let [s, c] = o.split("."), l = i.get(s);
5977
6283
  if (!l?.measures?.[c]) continue;
5978
6284
  let u = l.measures[c];
5979
- if (!Q.isPostAggregationWindow(u)) continue;
5980
- let d = Q.getWindowBaseMeasure(u, s);
6285
+ if (!Z.isPostAggregationWindow(u)) continue;
6286
+ let d = Z.getWindowBaseMeasure(u, s);
5981
6287
  if (!d) continue;
5982
6288
  let [f, p] = d.split("."), m = i.get(f);
5983
6289
  if (!m?.measures?.[p]) continue;
5984
6290
  let h = m.measures[p], g = t.preAggregationCTEs?.find((e) => e.cube?.name === f && e.measures?.includes(d)), _;
5985
- _ = g ? N`sum(${N`${N.identifier(g.cteAlias)}.${N.identifier(p)}`})` : a.queryBuilder.buildMeasureExpression(h, r, m), e[d] || (e[d] = N`${_}`.as(d));
5986
- let v = qt(u, _, n, r, l, t, a);
5987
- v && (e[o] = N`${v}`.as(o));
6291
+ _ = g ? F`sum(${F`${F.identifier(g.cteAlias)}.${F.identifier(p)}`})` : a.queryBuilder.buildMeasureExpression(h, r, m), e[d] || (e[d] = F`${_}`.as(d));
6292
+ let v = tn(u, _, n, r, l, t, a);
6293
+ v && (e[o] = F`${v}`.as(o));
5988
6294
  }
5989
6295
  }
5990
- function qt(e, t, n, r, i, a, o) {
6296
+ function tn(e, t, n, r, i, a, o) {
5991
6297
  let s = e.windowConfig || {}, c = (e, t) => {
5992
6298
  if (!a.preAggregationCTEs) return null;
5993
6299
  let n = a.preAggregationCTEs.find((t) => t.cube?.name === e);
5994
- return n && n.cteAlias ? N`${N.identifier(n.cteAlias)}.${N.identifier(t)}` : null;
6300
+ return n && n.cteAlias ? F`${F.identifier(n.cteAlias)}.${F.identifier(t)}` : null;
5995
6301
  }, l;
5996
6302
  if (s.orderBy && s.orderBy.length > 0) l = s.orderBy.map((e) => {
5997
6303
  let a = e.field.includes(".") ? e.field.split(".")[1] : e.field;
@@ -6048,16 +6354,16 @@ function qt(e, t, n, r, i, a, o) {
6048
6354
  frame: s.frame
6049
6355
  });
6050
6356
  if (!d) return null;
6051
- switch (s.operation || Q.getDefaultWindowOperation(e.type)) {
6052
- case "difference": return N`${t} - ${d}`;
6053
- case "ratio": return N`${t} / NULLIF(${d}, 0)`;
6054
- case "percentChange": return N`((${t} - ${d}) / NULLIF(${d}, 0)) * 100`;
6357
+ switch (s.operation || Z.getDefaultWindowOperation(e.type)) {
6358
+ case "difference": return F`${t} - ${d}`;
6359
+ case "ratio": return F`${t} / NULLIF(${d}, 0)`;
6360
+ case "percentChange": return F`((${t} - ${d}) / NULLIF(${d}, 0)) * 100`;
6055
6361
  default: return d;
6056
6362
  }
6057
6363
  }
6058
6364
  //#endregion
6059
6365
  //#region src/server/physical-plan/processors/selection-processor.ts
6060
- function Jt(e, t, n, r, i) {
6366
+ function nn(e, t, n, r, i) {
6061
6367
  let a = { ...i.queryBuilder.buildSelections(e.joinCubes.length > 0 ? r : e.primaryCube, t, n) };
6062
6368
  if (e.preAggregationCTEs) for (let o of e.preAggregationCTEs) {
6063
6369
  let e = o.cube.name;
@@ -6065,32 +6371,32 @@ function Jt(e, t, n, r, i) {
6065
6371
  if (!a[s]) continue;
6066
6372
  let [, c] = s.split("."), l = r.get(e);
6067
6373
  if (!l?.measures?.[c]) continue;
6068
- let u = l.measures[c], d = N`${N.identifier(o.cteAlias)}.${N.identifier(c)}`, f;
6374
+ let u = l.measures[c], d = F`${F.identifier(o.cteAlias)}.${F.identifier(c)}`, f;
6069
6375
  if (u.type === "calculated" && u.calculatedSql) f = i.queryBuilder.buildCTECalculatedMeasure(u, l, o, r, n);
6070
6376
  else {
6071
- let e = o.cteReason === "fanOutPrevention", n = Yt(o, t, r), a = e || n;
6377
+ let e = o.cteReason === "fanOutPrevention", n = rn(o, t, r), a = e || n;
6072
6378
  switch (u.type) {
6073
6379
  case "count":
6074
6380
  case "countDistinct":
6075
6381
  case "sum":
6076
- f = a ? V(d) : B(d);
6382
+ f = a ? H(d) : V(d);
6077
6383
  break;
6078
6384
  case "avg":
6079
- f = a ? V(d) : i.databaseAdapter.buildAvg(d);
6385
+ f = a ? H(d) : i.databaseAdapter.buildAvg(d);
6080
6386
  break;
6081
6387
  case "min":
6082
- f = H(d);
6388
+ f = Ae(d);
6083
6389
  break;
6084
6390
  case "max":
6085
- f = V(d);
6391
+ f = H(d);
6086
6392
  break;
6087
6393
  case "number":
6088
- f = V(d);
6394
+ f = H(d);
6089
6395
  break;
6090
- default: f = a ? V(d) : B(d);
6396
+ default: f = a ? H(d) : V(d);
6091
6397
  }
6092
6398
  }
6093
- a[s] = N`${f}`.as(s);
6399
+ a[s] = F`${f}`.as(s);
6094
6400
  }
6095
6401
  for (let t in a) {
6096
6402
  let [n, i] = t.split(".");
@@ -6102,15 +6408,15 @@ function Jt(e, t, n, r, i) {
6102
6408
  let e = s.dimensions[i].sql;
6103
6409
  u = o.joinKeys.find((t) => t.targetColumnObj === e);
6104
6410
  }
6105
- (u || l && s?.dimensions?.[i]) && (a[t] = N`${N.identifier(o.cteAlias)}.${N.identifier(i)}`.as(t));
6411
+ (u || l && s?.dimensions?.[i]) && (a[t] = F`${F.identifier(o.cteAlias)}.${F.identifier(i)}`.as(t));
6106
6412
  }
6107
6413
  }
6108
- return Kt(a, e, t, n, r, i), a;
6414
+ return en(a, e, t, n, r, i), a;
6109
6415
  }
6110
- function Yt(e, t, n) {
6111
- return e.cteReason !== "hasMany" || e.downstreamJoinKeys && e.downstreamJoinKeys.length > 0 || e.intermediateJoins && e.intermediateJoins.length > 0 || !(t.dimensions && t.dimensions.length > 0 || t.timeDimensions && t.timeDimensions.length > 0) || t.dimensions?.some((t) => t.startsWith(`${e.cube.name}.`)) || t.timeDimensions?.some((t) => t.dimension.startsWith(`${e.cube.name}.`)) ? !1 : e.joinKeys.length > 0 && e.joinKeys.every((e) => !!e.sourceColumnObj && Xt(e.sourceColumnObj, t, n));
6416
+ function rn(e, t, n) {
6417
+ return e.cteReason !== "hasMany" || e.downstreamJoinKeys && e.downstreamJoinKeys.length > 0 || e.intermediateJoins && e.intermediateJoins.length > 0 || !(t.dimensions && t.dimensions.length > 0 || t.timeDimensions && t.timeDimensions.length > 0) || t.dimensions?.some((t) => t.startsWith(`${e.cube.name}.`)) || t.timeDimensions?.some((t) => t.dimension.startsWith(`${e.cube.name}.`)) ? !1 : e.joinKeys.length > 0 && e.joinKeys.every((e) => !!e.sourceColumnObj && an(e.sourceColumnObj, t, n));
6112
6418
  }
6113
- function Xt(e, t, n) {
6419
+ function an(e, t, n) {
6114
6420
  if (t.dimensions) for (let r of t.dimensions) {
6115
6421
  let [t, i] = r.split(".");
6116
6422
  if (n.get(t)?.dimensions?.[i]?.sql === e) return !0;
@@ -6124,7 +6430,7 @@ function Xt(e, t, n) {
6124
6430
  }
6125
6431
  //#endregion
6126
6432
  //#region src/server/physical-plan/processors/joins-processor.ts
6127
- function Zt(e, t, n, r, i, a) {
6433
+ function on(e, t, n, r, i, a) {
6128
6434
  let o = [], s = t.db.select(r).from(n.from);
6129
6435
  if (i.ctes.length > 0 && (s = t.db.with(...i.ctes).select(r).from(n.from)), n.joins) for (let e of n.joins) switch (e.type || "left") {
6130
6436
  case "left":
@@ -6155,10 +6461,10 @@ function Zt(e, t, n, r, i, a) {
6155
6461
  if (t && t.joinKeys.length > 0) {
6156
6462
  let e = [];
6157
6463
  for (let n of t.joinKeys) {
6158
- let t = N`${N.identifier(c)}.${N.identifier(n.sourceColumn)}`, r = n.targetColumnObj;
6159
- r && e.push(I(r, t));
6464
+ let t = F`${F.identifier(c)}.${F.identifier(n.sourceColumn)}`, r = n.targetColumnObj;
6465
+ r && e.push(L(r, t));
6160
6466
  }
6161
- e.length > 0 && (a = L(...e));
6467
+ e.length > 0 && (a = R(...e));
6162
6468
  }
6163
6469
  }
6164
6470
  let l = [];
@@ -6185,19 +6491,19 @@ function Zt(e, t, n, r, i, a) {
6185
6491
  } catch {}
6186
6492
  }
6187
6493
  let d, f, p;
6188
- if (u) d = N`${N.identifier(u)}`, f = a.cteBuilder.buildCTEJoinCondition(n, u, e), p = void 0;
6494
+ if (u) d = F`${F.identifier(u)}`, f = a.cteBuilder.buildCTEJoinCondition(n, u, e), p = void 0;
6189
6495
  else {
6190
6496
  let e = i.downstreamCubeMap.get(n.cube.name), r = n.cube.sql(t);
6191
6497
  if (d = r.from, p = r.where, e && !n.junctionTable) {
6192
6498
  let t = [];
6193
6499
  for (let n of e.joinKeys) {
6194
- let r = N`${N.identifier(e.cteAlias)}.${N.identifier(n.sourceColumn)}`, i = n.targetColumnObj || N.identifier(n.targetColumn);
6195
- t.push(I(r, i));
6500
+ let r = F`${F.identifier(e.cteAlias)}.${F.identifier(n.sourceColumn)}`, i = n.targetColumnObj || F.identifier(n.targetColumn);
6501
+ t.push(L(r, i));
6196
6502
  }
6197
- f = t.length === 1 ? t[0] : L(...t);
6503
+ f = t.length === 1 ? t[0] : R(...t);
6198
6504
  } else f = n.joinCondition;
6199
6505
  }
6200
- let m = n.joinType || "left", h = m !== "inner" && p ? L(f, p) : f;
6506
+ let m = n.joinType || "left", h = m !== "inner" && p ? R(f, p) : f;
6201
6507
  try {
6202
6508
  switch (m) {
6203
6509
  case "left":
@@ -6224,7 +6530,7 @@ function Zt(e, t, n, r, i, a) {
6224
6530
  }
6225
6531
  //#endregion
6226
6532
  //#region src/server/physical-plan/processors/predicates-processor.ts
6227
- function Qt(e, t, n, r, i, a, o, s) {
6533
+ function sn(e, t, n, r, i, a, o, s) {
6228
6534
  let c = [...o.allWhereConditions];
6229
6535
  if (i.where && c.push(i.where), e.joinCubes && e.joinCubes.length > 0) for (let t of e.joinCubes) {
6230
6536
  let e = t.cube.name;
@@ -6236,14 +6542,14 @@ function Qt(e, t, n, r, i, a, o, s) {
6236
6542
  l.length > 0 && c.push(...l);
6237
6543
  let u = o.drizzleQuery;
6238
6544
  if (c.length > 0) {
6239
- let e = c.length === 1 ? c[0] : L(...c);
6545
+ let e = c.length === 1 ? c[0] : R(...c);
6240
6546
  u = u.where(e);
6241
6547
  }
6242
6548
  let d = s.queryBuilder.buildGroupByFields(e.joinCubes.length > 0 ? r : e.primaryCube, t, n, e);
6243
6549
  d.length > 0 && (u = u.groupBy(...d));
6244
6550
  let f = s.queryBuilder.buildHavingConditions(e.joinCubes.length > 0 ? r : e.primaryCube, t, n, e);
6245
6551
  if (f.length > 0) {
6246
- let e = f.length === 1 ? f[0] : L(...f);
6552
+ let e = f.length === 1 ? f[0] : R(...f);
6247
6553
  u = u.having(e);
6248
6554
  }
6249
6555
  let p = s.queryBuilder.buildOrderBy(t);
@@ -6251,14 +6557,14 @@ function Qt(e, t, n, r, i, a, o, s) {
6251
6557
  }
6252
6558
  //#endregion
6253
6559
  //#region src/server/physical-plan/processors/shared.ts
6254
- function $t(e) {
6560
+ function cn(e) {
6255
6561
  let t = /* @__PURE__ */ new Map();
6256
6562
  if (t.set(e.primaryCube.name, e.primaryCube), e.joinCubes) for (let n of e.joinCubes) t.set(n.cube.name, n.cube);
6257
6563
  return t;
6258
6564
  }
6259
6565
  //#endregion
6260
6566
  //#region src/server/physical-plan/drizzle-plan-builder.ts
6261
- var en = class {
6567
+ var ln = class {
6262
6568
  constructor(e, t, n) {
6263
6569
  this.queryBuilder = e, this.cteBuilder = t, this.databaseAdapter = n;
6264
6570
  }
@@ -6398,13 +6704,13 @@ var en = class {
6398
6704
  if (i) return i;
6399
6705
  let a = this.tryBuildKeysDeduplicationQuery(e, t, n, r);
6400
6706
  if (a) return a;
6401
- let o = Gt(e, t, n, r), s = e.primaryCube.sql(n), c = e.joinCubes.length > 0 ? $t(e) : new Map([[e.primaryCube.name, e.primaryCube]]);
6402
- return Qt(e, t, n, c, s, o, Zt(e, n, s, Jt(e, t, n, c, r), o, r), r);
6707
+ let o = $t(e, t, n, r), s = e.primaryCube.sql(n), c = e.joinCubes.length > 0 ? cn(e) : new Map([[e.primaryCube.name, e.primaryCube]]);
6708
+ return sn(e, t, n, c, s, o, on(e, n, s, nn(e, t, n, c, r), o, r), r);
6403
6709
  }
6404
6710
  tryBuildKeysDeduplicationQuery(e, t, n, r) {
6405
6711
  let i = e.keysDeduplication;
6406
6712
  if (!i?.multipliedCubeName || !t.measures?.length) return null;
6407
- let a = e.joinCubes.length > 0 ? $t(e) : new Map([[e.primaryCube.name, e.primaryCube]]), o = a.get(i.multipliedCubeName);
6713
+ let a = e.joinCubes.length > 0 ? cn(e) : new Map([[e.primaryCube.name, e.primaryCube]]), o = a.get(i.multipliedCubeName);
6408
6714
  if (!o || !this.canExecuteKeysDeduplication(t, o, i.multipliedCubeName)) return null;
6409
6715
  let s = i.primaryKeyDimensions.length > 0 ? i.primaryKeyDimensions : this.getPrimaryKeyDimensions(o);
6410
6716
  if (s.length === 0) return null;
@@ -6413,20 +6719,20 @@ var en = class {
6413
6719
  let [t, r] = e.split("."), i = a.get(t), o = i?.dimensions?.[r];
6414
6720
  if (!i || !o) return null;
6415
6721
  let s = K(o.sql, n);
6416
- u[e] = N`${s}`.as(e), d.push(s);
6722
+ u[e] = F`${s}`.as(e), d.push(s);
6417
6723
  }
6418
6724
  if (t.timeDimensions) for (let e of t.timeDimensions) {
6419
6725
  let [t, i] = e.dimension.split("."), o = a.get(t), s = o?.dimensions?.[i];
6420
6726
  if (!o || !s) return null;
6421
6727
  let c = r.queryBuilder.buildTimeDimensionExpression(s.sql, e.granularity, n);
6422
- u[e.dimension] = N`${c}`.as(e.dimension), d.push(c);
6728
+ u[e.dimension] = F`${c}`.as(e.dimension), d.push(c);
6423
6729
  }
6424
6730
  let f = [];
6425
6731
  for (let e of s) {
6426
6732
  let t = o.dimensions?.[e];
6427
6733
  if (!t) return null;
6428
6734
  let r = K(t.sql, n), i = `__pk__${e}`;
6429
- u[i] = N`${r}`.as(i), d.push(r), f.push(i);
6735
+ u[i] = F`${r}`.as(i), d.push(r), f.push(i);
6430
6736
  }
6431
6737
  let p = i.regularMeasures ?? [], m = new Set(p), h = t.measures.filter((e) => !m.has(e));
6432
6738
  if (p.length > 0) {
@@ -6435,7 +6741,7 @@ var en = class {
6435
6741
  let n = e.get(t);
6436
6742
  if (!n) return null;
6437
6743
  let r = `__reg__${t.replace(".", "__")}`;
6438
- u[r] = N`${n()}`.as(r);
6744
+ u[r] = F`${n()}`.as(r);
6439
6745
  }
6440
6746
  }
6441
6747
  let g = e.primaryCube.sql(n), _ = [];
@@ -6450,58 +6756,58 @@ var en = class {
6450
6756
  let e = t.cube.sql(n);
6451
6757
  v = this.applyJoinByType(v, t.joinType ?? "left", e.from, t.joinCondition), e.where && _.push(e.where);
6452
6758
  }
6453
- _.push(...r.queryBuilder.buildWhereConditions(a, t, n)), _.length > 0 && (v = v.where(_.length === 1 ? _[0] : L(..._))), d.length > 0 && (v = v.groupBy(...d));
6454
- let y = n.db.$with(c).as(v), b = o.sql(n), x = {}, ee = [];
6759
+ _.push(...r.queryBuilder.buildWhereConditions(a, t, n)), _.length > 0 && (v = v.where(_.length === 1 ? _[0] : R(..._))), d.length > 0 && (v = v.groupBy(...d));
6760
+ let y = n.db.$with(c).as(v), b = o.sql(n), x = {}, S = [];
6455
6761
  for (let e of s) {
6456
6762
  let t = o.dimensions?.[e];
6457
6763
  if (!t) return null;
6458
6764
  let r = K(t.sql, n);
6459
- x[e] = N`${r}`.as(e), ee.push(r);
6765
+ x[e] = F`${r}`.as(e), S.push(r);
6460
6766
  }
6461
- let te = /* @__PURE__ */ new Set();
6767
+ let ee = /* @__PURE__ */ new Set();
6462
6768
  for (let e of h) {
6463
6769
  let [, t] = e.split(".");
6464
- o.measures?.[t]?.type === "avg" && te.add(t);
6770
+ o.measures?.[t]?.type === "avg" && ee.add(t);
6465
6771
  }
6466
- let S = h.filter((e) => {
6772
+ let C = h.filter((e) => {
6467
6773
  let [, t] = e.split(".");
6468
- return !te.has(t);
6774
+ return !ee.has(t);
6469
6775
  });
6470
- if (S.length > 0) {
6471
- let e = r.queryBuilder.buildResolvedMeasures(S, new Map([[o.name, o]]), n);
6472
- for (let t of S) {
6776
+ if (C.length > 0) {
6777
+ let e = r.queryBuilder.buildResolvedMeasures(C, new Map([[o.name, o]]), n);
6778
+ for (let t of C) {
6473
6779
  let [, n] = t.split("."), r = e.get(t);
6474
- if (!r) return null;
6475
- x[n] = N`${r()}`.as(n);
6780
+ if (!r || typeof r != "function") return null;
6781
+ x[n] = F`${r()}`.as(n);
6476
6782
  }
6477
6783
  }
6478
6784
  for (let e of h) {
6479
6785
  let [, t] = e.split(".");
6480
- if (!te.has(t)) continue;
6786
+ if (!ee.has(t)) continue;
6481
6787
  let r = o.measures?.[t];
6482
6788
  if (!r?.sql) return null;
6483
6789
  let i = K(r.sql, n), a = `__avg_sum__${t}`, s = `__avg_count__${t}`;
6484
- x[a] = N`sum(${i})`.as(a), x[s] = N`count(${i})`.as(s);
6790
+ x[a] = F`sum(${i})`.as(a), x[s] = F`count(${i})`.as(s);
6485
6791
  }
6486
- let C = n.db.select(x).from(b.from), w = [];
6487
- b.where && w.push(b.where), w.push(...r.queryBuilder.buildWhereConditions(o, t, n)), w.length > 0 && (C = C.where(w.length === 1 ? w[0] : L(...w))), ee.length > 0 && (C = C.groupBy(...ee));
6488
- let ne = n.db.$with(l).as(C), T = {};
6489
- for (let e of t.dimensions ?? []) T[e] = N`${N.identifier(c)}.${N.identifier(e)}`.as(e);
6490
- for (let e of t.timeDimensions ?? []) T[e.dimension] = N`${N.identifier(c)}.${N.identifier(e.dimension)}`.as(e.dimension);
6792
+ let w = n.db.select(x).from(b.from), T = [];
6793
+ b.where && T.push(b.where), T.push(...r.queryBuilder.buildWhereConditions(o, t, n)), T.length > 0 && (w = w.where(T.length === 1 ? T[0] : R(...T))), S.length > 0 && (w = w.groupBy(...S));
6794
+ let te = n.db.$with(l).as(w), E = {};
6795
+ for (let e of t.dimensions ?? []) E[e] = F`${F.identifier(c)}.${F.identifier(e)}`.as(e);
6796
+ for (let e of t.timeDimensions ?? []) E[e.dimension] = F`${F.identifier(c)}.${F.identifier(e.dimension)}`.as(e.dimension);
6491
6797
  for (let e of h) {
6492
6798
  let [, t] = e.split("."), n = o.measures?.[t];
6493
- T[e] = this.buildKeysOuterAggregation(n?.type ?? "sum", l, t, e);
6799
+ E[e] = this.buildKeysOuterAggregation(n?.type ?? "sum", l, t, e);
6494
6800
  }
6495
6801
  for (let e of p) {
6496
6802
  let [t, n] = e.split("."), r = a.get(t)?.measures?.[n], i = `__reg__${e.replace(".", "__")}`;
6497
- T[e] = this.buildKeysOuterAggregation(r?.type ?? "sum", c, i, e);
6803
+ E[e] = this.buildKeysOuterAggregation(r?.type ?? "sum", c, i, e);
6498
6804
  }
6499
- let E = n.db.with(y, ne).select(T).from(N`${N.identifier(c)}`), D = f.map((e, t) => I(N`${N.identifier(c)}.${N.identifier(e)}`, N`${N.identifier(l)}.${N.identifier(s[t])}`)), re = D.length === 1 ? D[0] : L(...D);
6500
- E = E.leftJoin(N`${N.identifier(l)}`, re);
6501
- let O = [...(t.dimensions ?? []).map((e) => N`${N.identifier(c)}.${N.identifier(e)}`), ...(t.timeDimensions ?? []).map((e) => N`${N.identifier(c)}.${N.identifier(e.dimension)}`)];
6502
- O.length > 0 && (E = E.groupBy(...O));
6503
- let k = r.queryBuilder.buildOrderBy(t, Object.keys(T));
6504
- return k.length > 0 && (E = E.orderBy(...k)), E = r.queryBuilder.applyLimitAndOffset(E, t), E;
6805
+ let D = n.db.with(y, te).select(E).from(F`${F.identifier(c)}`), O = f.map((e, t) => L(F`${F.identifier(c)}.${F.identifier(e)}`, F`${F.identifier(l)}.${F.identifier(s[t])}`)), ne = O.length === 1 ? O[0] : R(...O);
6806
+ D = D.leftJoin(F`${F.identifier(l)}`, ne);
6807
+ let k = [...(t.dimensions ?? []).map((e) => F`${F.identifier(c)}.${F.identifier(e)}`), ...(t.timeDimensions ?? []).map((e) => F`${F.identifier(c)}.${F.identifier(e.dimension)}`)];
6808
+ k.length > 0 && (D = D.groupBy(...k));
6809
+ let A = r.queryBuilder.buildOrderBy(t, Object.keys(E));
6810
+ return A.length > 0 && (D = D.orderBy(...A)), D = r.queryBuilder.applyLimitAndOffset(D, t), D;
6505
6811
  }
6506
6812
  tryBuildMultiFactMergeQuery(e, t, n, r) {
6507
6813
  let i = e.multiFactMerge;
@@ -6512,37 +6818,37 @@ var en = class {
6512
6818
  });
6513
6819
  if (s) return this.buildMultiFactUnionKeysFallbackQuery(t, n, r, i, l, o);
6514
6820
  let u = i.groups[0].alias, d = i.groups.map((e) => e.alias), f = {};
6515
- if (o.length > 0) for (let e of o) f[e] = N`${this.coalesceQualifiedColumn(d, e)}`.as(e);
6516
- for (let e of i.groups) for (let t of e.measures) f[t] = N`coalesce(${N`${N.identifier(e.alias)}.${N.identifier(t)}`}, 0)`.as(t);
6517
- let p = n.db.with(...l).select(f).from(N`${N.identifier(u)}`), m = /* @__PURE__ */ new Map();
6518
- for (let e of o) m.set(e, N`${N.identifier(u)}.${N.identifier(e)}`);
6821
+ if (o.length > 0) for (let e of o) f[e] = F`${this.coalesceQualifiedColumn(d, e)}`.as(e);
6822
+ for (let e of i.groups) for (let t of e.measures) f[t] = F`coalesce(${F`${F.identifier(e.alias)}.${F.identifier(t)}`}, 0)`.as(t);
6823
+ let p = n.db.with(...l).select(f).from(F`${F.identifier(u)}`), m = /* @__PURE__ */ new Map();
6824
+ for (let e of o) m.set(e, F`${F.identifier(u)}.${F.identifier(e)}`);
6519
6825
  for (let e = 1; e < i.groups.length; e++) {
6520
6826
  let t = i.groups[e].alias, n;
6521
- if (o.length === 0) n = N`1 = 1`;
6827
+ if (o.length === 0) n = F`1 = 1`;
6522
6828
  else {
6523
- let e = o.map((e) => I(m.get(e), N`${N.identifier(t)}.${N.identifier(e)}`));
6524
- n = e.length === 1 ? e[0] : L(...e);
6829
+ let e = o.map((e) => L(m.get(e), F`${F.identifier(t)}.${F.identifier(e)}`));
6830
+ n = e.length === 1 ? e[0] : R(...e);
6525
6831
  }
6526
- if (p = this.applyJoinByType(p, c, N`${N.identifier(t)}`, n), o.length > 0 && c === "full") for (let e of o) m.set(e, N`coalesce(${m.get(e)}, ${N`${N.identifier(t)}.${N.identifier(e)}`})`);
6832
+ if (p = this.applyJoinByType(p, c, F`${F.identifier(t)}`, n), o.length > 0 && c === "full") for (let e of o) m.set(e, F`coalesce(${m.get(e)}, ${F`${F.identifier(t)}.${F.identifier(e)}`})`);
6527
6833
  }
6528
6834
  let h = r.queryBuilder.buildOrderBy(t, Object.keys(f));
6529
6835
  return h.length > 0 && (p = p.orderBy(...h)), r.queryBuilder.applyLimitAndOffset(p, t);
6530
6836
  }
6531
6837
  buildMultiFactUnionKeysFallbackQuery(e, t, n, r, i, a) {
6532
- let o = "mf_all_keys", s = r.groups.map((e) => N`select ${this.buildSharedKeySelection(e.alias, a)} from ${N.identifier(e.alias)}`), c = N`${N.join(s, N` union `)}`, l = t.db.$with(o).as(c), u = {};
6533
- for (let e of a) u[e] = N`${N.identifier(o)}.${N.identifier(e)}`.as(e);
6534
- for (let e of r.groups) for (let t of e.measures) u[t] = N`coalesce(${N`${N.identifier(e.alias)}.${N.identifier(t)}`}, 0)`.as(t);
6535
- let d = t.db.with(...i, l).select(u).from(N`${N.identifier(o)}`);
6838
+ let o = "mf_all_keys", s = r.groups.map((e) => F`select ${this.buildSharedKeySelection(e.alias, a)} from ${F.identifier(e.alias)}`), c = F`${F.join(s, F` union `)}`, l = t.db.$with(o).as(c), u = {};
6839
+ for (let e of a) u[e] = F`${F.identifier(o)}.${F.identifier(e)}`.as(e);
6840
+ for (let e of r.groups) for (let t of e.measures) u[t] = F`coalesce(${F`${F.identifier(e.alias)}.${F.identifier(t)}`}, 0)`.as(t);
6841
+ let d = t.db.with(...i, l).select(u).from(F`${F.identifier(o)}`);
6536
6842
  for (let e of r.groups) {
6537
- let t = a.map((t) => I(N`${N.identifier(o)}.${N.identifier(t)}`, N`${N.identifier(e.alias)}.${N.identifier(t)}`)), n = t.length === 1 ? t[0] : L(...t);
6538
- d = d.leftJoin(N`${N.identifier(e.alias)}`, n);
6843
+ let t = a.map((t) => L(F`${F.identifier(o)}.${F.identifier(t)}`, F`${F.identifier(e.alias)}.${F.identifier(t)}`)), n = t.length === 1 ? t[0] : R(...t);
6844
+ d = d.leftJoin(F`${F.identifier(e.alias)}`, n);
6539
6845
  }
6540
6846
  let f = n.queryBuilder.buildOrderBy(e, Object.keys(u));
6541
6847
  return f.length > 0 && (d = d.orderBy(...f)), n.queryBuilder.applyLimitAndOffset(d, e);
6542
6848
  }
6543
6849
  buildSharedKeySelection(e, t) {
6544
- let n = t.map((t) => N`${N.identifier(e)}.${N.identifier(t)} as ${N.identifier(t)}`);
6545
- return N.join(n, N`, `);
6850
+ let n = t.map((t) => F`${F.identifier(e)}.${F.identifier(t)} as ${F.identifier(t)}`);
6851
+ return F.join(n, F`, `);
6546
6852
  }
6547
6853
  selectRuntimeMergeStrategy(e, t) {
6548
6854
  return !t || e === "innerJoin" ? "inner" : e === "leftJoin" ? "left" : this.supportsFullOuterJoin() ? "full" : "left";
@@ -6552,9 +6858,9 @@ var en = class {
6552
6858
  return e === "postgres" || e === "duckdb";
6553
6859
  }
6554
6860
  coalesceQualifiedColumn(e, t) {
6555
- if (e.length === 1) return N`${N.identifier(e[0])}.${N.identifier(t)}`;
6556
- let n = e.map((e) => N`${N.identifier(e)}.${N.identifier(t)}`), r = n[0];
6557
- for (let e = 1; e < n.length; e++) r = N`coalesce(${r}, ${n[e]})`;
6861
+ if (e.length === 1) return F`${F.identifier(e[0])}.${F.identifier(t)}`;
6862
+ let n = e.map((e) => F`${F.identifier(e)}.${F.identifier(t)}`), r = n[0];
6863
+ for (let e = 1; e < n.length; e++) r = F`coalesce(${r}, ${n[e]})`;
6558
6864
  return r;
6559
6865
  }
6560
6866
  canExecuteKeysDeduplication(e, t, n) {
@@ -6600,10 +6906,10 @@ var en = class {
6600
6906
  }
6601
6907
  buildKeysOuterAggregation(e, t, n, r) {
6602
6908
  switch (e) {
6603
- case "min": return N`min(${N`${N.identifier(t)}.${N.identifier(n)}`})`.as(r);
6604
- case "max": return N`max(${N`${N.identifier(t)}.${N.identifier(n)}`})`.as(r);
6605
- case "avg": return N`sum(${N`${N.identifier(t)}.${N.identifier(`__avg_sum__${n}`)}`}) / nullif(sum(${N`${N.identifier(t)}.${N.identifier(`__avg_count__${n}`)}`}), 0)`.as(r);
6606
- default: return N`coalesce(sum(${N`${N.identifier(t)}.${N.identifier(n)}`}), 0)`.as(r);
6909
+ case "min": return F`min(${F`${F.identifier(t)}.${F.identifier(n)}`})`.as(r);
6910
+ case "max": return F`max(${F`${F.identifier(t)}.${F.identifier(n)}`})`.as(r);
6911
+ case "avg": return F`sum(${F`${F.identifier(t)}.${F.identifier(`__avg_sum__${n}`)}`}) / nullif(sum(${F`${F.identifier(t)}.${F.identifier(`__avg_count__${n}`)}`}), 0)`.as(r);
6912
+ default: return F`coalesce(sum(${F`${F.identifier(t)}.${F.identifier(n)}`}), 0)`.as(r);
6607
6913
  }
6608
6914
  }
6609
6915
  applyJoinByType(e, t, n, r) {
@@ -6614,7 +6920,7 @@ var en = class {
6614
6920
  default: return e.leftJoin(n, r);
6615
6921
  }
6616
6922
  }
6617
- }, tn = class {
6923
+ }, un = class {
6618
6924
  queryBuilder;
6619
6925
  drizzlePlanBuilder;
6620
6926
  databaseAdapter;
@@ -6627,16 +6933,16 @@ var en = class {
6627
6933
  planOptimiser;
6628
6934
  constructor(e, t) {
6629
6935
  if (this.dbExecutor = e, this.databaseAdapter = e.databaseAdapter, !this.databaseAdapter) throw Error("DatabaseExecutor must have a databaseAdapter property");
6630
- this.queryBuilder = new Ct(this.databaseAdapter);
6631
- let n = new Tt(), r = new Et(this.queryBuilder);
6632
- this.drizzlePlanBuilder = new en(this.queryBuilder, r, this.databaseAdapter), this.comparisonQueryBuilder = new Ft(this.databaseAdapter), this.funnelQueryBuilder = new It(this.databaseAdapter), this.flowQueryBuilder = new Lt(this.databaseAdapter), this.retentionQueryBuilder = new Ht(this.databaseAdapter), this.logicalPlanBuilder = new Ut(n), this.planOptimiser = new Wt(), this.cacheConfig = t;
6936
+ this.queryBuilder = new jt(this.databaseAdapter);
6937
+ let n = new Nt(), r = new Pt(this.queryBuilder);
6938
+ this.drizzlePlanBuilder = new ln(this.queryBuilder, r, this.databaseAdapter), this.comparisonQueryBuilder = new Ut(this.databaseAdapter), this.funnelQueryBuilder = new Wt(this.databaseAdapter), this.flowQueryBuilder = new Gt(this.databaseAdapter), this.retentionQueryBuilder = new Xt(this.databaseAdapter), this.logicalPlanBuilder = new Zt(n), this.planOptimiser = new Qt(), this.cacheConfig = t;
6633
6939
  }
6634
6940
  async execute(e, t, n, r) {
6635
6941
  try {
6636
6942
  let i = this.resolveQueryMode(t);
6637
6943
  this.validateQueryForMode(i, e, t);
6638
6944
  let a;
6639
- if (this.cacheConfig?.enabled !== !1 && this.cacheConfig?.provider) if (a = ut(t, n, this.cacheConfig), r?.skipCache) this.cacheConfig.onCacheEvent?.({
6945
+ if (this.cacheConfig?.enabled !== !1 && this.cacheConfig?.provider) if (a = _t(t, n, this.cacheConfig), r?.skipCache) this.cacheConfig.onCacheEvent?.({
6640
6946
  type: "miss",
6641
6947
  key: a,
6642
6948
  durationMs: 0
@@ -6814,7 +7120,7 @@ var en = class {
6814
7120
  this.preloadFilterCache(t, r, e, i);
6815
7121
  let { optimisedPlan: a } = this.buildRegularQueryArtifacts(e, t, i), o = this.drizzlePlanBuilder.derivePhysicalPlanContext(a), s = this.drizzlePlanBuilder.build(o, t, i), c = this.queryBuilder.collectNumericFields(e, t), l = await this.dbExecutor.execute(s, c);
6816
7122
  return {
6817
- data: Pt(Array.isArray(l) ? l.map((e) => {
7123
+ data: Ht(Array.isArray(l) ? l.map((e) => {
6818
7124
  let n = { ...e };
6819
7125
  if (t.timeDimensions) {
6820
7126
  for (let e of t.timeDimensions) if (e.dimension in n) {
@@ -6940,7 +7246,7 @@ var en = class {
6940
7246
  }
6941
7247
  validateQueryForMode(e, t, n) {
6942
7248
  let r = () => {
6943
- let e = an(t, n);
7249
+ let e = pn(t, n);
6944
7250
  if (!e.isValid) throw Error(`Query validation failed: ${e.errors.join(", ")}`);
6945
7251
  };
6946
7252
  ({
@@ -6958,7 +7264,7 @@ var en = class {
6958
7264
  let e = this.retentionQueryBuilder.validateConfig(n.retention, t);
6959
7265
  if (!e.isValid) throw Error(`Retention validation failed: ${e.errors.join(", ")}`);
6960
7266
  }
6961
- })[e]();
7267
+ })[ft(e)]();
6962
7268
  }
6963
7269
  async executeQueryByModeWithCache(e, t, n, r, i) {
6964
7270
  return {
@@ -6967,7 +7273,7 @@ var en = class {
6967
7273
  funnel: () => this.executeFunnelQueryWithCache(t, n, r, i),
6968
7274
  flow: () => this.executeFlowQueryWithCache(t, n, r, i),
6969
7275
  retention: () => this.executeRetentionQueryWithCache(t, n, r, i)
6970
- }[e]();
7276
+ }[ft(e)]();
6971
7277
  }
6972
7278
  async executeRegularQueryWithCache(e, t, n, r) {
6973
7279
  let i = new q(), a = this.createQueryContext(n, i);
@@ -6975,7 +7281,7 @@ var en = class {
6975
7281
  let { optimisedPlan: o } = this.buildRegularQueryArtifacts(e, t, a), s = this.drizzlePlanBuilder.derivePhysicalPlanContext(o);
6976
7282
  this.validateSecurityContext(s, a);
6977
7283
  let c = this.drizzlePlanBuilder.build(s, t, a), l = this.queryBuilder.collectNumericFields(e, t), u = await this.dbExecutor.execute(c, l), d = {
6978
- data: Pt(Array.isArray(u) ? u.map((e) => {
7284
+ data: Ht(Array.isArray(u) ? u.map((e) => {
6979
7285
  let n = { ...e };
6980
7286
  if (t.timeDimensions) {
6981
7287
  for (let e of t.timeDimensions) if (e.dimension in n) {
@@ -7013,7 +7319,7 @@ var en = class {
7013
7319
  funnel: () => this.dryRunFunnel(t, n, r),
7014
7320
  flow: () => this.dryRunFlow(t, n, r),
7015
7321
  retention: () => this.dryRunRetention(t, n, r)
7016
- }[e]();
7322
+ }[ft(e)]();
7017
7323
  }
7018
7324
  async generateComparisonSQL(e, t, n) {
7019
7325
  let r = this.buildComparisonExecutionPlan(t).periodQueries[0];
@@ -7065,9 +7371,9 @@ var en = class {
7065
7371
  }
7066
7372
  preloadFilterCache(e, t, n, r) {
7067
7373
  if (e.filters && e.filters.length > 0) {
7068
- let i = lt(e.filters);
7374
+ let i = gt(e.filters);
7069
7375
  for (let e of i) {
7070
- let i = st(e);
7376
+ let i = mt(e);
7071
7377
  if (t.has(i)) continue;
7072
7378
  let [a, o] = e.member.split("."), s = n.get(a);
7073
7379
  if (!s) continue;
@@ -7083,7 +7389,7 @@ var en = class {
7083
7389
  }
7084
7390
  if (e.timeDimensions) {
7085
7391
  for (let i of e.timeDimensions) if (i.dateRange) {
7086
- let e = ct(i.dimension, i.dateRange);
7392
+ let e = ht(i.dimension, i.dateRange);
7087
7393
  if (t.has(e)) continue;
7088
7394
  let [a, o] = i.dimension.split("."), s = n.get(a);
7089
7395
  if (!s) continue;
@@ -7094,13 +7400,13 @@ var en = class {
7094
7400
  }
7095
7401
  }
7096
7402
  }
7097
- }, nn = class e {
7403
+ }, dn = class e {
7098
7404
  cubes = /* @__PURE__ */ new Map();
7099
7405
  dbExecutor;
7100
7406
  metadataCache;
7101
7407
  cacheConfig;
7102
7408
  constructor(e) {
7103
- e?.databaseExecutor ? this.dbExecutor = e.databaseExecutor : e?.drizzle && (this.dbExecutor = nt(e.drizzle, e.schema, e.engineType)), this.cacheConfig = e?.cache;
7409
+ e?.databaseExecutor ? this.dbExecutor = e.databaseExecutor : e?.drizzle && (this.dbExecutor = ct(e.drizzle, e.schema, e.engineType)), this.cacheConfig = e?.cache;
7104
7410
  }
7105
7411
  setDatabaseExecutor(e) {
7106
7412
  this.dbExecutor = e;
@@ -7109,7 +7415,7 @@ var en = class {
7109
7415
  return this.dbExecutor?.getEngineType();
7110
7416
  }
7111
7417
  setDrizzle(e, t, n) {
7112
- this.dbExecutor = nt(e, t, n);
7418
+ this.dbExecutor = ct(e, t, n);
7113
7419
  }
7114
7420
  hasExecutor() {
7115
7421
  return !!this.dbExecutor;
@@ -7119,7 +7425,7 @@ var en = class {
7119
7425
  return this.dbExecutor;
7120
7426
  }
7121
7427
  createQueryExecutor(e = !1) {
7122
- return new tn(this.requireExecutor(), e ? this.cacheConfig : void 0);
7428
+ return new un(this.requireExecutor(), e ? this.cacheConfig : void 0);
7123
7429
  }
7124
7430
  formatSqlResult(e) {
7125
7431
  let t = this.requireExecutor().getEngineType();
@@ -7129,7 +7435,7 @@ var en = class {
7129
7435
  };
7130
7436
  }
7131
7437
  registerCube(e) {
7132
- this.validateCalculatedMeasures(e), new Z(this.cubes).populateDependencies(e), this.cubes.set(e.name, e), this.invalidateMetadataCache();
7438
+ this.validateCalculatedMeasures(e), new X(this.cubes).populateDependencies(e), this.cubes.set(e.name, e), this.invalidateMetadataCache();
7133
7439
  }
7134
7440
  validateCubeReferences() {
7135
7441
  let e = [];
@@ -7143,14 +7449,14 @@ var en = class {
7143
7449
  t.push(`Calculated measure '${e.name}.${n}' must have calculatedSql property`);
7144
7450
  continue;
7145
7451
  }
7146
- let i = bt(r.calculatedSql);
7452
+ let i = Ot(r.calculatedSql);
7147
7453
  if (!i.isValid) {
7148
7454
  t.push(`Invalid calculatedSql syntax in '${e.name}.${n}': ${i.errors.join(", ")}`);
7149
7455
  continue;
7150
7456
  }
7151
7457
  let a = new Map(this.cubes);
7152
7458
  a.set(e.name, e);
7153
- let o = new Z(a);
7459
+ let o = new X(a);
7154
7460
  try {
7155
7461
  o.validateDependencies(e);
7156
7462
  } catch (e) {
@@ -7160,7 +7466,7 @@ var en = class {
7160
7466
  if (t.length === 0) {
7161
7467
  let n = new Map(this.cubes);
7162
7468
  n.set(e.name, e);
7163
- let r = new Z(n);
7469
+ let r = new X(n);
7164
7470
  r.buildGraph(e);
7165
7471
  let i = r.detectCycle();
7166
7472
  i && t.push(`Circular dependency detected in calculated measures: ${i.join(" -> ")}`);
@@ -7313,18 +7619,18 @@ var en = class {
7313
7619
  return Array.from(this.cubes.keys());
7314
7620
  }
7315
7621
  validateQuery(e) {
7316
- return an(this.cubes, e);
7622
+ return pn(this.cubes, e);
7317
7623
  }
7318
7624
  analyzeQuery(e, t) {
7319
7625
  return this.createQueryExecutor(!0).analyzeQuery(this.cubes, e, t);
7320
7626
  }
7321
7627
  };
7322
- function rn(e) {
7628
+ function fn(e) {
7323
7629
  let t = [];
7324
7630
  return e.timeDimensions?.some((e) => e.compareDateRange && e.compareDateRange.length >= 2) && t.push("comparison"), e.funnel !== void 0 && e.funnel.steps?.length >= 2 && t.push("funnel"), e.flow !== void 0 && e.flow.startingStep !== void 0 && e.flow.eventDimension !== void 0 && t.push("flow"), e.retention !== void 0 && e.retention.timeDimension != null && e.retention.bindingKey != null && t.push("retention"), t.length === 0 ? [] : t;
7325
7631
  }
7326
- function an(e, t) {
7327
- let n = [], r = rn(t);
7632
+ function pn(e, t) {
7633
+ let n = [], r = fn(t);
7328
7634
  if (r.length > 1) return n.push(`Query contains multiple query modes: ${r.join(", ")}`), {
7329
7635
  isValid: !1,
7330
7636
  errors: n
@@ -7345,7 +7651,7 @@ function an(e, t) {
7345
7651
  }
7346
7652
  },
7347
7653
  retention: () => {
7348
- let r = t.retention, i = sn(r.timeDimension);
7654
+ let r = t.retention, i = hn(r.timeDimension);
7349
7655
  i && !e.has(i) && n.push(`Retention cube not found: ${i}`);
7350
7656
  let a = r.bindingKey;
7351
7657
  if (typeof a == "string") {
@@ -7411,16 +7717,16 @@ function an(e, t) {
7411
7717
  }
7412
7718
  o.dimensions[i] || n.push(`TimeDimension '${i}' not found on cube '${t}' (must be a dimension with time type)`);
7413
7719
  }
7414
- if (t.filters) for (let r of t.filters) on(r, e, n, a);
7720
+ if (t.filters) for (let r of t.filters) mn(r, e, n, a);
7415
7721
  return a.size === 0 && n.push("Query must reference at least one cube through measures, dimensions, or filters"), {
7416
7722
  isValid: n.length === 0,
7417
7723
  errors: n
7418
7724
  };
7419
7725
  }
7420
- function on(e, t, n, r) {
7726
+ function mn(e, t, n, r) {
7421
7727
  if ("and" in e || "or" in e) {
7422
7728
  let i = e.and || e.or || [];
7423
- for (let e of i) on(e, t, n, r);
7729
+ for (let e of i) mn(e, t, n, r);
7424
7730
  return;
7425
7731
  }
7426
7732
  if (!("member" in e)) {
@@ -7443,7 +7749,7 @@ function on(e, t, n, r) {
7443
7749
  n.push(`Filter field '${a}' not found on cube '${i}' (must be a dimension or measure)${e}`);
7444
7750
  }
7445
7751
  }
7446
- function sn(e) {
7752
+ function hn(e) {
7447
7753
  if (typeof e == "string") {
7448
7754
  let [t] = e.split(".");
7449
7755
  return t || null;
@@ -7452,31 +7758,31 @@ function sn(e) {
7452
7758
  }
7453
7759
  //#endregion
7454
7760
  //#region src/adapters/mcp-transport.ts
7455
- var cn = [
7761
+ var Q = [
7456
7762
  "2025-11-25",
7457
7763
  "2025-06-18",
7458
7764
  "2025-03-26"
7459
- ], ln = "2025-11-25";
7460
- function un(e) {
7461
- let t = bn(e["mcp-protocol-version"]) || "2025-11-25";
7765
+ ], gn = "2025-11-25";
7766
+ function _n(e) {
7767
+ let t = Dn(e["mcp-protocol-version"]) || "2025-11-25";
7462
7768
  return {
7463
- ok: cn.includes(t),
7464
- negotiated: cn.includes(t) ? t : null,
7465
- supported: cn
7769
+ ok: Q.includes(t),
7770
+ negotiated: Q.includes(t) ? t : null,
7771
+ supported: Q
7466
7772
  };
7467
7773
  }
7468
- function dn(e) {
7774
+ function vn(e) {
7469
7775
  if (!e) return !1;
7470
7776
  let t = e.split(",").map((e) => e.trim().toLowerCase()), n = t.includes("text/event-stream"), r = t.includes("application/json");
7471
7777
  return n && !r;
7472
7778
  }
7473
- var fn = "mcp-session-id";
7474
- function pn(e) {
7779
+ var yn = "mcp-session-id";
7780
+ function bn(e) {
7475
7781
  if (!e) return !1;
7476
7782
  let t = e.split(",").map((e) => e.trim().toLowerCase().split(";")[0]), n = t.some((e) => e === "application/json"), r = t.some((e) => e === "text/event-stream");
7477
7783
  return n && r;
7478
7784
  }
7479
- function mn(e, t = {}) {
7785
+ function xn(e, t = {}) {
7480
7786
  let { allowMissingOrigin: n = !0, allowedOrigins: r } = t;
7481
7787
  if (!e) return n ? { valid: !0 } : {
7482
7788
  valid: !1,
@@ -7503,11 +7809,11 @@ function mn(e, t = {}) {
7503
7809
  reason: "Origin not in allowed list"
7504
7810
  };
7505
7811
  }
7506
- function hn(e, t, n) {
7812
+ function Sn(e, t, n) {
7507
7813
  let r = [];
7508
7814
  return t && r.push(`id: ${t}`), n && n > 0 && r.push(`retry: ${n}`), r.push("event: message"), r.push(`data: ${JSON.stringify(e)}`), r.push(""), r.join("\n");
7509
7815
  }
7510
- function gn(e, t, n, r) {
7816
+ function Cn(e, t, n, r) {
7511
7817
  return {
7512
7818
  jsonrpc: "2.0",
7513
7819
  id: e ?? null,
@@ -7518,14 +7824,14 @@ function gn(e, t, n, r) {
7518
7824
  }
7519
7825
  };
7520
7826
  }
7521
- function _n(e, t) {
7827
+ function wn(e, t) {
7522
7828
  return {
7523
7829
  jsonrpc: "2.0",
7524
7830
  id: e ?? null,
7525
7831
  result: t
7526
7832
  };
7527
7833
  }
7528
- function vn(e) {
7834
+ function Tn(e) {
7529
7835
  if (!e || typeof e != "object") return null;
7530
7836
  let t = e;
7531
7837
  return t.jsonrpc !== "2.0" || typeof t.method != "string" ? null : {
@@ -7535,12 +7841,12 @@ function vn(e) {
7535
7841
  params: t.params
7536
7842
  };
7537
7843
  }
7538
- async function yn(e, i, a) {
7539
- let { semanticLayer: o, extractSecurityContext: s, rawRequest: c, rawResponse: l } = a, u = a.prompts ?? En, d = a.resources ?? Dn;
7844
+ async function En(e, i, a) {
7845
+ let { semanticLayer: o, extractSecurityContext: s, rawRequest: c, rawResponse: l } = a, u = a.prompts ?? Nn, d = a.resources ?? Pn;
7540
7846
  switch (e) {
7541
7847
  case "initialize": {
7542
7848
  let e = i?.protocolVersion, t;
7543
- return t = e && cn.includes(e) ? e : ln, {
7849
+ return t = e && Q.includes(e) ? e : gn, {
7544
7850
  protocolVersion: t,
7545
7851
  capabilities: {
7546
7852
  tools: { listChanged: !1 },
@@ -7548,7 +7854,7 @@ async function yn(e, i, a) {
7548
7854
  prompts: { listChanged: !1 },
7549
7855
  sampling: {}
7550
7856
  },
7551
- sessionId: Sn(),
7857
+ sessionId: kn(),
7552
7858
  serverInfo: {
7553
7859
  name: "drizzle-cube",
7554
7860
  version: typeof process < "u" ? process.env?.npm_package_version || "dev" : "worker"
@@ -7557,11 +7863,11 @@ async function yn(e, i, a) {
7557
7863
  }
7558
7864
  case "list_tools":
7559
7865
  case "tools/list": return {
7560
- tools: Cn(),
7866
+ tools: An(),
7561
7867
  nextCursor: ""
7562
7868
  };
7563
7869
  case "call_tool":
7564
- case "tools/call": return wn(i, a);
7870
+ case "tools/call": return jn(i, a);
7565
7871
  case "resources/list": return {
7566
7872
  resources: d.map(({ uri: e, name: t, description: n, mimeType: r }) => ({
7567
7873
  uri: e,
@@ -7620,16 +7926,16 @@ function $(e, t, n) {
7620
7926
  let r = Error(t);
7621
7927
  return r.code = e, n !== void 0 && (r.data = n), r;
7622
7928
  }
7623
- function bn(e) {
7929
+ function Dn(e) {
7624
7930
  return e ? Array.isArray(e) ? e[0] || null : e : null;
7625
7931
  }
7626
- function xn(e) {
7932
+ function On(e) {
7627
7933
  return e.id === void 0 || e.id === null;
7628
7934
  }
7629
- function Sn() {
7935
+ function kn() {
7630
7936
  return `evt-${e()}`;
7631
7937
  }
7632
- function Cn() {
7938
+ function An() {
7633
7939
  return [
7634
7940
  {
7635
7941
  name: "discover",
@@ -7682,26 +7988,26 @@ function Cn() {
7682
7988
  }
7683
7989
  ];
7684
7990
  }
7685
- async function wn(e, i) {
7991
+ async function jn(e, i) {
7686
7992
  let { semanticLayer: a, extractSecurityContext: o, rawRequest: s, rawResponse: c } = i, l = e || {};
7687
7993
  if (!l.name) throw $(-32602, "name is required for tools/call");
7688
7994
  let u = l.arguments;
7689
7995
  switch (l.name) {
7690
- case "discover": return Tn(await t(a, u || {}));
7996
+ case "discover": return Mn(await t(a, u || {}));
7691
7997
  case "validate": {
7692
7998
  let e = u || {};
7693
7999
  if (!e.query) throw $(-32602, "query is required");
7694
- return Tn(await n(a, e));
8000
+ return Mn(await n(a, e));
7695
8001
  }
7696
8002
  case "load": {
7697
8003
  let e = u || {};
7698
8004
  if (!e.query) throw $(-32602, "query is required");
7699
- return Tn(await r(a, await o(s, c), e));
8005
+ return Mn(await r(a, await o(s, c), e));
7700
8006
  }
7701
8007
  default: throw $(-32601, `Unknown tool: ${l.name}`);
7702
8008
  }
7703
8009
  }
7704
- function Tn(e) {
8010
+ function Mn(e) {
7705
8011
  return {
7706
8012
  content: [{
7707
8013
  type: "text",
@@ -7710,7 +8016,7 @@ function Tn(e) {
7710
8016
  isError: !1
7711
8017
  };
7712
8018
  }
7713
- var En = a(), Dn = [{
8019
+ var Nn = a(), Pn = [{
7714
8020
  uri: "drizzle-cube://quickstart",
7715
8021
  name: "Drizzle Cube MCP Quickstart",
7716
8022
  description: "Minimal guide for using discover/suggest/validate/load",
@@ -7811,11 +8117,11 @@ var En = a(), Dn = [{
7811
8117
  "- Both can be combined: inDateRange filter + timeDimensions granularity."
7812
8118
  ].join("\n")
7813
8119
  }];
7814
- function On() {
7815
- return Dn;
8120
+ function Fn() {
8121
+ return Pn;
7816
8122
  }
7817
- function kn() {
7818
- return En;
8123
+ function In() {
8124
+ return Nn;
7819
8125
  }
7820
8126
  //#endregion
7821
- export { kn as a, un as c, hn as d, pn as f, nn as h, yn as i, vn as l, dn as m, gn as n, On as o, mn as p, _n as r, xn as s, fn as t, Sn as u };
8127
+ export { In as a, _n as c, Sn as d, bn as f, dn as h, En as i, Tn as l, vn as m, Cn as n, Fn as o, xn as p, wn as r, On as s, yn as t, kn as u };