drizzle-cube 0.4.30 → 0.4.32

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-B8vuFQYP.cjs → handler-ClgB__a-.cjs} +2 -2
  8. package/dist/adapters/{handler-D-2-6uLM.js → handler-rPpxuopb.js} +4 -4
  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-DPpei63d.cjs +255 -0
  13. package/dist/adapters/{mcp-transport-CuugoG8t.js → mcp-transport-DWSNkwUY.js} +1588 -962
  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-Bc8qwEKW.cjs} +1 -1
  18. package/dist/adapters/openai-C96O8M75.cjs +16 -0
  19. package/dist/adapters/{openai-CjBvA6mK.js → openai-Ckpe7iU7.js} +659 -637
  20. package/dist/adapters/{openai-Zjw4Zo4R.js → openai-DxeVtl8X.js} +1 -1
  21. package/dist/adapters/{utils-ChhNGUOF.js → utils-B7VkyzMv.js} +7 -3
  22. package/dist/adapters/{utils-CwJplXR5.cjs → utils-BLFzzCI9.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 +42 -40
  106. package/dist/server/index.d.ts +77 -9
  107. package/dist/server/index.js +1868 -1238
  108. package/dist/server/{openai-CLsoLaue.cjs → openai-0HbLlZq6.cjs} +1 -1
  109. package/dist/server/openai-DKpZPCay.cjs +16 -0
  110. package/dist/server/{openai-D1kZ5sdM.js → openai-DnGeU9PT.js} +1 -1
  111. package/dist/server/{openai-BPhmb8mi.js → openai-DqCEogm0.js} +659 -637
  112. package/package.json +24 -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-B7VkyzMv.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");
@@ -271,9 +271,9 @@ var y = class extends l {
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 S(e, this.config, t);
275
275
  }
276
- }, te = class e extends b {
276
+ }, S = 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,42 @@ var U = class {
834
834
  supportsWindowFunctions: !0,
835
835
  supportsFrameClause: !0,
836
836
  supportsLateralJoins: !0,
837
- supportsPercentileSubqueries: !0
837
+ supportsPercentileSubqueries: !0,
838
+ supportsDerivedTablesInCTE: !0,
839
+ supportsLateralSubqueriesInCTE: !0
838
840
  };
839
841
  }
840
842
  buildStddev(e, t = !1) {
841
843
  let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
842
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
844
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
843
845
  }
844
846
  buildVariance(e, t = !1) {
845
847
  let n = t ? "VAR_SAMP" : "VAR_POP";
846
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
848
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
847
849
  }
848
850
  buildPercentile(e, t) {
849
- return N`PERCENTILE_CONT(${t / 100}) WITHIN GROUP (ORDER BY ${e})`;
851
+ return F`PERCENTILE_CONT(${t / 100}) WITHIN GROUP (ORDER BY ${e})`;
850
852
  }
851
853
  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``;
854
+ 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
855
  if (i?.frame) {
854
856
  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)}`;
857
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
856
858
  }
857
859
  let c = [];
858
860
  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``})`;
861
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
860
862
  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}`;
863
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
864
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
865
+ case "rank": return F`RANK() ${l}`;
866
+ case "denseRank": return F`DENSE_RANK() ${l}`;
867
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
868
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
869
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
870
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
871
+ case "movingAvg": return F`AVG(${t}) ${l}`;
872
+ case "movingSum": return F`SUM(${t}) ${l}`;
871
873
  default: throw Error(`Unsupported window function: ${e}`);
872
874
  }
873
875
  }
@@ -880,25 +882,25 @@ var U = class {
880
882
  }
881
883
  buildIntervalFromISO(e) {
882
884
  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)}`;
885
+ 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
886
  }
885
887
  buildTimeDifferenceSeconds(e, t) {
886
- return N`TIMESTAMPDIFF(SECOND, ${t}, ${e})`;
888
+ return F`TIMESTAMPDIFF(SECOND, ${t}, ${e})`;
887
889
  }
888
890
  buildDateAddInterval(e, t) {
889
891
  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;
892
+ 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
893
  }
892
894
  buildConditionalAggregation(e, t, n) {
893
895
  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)`;
896
+ return e === "count" && !t ? F`COUNT(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
895
897
  }
896
898
  buildDateDiffPeriods(e, t, n) {
897
899
  let r = n.toUpperCase();
898
- return N`TIMESTAMPDIFF(${N.raw(r)}, ${e}, ${t})`;
900
+ return F`TIMESTAMPDIFF(${F.raw(r)}, ${e}, ${t})`;
899
901
  }
900
902
  buildPeriodSeriesSubquery(e) {
901
- return N`(
903
+ return F`(
902
904
  WITH RECURSIVE periods(period_number) AS (
903
905
  SELECT 0
904
906
  UNION ALL
@@ -919,45 +921,45 @@ var U = class {
919
921
  second: "%Y-%m-%d %H:%i:%s"
920
922
  };
921
923
  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)`;
924
+ case "quarter": return F`DATE_ADD(MAKEDATE(YEAR(${t}), 1), INTERVAL (QUARTER(${t}) - 1) * 3 MONTH)`;
925
+ case "week": return F`DATE_SUB(${t}, INTERVAL WEEKDAY(${t}) DAY)`;
924
926
  default: {
925
927
  let r = n[e];
926
- return r ? N`STR_TO_DATE(DATE_FORMAT(${t}, ${r}), '%Y-%m-%d %H:%i:%s')` : t;
928
+ return r ? F`STR_TO_DATE(DATE_FORMAT(${t}, ${r}), '%Y-%m-%d %H:%i:%s')` : t;
927
929
  }
928
930
  }
929
931
  }
930
932
  buildStringCondition(e, t, n) {
931
933
  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}`;
934
+ case "contains": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}%`}`;
935
+ case "notContains": return F`LOWER(${e}) NOT LIKE ${`%${n.toLowerCase()}%`}`;
936
+ case "startsWith": return F`LOWER(${e}) LIKE ${`${n.toLowerCase()}%`}`;
937
+ case "endsWith": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}`}`;
938
+ case "like": return F`${e} LIKE ${n}`;
939
+ case "notLike": return F`${e} NOT LIKE ${n}`;
940
+ case "ilike": return F`LOWER(${e}) LIKE ${n.toLowerCase()}`;
941
+ case "regex": return F`${e} REGEXP ${n}`;
942
+ case "notRegex": return F`${e} NOT REGEXP ${n}`;
941
943
  default: throw Error(`Unsupported string operator: ${t}`);
942
944
  }
943
945
  }
944
946
  castToType(e, t) {
945
947
  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)`;
948
+ case "timestamp": return F`CAST(${e} AS DATETIME)`;
949
+ case "decimal": return F`CAST(${e} AS DECIMAL(10,2))`;
950
+ case "integer": return F`CAST(${e} AS SIGNED INTEGER)`;
949
951
  default: throw Error(`Unsupported cast type: ${t}`);
950
952
  }
951
953
  }
952
954
  buildAvg(e) {
953
- return N`IFNULL(AVG(${e}), 0)`;
955
+ return F`IFNULL(AVG(${e}), 0)`;
954
956
  }
955
957
  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`;
958
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
959
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
958
960
  }
959
961
  buildBooleanLiteral(e) {
960
- return e ? N`TRUE` : N`FALSE`;
962
+ return e ? F`TRUE` : F`FALSE`;
961
963
  }
962
964
  convertFilterValue(e) {
963
965
  return e;
@@ -979,40 +981,42 @@ var U = class {
979
981
  supportsWindowFunctions: !0,
980
982
  supportsFrameClause: !0,
981
983
  supportsLateralJoins: !0,
982
- supportsPercentileSubqueries: !1
984
+ supportsPercentileSubqueries: !1,
985
+ supportsDerivedTablesInCTE: !0,
986
+ supportsLateralSubqueriesInCTE: !0
983
987
  };
984
988
  }
985
989
  buildStddev(e, t = !1) {
986
990
  let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
987
- return N`IFNULL(${N.raw(n)}(${e}), 0)`;
991
+ return F`IFNULL(${F.raw(n)}(${e}), 0)`;
988
992
  }
989
993
  buildVariance(e, t = !1) {
990
994
  let n = t ? "VAR_SAMP" : "VAR_POP";
991
- return N`IFNULL(${N.raw(n)}(${e}), 0)`;
995
+ return F`IFNULL(${F.raw(n)}(${e}), 0)`;
992
996
  }
993
997
  buildPercentile(e, t) {
994
998
  return null;
995
999
  }
996
1000
  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``;
1001
+ 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
1002
  if (i?.frame) {
999
1003
  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)}`;
1004
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1001
1005
  }
1002
1006
  let c = [];
1003
1007
  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``})`;
1008
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1005
1009
  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}`;
1010
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1011
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1012
+ case "rank": return F`RANK() ${l}`;
1013
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1014
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1015
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1016
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1017
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1018
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1019
+ case "movingSum": return F`SUM(${t}) ${l}`;
1016
1020
  default: throw Error(`Unsupported window function: ${e}`);
1017
1021
  }
1018
1022
  }
@@ -1024,28 +1028,28 @@ var U = class {
1024
1028
  return !1;
1025
1029
  }
1026
1030
  buildIntervalFromISO(e) {
1027
- return N`${this.durationToSeconds(e)}`;
1031
+ return F`${this.durationToSeconds(e)}`;
1028
1032
  }
1029
1033
  buildTimeDifferenceSeconds(e, t) {
1030
- return N`(${e} - ${t})`;
1034
+ return F`(${e} - ${t})`;
1031
1035
  }
1032
1036
  buildDateAddInterval(e, t) {
1033
- return N`(${e} + ${this.durationToSeconds(t)})`;
1037
+ return F`(${e} + ${this.durationToSeconds(t)})`;
1034
1038
  }
1035
1039
  buildConditionalAggregation(e, t, n) {
1036
1040
  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)`;
1041
+ return e === "count" && !t ? F`COUNT(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
1038
1042
  }
1039
1043
  buildDateDiffPeriods(e, t, n) {
1040
1044
  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)))`;
1045
+ case "day": return F`CAST((julianday(datetime(${t}, 'unixepoch')) - julianday(datetime(${e}, 'unixepoch'))) AS INTEGER)`;
1046
+ case "week": return F`CAST((julianday(datetime(${t}, 'unixepoch')) - julianday(datetime(${e}, 'unixepoch'))) / 7 AS INTEGER)`;
1047
+ 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
1048
  default: throw Error(`Unsupported date diff unit for SQLite: ${n}`);
1045
1049
  }
1046
1050
  }
1047
1051
  buildPeriodSeriesSubquery(e) {
1048
- return N`(
1052
+ return F`(
1049
1053
  WITH RECURSIVE periods(period_number) AS (
1050
1054
  SELECT 0
1051
1055
  UNION ALL
@@ -1056,55 +1060,55 @@ var U = class {
1056
1060
  }
1057
1061
  buildTimeDimension(e, t) {
1058
1062
  switch (e) {
1059
- case "year": return N`datetime(${t}, 'unixepoch', 'start of year')`;
1063
+ case "year": return F`datetime(${t}, 'unixepoch', 'start of year')`;
1060
1064
  case "quarter": {
1061
- let e = N`datetime(${t}, 'unixepoch')`;
1062
- return N`datetime(${e}, 'start of year',
1065
+ let e = F`datetime(${t}, 'unixepoch')`;
1066
+ return F`datetime(${e}, 'start of year',
1063
1067
  '+' || (((CAST(strftime('%m', ${e}) AS INTEGER) - 1) / 3) * 3) || ' months')`;
1064
1068
  }
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')`;
1069
+ case "month": return F`datetime(${t}, 'unixepoch', 'start of month')`;
1070
+ case "week": return F`date(datetime(${t}, 'unixepoch'), 'weekday 1', '-6 days')`;
1071
+ case "day": return F`datetime(${t}, 'unixepoch', 'start of day')`;
1072
+ case "hour": return F`datetime(strftime('%Y-%m-%d %H:00:00', ${F`datetime(${t}, 'unixepoch')`}))`;
1073
+ case "minute": return F`datetime(strftime('%Y-%m-%d %H:%M:00', ${F`datetime(${t}, 'unixepoch')`}))`;
1074
+ case "second": return F`datetime(strftime('%Y-%m-%d %H:%M:%S', ${F`datetime(${t}, 'unixepoch')`}))`;
1075
+ default: return F`datetime(${t}, 'unixepoch')`;
1072
1076
  }
1073
1077
  }
1074
1078
  buildStringCondition(e, t, n) {
1075
1079
  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}`;
1080
+ case "contains": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}%`}`;
1081
+ case "notContains": return F`LOWER(${e}) NOT LIKE ${`%${n.toLowerCase()}%`}`;
1082
+ case "startsWith": return F`LOWER(${e}) LIKE ${`${n.toLowerCase()}%`}`;
1083
+ case "endsWith": return F`LOWER(${e}) LIKE ${`%${n.toLowerCase()}`}`;
1084
+ case "like": return F`${e} LIKE ${n}`;
1085
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1086
+ case "ilike": return F`LOWER(${e}) LIKE ${n.toLowerCase()}`;
1087
+ case "regex": return F`${e} GLOB ${n}`;
1088
+ case "notRegex": return F`${e} NOT GLOB ${n}`;
1085
1089
  default: throw Error(`Unsupported string operator: ${t}`);
1086
1090
  }
1087
1091
  }
1088
1092
  castToType(e, t) {
1089
1093
  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)`;
1094
+ case "timestamp": return F`datetime(${e} / 1000, 'unixepoch')`;
1095
+ case "decimal": return F`CAST(${e} AS REAL)`;
1096
+ case "integer": return F`CAST(${e} AS INTEGER)`;
1093
1097
  default: throw Error(`Unsupported cast type: ${t}`);
1094
1098
  }
1095
1099
  }
1096
1100
  buildAvg(e) {
1097
- return N`IFNULL(AVG(${e}), 0)`;
1101
+ return F`IFNULL(AVG(${e}), 0)`;
1098
1102
  }
1099
1103
  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`;
1104
+ 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}`);
1105
+ 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
1106
  }
1103
1107
  buildBooleanLiteral(e) {
1104
- return e ? N`1` : N`0`;
1108
+ return e ? F`1` : F`0`;
1105
1109
  }
1106
1110
  preprocessCalculatedTemplate(e) {
1107
- return e.replace(/(\{[^}]+\})\s*\/\s*/g, (e, t) => `${t.replace(/\{([^}]+)\}/, "CAST({$1} AS REAL)")} / `);
1111
+ return e.length > 1e3 ? e : e.replace(/(\{[^}]+\})\s*\/\s*/g, (e, t) => `${t.replace(/\{([^}]+)\}/, "CAST({$1} AS REAL)")} / `);
1108
1112
  }
1109
1113
  convertFilterValue(e) {
1110
1114
  return typeof e == "boolean" ? e ? 1 : 0 : e instanceof Date ? e.getTime() : Array.isArray(e) ? e.map((e) => this.convertFilterValue(e)) : e;
@@ -1131,7 +1135,9 @@ var U = class {
1131
1135
  supportsWindowFunctions: !0,
1132
1136
  supportsFrameClause: !0,
1133
1137
  supportsLateralJoins: !1,
1134
- supportsPercentileSubqueries: !1
1138
+ supportsPercentileSubqueries: !1,
1139
+ supportsDerivedTablesInCTE: !0,
1140
+ supportsLateralSubqueriesInCTE: !1
1135
1141
  };
1136
1142
  }
1137
1143
  buildStddev(e, t = !1) {
@@ -1144,25 +1150,25 @@ var U = class {
1144
1150
  return null;
1145
1151
  }
1146
1152
  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``;
1153
+ 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
1154
  if (i?.frame) {
1149
1155
  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)}`;
1156
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1151
1157
  }
1152
1158
  let c = [];
1153
1159
  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``})`;
1160
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1155
1161
  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}`;
1162
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1163
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1164
+ case "rank": return F`RANK() ${l}`;
1165
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1166
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1167
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1168
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1169
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1170
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1171
+ case "movingSum": return F`SUM(${t}) ${l}`;
1166
1172
  default: throw Error(`Unsupported window function: ${e}`);
1167
1173
  }
1168
1174
  }
@@ -1181,68 +1187,68 @@ var U = class {
1181
1187
  let t = this.parseISODuration(e), n = [];
1182
1188
  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
1189
  let r = n.join(" ") || "0 seconds";
1184
- return N`INTERVAL '${N.raw(r)}'`;
1190
+ return F`INTERVAL '${F.raw(r)}'`;
1185
1191
  }
1186
1192
  buildTimeDifferenceSeconds(e, t) {
1187
- return N`(EPOCH(${e}) - EPOCH(${t}))`;
1193
+ return F`(EPOCH(${e}) - EPOCH(${t}))`;
1188
1194
  }
1189
1195
  buildDateAddInterval(e, t) {
1190
- return N`(${e} + ${this.buildIntervalFromISO(t)})`;
1196
+ return F`(${e} + ${this.buildIntervalFromISO(t)})`;
1191
1197
  }
1192
1198
  buildConditionalAggregation(e, t, n) {
1193
1199
  let r = e.toUpperCase();
1194
- return e === "count" && !t ? N`COUNT(*) FILTER (WHERE ${n})` : N`${N.raw(r)}(${t}) FILTER (WHERE ${n})`;
1200
+ return e === "count" && !t ? F`COUNT(*) FILTER (WHERE ${n})` : F`${F.raw(r)}(${t}) FILTER (WHERE ${n})`;
1195
1201
  }
1196
1202
  buildDateDiffPeriods(e, t, n) {
1197
- return N`DATE_DIFF('${N.raw(n)}', ${e}::timestamp, ${t}::timestamp)`;
1203
+ return F`DATE_DIFF('${F.raw(n)}', ${e}::timestamp, ${t}::timestamp)`;
1198
1204
  }
1199
1205
  buildPeriodSeriesSubquery(e) {
1200
- return N`(SELECT UNNEST(generate_series(0, ${e})) as period_number) p`;
1206
+ return F`(SELECT UNNEST(generate_series(0, ${e})) as period_number) p`;
1201
1207
  }
1202
1208
  buildTimeDimension(e, t) {
1203
1209
  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)`;
1210
+ case "year": return F`DATE_TRUNC('year', ${t}::timestamp)`;
1211
+ case "quarter": return F`DATE_TRUNC('quarter', ${t}::timestamp)`;
1212
+ case "month": return F`DATE_TRUNC('month', ${t}::timestamp)`;
1213
+ case "week": return F`DATE_TRUNC('week', ${t}::timestamp)`;
1214
+ case "day": return F`DATE_TRUNC('day', ${t}::timestamp)::timestamp`;
1215
+ case "hour": return F`DATE_TRUNC('hour', ${t}::timestamp)`;
1216
+ case "minute": return F`DATE_TRUNC('minute', ${t}::timestamp)`;
1217
+ case "second": return F`DATE_TRUNC('second', ${t}::timestamp)`;
1212
1218
  default: return t;
1213
1219
  }
1214
1220
  }
1215
1221
  buildStringCondition(e, t, n) {
1216
1222
  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})`;
1223
+ case "contains": return F`${e} ILIKE ${`%${n}%`}`;
1224
+ case "notContains": return F`${e} NOT ILIKE ${`%${n}%`}`;
1225
+ case "startsWith": return F`${e} ILIKE ${`${n}%`}`;
1226
+ case "endsWith": return F`${e} ILIKE ${`%${n}`}`;
1227
+ case "like": return F`${e} LIKE ${n}`;
1228
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1229
+ case "ilike": return F`${e} ILIKE ${n}`;
1230
+ case "regex": return F`regexp_matches(${e}, ${n})`;
1231
+ case "notRegex": return F`NOT regexp_matches(${e}, ${n})`;
1226
1232
  default: throw Error(`Unsupported string operator: ${t}`);
1227
1233
  }
1228
1234
  }
1229
1235
  castToType(e, t) {
1230
1236
  switch (t) {
1231
- case "timestamp": return N`${e}::timestamp`;
1232
- case "decimal": return N`${e}::decimal`;
1233
- case "integer": return N`${e}::integer`;
1237
+ case "timestamp": return F`${e}::timestamp`;
1238
+ case "decimal": return F`${e}::decimal`;
1239
+ case "integer": return F`${e}::integer`;
1234
1240
  default: throw Error(`Unsupported cast type: ${t}`);
1235
1241
  }
1236
1242
  }
1237
1243
  buildAvg(e) {
1238
- return N`COALESCE(AVG(${e}), 0)`;
1244
+ return F`COALESCE(AVG(${e}), 0)`;
1239
1245
  }
1240
1246
  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`;
1247
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
1248
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
1243
1249
  }
1244
1250
  buildBooleanLiteral(e) {
1245
- return e ? N`TRUE` : N`FALSE`;
1251
+ return e ? F`TRUE` : F`FALSE`;
1246
1252
  }
1247
1253
  convertFilterValue(e) {
1248
1254
  return e;
@@ -1264,53 +1270,324 @@ var U = class {
1264
1270
  supportsWindowFunctions: !0,
1265
1271
  supportsFrameClause: !0,
1266
1272
  supportsLateralJoins: !1,
1267
- supportsPercentileSubqueries: !1
1273
+ supportsPercentileSubqueries: !1,
1274
+ supportsDerivedTablesInCTE: !0,
1275
+ supportsLateralSubqueriesInCTE: !1
1268
1276
  };
1269
1277
  }
1270
1278
  buildStddev(e, t = !1) {
1271
1279
  let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
1272
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
1280
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1273
1281
  }
1274
1282
  buildVariance(e, t = !1) {
1275
1283
  let n = t ? "VAR_SAMP" : "VAR_POP";
1276
- return N`COALESCE(${N.raw(n)}(${e}), 0)`;
1284
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1277
1285
  }
1278
1286
  buildPercentile(e, t) {
1279
- return N`QUANTILE_CONT(${e}, ${t / 100})`;
1287
+ return F`QUANTILE_CONT(${e}, ${t / 100})`;
1280
1288
  }
1281
1289
  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``;
1290
+ 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
1291
  if (i?.frame) {
1284
1292
  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)}`;
1293
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1286
1294
  }
1287
1295
  let c = [];
1288
1296
  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``})`;
1297
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1290
1298
  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}`;
1299
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1300
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1301
+ case "rank": return F`RANK() ${l}`;
1302
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1303
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1304
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1305
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1306
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1307
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1308
+ case "movingSum": return F`SUM(${t}) ${l}`;
1309
+ default: throw Error(`Unsupported window function: ${e}`);
1310
+ }
1311
+ }
1312
+ }, Ie = class extends U {
1313
+ getEngineType() {
1314
+ return "databend";
1315
+ }
1316
+ supportsLateralJoins() {
1317
+ return !1;
1318
+ }
1319
+ buildIntervalFromISO(e) {
1320
+ let t = this.parseISODuration(e), n = [];
1321
+ 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`;
1322
+ if (n.length === 1) return F`INTERVAL ${F.raw(n[0])}`;
1323
+ let r = n.map((e) => `INTERVAL ${e}`);
1324
+ return F`(${F.raw(r.join(" + "))})`;
1325
+ }
1326
+ buildTimeDifferenceSeconds(e, t) {
1327
+ return F`EXTRACT(EPOCH FROM TIMESTAMP_DIFF(${e}, ${t}))`;
1328
+ }
1329
+ buildDateAddInterval(e, t) {
1330
+ return F`(${e} + ${this.buildIntervalFromISO(t)})`;
1331
+ }
1332
+ buildConditionalAggregation(e, t, n) {
1333
+ let r = e.toUpperCase();
1334
+ return e === "count" && !t ? F`${F.raw(r)}(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
1335
+ }
1336
+ buildDateDiffPeriods(e, t, n) {
1337
+ return F`DATE_DIFF('${F.raw(n)}', ${e}::TIMESTAMP, ${t}::TIMESTAMP)`;
1338
+ }
1339
+ buildPeriodSeriesSubquery(e) {
1340
+ return F`(SELECT number as period_number FROM numbers(${e + 1})) p`;
1341
+ }
1342
+ buildTimeDimension(e, t) {
1343
+ switch (e) {
1344
+ case "year": return F`DATE_TRUNC(YEAR, ${t}::TIMESTAMP)`;
1345
+ case "quarter": return F`DATE_TRUNC(QUARTER, ${t}::TIMESTAMP)`;
1346
+ case "month": return F`DATE_TRUNC(MONTH, ${t}::TIMESTAMP)`;
1347
+ case "week": return F`DATE_TRUNC(WEEK, ${t}::TIMESTAMP)`;
1348
+ case "day": return F`DATE_TRUNC(DAY, ${t}::TIMESTAMP)::TIMESTAMP`;
1349
+ case "hour": return F`DATE_TRUNC(HOUR, ${t}::TIMESTAMP)`;
1350
+ case "minute": return F`DATE_TRUNC(MINUTE, ${t}::TIMESTAMP)`;
1351
+ case "second": return F`DATE_TRUNC(SECOND, ${t}::TIMESTAMP)`;
1352
+ default: return t;
1353
+ }
1354
+ }
1355
+ buildStringCondition(e, t, n) {
1356
+ switch (t) {
1357
+ case "contains": return F`LOWER(${e}) LIKE LOWER(${`%${n}%`})`;
1358
+ case "notContains": return F`LOWER(${e}) NOT LIKE LOWER(${`%${n}%`})`;
1359
+ case "startsWith": return F`LOWER(${e}) LIKE LOWER(${`${n}%`})`;
1360
+ case "endsWith": return F`LOWER(${e}) LIKE LOWER(${`%${n}`})`;
1361
+ case "like": return F`${e} LIKE ${n}`;
1362
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1363
+ case "ilike": return F`LOWER(${e}) LIKE LOWER(${n})`;
1364
+ case "regex": return F`${e} REGEXP ${n}`;
1365
+ case "notRegex": return F`NOT (${e} REGEXP ${n})`;
1366
+ default: throw Error(`Unsupported string operator: ${t}`);
1367
+ }
1368
+ }
1369
+ castToType(e, t) {
1370
+ switch (t) {
1371
+ case "timestamp": return F`${e}::TIMESTAMP`;
1372
+ case "decimal": return F`${e}::DECIMAL`;
1373
+ case "integer": return F`${e}::INTEGER`;
1374
+ default: throw Error(`Unsupported cast type: ${t}`);
1375
+ }
1376
+ }
1377
+ buildAvg(e) {
1378
+ return F`COALESCE(AVG(${e}), 0)`;
1379
+ }
1380
+ buildCaseWhen(e, t) {
1381
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
1382
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
1383
+ }
1384
+ buildBooleanLiteral(e) {
1385
+ return e ? F`TRUE` : F`FALSE`;
1386
+ }
1387
+ convertFilterValue(e) {
1388
+ return e;
1389
+ }
1390
+ prepareDateValue(e) {
1391
+ return e;
1392
+ }
1393
+ isTimestampInteger() {
1394
+ return !1;
1395
+ }
1396
+ convertTimeDimensionResult(e) {
1397
+ return e;
1398
+ }
1399
+ getCapabilities() {
1400
+ return {
1401
+ supportsStddev: !0,
1402
+ supportsVariance: !0,
1403
+ supportsPercentile: !1,
1404
+ supportsWindowFunctions: !0,
1405
+ supportsFrameClause: !0,
1406
+ supportsLateralJoins: !1,
1407
+ supportsPercentileSubqueries: !1,
1408
+ supportsDerivedTablesInCTE: !1,
1409
+ supportsLateralSubqueriesInCTE: !1
1410
+ };
1411
+ }
1412
+ buildStddev(e, t = !1) {
1413
+ let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
1414
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1415
+ }
1416
+ buildVariance(e, t = !1) {
1417
+ let n = t ? "COVAR_SAMP" : "COVAR_POP";
1418
+ return F`COALESCE(${F.raw(n)}(${e}, ${e}), 0)`;
1419
+ }
1420
+ buildPercentile(e, t) {
1421
+ throw Error("Percentile functions are not yet supported for Databend");
1422
+ }
1423
+ buildWindowFunction(e, t, n, r, i) {
1424
+ 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``;
1425
+ if (i?.frame) {
1426
+ 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";
1427
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1428
+ }
1429
+ let c = [];
1430
+ n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
1431
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1432
+ switch (e) {
1433
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1434
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1435
+ case "rank": return F`RANK() ${l}`;
1436
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1437
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1438
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1439
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1440
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1441
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1442
+ case "movingSum": return F`SUM(${t}) ${l}`;
1443
+ default: throw Error(`Unsupported window function: ${e}`);
1444
+ }
1445
+ }
1446
+ }, Le = class extends U {
1447
+ getEngineType() {
1448
+ return "snowflake";
1449
+ }
1450
+ supportsLateralJoins() {
1451
+ return !0;
1452
+ }
1453
+ buildIntervalFromISO(e) {
1454
+ return F`${this.durationToSeconds(e)}`;
1455
+ }
1456
+ buildTimeDifferenceSeconds(e, t) {
1457
+ return F`DATEDIFF('SECOND', ${t}, ${e})`;
1458
+ }
1459
+ buildDateAddInterval(e, t) {
1460
+ let n = this.parseISODuration(t), r = e;
1461
+ return n.years && (r = F`DATEADD('YEAR', ${n.years}, ${r})`), n.months && (r = F`DATEADD('MONTH', ${n.months}, ${r})`), n.days && (r = F`DATEADD('DAY', ${n.days}, ${r})`), n.hours && (r = F`DATEADD('HOUR', ${n.hours}, ${r})`), n.minutes && (r = F`DATEADD('MINUTE', ${n.minutes}, ${r})`), n.seconds && (r = F`DATEADD('SECOND', ${n.seconds}, ${r})`), r;
1462
+ }
1463
+ buildConditionalAggregation(e, t, n) {
1464
+ let r = e.toUpperCase();
1465
+ return e === "count" && !t ? F`${F.raw(r)}(CASE WHEN ${n} THEN 1 END)` : F`${F.raw(r)}(CASE WHEN ${n} THEN ${t} END)`;
1466
+ }
1467
+ buildDateDiffPeriods(e, t, n) {
1468
+ let r = n.toUpperCase();
1469
+ return F`DATEDIFF('${F.raw(r)}', ${e}::TIMESTAMP, ${t}::TIMESTAMP)`;
1470
+ }
1471
+ buildPeriodSeriesSubquery(e) {
1472
+ return F`(SELECT ROW_NUMBER() OVER (ORDER BY 1) - 1 AS period_number FROM TABLE(GENERATOR(ROWCOUNT => ${e + 1}))) p`;
1473
+ }
1474
+ buildTimeDimension(e, t) {
1475
+ switch (e) {
1476
+ case "year": return F`DATE_TRUNC('YEAR', ${t}::TIMESTAMP)`;
1477
+ case "quarter": return F`DATE_TRUNC('QUARTER', ${t}::TIMESTAMP)`;
1478
+ case "month": return F`DATE_TRUNC('MONTH', ${t}::TIMESTAMP)`;
1479
+ case "week": return F`DATE_TRUNC('WEEK', ${t}::TIMESTAMP)`;
1480
+ case "day": return F`DATE_TRUNC('DAY', ${t}::TIMESTAMP)::TIMESTAMP`;
1481
+ case "hour": return F`DATE_TRUNC('HOUR', ${t}::TIMESTAMP)`;
1482
+ case "minute": return F`DATE_TRUNC('MINUTE', ${t}::TIMESTAMP)`;
1483
+ case "second": return F`DATE_TRUNC('SECOND', ${t}::TIMESTAMP)`;
1484
+ default: return t;
1485
+ }
1486
+ }
1487
+ buildStringCondition(e, t, n) {
1488
+ switch (t) {
1489
+ case "contains": return F`${e} ILIKE ${`%${n}%`}`;
1490
+ case "notContains": return F`${e} NOT ILIKE ${`%${n}%`}`;
1491
+ case "startsWith": return F`${e} ILIKE ${`${n}%`}`;
1492
+ case "endsWith": return F`${e} ILIKE ${`%${n}`}`;
1493
+ case "like": return F`${e} LIKE ${n}`;
1494
+ case "notLike": return F`${e} NOT LIKE ${n}`;
1495
+ case "ilike": return F`${e} ILIKE ${n}`;
1496
+ case "regex": return F`REGEXP_LIKE(${e}, ${n})`;
1497
+ case "notRegex": return F`NOT REGEXP_LIKE(${e}, ${n})`;
1498
+ default: throw Error(`Unsupported string operator: ${t}`);
1499
+ }
1500
+ }
1501
+ castToType(e, t) {
1502
+ switch (t) {
1503
+ case "timestamp": return F`${e}::TIMESTAMP`;
1504
+ case "decimal": return F`${e}::DECIMAL`;
1505
+ case "integer": return F`${e}::INTEGER`;
1506
+ default: throw Error(`Unsupported cast type: ${t}`);
1507
+ }
1508
+ }
1509
+ buildAvg(e) {
1510
+ return F`COALESCE(AVG(${e}), 0)`;
1511
+ }
1512
+ buildCaseWhen(e, t) {
1513
+ let n = e.map((e) => F`WHEN ${e.when} THEN ${e.then}`).reduce((e, t) => F`${e} ${t}`);
1514
+ return t === void 0 ? F`CASE ${n} END` : F`CASE ${n} ELSE ${t} END`;
1515
+ }
1516
+ buildBooleanLiteral(e) {
1517
+ return e ? F`TRUE` : F`FALSE`;
1518
+ }
1519
+ convertFilterValue(e) {
1520
+ return e;
1521
+ }
1522
+ prepareDateValue(e) {
1523
+ return e;
1524
+ }
1525
+ isTimestampInteger() {
1526
+ return !1;
1527
+ }
1528
+ convertTimeDimensionResult(e) {
1529
+ return e;
1530
+ }
1531
+ getCapabilities() {
1532
+ return {
1533
+ supportsStddev: !0,
1534
+ supportsVariance: !0,
1535
+ supportsPercentile: !0,
1536
+ supportsWindowFunctions: !0,
1537
+ supportsFrameClause: !0,
1538
+ supportsLateralJoins: !0,
1539
+ supportsPercentileSubqueries: !0,
1540
+ supportsDerivedTablesInCTE: !0,
1541
+ supportsLateralSubqueriesInCTE: !1
1542
+ };
1543
+ }
1544
+ buildStddev(e, t = !1) {
1545
+ let n = t ? "STDDEV_SAMP" : "STDDEV_POP";
1546
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1547
+ }
1548
+ buildVariance(e, t = !1) {
1549
+ let n = t ? "VAR_SAMP" : "VAR_POP";
1550
+ return F`COALESCE(${F.raw(n)}(${e}), 0)`;
1551
+ }
1552
+ buildPercentile(e, t) {
1553
+ let n = (t / 100).toString();
1554
+ return F`PERCENTILE_CONT(${F.raw(n)}) WITHIN GROUP (ORDER BY ${e})`;
1555
+ }
1556
+ buildWindowFunction(e, t, n, r, i) {
1557
+ 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``;
1558
+ if (i?.frame) {
1559
+ 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";
1560
+ s = F`${F.raw(r)} BETWEEN ${F.raw(a)} AND ${F.raw(o)}`;
1561
+ }
1562
+ let c = [];
1563
+ n && n.length > 0 && c.push(a), r && r.length > 0 && c.push(o), i?.frame && c.push(s);
1564
+ let l = F`OVER (${c.length > 0 ? F.join(c, F` `) : F``})`;
1565
+ switch (e) {
1566
+ case "lag": return F`LAG(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1567
+ case "lead": return F`LEAD(${t}, ${i?.offset ?? 1}${i?.defaultValue === void 0 ? F`` : F`, ${i.defaultValue}`}) ${l}`;
1568
+ case "rank": return F`RANK() ${l}`;
1569
+ case "denseRank": return F`DENSE_RANK() ${l}`;
1570
+ case "rowNumber": return F`ROW_NUMBER() ${l}`;
1571
+ case "ntile": return F`NTILE(${i?.nTile ?? 4}) ${l}`;
1572
+ case "firstValue": return F`FIRST_VALUE(${t}) ${l}`;
1573
+ case "lastValue": return F`LAST_VALUE(${t}) ${l}`;
1574
+ case "movingAvg": return F`AVG(${t}) ${l}`;
1575
+ case "movingSum": return F`SUM(${t}) ${l}`;
1301
1576
  default: throw Error(`Unsupported window function: ${e}`);
1302
1577
  }
1303
1578
  }
1304
1579
  };
1305
1580
  //#endregion
1306
1581
  //#region src/server/database-utils.ts
1307
- function Ie(e) {
1582
+ function Re(e) {
1308
1583
  switch (e) {
1309
1584
  case "postgres": return new je();
1310
1585
  case "mysql": return new Me();
1311
1586
  case "sqlite": return new Ne();
1312
1587
  case "singlestore": return new Pe();
1313
1588
  case "duckdb": return new Fe();
1589
+ case "databend": return new Ie();
1590
+ case "snowflake": return new Le();
1314
1591
  default: throw Error(`Unsupported database engine: ${e}`);
1315
1592
  }
1316
1593
  }
@@ -1319,12 +1596,12 @@ function Ie(e) {
1319
1596
  var W = class {
1320
1597
  databaseAdapter;
1321
1598
  constructor(e, t, n) {
1322
- this.db = e, this.schema = t, this.databaseAdapter = Ie(n || this.getEngineType());
1599
+ this.db = e, this.schema = t, this.databaseAdapter = Re(n || this.getEngineType());
1323
1600
  }
1324
1601
  };
1325
1602
  //#endregion
1326
1603
  //#region src/server/explain/postgres-parser.ts
1327
- function Le(e, t) {
1604
+ function ze(e, t) {
1328
1605
  let n = [], r = [], i = !1, a, o, s, c = [];
1329
1606
  for (let t of e) {
1330
1607
  let e = t.match(/Planning Time:\s*([\d.]+)\s*ms/i);
@@ -1337,7 +1614,7 @@ function Le(e, t) {
1337
1614
  o = parseFloat(l[1]);
1338
1615
  continue;
1339
1616
  }
1340
- let u = Re(t);
1617
+ let u = Be(t);
1341
1618
  if (u) {
1342
1619
  u.type.includes("Seq Scan") && (i = !0), u.index && r.push(u.index), n.length === 0 && u.estimatedCost !== void 0 && (s = u.estimatedCost);
1343
1620
  let e = t.search(/\S/);
@@ -1367,7 +1644,7 @@ function Le(e, t) {
1367
1644
  sql: t
1368
1645
  };
1369
1646
  }
1370
- function Re(e) {
1647
+ function Be(e) {
1371
1648
  let t = e.replace(/^[\s->]+/, "").trim();
1372
1649
  if (!t) return null;
1373
1650
  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 +1662,7 @@ function Re(e) {
1385
1662
  }
1386
1663
  //#endregion
1387
1664
  //#region src/server/executors/postgres-executor.ts
1388
- var ze = class extends W {
1665
+ var Ve = class extends W {
1389
1666
  async execute(e, t) {
1390
1667
  if (e && typeof e == "object" && typeof e.execute == "function") {
1391
1668
  let n = await e.execute();
@@ -1427,7 +1704,7 @@ var ze = class extends W {
1427
1704
  async explainQuery(e, t, n) {
1428
1705
  let r = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
1429
1706
  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) => {
1707
+ let i = await this.db.execute(F`${F.raw(r)} ${F.raw(e.replace(/\$(\d+)/g, (e, n) => {
1431
1708
  let r = t[parseInt(n, 10) - 1];
1432
1709
  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
1710
  }))}`), a = [];
@@ -1437,7 +1714,7 @@ var ze = class extends W {
1437
1714
  typeof t == "string" && a.push(t);
1438
1715
  }
1439
1716
  }
1440
- return Le(a, {
1717
+ return ze(a, {
1441
1718
  sql: e,
1442
1719
  params: t
1443
1720
  });
@@ -1446,7 +1723,7 @@ var ze = class extends W {
1446
1723
  if (!e || e.length === 0) return [];
1447
1724
  if (!this.db.execute) throw Error("PostgreSQL database instance must have an execute method");
1448
1725
  try {
1449
- let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(N`
1726
+ let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(F`
1450
1727
  SELECT
1451
1728
  t.relname as table_name,
1452
1729
  i.relname as index_name,
@@ -1460,7 +1737,7 @@ var ze = class extends W {
1460
1737
  JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, n) ON true
1461
1738
  JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum
1462
1739
  WHERE n.nspname = 'public'
1463
- AND t.relname IN (${N.raw(t)})
1740
+ AND t.relname IN (${F.raw(t)})
1464
1741
  GROUP BY t.relname, i.relname, ix.indisunique, ix.indisprimary
1465
1742
  ORDER BY t.relname, i.relname
1466
1743
  `);
@@ -1476,12 +1753,12 @@ var ze = class extends W {
1476
1753
  }
1477
1754
  }
1478
1755
  };
1479
- function Be(e, t) {
1480
- return new ze(e, t, "postgres");
1756
+ function He(e, t) {
1757
+ return new Ve(e, t, "postgres");
1481
1758
  }
1482
1759
  //#endregion
1483
1760
  //#region src/server/explain/mysql-parser.ts
1484
- function Ve(e, t) {
1761
+ function Ue(e, t) {
1485
1762
  let n = t?.toLowerCase() || "";
1486
1763
  switch (e.toLowerCase()) {
1487
1764
  case "all": return "Seq Scan";
@@ -1495,10 +1772,10 @@ function Ve(e, t) {
1495
1772
  default: return `MySQL ${e}`;
1496
1773
  }
1497
1774
  }
1498
- function He(e, t) {
1775
+ function We(e, t) {
1499
1776
  let n = [], r = [], i = !1, a = 0;
1500
1777
  for (let t of e) {
1501
- let e = Ve(t.type, t.Extra);
1778
+ let e = Ue(t.type, t.Extra);
1502
1779
  t.type.toLowerCase() === "all" && (i = !0), t.key && r.push(t.key);
1503
1780
  let o = {
1504
1781
  type: e,
@@ -1529,7 +1806,7 @@ function He(e, t) {
1529
1806
  }
1530
1807
  //#endregion
1531
1808
  //#region src/server/executors/mysql-executor.ts
1532
- var Ue = class extends W {
1809
+ var Ge = class extends W {
1533
1810
  async execute(e, t) {
1534
1811
  if (e && typeof e == "object" && typeof e.execute == "function") {
1535
1812
  let n = await e.execute();
@@ -1564,7 +1841,7 @@ var Ue = class extends W {
1564
1841
  });
1565
1842
  let a = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
1566
1843
  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 = [];
1844
+ let o = await this.db.execute(F.raw(`${a} ${r}`)), s = [];
1568
1845
  if (Array.isArray(o)) for (let e of o) e && typeof e == "object" && s.push({
1569
1846
  id: e.id || 1,
1570
1847
  select_type: e.select_type || "SIMPLE",
@@ -1579,7 +1856,7 @@ var Ue = class extends W {
1579
1856
  filtered: Number(e.filtered) || 100,
1580
1857
  Extra: e.Extra || null
1581
1858
  });
1582
- return He(s, {
1859
+ return We(s, {
1583
1860
  sql: e,
1584
1861
  params: t
1585
1862
  });
@@ -1588,7 +1865,7 @@ var Ue = class extends W {
1588
1865
  if (!e || e.length === 0) return [];
1589
1866
  if (!this.db.execute) throw Error("MySQL database instance must have an execute method");
1590
1867
  try {
1591
- let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(N`
1868
+ let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(F`
1592
1869
  SELECT
1593
1870
  TABLE_NAME as table_name,
1594
1871
  INDEX_NAME as index_name,
@@ -1597,7 +1874,7 @@ var Ue = class extends W {
1597
1874
  CASE WHEN INDEX_NAME = 'PRIMARY' THEN TRUE ELSE FALSE END as is_primary
1598
1875
  FROM INFORMATION_SCHEMA.STATISTICS
1599
1876
  WHERE TABLE_SCHEMA = DATABASE()
1600
- AND LOWER(TABLE_NAME) IN (${N.raw(t)})
1877
+ AND LOWER(TABLE_NAME) IN (${F.raw(t)})
1601
1878
  GROUP BY TABLE_NAME, INDEX_NAME, NON_UNIQUE
1602
1879
  ORDER BY TABLE_NAME, INDEX_NAME
1603
1880
  `);
@@ -1613,12 +1890,12 @@ var Ue = class extends W {
1613
1890
  }
1614
1891
  }
1615
1892
  };
1616
- function We(e, t) {
1617
- return new Ue(e, t, "mysql");
1893
+ function Ke(e, t) {
1894
+ return new Ge(e, t, "mysql");
1618
1895
  }
1619
1896
  //#endregion
1620
1897
  //#region src/server/explain/sqlite-parser.ts
1621
- function Ge(e) {
1898
+ function qe(e) {
1622
1899
  let t = e.toLowerCase(), n = e.match(/^SCAN\s+(\S+)/i);
1623
1900
  if (n) return {
1624
1901
  type: "Seq Scan",
@@ -1643,10 +1920,10 @@ function Ge(e) {
1643
1920
  table: a[1]
1644
1921
  } : 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
1922
  }
1646
- function Ke(e, t) {
1923
+ function Je(e, t) {
1647
1924
  let n = [], r = [], i = !1, a = /* @__PURE__ */ new Map();
1648
1925
  for (let t of e) {
1649
- let e = Ge(t.detail);
1926
+ let e = qe(t.detail);
1650
1927
  e.type === "Seq Scan" && (i = !0), e.index && r.push(e.index);
1651
1928
  let o = {
1652
1929
  type: e.type,
@@ -1677,7 +1954,7 @@ function Ke(e, t) {
1677
1954
  }
1678
1955
  //#endregion
1679
1956
  //#region src/server/executors/sqlite-executor.ts
1680
- var qe = class extends W {
1957
+ var Ye = class extends W {
1681
1958
  async execute(e, t) {
1682
1959
  if (e && typeof e == "object" && typeof e.execute == "function") {
1683
1960
  let n = await e.execute();
@@ -1717,7 +1994,7 @@ var qe = class extends W {
1717
1994
  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
1995
  });
1719
1996
  let a = `EXPLAIN QUERY PLAN ${r}`, o;
1720
- if (this.db.all) o = this.db.all(N.raw(a));
1997
+ if (this.db.all) o = this.db.all(F.raw(a));
1721
1998
  else throw Error("SQLite database instance must have an all() method for EXPLAIN");
1722
1999
  let s = [];
1723
2000
  if (Array.isArray(o)) for (let e of o) e && typeof e == "object" && s.push({
@@ -1726,7 +2003,7 @@ var qe = class extends W {
1726
2003
  notused: Number(e.notused) || 0,
1727
2004
  detail: String(e.detail || "")
1728
2005
  });
1729
- return Ke(s, {
2006
+ return Je(s, {
1730
2007
  sql: e,
1731
2008
  params: t
1732
2009
  });
@@ -1737,9 +2014,9 @@ var qe = class extends W {
1737
2014
  try {
1738
2015
  let t = [];
1739
2016
  for (let n of e) {
1740
- let e = this.db.all(N.raw(`SELECT name, "unique", origin FROM pragma_index_list('${n.toLowerCase()}')`));
2017
+ let e = this.db.all(F.raw(`SELECT name, "unique", origin FROM pragma_index_list('${n.toLowerCase()}')`));
1741
2018
  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 = [];
2019
+ 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
2020
  if (Array.isArray(o)) for (let e of o) {
1744
2021
  let t = e.name;
1745
2022
  typeof t == "string" && s.push(t);
@@ -1759,29 +2036,29 @@ var qe = class extends W {
1759
2036
  }
1760
2037
  }
1761
2038
  };
1762
- function Je(e, t) {
1763
- return new qe(e, t, "sqlite");
2039
+ function Xe(e, t) {
2040
+ return new Ye(e, t, "sqlite");
1764
2041
  }
1765
2042
  //#endregion
1766
2043
  //#region src/server/executors/singlestore-executor.ts
1767
- var Ye = class extends Ue {
2044
+ var Ze = class extends Ge {
1768
2045
  getEngineType() {
1769
2046
  return "singlestore";
1770
2047
  }
1771
2048
  };
1772
- function Xe(e, t) {
1773
- return new Ye(e, t);
2049
+ function Qe(e, t) {
2050
+ return new Ze(e, t);
1774
2051
  }
1775
2052
  //#endregion
1776
2053
  //#region src/server/explain/duckdb-parser.ts
1777
- function Ze(e, t) {
2054
+ function $e(e, t) {
1778
2055
  let n = [], r = [], i = !1, a, o = [];
1779
2056
  for (let t of e) {
1780
2057
  if (/^[┌├└│─┐┤┘]+$/.test(t.trim()) || /EXPLANATION|QUERY PLAN/i.test(t)) continue;
1781
- let e = $e(t);
2058
+ let e = tt(t);
1782
2059
  if (e) {
1783
2060
  (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);
2061
+ let s = et(t);
1785
2062
  for (; o.length > 0 && o[o.length - 1].indent >= s;) o.pop();
1786
2063
  if (o.length === 0) n.push(e);
1787
2064
  else {
@@ -1808,13 +2085,13 @@ function Ze(e, t) {
1808
2085
  sql: t
1809
2086
  };
1810
2087
  }
1811
- function Qe(e) {
2088
+ function et(e) {
1812
2089
  let t = 0;
1813
2090
  for (let n of e) if (n === " " || n === "│" || n === "├" || n === "└" || n === "─") t++;
1814
2091
  else break;
1815
2092
  return t;
1816
2093
  }
1817
- function $e(e) {
2094
+ function tt(e) {
1818
2095
  let t = e.replace(/[┌├└│─┐┤┘]/g, "").replace(/^\s*/, "").trim();
1819
2096
  if (!t || t.match(/^\(cost=([\d.]+)\s+rows=(\d+)\)$/i)) return null;
1820
2097
  let n = t.match(/^([A-Z_]+)(?:\s+(\S+))?(?:\s+on\s+(\S+))?(?:\s+\(cost=([\d.]+)\s+rows=(\d+)\))?/i);
@@ -1840,7 +2117,7 @@ function $e(e) {
1840
2117
  }
1841
2118
  //#endregion
1842
2119
  //#region src/server/executors/duckdb-executor.ts
1843
- var et = class extends W {
2120
+ var nt = class extends W {
1844
2121
  async execute(e, t) {
1845
2122
  if (e && typeof e == "object" && typeof e.execute == "function") try {
1846
2123
  let n = await e.execute();
@@ -1924,7 +2201,7 @@ var et = class extends W {
1924
2201
  async explainQuery(e, t, n) {
1925
2202
  let r = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
1926
2203
  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) => {
2204
+ let i = await this.db.execute(F`${F.raw(r)} ${F.raw(e.replace(/\$(\d+)/g, (e, n) => {
1928
2205
  let r = t[parseInt(n, 10) - 1];
1929
2206
  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
2207
  }))}`), a = [];
@@ -1934,7 +2211,7 @@ var et = class extends W {
1934
2211
  typeof t == "string" && a.push(t);
1935
2212
  }
1936
2213
  }
1937
- return Ze(a, {
2214
+ return $e(a, {
1938
2215
  sql: e,
1939
2216
  params: t
1940
2217
  });
@@ -1943,7 +2220,7 @@ var et = class extends W {
1943
2220
  if (!e || e.length === 0) return [];
1944
2221
  if (!this.db.execute) throw Error("DuckDB database instance must have an execute method");
1945
2222
  try {
1946
- let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(N`
2223
+ let t = e.map((e) => `'${e.toLowerCase()}'`).join(","), n = await this.db.execute(F`
1947
2224
  SELECT
1948
2225
  table_name,
1949
2226
  index_name,
@@ -1951,7 +2228,7 @@ var et = class extends W {
1951
2228
  is_unique,
1952
2229
  is_primary
1953
2230
  FROM duckdb_indexes()
1954
- WHERE LOWER(table_name) IN (${N.raw(t)})
2231
+ WHERE LOWER(table_name) IN (${F.raw(t)})
1955
2232
  GROUP BY table_name, index_name, is_unique, is_primary
1956
2233
  ORDER BY table_name, index_name
1957
2234
  `);
@@ -1967,21 +2244,346 @@ var et = class extends W {
1967
2244
  }
1968
2245
  }
1969
2246
  };
1970
- function tt(e, t) {
1971
- return new et(e, t, "duckdb");
2247
+ function rt(e, t) {
2248
+ return new nt(e, t, "duckdb");
2249
+ }
2250
+ //#endregion
2251
+ //#region src/server/explain/databend-parser.ts
2252
+ function it(e, t) {
2253
+ let n = [], r = [], i = !1, a, o = [];
2254
+ for (let t of e) {
2255
+ if (!t.trim()) continue;
2256
+ let e = ot(t);
2257
+ if (e) {
2258
+ (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);
2259
+ let s = at(t);
2260
+ for (; o.length > 0 && o[o.length - 1].indent >= s;) o.pop();
2261
+ if (o.length === 0) n.push(e);
2262
+ else {
2263
+ let t = o[o.length - 1].op;
2264
+ t.children ||= [], t.children.push(e);
2265
+ }
2266
+ o.push({
2267
+ indent: s,
2268
+ op: e
2269
+ });
2270
+ }
2271
+ }
2272
+ return {
2273
+ operations: n,
2274
+ summary: {
2275
+ database: "databend",
2276
+ planningTime: void 0,
2277
+ executionTime: void 0,
2278
+ totalCost: a,
2279
+ hasSequentialScans: i,
2280
+ usedIndexes: [...new Set(r)]
2281
+ },
2282
+ raw: e.join("\n"),
2283
+ sql: t
2284
+ };
2285
+ }
2286
+ function at(e) {
2287
+ let t = 0;
2288
+ for (let n of e) if (n === " " || n === "│" || n === "├" || n === "└" || n === "─") t++;
2289
+ else break;
2290
+ return t;
2291
+ }
2292
+ function ot(e) {
2293
+ let t = e.replace(/[┌├└│─┐┤┘]/g, "").replace(/^\s*/, "").trim();
2294
+ if (!t || /^(filters|table|estimated rows|output columns|push downs):/.test(t)) return null;
2295
+ let n = t.match(/^([A-Z][A-Za-z_]+(?:\s+[A-Z][A-Za-z_]+)*)(?:\s+(\S+))?/);
2296
+ if (!n) return null;
2297
+ let r = n[1], i = n[2] || void 0, a = t.match(/estimated rows:\s*(\d+)/i);
2298
+ return {
2299
+ type: r,
2300
+ table: i,
2301
+ estimatedRows: a ? parseInt(a[1], 10) : void 0
2302
+ };
2303
+ }
2304
+ //#endregion
2305
+ //#region src/server/executors/databend-executor.ts
2306
+ var st = class extends W {
2307
+ async execute(e, t) {
2308
+ if (e && typeof e == "object" && typeof e.execute == "function") try {
2309
+ let n = await e.execute();
2310
+ return Array.isArray(n) ? n.map((e) => this.convertNumericFields(e, t)) : n;
2311
+ } catch (t) {
2312
+ let n = this.extractSqlFromQuery(e);
2313
+ throw console.error("[Databend] Query execution failed:", {
2314
+ error: t instanceof Error ? t.message : String(t),
2315
+ sql: n.sql,
2316
+ params: n.params
2317
+ }), t;
2318
+ }
2319
+ if (!this.db.execute) throw Error("Databend database instance must have an execute method");
2320
+ try {
2321
+ let n = await this.db.execute(e);
2322
+ return Array.isArray(n) ? n.map((e) => this.convertNumericFields(e, t)) : n;
2323
+ } catch (t) {
2324
+ let n = this.extractSqlFromQuery(e);
2325
+ throw console.error("[Databend] Query execution failed:", {
2326
+ error: t instanceof Error ? t.message : String(t),
2327
+ sql: n.sql,
2328
+ params: n.params
2329
+ }), t;
2330
+ }
2331
+ }
2332
+ extractSqlFromQuery(e) {
2333
+ try {
2334
+ if (e && typeof e.toSQL == "function") {
2335
+ let { sql: t, params: n } = e.toSQL();
2336
+ return {
2337
+ sql: t,
2338
+ params: n
2339
+ };
2340
+ }
2341
+ if (e && typeof e.getSQL == "function") {
2342
+ let t = e.getSQL();
2343
+ if (t && typeof t.toSQL == "function") {
2344
+ let { sql: e, params: n } = t.toSQL();
2345
+ return {
2346
+ sql: e,
2347
+ params: n
2348
+ };
2349
+ }
2350
+ }
2351
+ return {
2352
+ sql: String(e),
2353
+ params: []
2354
+ };
2355
+ } catch {
2356
+ return {
2357
+ sql: "[unable to extract SQL]",
2358
+ params: []
2359
+ };
2360
+ }
2361
+ }
2362
+ convertNumericFields(e, t) {
2363
+ if (!e || typeof e != "object") return e;
2364
+ let n = {};
2365
+ for (let [r, i] of Object.entries(e)) t && t.includes(r) ? n[r] = this.coerceToNumber(i) : n[r] = i;
2366
+ return n;
2367
+ }
2368
+ coerceToNumber(e) {
2369
+ if (e == null || typeof e == "number") return e;
2370
+ if (typeof e == "bigint") return Number(e);
2371
+ if (e && typeof e == "object") {
2372
+ if (typeof e.toString == "function") {
2373
+ let t = e.toString();
2374
+ if (/^-?\d+(\.\d+)?$/.test(t)) return t.includes(".") ? parseFloat(t) : parseInt(t, 10);
2375
+ }
2376
+ return e;
2377
+ }
2378
+ if (typeof e == "string") {
2379
+ if (/^-?\d+(\.\d+)?$/.test(e)) return e.includes(".") ? parseFloat(e) : parseInt(e, 10);
2380
+ if (!isNaN(parseFloat(e)) && isFinite(parseFloat(e))) return parseFloat(e);
2381
+ }
2382
+ return e;
2383
+ }
2384
+ getEngineType() {
2385
+ return "databend";
2386
+ }
2387
+ async explainQuery(e, t, n) {
2388
+ let r = n?.analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
2389
+ if (!this.db.execute) throw Error("Databend database instance must have an execute method");
2390
+ let i = await this.db.execute(F`${F.raw(r)} ${F.raw(e.replace(/\$(\d+)/g, (e, n) => {
2391
+ let r = t[parseInt(n, 10) - 1];
2392
+ return r === null ? "NULL" : typeof r == "number" ? String(r) : typeof r == "boolean" ? r ? "TRUE" : "FALSE" : r instanceof Date ? `'${r.toISOString()}'` : `'${String(r).replace(/'/g, "''")}'`;
2393
+ }))}`), a = [];
2394
+ if (Array.isArray(i)) {
2395
+ for (let e of i) if (e && typeof e == "object") {
2396
+ let t = e.explain || e["QUERY PLAN"] || e.query_plan || e.Plan || Object.values(e)[0];
2397
+ typeof t == "string" && a.push(t);
2398
+ }
2399
+ }
2400
+ return it(a, {
2401
+ sql: e,
2402
+ params: t
2403
+ });
2404
+ }
2405
+ async getTableIndexes(e) {
2406
+ return !e || e.length, [];
2407
+ }
2408
+ };
2409
+ function ct(e, t) {
2410
+ return new st(e, t, "databend");
2411
+ }
2412
+ //#endregion
2413
+ //#region src/server/explain/snowflake-parser.ts
2414
+ function lt(e, t) {
2415
+ let n = [], r = [], i = !1, a, o = [];
2416
+ for (let t of e) {
2417
+ if (!t.trim()) continue;
2418
+ let e = dt(t);
2419
+ if (e) {
2420
+ (e.type.includes("TableScan") || e.type.includes("SCAN")) && (i = !0), n.length === 0 && e.estimatedCost !== void 0 && (a = e.estimatedCost);
2421
+ let r = ut(t);
2422
+ for (; o.length > 0 && o[o.length - 1].indent >= r;) o.pop();
2423
+ if (o.length === 0) n.push(e);
2424
+ else {
2425
+ let t = o[o.length - 1].op;
2426
+ t.children ||= [], t.children.push(e);
2427
+ }
2428
+ o.push({
2429
+ indent: r,
2430
+ op: e
2431
+ });
2432
+ }
2433
+ }
2434
+ return {
2435
+ operations: n,
2436
+ summary: {
2437
+ database: "snowflake",
2438
+ planningTime: void 0,
2439
+ executionTime: void 0,
2440
+ totalCost: a,
2441
+ hasSequentialScans: i,
2442
+ usedIndexes: [...new Set(r)]
2443
+ },
2444
+ raw: e.join("\n"),
2445
+ sql: t
2446
+ };
2447
+ }
2448
+ function ut(e) {
2449
+ let t = 0;
2450
+ for (let n of e) if (n === " " || n === "-" || n === ">") t++;
2451
+ else break;
2452
+ return t;
2453
+ }
2454
+ function dt(e) {
2455
+ let t = e.replace(/^[\s\d:]*->/, "").trim();
2456
+ if (!t || /^(GlobalStats|partitions|bytes):/i.test(t) || /^\w+=\d+/.test(t)) return null;
2457
+ let n = t.match(/^([A-Z][A-Za-z_]+(?:\s+[A-Z][A-Za-z_]+)*)(?:\s+(\S+))?/);
2458
+ if (!n) return null;
2459
+ let r = n[1], i = n[2] || void 0, a = t.match(/estimated rows:\s*(\d+)/i);
2460
+ return {
2461
+ type: r,
2462
+ table: i,
2463
+ estimatedRows: a ? parseInt(a[1], 10) : void 0
2464
+ };
2465
+ }
2466
+ //#endregion
2467
+ //#region src/server/executors/snowflake-executor.ts
2468
+ var ft = class extends W {
2469
+ async execute(e, t) {
2470
+ if (e && typeof e == "object" && typeof e.execute == "function") try {
2471
+ let n = await e.execute();
2472
+ return Array.isArray(n) ? n.map((e) => this.convertNumericFields(e, t)) : n;
2473
+ } catch (t) {
2474
+ let n = this.extractSqlFromQuery(e);
2475
+ throw console.error("[Snowflake] Query execution failed:", {
2476
+ error: t instanceof Error ? t.message : String(t),
2477
+ sql: n.sql,
2478
+ params: n.params
2479
+ }), t;
2480
+ }
2481
+ if (!this.db.execute) throw Error("Snowflake database instance must have an execute method");
2482
+ try {
2483
+ let n = await this.db.execute(e);
2484
+ return Array.isArray(n) ? n.map((e) => this.convertNumericFields(e, t)) : n;
2485
+ } catch (t) {
2486
+ let n = this.extractSqlFromQuery(e);
2487
+ throw console.error("[Snowflake] Query execution failed:", {
2488
+ error: t instanceof Error ? t.message : String(t),
2489
+ sql: n.sql,
2490
+ params: n.params
2491
+ }), t;
2492
+ }
2493
+ }
2494
+ extractSqlFromQuery(e) {
2495
+ try {
2496
+ if (e && typeof e.toSQL == "function") {
2497
+ let { sql: t, params: n } = e.toSQL();
2498
+ return {
2499
+ sql: t,
2500
+ params: n
2501
+ };
2502
+ }
2503
+ if (e && typeof e.getSQL == "function") {
2504
+ let t = e.getSQL();
2505
+ if (t && typeof t.toSQL == "function") {
2506
+ let { sql: e, params: n } = t.toSQL();
2507
+ return {
2508
+ sql: e,
2509
+ params: n
2510
+ };
2511
+ }
2512
+ }
2513
+ return {
2514
+ sql: String(e),
2515
+ params: []
2516
+ };
2517
+ } catch {
2518
+ return {
2519
+ sql: "[unable to extract SQL]",
2520
+ params: []
2521
+ };
2522
+ }
2523
+ }
2524
+ convertNumericFields(e, t) {
2525
+ if (!e || typeof e != "object") return e;
2526
+ let n = {};
2527
+ for (let [r, i] of Object.entries(e)) t && t.includes(r) ? n[r] = this.coerceToNumber(i) : n[r] = i;
2528
+ return n;
2529
+ }
2530
+ coerceToNumber(e) {
2531
+ if (e == null || typeof e == "number") return e;
2532
+ if (typeof e == "bigint") return Number(e);
2533
+ if (e && typeof e == "object") {
2534
+ if (typeof e.toString == "function") {
2535
+ let t = e.toString();
2536
+ if (/^-?\d+(\.\d+)?$/.test(t)) return t.includes(".") ? parseFloat(t) : parseInt(t, 10);
2537
+ }
2538
+ return e;
2539
+ }
2540
+ if (typeof e == "string") {
2541
+ if (/^-?\d+(\.\d+)?$/.test(e)) return e.includes(".") ? parseFloat(e) : parseInt(e, 10);
2542
+ if (!isNaN(parseFloat(e)) && isFinite(parseFloat(e))) return parseFloat(e);
2543
+ }
2544
+ return e;
2545
+ }
2546
+ getEngineType() {
2547
+ return "snowflake";
2548
+ }
2549
+ async explainQuery(e, t, n) {
2550
+ if (n?.analyze, !this.db.execute) throw Error("Snowflake database instance must have an execute method");
2551
+ let r = await this.db.execute(F`${F.raw("EXPLAIN")} ${F.raw(e.replace(/\?/g, () => {
2552
+ let e = t.shift();
2553
+ return e === null ? "NULL" : typeof e == "number" ? String(e) : typeof e == "boolean" ? e ? "TRUE" : "FALSE" : e instanceof Date ? `'${e.toISOString()}'` : `'${String(e).replace(/'/g, "''")}'`;
2554
+ }))}`), i = [];
2555
+ if (Array.isArray(r)) {
2556
+ for (let e of r) if (e && typeof e == "object") {
2557
+ let t = e.content || e["QUERY PLAN"] || e.plan || Object.values(e)[0];
2558
+ typeof t == "string" && i.push(t);
2559
+ }
2560
+ }
2561
+ return lt(i, {
2562
+ sql: e,
2563
+ params: t
2564
+ });
2565
+ }
2566
+ async getTableIndexes(e) {
2567
+ return [];
2568
+ }
2569
+ };
2570
+ function pt(e, t) {
2571
+ return new ft(e, t, "snowflake");
1972
2572
  }
1973
2573
  //#endregion
1974
2574
  //#region src/server/executors/index.ts
1975
- function nt(e, t, n) {
2575
+ function mt(e, t, n) {
1976
2576
  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);
2577
+ case "postgres": return He(e, t);
2578
+ case "mysql": return Ke(e, t);
2579
+ case "sqlite": return Xe(e, t);
2580
+ case "singlestore": return Qe(e, t);
2581
+ case "duckdb": return rt(e, t);
2582
+ case "databend": return ct(e, t);
2583
+ case "snowflake": return pt(e, t);
2584
+ }
2585
+ if (e.all && e.run) return Xe(e, t);
2586
+ if (e.execute) return He(e, t);
1985
2587
  throw Error("Unable to determine database engine type. Please specify engineType parameter.");
1986
2588
  }
1987
2589
  //#endregion
@@ -1989,7 +2591,7 @@ function nt(e, t, n) {
1989
2591
  function G(e, t) {
1990
2592
  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
2593
  }
1992
- function rt(e) {
2594
+ function ht(e) {
1993
2595
  switch (e) {
1994
2596
  case "belongsTo": return "hasMany";
1995
2597
  case "hasMany": return "belongsTo";
@@ -1998,7 +2600,7 @@ function rt(e) {
1998
2600
  default: return e;
1999
2601
  }
2000
2602
  }
2001
- function it(e, t) {
2603
+ function gt(e, t) {
2002
2604
  if (t) return t;
2003
2605
  switch (e) {
2004
2606
  case "belongsTo": return "inner";
@@ -2008,22 +2610,26 @@ function it(e, t) {
2008
2610
  default: return "left";
2009
2611
  }
2010
2612
  }
2011
- function at(e) {
2012
- return e && typeof e == "object" ? N`${N`${e}`}` : e;
2613
+ function _t(e) {
2614
+ return e && typeof e == "object" ? F`${F`${e}`}` : e;
2615
+ }
2616
+ function vt(e) {
2617
+ if (e === "__proto__" || e === "constructor" || e === "prototype") throw Error(`Unsafe property key: ${e}`);
2618
+ return e;
2013
2619
  }
2014
2620
  function K(e, t) {
2015
- return at(typeof e == "function" ? e(t) : e);
2621
+ return _t(typeof e == "function" ? e(t) : e);
2016
2622
  }
2017
- function ot(e, t) {
2623
+ function yt(e, t) {
2018
2624
  if (e.relationship !== "belongsToMany" || !e.through) throw Error("expandBelongsToManyJoin can only be called on belongsToMany relationships with through configuration");
2019
2625
  let { table: n, sourceKey: r, targetKey: i, securitySql: a } = e.through, o = [];
2020
2626
  for (let e of r) {
2021
- let t = e.as || I;
2627
+ let t = e.as || L;
2022
2628
  o.push(t(e.source, e.target));
2023
2629
  }
2024
2630
  let s = [];
2025
2631
  for (let e of i) {
2026
- let t = e.as || I;
2632
+ let t = e.as || L;
2027
2633
  s.push(t(e.source, e.target));
2028
2634
  }
2029
2635
  let c;
@@ -2031,29 +2637,29 @@ function ot(e, t) {
2031
2637
  let e = a(t);
2032
2638
  c = Array.isArray(e) ? e : [e];
2033
2639
  }
2034
- let l = it("belongsToMany", e.sqlJoinType);
2640
+ let l = gt("belongsToMany", e.sqlJoinType);
2035
2641
  return {
2036
2642
  junctionJoins: [{
2037
2643
  joinType: l,
2038
2644
  table: n,
2039
- condition: L(...o)
2645
+ condition: R(...o)
2040
2646
  }, {
2041
2647
  joinType: l,
2042
2648
  table: n,
2043
- condition: L(...s)
2649
+ condition: R(...s)
2044
2650
  }],
2045
2651
  junctionSecurityConditions: c
2046
2652
  };
2047
2653
  }
2048
2654
  //#endregion
2049
2655
  //#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(",")}]`;
2656
+ function bt(e) {
2657
+ if ("and" in e) return `and:[${e.and.map(bt).sort().join(",")}]`;
2658
+ if ("or" in e) return `or:[${e.or.map(bt).sort().join(",")}]`;
2053
2659
  let t = e, n = JSON.stringify(Array.isArray(t.values) ? [...t.values].sort() : t.values), r = t.dateRange ? `:dr:${JSON.stringify(t.dateRange)}` : "";
2054
2660
  return `${t.member}:${t.operator}:${n}${r}`;
2055
2661
  }
2056
- function ct(e, t) {
2662
+ function xt(e, t) {
2057
2663
  return `timeDim:${e}:${JSON.stringify(t)}`;
2058
2664
  }
2059
2665
  var q = class {
@@ -2094,37 +2700,37 @@ var q = class {
2094
2700
  };
2095
2701
  }
2096
2702
  };
2097
- function lt(e) {
2703
+ function St(e) {
2098
2704
  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);
2705
+ for (let n of e) "and" in n && n.and ? t.push(...St(n.and)) : "or" in n && n.or ? t.push(...St(n.or)) : "member" in n && t.push(n);
2100
2706
  return t;
2101
2707
  }
2102
2708
  //#endregion
2103
2709
  //#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))}`;
2710
+ function Ct(e, t, n = {}) {
2711
+ let r = n.keyPrefix ?? "drizzle-cube:", i = wt(e), a = `${r}query:${At(JSON.stringify(i))}`;
2106
2712
  if (n.includeSecurityContext !== !1) {
2107
- let e = gt(n.securityContextSerializer ? n.securityContextSerializer(t) : JSON.stringify(Y(t)));
2713
+ let e = At(n.securityContextSerializer ? n.securityContextSerializer(t) : JSON.stringify(kt(t)));
2108
2714
  a += `:ctx:${e}`;
2109
2715
  }
2110
2716
  return a;
2111
2717
  }
2112
- function dt(e) {
2718
+ function wt(e) {
2113
2719
  return {
2114
2720
  measures: e.measures ? [...e.measures].sort() : void 0,
2115
2721
  dimensions: e.dimensions ? [...e.dimensions].sort() : void 0,
2116
2722
  filters: e.filters ? J(e.filters) : void 0,
2117
- timeDimensions: e.timeDimensions ? ht(e.timeDimensions) : void 0,
2723
+ timeDimensions: e.timeDimensions ? Ot(e.timeDimensions) : void 0,
2118
2724
  limit: e.limit,
2119
2725
  offset: e.offset,
2120
- order: e.order ? Y(e.order) : void 0,
2726
+ order: e.order ? kt(e.order) : void 0,
2121
2727
  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
2728
+ funnel: e.funnel ? Tt(e.funnel) : void 0,
2729
+ flow: e.flow ? Et(e.flow) : void 0,
2730
+ retention: e.retention ? Dt(e.retention) : void 0
2125
2731
  };
2126
2732
  }
2127
- function ft(e) {
2733
+ function Tt(e) {
2128
2734
  return {
2129
2735
  bindingKey: e.bindingKey,
2130
2736
  timeDimension: e.timeDimension,
@@ -2140,7 +2746,7 @@ function ft(e) {
2140
2746
  globalTimeWindow: e.globalTimeWindow
2141
2747
  };
2142
2748
  }
2143
- function pt(e) {
2749
+ function Et(e) {
2144
2750
  return {
2145
2751
  bindingKey: e.bindingKey,
2146
2752
  timeDimension: e.timeDimension,
@@ -2156,7 +2762,7 @@ function pt(e) {
2156
2762
  joinStrategy: e.joinStrategy
2157
2763
  };
2158
2764
  }
2159
- function mt(e) {
2765
+ function Dt(e) {
2160
2766
  return {
2161
2767
  timeDimension: e.timeDimension,
2162
2768
  bindingKey: e.bindingKey,
@@ -2180,7 +2786,7 @@ function J(e) {
2180
2786
  };
2181
2787
  }).sort((e, t) => JSON.stringify(e).localeCompare(JSON.stringify(t)));
2182
2788
  }
2183
- function ht(e) {
2789
+ function Ot(e) {
2184
2790
  return [...e].map((e) => ({
2185
2791
  dimension: e.dimension,
2186
2792
  granularity: e.granularity,
@@ -2192,23 +2798,23 @@ function ht(e) {
2192
2798
  }) : void 0
2193
2799
  })).sort((e, t) => e.dimension.localeCompare(t.dimension));
2194
2800
  }
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), {});
2801
+ function kt(e) {
2802
+ return typeof e != "object" || !e ? e : Array.isArray(e) ? e.map(kt) : Object.keys(e).sort().reduce((t, n) => (t[n] = kt(e[n]), t), {});
2197
2803
  }
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;
2804
+ function At(e) {
2805
+ let t = 2166136261, n = Math.min(e.length, 65536);
2806
+ for (let r = 0; r < n; r++) t ^= e.charCodeAt(r), t = t * 16777619 >>> 0;
2201
2807
  return t.toString(16).padStart(8, "0");
2202
2808
  }
2203
2809
  //#endregion
2204
2810
  //#region src/server/builders/date-time-builder.ts
2205
- var X = class {
2811
+ var Y = class {
2206
2812
  constructor(e) {
2207
2813
  this.databaseAdapter = e;
2208
2814
  }
2209
2815
  buildTimeDimensionExpression(e, t, n) {
2210
2816
  let r = K(e, n);
2211
- return t ? this.databaseAdapter.buildTimeDimension(t, r) : r instanceof M ? r : N`${r}`;
2817
+ return t ? this.databaseAdapter.buildTimeDimension(t, r) : r instanceof N ? r : F`${r}`;
2212
2818
  }
2213
2819
  buildDateRangeCondition(e, t) {
2214
2820
  if (!t) return null;
@@ -2219,13 +2825,13 @@ var X = class {
2219
2825
  let e = typeof r == "number" ? /* @__PURE__ */ new Date(r * (this.databaseAdapter.getEngineType() === "sqlite" ? 1e3 : 1)) : new Date(r), t = new Date(e);
2220
2826
  t.setUTCHours(23, 59, 59, 999), r = this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? Math.floor(t.getTime() / 1e3) : t.getTime() : t.toISOString();
2221
2827
  }
2222
- return L(R(e, n), z(e, r));
2828
+ return R(z(e, n), B(e, r));
2223
2829
  }
2224
2830
  if (typeof t == "string") {
2225
2831
  let n = this.parseRelativeDateRange(t);
2226
2832
  if (n) {
2227
2833
  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));
2834
+ 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
2835
  }
2230
2836
  let r = this.normalizeDate(t);
2231
2837
  if (!r) return null;
@@ -2234,7 +2840,7 @@ var X = class {
2234
2840
  let o = new Date(i);
2235
2841
  o.setUTCHours(23, 59, 59, 999);
2236
2842
  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));
2843
+ 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
2844
  }
2239
2845
  return null;
2240
2846
  }
@@ -2369,7 +2975,7 @@ var X = class {
2369
2975
  let t = new Date(e);
2370
2976
  return isNaN(t.getTime()) ? null : this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? Math.floor(t.getTime() / 1e3) : t.getTime() : t.toISOString();
2371
2977
  }
2372
- }, _t = class {
2978
+ }, jt = class {
2373
2979
  constructor(e, t) {
2374
2980
  this.databaseAdapter = e, this.dateTimeBuilder = t;
2375
2981
  }
@@ -2384,18 +2990,18 @@ var X = class {
2384
2990
  if (a.length === 0 && !["set", "notSet"].includes(t)) return t === "equals" ? this.databaseAdapter.buildBooleanLiteral(!1) : null;
2385
2991
  let o = a[0];
2386
2992
  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;
2993
+ 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);
2994
+ case "notEquals": return a.length > 1 ? be(e, a) : a.length === 1 ? he(e, o) : null;
2389
2995
  case "contains": return this.databaseAdapter.buildStringCondition(e, "contains", o);
2390
2996
  case "notContains": return this.databaseAdapter.buildStringCondition(e, "notContains", o);
2391
2997
  case "startsWith": return this.databaseAdapter.buildStringCondition(e, "startsWith", o);
2392
2998
  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);
2999
+ case "gt": return _e(e, o);
3000
+ case "gte": return z(e, o);
3001
+ case "lt": return ve(e, o);
3002
+ case "lte": return B(e, o);
3003
+ case "set": return Se(e);
3004
+ case "notSet": return xe(e);
2399
3005
  case "inDateRange":
2400
3006
  if (a.length >= 2) {
2401
3007
  let t = this.dateTimeBuilder.normalizeDate(a[0]), r = this.dateTimeBuilder.normalizeDate(a[1]);
@@ -2405,43 +3011,43 @@ var X = class {
2405
3011
  let e = typeof r == "number" ? /* @__PURE__ */ new Date(r * (this.databaseAdapter.getEngineType() === "sqlite" ? 1e3 : 1)) : new Date(r), t = new Date(e);
2406
3012
  t.setUTCHours(23, 59, 59, 999), r = this.databaseAdapter.isTimestampInteger() ? this.databaseAdapter.getEngineType() === "sqlite" ? Math.floor(t.getTime() / 1e3) : t.getTime() : t.toISOString();
2407
3013
  }
2408
- return L(R(e, t), z(e, r));
3014
+ return R(z(e, t), B(e, r));
2409
3015
  }
2410
3016
  }
2411
3017
  return null;
2412
3018
  case "beforeDate": {
2413
3019
  let t = this.dateTimeBuilder.normalizeDate(o);
2414
- return t ? ye(e, t) : null;
3020
+ return t ? ve(e, t) : null;
2415
3021
  }
2416
3022
  case "afterDate": {
2417
3023
  let t = this.dateTimeBuilder.normalizeDate(o);
2418
- return t ? ve(e, t) : null;
3024
+ return t ? _e(e, t) : null;
2419
3025
  }
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;
3026
+ case "between": return a.length >= 2 ? R(z(e, a[0]), B(e, a[1])) : null;
3027
+ case "notBetween": return a.length >= 2 ? ge(ve(e, a[0]), _e(e, a[1])) : null;
3028
+ case "in": return a.length > 0 ? ye(e, a) : null;
3029
+ case "notIn": return a.length > 0 ? be(e, a) : null;
2424
3030
  case "like": return this.databaseAdapter.buildStringCondition(e, "like", o);
2425
3031
  case "notLike": return this.databaseAdapter.buildStringCondition(e, "notLike", o);
2426
3032
  case "ilike": return this.databaseAdapter.buildStringCondition(e, "ilike", o);
2427
3033
  case "regex": return this.databaseAdapter.buildStringCondition(e, "regex", o);
2428
3034
  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;
3035
+ case "isEmpty": return ge(xe(e), L(e, ""));
3036
+ case "isNotEmpty": return R(Se(e), he(e, ""));
3037
+ case "arrayContains": return this.databaseAdapter.getEngineType() === "postgres" ? Ce(e, a) : null;
3038
+ case "arrayOverlaps": return this.databaseAdapter.getEngineType() === "postgres" ? Te(e, a) : null;
3039
+ case "arrayContained": return this.databaseAdapter.getEngineType() === "postgres" ? we(e, a) : null;
2434
3040
  default: return null;
2435
3041
  }
2436
3042
  }
2437
3043
  buildLogicalFilter(e, t, n) {
2438
3044
  if ("and" in e && e.and) {
2439
3045
  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;
3046
+ return r.length > 0 ? r.length === 1 ? r[0] : R(...r) : null;
2441
3047
  }
2442
3048
  if ("or" in e && e.or) {
2443
3049
  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;
3050
+ return r.length > 0 ? r.length === 1 ? r[0] : ge(...r) : null;
2445
3051
  }
2446
3052
  return null;
2447
3053
  }
@@ -2454,13 +3060,14 @@ var X = class {
2454
3060
  let c = s.type === "time" ? K(s.sql, n) : typeof s.sql == "function" ? s.sql(n) : s.sql;
2455
3061
  return this.buildFilterCondition(c, r.operator, r.values, s, r.dateRange);
2456
3062
  }
2457
- }, Z = class {
3063
+ }, X = class {
2458
3064
  dependencyGraph;
2459
3065
  cubes;
2460
3066
  constructor(e) {
2461
3067
  this.cubes = e instanceof Map ? e : new Map([[e.name, e]]), this.dependencyGraph = /* @__PURE__ */ new Map();
2462
3068
  }
2463
3069
  extractDependencies(e) {
3070
+ if (e.length > 1e3) return [];
2464
3071
  let t = e.matchAll(/\{([^}]+)\}/g), n = [];
2465
3072
  for (let e of t) {
2466
3073
  let t = e[1].trim();
@@ -2581,14 +3188,14 @@ var X = class {
2581
3188
  };
2582
3189
  //#endregion
2583
3190
  //#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();
3191
+ function Mt(e, t) {
3192
+ let { cube: n, allCubes: r, resolvedMeasures: i } = t, a = Nt(e), o = /* @__PURE__ */ new Map();
2586
3193
  for (let e of a) {
2587
3194
  let { originalRef: t, cubeName: a, fieldName: s } = e, c = a || n.name;
2588
3195
  if (!r.get(c)) throw Error(`Cannot substitute {${t}}: cube '${c}' not found`);
2589
3196
  let l = `${c}.${s}`, u = i.get(l);
2590
3197
  if (!u) throw Error(`Cannot substitute {${t}}: measure '${l}' not resolved yet. Ensure measures are resolved in dependency order.`);
2591
- let d = N`${u()}`;
3198
+ let d = F`${u()}`;
2592
3199
  o.set(t, d);
2593
3200
  }
2594
3201
  let s = [], c = [], l = 0;
@@ -2600,12 +3207,13 @@ function vt(e, t) {
2600
3207
  i && c.push(i), l = r + n.length;
2601
3208
  }
2602
3209
  }
2603
- if (s.push(e.substring(l)), c.length === 0) return N.raw(e);
3210
+ if (s.push(e.substring(l)), c.length === 0) return F.raw(e);
2604
3211
  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(""));
3212
+ for (let e = 0; e < s.length; e++) s[e] && u.push(new M(s[e])), e < c.length && u.push(c[e]);
3213
+ return F.join(u, F.raw(""));
2607
3214
  }
2608
- function yt(e) {
3215
+ function Nt(e) {
3216
+ if (e.length > 1e3) return [];
2609
3217
  let t = e.matchAll(/\{([^}]+)\}/g), n = [];
2610
3218
  for (let e of t) {
2611
3219
  let t = e[1].trim();
@@ -2624,7 +3232,7 @@ function yt(e) {
2624
3232
  }
2625
3233
  return n;
2626
3234
  }
2627
- function bt(e) {
3235
+ function Pt(e) {
2628
3236
  let t = [], n = 0;
2629
3237
  for (let r = 0; r < e.length; r++) if (e[r] === "{") n++;
2630
3238
  else if (e[r] === "}" && (n--, n < 0)) {
@@ -2632,7 +3240,7 @@ function bt(e) {
2632
3240
  break;
2633
3241
  }
2634
3242
  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);
3243
+ let r = Nt(e);
2636
3244
  for (let e of r) {
2637
3245
  let n = e.cubeName ? `${e.cubeName}.${e.fieldName}` : e.fieldName;
2638
3246
  /^[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 +3250,8 @@ function bt(e) {
2642
3250
  errors: t
2643
3251
  };
2644
3252
  }
2645
- function xt(e, t) {
2646
- let n = yt(e), r = /* @__PURE__ */ new Set();
3253
+ function Ft(e, t) {
3254
+ let n = Nt(e), r = /* @__PURE__ */ new Set();
2647
3255
  for (let e of n) {
2648
3256
  let n = `${e.cubeName || t}.${e.fieldName}`;
2649
3257
  r.add(n);
@@ -2652,12 +3260,12 @@ function xt(e, t) {
2652
3260
  }
2653
3261
  //#endregion
2654
3262
  //#region src/server/builders/measure-builder.ts
2655
- var Q = class e {
3263
+ var Z = class e {
2656
3264
  constructor(e) {
2657
3265
  this.databaseAdapter = e;
2658
3266
  }
2659
3267
  buildResolvedMeasures(t, n, r, i) {
2660
- let a = /* @__PURE__ */ new Map(), o = [], s = [], c = new Set(t), l = new Z(n);
3268
+ let a = /* @__PURE__ */ new Map(), o = [], s = [], c = new Set(t), l = new X(n);
2661
3269
  for (let e of n.values()) l.buildGraph(e);
2662
3270
  let u = [];
2663
3271
  for (let r of t) {
@@ -2670,11 +3278,11 @@ var Q = class e {
2670
3278
  n && c.add(n);
2671
3279
  continue;
2672
3280
  }
2673
- Z.isCalculatedMeasure(d) ? (s.push(r), xt(d.calculatedSql, t).forEach((e) => c.add(e)), l.getAllDependencies(r).forEach((e) => {
3281
+ X.isCalculatedMeasure(d) ? (s.push(r), Ft(d.calculatedSql, t).forEach((e) => c.add(e)), l.getAllDependencies(r).forEach((e) => {
2674
3282
  let [t, r] = e.split("."), i = n.get(t);
2675
3283
  if (i && i.measures[r]) {
2676
3284
  let e = i.measures[r];
2677
- Z.isCalculatedMeasure(e) && xt(e.calculatedSql, t).forEach((e) => c.add(e));
3285
+ X.isCalculatedMeasure(e) && Ft(e.calculatedSql, t).forEach((e) => c.add(e));
2678
3286
  }
2679
3287
  })) : o.push(r);
2680
3288
  }
@@ -2684,7 +3292,7 @@ var Q = class e {
2684
3292
  if (a && a.measures && a.measures[i]) {
2685
3293
  let n = a.measures[i];
2686
3294
  if (e.isPostAggregationWindow(n)) continue;
2687
- Z.isCalculatedMeasure(n) ? s.includes(t) || s.push(t) : o.includes(t) || o.push(t);
3295
+ X.isCalculatedMeasure(n) ? s.includes(t) || s.push(t) : o.includes(t) || o.push(t);
2688
3296
  }
2689
3297
  }
2690
3298
  for (let e of o) {
@@ -2705,7 +3313,7 @@ var Q = class e {
2705
3313
  }
2706
3314
  buildCalculatedMeasure(e, t, n, r, i) {
2707
3315
  if (!e.calculatedSql) throw Error(`Calculated measure '${t.name}.${e.name}' missing calculatedSql property`);
2708
- return vt(this.databaseAdapter.preprocessCalculatedTemplate(e.calculatedSql), {
3316
+ return Mt(this.databaseAdapter.preprocessCalculatedTemplate(e.calculatedSql), {
2709
3317
  cube: t,
2710
3318
  allCubes: n,
2711
3319
  resolvedMeasures: r,
@@ -2714,32 +3322,32 @@ var Q = class e {
2714
3322
  }
2715
3323
  buildCTECalculatedMeasure(e, t, n, r, i) {
2716
3324
  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);
3325
+ let a = /* @__PURE__ */ new Map(), o = Ft(e.calculatedSql, t.name);
2718
3326
  for (let e of o) {
2719
3327
  let [t, i] = e.split("."), o = r.get(t);
2720
3328
  if (o && o.measures[i]) {
2721
3329
  let t = o.measures[i];
2722
3330
  if (n.measures.includes(e)) {
2723
- let r = N`${N.identifier(n.cteAlias)}.${N.identifier(i)}`, o;
3331
+ let r = F`${F.identifier(n.cteAlias)}.${F.identifier(i)}`, o;
2724
3332
  switch (t.type) {
2725
3333
  case "count":
2726
3334
  case "countDistinct":
2727
3335
  case "sum":
2728
- o = B(r);
3336
+ o = V(r);
2729
3337
  break;
2730
3338
  case "avg":
2731
3339
  o = this.databaseAdapter.buildAvg(r);
2732
3340
  break;
2733
3341
  case "min":
2734
- o = H(r);
3342
+ o = Ae(r);
2735
3343
  break;
2736
3344
  case "max":
2737
- o = V(r);
3345
+ o = H(r);
2738
3346
  break;
2739
3347
  case "number":
2740
- o = B(r);
3348
+ o = V(r);
2741
3349
  break;
2742
- default: o = B(r);
3350
+ default: o = V(r);
2743
3351
  }
2744
3352
  a.set(e, () => o);
2745
3353
  }
@@ -2757,16 +3365,16 @@ var Q = class e {
2757
3365
  if (i.joinCubes) for (let e of i.joinCubes) o.set(e.cube.name, e.cube);
2758
3366
  return this.buildCTECalculatedMeasure(n, t, a, o, r);
2759
3367
  } else {
2760
- let e = N`${N.identifier(a.cteAlias)}.${N.identifier(t)}`;
3368
+ let e = F`${F.identifier(a.cteAlias)}.${F.identifier(t)}`;
2761
3369
  switch (n.type) {
2762
3370
  case "count":
2763
3371
  case "countDistinct":
2764
- case "sum": return B(e);
3372
+ case "sum": return V(e);
2765
3373
  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);
3374
+ case "min": return Ae(e);
3375
+ case "max": return H(e);
3376
+ case "number": return V(e);
3377
+ default: return V(e);
2770
3378
  }
2771
3379
  }
2772
3380
  }
@@ -2780,10 +3388,10 @@ var Q = class e {
2780
3388
  if (t.filters && t.filters.length > 0) {
2781
3389
  let e = t.filters.map((e) => {
2782
3390
  let t = e(n);
2783
- return t ? N`(${t})` : void 0;
3391
+ return t ? F`(${t})` : void 0;
2784
3392
  }).filter(Boolean);
2785
3393
  if (e.length > 0) {
2786
- let t = e.length === 1 ? e[0] : L(...e);
3394
+ let t = e.length === 1 ? e[0] : R(...e);
2787
3395
  i = this.databaseAdapter.buildCaseWhen([{
2788
3396
  when: t,
2789
3397
  then: i
@@ -2791,22 +3399,22 @@ var Q = class e {
2791
3399
  }
2792
3400
  }
2793
3401
  switch (t.type) {
2794
- case "count": return ke(i);
2795
- case "countDistinct": return Ae(i);
2796
- case "sum": return B(i);
3402
+ case "count": return Oe(i);
3403
+ case "countDistinct": return ke(i);
3404
+ case "sum": return V(i);
2797
3405
  case "avg": return this.databaseAdapter.buildAvg(i);
2798
- case "min": return H(i);
2799
- case "max": return V(i);
3406
+ case "min": return Ae(i);
3407
+ case "max": return H(i);
2800
3408
  case "number": return i;
2801
3409
  case "stddev":
2802
3410
  case "stddevSamp": {
2803
3411
  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;
3412
+ return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`MAX(NULL)`) : n;
2805
3413
  }
2806
3414
  case "variance":
2807
3415
  case "varianceSamp": {
2808
3416
  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;
3417
+ return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`MAX(NULL)`) : n;
2810
3418
  }
2811
3419
  case "percentile":
2812
3420
  case "median":
@@ -2826,7 +3434,7 @@ var Q = class e {
2826
3434
  default: e = t.statisticalConfig?.percentile ?? 50;
2827
3435
  }
2828
3436
  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;
3437
+ return n === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`MAX(NULL)`) : n;
2830
3438
  }
2831
3439
  case "lag":
2832
3440
  case "lead":
@@ -2872,9 +3480,9 @@ var Q = class e {
2872
3480
  nTile: e.nTile,
2873
3481
  frame: e.frame
2874
3482
  });
2875
- return s === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), N`NULL`) : s;
3483
+ return s === null ? (console.warn(`[drizzle-cube] ${t.type} not supported on ${this.databaseAdapter.getEngineType()}, returning NULL`), F`NULL`) : s;
2876
3484
  }
2877
- default: return ke(i);
3485
+ default: return Oe(i);
2878
3486
  }
2879
3487
  }
2880
3488
  static WINDOW_FUNCTION_TYPES = [
@@ -2948,7 +3556,7 @@ var Q = class e {
2948
3556
  let { postAggWindowMeasures: r } = e.categorizeForPostAggregation(t, n);
2949
3557
  return r.length > 0;
2950
3558
  }
2951
- }, St = class {
3559
+ }, It = class {
2952
3560
  constructor(e) {
2953
3561
  this.dateTimeBuilder = e;
2954
3562
  }
@@ -2995,8 +3603,8 @@ var Q = class e {
2995
3603
  l = !0;
2996
3604
  break;
2997
3605
  }
2998
- if (Q.isPostAggregationWindow(e)) {
2999
- let n = Q.getWindowBaseMeasure(e, t);
3606
+ if (Z.isPostAggregationWindow(e)) {
3607
+ let n = Z.getWindowBaseMeasure(e, t);
3000
3608
  if (n) {
3001
3609
  let [e, t] = n.split("."), r = a.get(e)?.measures?.[t];
3002
3610
  if (r && this.isAggregateFunctionType(r.type)) {
@@ -3016,7 +3624,7 @@ var Q = class e {
3016
3624
  let t = e.joinKeys.find((e) => e.targetColumn === o);
3017
3625
  if (t && t.sourceColumnObj) i.push(t.sourceColumnObj);
3018
3626
  else {
3019
- let t = N`${N.identifier(e.cteAlias)}.${N.identifier(o)}`;
3627
+ let t = F`${F.identifier(e.cteAlias)}.${F.identifier(o)}`;
3020
3628
  i.push(t);
3021
3629
  }
3022
3630
  } else {
@@ -3035,7 +3643,7 @@ var Q = class e {
3035
3643
  let r = this.dateTimeBuilder.buildTimeDimensionExpression(t.sourceColumnObj, e.granularity, n);
3036
3644
  i.push(r);
3037
3645
  } else {
3038
- let e = N`${N.identifier(a.cteAlias)}.${N.identifier(o)}`;
3646
+ let e = F`${F.identifier(a.cteAlias)}.${F.identifier(o)}`;
3039
3647
  i.push(e);
3040
3648
  }
3041
3649
  } else {
@@ -3046,13 +3654,13 @@ var Q = class e {
3046
3654
  }
3047
3655
  return i;
3048
3656
  }
3049
- }, Ct = class {
3657
+ }, Lt = class {
3050
3658
  dateTimeBuilder;
3051
3659
  filterBuilder;
3052
3660
  groupByBuilder;
3053
3661
  measureBuilder;
3054
3662
  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);
3663
+ this.dateTimeBuilder = new Y(e), this.filterBuilder = new jt(e, this.dateTimeBuilder), this.groupByBuilder = new It(this.dateTimeBuilder), this.measureBuilder = new Z(e);
3056
3664
  }
3057
3665
  buildResolvedMeasures(e, t, n, r) {
3058
3666
  return this.measureBuilder.buildResolvedMeasures(e, t, n, r);
@@ -3063,24 +3671,24 @@ var Q = class e {
3063
3671
  let [t, a] = e.split("."), o = i.get(t);
3064
3672
  if (o && o.dimensions && o.dimensions[a]) {
3065
3673
  let t = o.dimensions[a];
3066
- r[e] = N`${K(t.sql, n)}`.as(e);
3674
+ r[e] = F`${K(t.sql, n)}`.as(e);
3067
3675
  }
3068
3676
  }
3069
3677
  if (t.measures) {
3070
3678
  let e = this.buildResolvedMeasures(t.measures, i, n);
3071
3679
  for (let n of t.measures) {
3072
3680
  let t = e.get(n);
3073
- t && (r[n] = N`${t()}`.as(n));
3681
+ t && typeof t == "function" && (r[n] = F`${t()}`.as(n));
3074
3682
  }
3075
3683
  }
3076
3684
  if (t.timeDimensions) for (let e of t.timeDimensions) {
3077
3685
  let [t, a] = e.dimension.split("."), o = i.get(t);
3078
3686
  if (o && o.dimensions && o.dimensions[a]) {
3079
3687
  let t = o.dimensions[a], i = this.buildTimeDimensionExpression(t.sql, e.granularity, n);
3080
- r[e.dimension] = N`${i}`.as(e.dimension);
3688
+ r[e.dimension] = F`${i}`.as(e.dimension);
3081
3689
  }
3082
3690
  }
3083
- return Object.keys(r).length === 0 && (r.count = ke()), r;
3691
+ return Object.keys(r).length === 0 && (r.count = Oe()), r;
3084
3692
  }
3085
3693
  buildCalculatedMeasure(e, t, n, r, i) {
3086
3694
  return this.measureBuilder.buildCalculatedMeasure(e, t, n, r, i);
@@ -3116,7 +3724,7 @@ var Q = class e {
3116
3724
  if (s && s.dimensions[i] && e.dateRange) {
3117
3725
  if (r?.preAggregationCTEs && r.preAggregationCTEs.some((e) => e.cube.name === t)) continue;
3118
3726
  if (n.filterCache) {
3119
- let t = ct(e.dimension, e.dateRange), r = n.filterCache.get(t);
3727
+ let t = xt(e.dimension, e.dateRange), r = n.filterCache.get(t);
3120
3728
  if (r) {
3121
3729
  a.push(r);
3122
3730
  continue;
@@ -3141,11 +3749,11 @@ var Q = class e {
3141
3749
  let a = e;
3142
3750
  if (a.and) {
3143
3751
  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;
3752
+ return e.length > 0 ? R(...e) : null;
3145
3753
  }
3146
3754
  if (a.or) {
3147
3755
  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;
3756
+ return e.length > 0 ? ge(...e) : null;
3149
3757
  }
3150
3758
  }
3151
3759
  let a = e, [o, s] = a.member.split("."), c = t.get(o);
@@ -3156,7 +3764,7 @@ var Q = class e {
3156
3764
  if (i?.preAggregationCTEs && i.preAggregationCTEs.some((e) => e.cube.name === o)) return null;
3157
3765
  let t = l.type === "time";
3158
3766
  if (n.filterCache) {
3159
- let t = st(e), r = n.filterCache.get(t);
3767
+ let t = bt(e), r = n.filterCache.get(t);
3160
3768
  if (r) return r;
3161
3769
  }
3162
3770
  let r = t ? K(l.sql, n) : typeof l.sql == "function" ? l.sql(n) : l.sql;
@@ -3185,12 +3793,12 @@ var Q = class e {
3185
3793
  ];
3186
3794
  if (e.order && Object.keys(e.order).length > 0) for (let [t, i] of Object.entries(e.order)) {
3187
3795
  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));
3796
+ let e = i === "desc" ? De(F.identifier(t)) : Ee(F.identifier(t));
3189
3797
  n.push(e);
3190
3798
  }
3191
3799
  if (e.timeDimensions && e.timeDimensions.length > 0) {
3192
3800
  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)));
3801
+ for (let e of r) t.has(e.dimension) || n.push(Ee(F.identifier(e.dimension)));
3194
3802
  }
3195
3803
  return n;
3196
3804
  }
@@ -3225,7 +3833,7 @@ var Q = class e {
3225
3833
  buildLogicalFilter(e, t, n) {
3226
3834
  return this.filterBuilder.buildLogicalFilter(e, t, n);
3227
3835
  }
3228
- }, wt = class {
3836
+ }, Rt = class {
3229
3837
  cubes;
3230
3838
  connectivityCache = /* @__PURE__ */ new Map();
3231
3839
  reverseIndex;
@@ -3432,10 +4040,10 @@ var Q = class e {
3432
4040
  buildJoinCondition(e, t, n) {
3433
4041
  let r = [];
3434
4042
  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;
4043
+ let e = t ? F`${F.identifier(t)}.${F.identifier(i.source.name)}` : _t(i.source), a = n ? F`${F.identifier(n)}.${F.identifier(i.target.name)}` : _t(i.target), o = i.as || L;
3436
4044
  r.push(o(e, a));
3437
4045
  }
3438
- return L(...r);
4046
+ return R(...r);
3439
4047
  }
3440
4048
  getReachableCubes(e) {
3441
4049
  let t = new Set([e]), n = [e];
@@ -3462,11 +4070,11 @@ var Q = class e {
3462
4070
  setInCache(e, t) {
3463
4071
  this.connectivityCache.set(e, { path: t });
3464
4072
  }
3465
- }, Tt = class {
4073
+ }, zt = class {
3466
4074
  resolverCache = /* @__PURE__ */ new WeakMap();
3467
4075
  getResolver(e) {
3468
4076
  let t = this.resolverCache.get(e);
3469
- return t || (t = new wt(e), this.resolverCache.set(e, t)), t;
4077
+ return t || (t = new Rt(e), this.resolverCache.set(e, t)), t;
3470
4078
  }
3471
4079
  analyzeCubeUsage(e) {
3472
4080
  let t = /* @__PURE__ */ new Set();
@@ -3555,9 +4163,9 @@ var Q = class e {
3555
4163
  if (s.has(n)) continue;
3556
4164
  let c = e.get(n);
3557
4165
  if (!c) throw Error(`Cube '${n}' not found`);
3558
- let u = l ? rt(i.relationship) : i.relationship;
4166
+ let u = l ? ht(i.relationship) : i.relationship;
3559
4167
  if (u === "belongsToMany" && i.through) {
3560
- let e = ot(i, r.securityContext);
4168
+ let e = yt(i, r.securityContext);
3561
4169
  o.push({
3562
4170
  cube: c,
3563
4171
  alias: `${n.toLowerCase()}_cube`,
@@ -3574,7 +4182,7 @@ var Q = class e {
3574
4182
  }
3575
4183
  });
3576
4184
  } else {
3577
- let e = a.buildJoinCondition(i, null, null), t = it(u, i.sqlJoinType);
4185
+ let e = a.buildJoinCondition(i, null, null), t = gt(u, i.sqlJoinType);
3578
4186
  o.push({
3579
4187
  cube: c,
3580
4188
  alias: `${n.toLowerCase()}_cube`,
@@ -3632,7 +4240,7 @@ var Q = class e {
3632
4240
  targetColumnObj: e.target
3633
4241
  })), h = void 0;
3634
4242
  }
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 + "."))])];
4243
+ 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
4244
  if (b.length > 0) {
3637
4245
  let t = this.expandCalculatedMeasureDependencies(c, b), i = this.findDownstreamJoinKeys(c, r, e);
3638
4246
  a.push({
@@ -3670,7 +4278,7 @@ var Q = class e {
3670
4278
  joinDef: e.joinDef,
3671
4279
  reversed: e.reversed
3672
4280
  }));
3673
- if (!c.slice(0, -1).some((e) => (e.reversed ? rt(e.joinDef.relationship) : e.joinDef.relationship) === "hasMany")) return {
4281
+ if (!c.slice(0, -1).some((e) => (e.reversed ? ht(e.joinDef.relationship) : e.joinDef.relationship) === "hasMany")) return {
3674
4282
  path: c,
3675
4283
  hasIntermediateHasMany: !1,
3676
4284
  intermediateJoins: [],
@@ -3793,6 +4401,7 @@ var Q = class e {
3793
4401
  return Array.from(n);
3794
4402
  }
3795
4403
  extractDependenciesFromTemplate(e, t) {
4404
+ if (e.length > 1e3) return [];
3796
4405
  let n = e.matchAll(/\{([^}]+)\}/g), r = [];
3797
4406
  for (let e of n) {
3798
4407
  let n = e[1].trim();
@@ -3973,7 +4582,7 @@ var Q = class e {
3973
4582
  }
3974
4583
  convertInternalPathToJoinPathSteps(e) {
3975
4584
  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) => ({
4585
+ let t = e.reversed ? ht(e.joinDef.relationship) : e.joinDef.relationship, n = gt(t, e.joinDef.sqlJoinType), r = e.joinDef.on.map((e) => ({
3977
4586
  sourceColumn: e.source.name,
3978
4587
  targetColumn: e.target.name
3979
4588
  })), i = {
@@ -4038,7 +4647,7 @@ var Q = class e {
4038
4647
  suggestion: "Add a dimension to see per-group breakdowns, or add a time dimension with granularity."
4039
4648
  };
4040
4649
  }
4041
- }, Et = class {
4650
+ }, Bt = class {
4042
4651
  constructor(e) {
4043
4652
  this.queryBuilder = e;
4044
4653
  }
@@ -4052,19 +4661,19 @@ var Q = class e {
4052
4661
  }
4053
4662
  } else for (let t of e.joinKeys) if (t.targetColumnObj) {
4054
4663
  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));
4664
+ for (let [e, n] of Object.entries(a.dimensions || {})) n.sql === t.targetColumnObj && e !== t.targetColumn && (c[e] = F`${t.targetColumnObj}`.as(e));
4056
4665
  }
4057
4666
  if (e.downstreamJoinKeys) for (let t of e.downstreamJoinKeys) for (let e of t.joinKeys) e.sourceColumnObj && (c[e.sourceColumn] = e.sourceColumnObj);
4058
4667
  let l = a.name, u = new Map([[l, a]]), d = this.queryBuilder.buildResolvedMeasures(e.measures, u, n);
4059
4668
  for (let t of e.measures) {
4060
4669
  let [, e] = t.split("."), n = d.get(t);
4061
- n && (c[e] = N`${n()}`.as(e));
4670
+ n && (c[e] = F`${n()}`.as(e));
4062
4671
  }
4063
4672
  if (t.dimensions) for (let e of t.dimensions) {
4064
4673
  let [t, r] = e.split(".");
4065
4674
  if (t === l && a.dimensions && a.dimensions[r]) {
4066
4675
  let e = a.dimensions[r];
4067
- c[r] = N`${this.queryBuilder.buildMeasureExpression({
4676
+ c[r] = F`${this.queryBuilder.buildMeasureExpression({
4068
4677
  sql: e.sql,
4069
4678
  type: "number"
4070
4679
  }, n)}`.as(r);
@@ -4074,7 +4683,7 @@ var Q = class e {
4074
4683
  let [t, r] = e.dimension.split(".");
4075
4684
  if (t === l && a.dimensions && a.dimensions[r]) {
4076
4685
  let t = a.dimensions[r];
4077
- c[r] = N`${this.queryBuilder.buildTimeDimensionExpression(t.sql, e.granularity, n)}`.as(r);
4686
+ c[r] = F`${this.queryBuilder.buildTimeDimensionExpression(t.sql, e.granularity, n)}`.as(r);
4078
4687
  }
4079
4688
  }
4080
4689
  if (Object.keys(c).length === 0) return null;
@@ -4082,8 +4691,8 @@ var Q = class e {
4082
4691
  if (s && e.intermediateJoins) {
4083
4692
  let t = [...e.intermediateJoins].reverse();
4084
4693
  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));
4694
+ let t = e.cube.sql(n), r = [L(e.cteJoinColumn, e.joinDef.on[0]?.target)];
4695
+ e.securityFilter && r.push(e.securityFilter), f = f.leftJoin(t.from, R(...r));
4087
4696
  }
4088
4697
  }
4089
4698
  let p = r ? {
@@ -4121,7 +4730,7 @@ var Q = class e {
4121
4730
  }
4122
4731
  let g = [];
4123
4732
  if (o.where && g.push(o.where), g.push(...m, ...h), g.length > 0) {
4124
- let e = g.length === 1 ? g[0] : L(...g);
4733
+ let e = g.length === 1 ? g[0] : R(...g);
4125
4734
  f = f.where(e);
4126
4735
  }
4127
4736
  let _ = [], v = /* @__PURE__ */ new Set(), y = (e) => {
@@ -4154,20 +4763,20 @@ var Q = class e {
4154
4763
  if (!r) throw Error(`CTE info not found for cube ${e.cube.name}`);
4155
4764
  let i = [];
4156
4765
  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));
4766
+ let e = r.intermediateJoins[0], a = this.resolveCTEJoinSourceColumn(r.joinKeys[0], r, n), o = F`${F.identifier(t)}.${F.identifier(e.primaryJoinColumn.name)}`;
4767
+ i.push(L(a, o));
4159
4768
  } 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));
4769
+ let a = this.resolveCTEJoinSourceColumn(e, r, n), o = F`${F.identifier(t)}.${F.identifier(e.targetColumn)}`;
4770
+ i.push(L(a, o));
4162
4771
  }
4163
- return i.length === 1 ? i[0] : L(...i);
4772
+ return i.length === 1 ? i[0] : R(...i);
4164
4773
  }
4165
4774
  resolveCTEJoinSourceColumn(e, t, n) {
4166
4775
  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);
4776
+ let r = e.sourceColumnObj || F.identifier(e.sourceColumn);
4168
4777
  if (!e.sourceColumnObj || !n.preAggregationCTEs) return r;
4169
4778
  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)}`;
4779
+ 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
4780
  }
4172
4781
  return r;
4173
4782
  }
@@ -4179,24 +4788,24 @@ var Q = class e {
4179
4788
  i.push(...o);
4180
4789
  }
4181
4790
  if (i.length === 0) return null;
4182
- let a = i.length === 1 ? i[0] : L(...i), o = e.joinConditions;
4791
+ let a = i.length === 1 ? i[0] : R(...i), o = e.joinConditions;
4183
4792
  if (o.length === 1) {
4184
4793
  let { source: e, target: n } = o[0];
4185
- return N`${n} IN ${t.db.select({ pk: e }).from(r.from).where(a)}`;
4794
+ return F`${n} IN ${t.db.select({ pk: e }).from(r.from).where(a)}`;
4186
4795
  } 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)}`;
4796
+ let e = R(...o.map((e) => L(e.source, e.target)), a);
4797
+ return F`EXISTS ${t.db.select({ one: F`1` }).from(r.from).where(e)}`;
4189
4798
  }
4190
4799
  }
4191
4800
  };
4192
4801
  //#endregion
4193
4802
  //#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);
4803
+ function Vt(e, t, n) {
4804
+ let r = [], i = Ht(new Date(e), n), a = Ht(new Date(t), n);
4805
+ for (; i <= a && r.length < 1e4;) r.push(new Date(i)), i = Ut(i, n);
4197
4806
  return r;
4198
4807
  }
4199
- function Ot(e, t) {
4808
+ function Ht(e, t) {
4200
4809
  let n = new Date(e);
4201
4810
  switch (t) {
4202
4811
  case "second":
@@ -4230,7 +4839,7 @@ function Ot(e, t) {
4230
4839
  }
4231
4840
  return n;
4232
4841
  }
4233
- function kt(e, t) {
4842
+ function Ut(e, t) {
4234
4843
  let n = new Date(e);
4235
4844
  switch (t) {
4236
4845
  case "second":
@@ -4260,7 +4869,7 @@ function kt(e, t) {
4260
4869
  }
4261
4870
  return n;
4262
4871
  }
4263
- function At(e) {
4872
+ function Wt(e) {
4264
4873
  if (e instanceof Date) return e.toISOString();
4265
4874
  if (typeof e == "string") {
4266
4875
  let t = new Date(e);
@@ -4268,15 +4877,15 @@ function At(e) {
4268
4877
  }
4269
4878
  return String(e);
4270
4879
  }
4271
- function jt(e, t) {
4880
+ function Gt(e, t) {
4272
4881
  return t.length === 0 ? "__all__" : t.map((t) => String(e[t] ?? "")).join("|||");
4273
4882
  }
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);
4883
+ function Kt(e, t) {
4884
+ let { timeDimensionKey: n, granularity: r, dateRange: i, fillValue: a, measures: o, dimensions: s } = t, c = Vt(i[0], i[1], r);
4276
4885
  if (c.length === 0) return e;
4277
4886
  let l = /* @__PURE__ */ new Map();
4278
4887
  for (let t of e) {
4279
- let e = jt(t, s), r = At(t[n]);
4888
+ let e = Gt(t, s), r = Wt(t[n]);
4280
4889
  l.has(e) || l.set(e, /* @__PURE__ */ new Map()), l.get(e).set(r, t);
4281
4890
  }
4282
4891
  l.size === 0 && s.length === 0 && l.set("__all__", /* @__PURE__ */ new Map());
@@ -4296,7 +4905,7 @@ function Mt(e, t) {
4296
4905
  }
4297
4906
  return u;
4298
4907
  }
4299
- function Nt(e) {
4908
+ function qt(e) {
4300
4909
  if (!e) return null;
4301
4910
  if (Array.isArray(e)) {
4302
4911
  if (e.length < 2) return null;
@@ -4306,7 +4915,7 @@ function Nt(e) {
4306
4915
  let t = new Date(e);
4307
4916
  return isNaN(t.getTime()) ? null : [t, t];
4308
4917
  }
4309
- function Pt(e, t, n) {
4918
+ function Jt(e, t, n) {
4310
4919
  if (!t.timeDimensions || t.timeDimensions.length === 0) return e;
4311
4920
  let r = t.timeDimensions.filter((e) => {
4312
4921
  let t = e.fillMissingDates !== !1, n = e.granularity && e.dateRange;
@@ -4315,7 +4924,7 @@ function Pt(e, t, n) {
4315
4924
  if (r.length === 0) return e;
4316
4925
  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
4926
  for (let e of r) {
4318
- let t = Nt(e.dateRange);
4927
+ let t = qt(e.dateRange);
4319
4928
  if (!t) continue;
4320
4929
  let r = {
4321
4930
  timeDimensionKey: e.dimension,
@@ -4325,16 +4934,16 @@ function Pt(e, t, n) {
4325
4934
  measures: n,
4326
4935
  dimensions: o
4327
4936
  };
4328
- s = Mt(s, r);
4937
+ s = Kt(s, r);
4329
4938
  }
4330
4939
  return s;
4331
4940
  }
4332
4941
  //#endregion
4333
4942
  //#region src/server/builders/comparison-query-builder.ts
4334
- var Ft = class {
4943
+ var Yt = class {
4335
4944
  dateTimeBuilder;
4336
4945
  constructor(e) {
4337
- this.dateTimeBuilder = new X(e);
4946
+ this.dateTimeBuilder = new Y(e);
4338
4947
  }
4339
4948
  hasComparison(e) {
4340
4949
  return e.timeDimensions?.some((e) => e.compareDateRange && e.compareDateRange.length >= 2) ?? !1;
@@ -4462,11 +5071,11 @@ var Ft = class {
4462
5071
  return typeof i == "string" && typeof a == "string" ? new Date(i).getTime() - new Date(a).getTime() : 0;
4463
5072
  });
4464
5073
  }
4465
- }, It = class {
5074
+ }, Xt = class {
4466
5075
  filterBuilder;
4467
5076
  dateTimeBuilder;
4468
5077
  constructor(e) {
4469
- this.databaseAdapter = e, this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder);
5078
+ this.databaseAdapter = e, this.dateTimeBuilder = new Y(e), this.filterBuilder = new jt(e, this.dateTimeBuilder);
4470
5079
  }
4471
5080
  hasFunnel(e) {
4472
5081
  return e.funnel !== void 0 && e.funnel.steps.length >= 2;
@@ -4501,7 +5110,7 @@ var Ft = class {
4501
5110
  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
5111
  let a;
4503
5112
  "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];
5113
+ let o = a ? new Rt(t) : null, s = Array.isArray(i.filter) ? i.filter : [i.filter];
4505
5114
  for (let e of s) if ("member" in e) {
4506
5115
  let [i, s] = e.member.split("."), c = t.get(i);
4507
5116
  if (!c) n.push(`Step ${r} filter cube not found: ${i}`);
@@ -4564,7 +5173,7 @@ var Ft = class {
4564
5173
  return t;
4565
5174
  }
4566
5175
  resolveSteps(e, t, n) {
4567
- let r = new wt(t);
5176
+ let r = new Rt(t);
4568
5177
  return e.steps.map((i, a) => {
4569
5178
  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
5179
  for (let e of u) if (e !== o.name) {
@@ -4655,15 +5264,15 @@ var Ft = class {
4655
5264
  a && i.push(a);
4656
5265
  }
4657
5266
  }
4658
- return i.length === 0 ? null : i.length === 1 ? i[0] : o ? L(...i) : N`(${N.join(i, N` OR `)})`;
5267
+ return i.length === 0 ? null : i.length === 1 ? i[0] : o ? R(...i) : F`(${F.join(i, F` OR `)})`;
4659
5268
  }
4660
5269
  let o = e, [s, c] = o.member.split("."), l = o.dateRange !== void 0;
4661
5270
  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
5271
  let u = n.get(s);
4663
5272
  if (!u) return null;
4664
5273
  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;
5274
+ let e = new Rt(n).findPath(t.name, s);
5275
+ 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
5276
  }
4668
5277
  let d = u.dimensions?.[c];
4669
5278
  if (!d) return null;
@@ -4677,11 +5286,11 @@ var Ft = class {
4677
5286
  let n = `step_${e.index}`, r = e.cube.sql(t), i = [];
4678
5287
  r.where && i.push(r.where), i.push(...e.filterConditions);
4679
5288
  let a = t.db.select({
4680
- binding_key: N`${e.bindingKeyExpr}`.as("binding_key"),
4681
- step_time: N`MIN(${e.timeExpr})`.as("step_time")
5289
+ binding_key: F`${e.bindingKeyExpr}`.as("binding_key"),
5290
+ step_time: F`MIN(${e.timeExpr})`.as("step_time")
4682
5291
  }).from(r.from);
4683
5292
  if (a = this.addCrossJoinsToQuery(a, e, t, i), i.length > 0) {
4684
- let e = i.length === 1 ? i[0] : L(...i);
5293
+ let e = i.length === 1 ? i[0] : R(...i);
4685
5294
  a = a.where(e);
4686
5295
  }
4687
5296
  return a = a.groupBy(e.bindingKeyExpr), t.db.$with(n).as(a);
@@ -4689,18 +5298,18 @@ var Ft = class {
4689
5298
  buildSubsequentStepCTE(e, t, n) {
4690
5299
  let r = `step_${e.index}`, i = `step_${e.index - 1}`, a = e.cube.sql(t), o = [];
4691
5300
  a.where && o.push(a.where), o.push(...e.filterConditions);
4692
- let s = N`${N.identifier(i)}.step_time`, c = N`${e.timeExpr} > ${s}`;
5301
+ let s = F`${F.identifier(i)}.step_time`, c = F`${e.timeExpr} > ${s}`;
4693
5302
  if (e.timeToConvert) {
4694
5303
  let t = this.databaseAdapter.buildDateAddInterval(s, e.timeToConvert);
4695
- c = N`${c} AND ${e.timeExpr} <= ${t}`;
5304
+ c = F`${c} AND ${e.timeExpr} <= ${t}`;
4696
5305
  }
4697
5306
  o.push(c);
4698
5307
  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`);
5308
+ binding_key: F`${e.bindingKeyExpr}`.as("binding_key"),
5309
+ step_time: F`MIN(${e.timeExpr})`.as("step_time")
5310
+ }).from(a.from).innerJoin(n, F`${e.bindingKeyExpr} = ${F.identifier(i)}.binding_key`);
4702
5311
  if (l = this.addCrossJoinsToQuery(l, e, t, o), o.length > 0) {
4703
- let e = o.length === 1 ? o[0] : L(...o);
5312
+ let e = o.length === 1 ? o[0] : R(...o);
4704
5313
  l = l.where(e);
4705
5314
  }
4706
5315
  return l = l.groupBy(e.bindingKeyExpr), t.db.$with(r).as(l);
@@ -4709,55 +5318,52 @@ var Ft = class {
4709
5318
  if (t.joinedCubes.length === 0) return e;
4710
5319
  for (let i of t.joinedCubes) for (let t of i.joinPath) {
4711
5320
  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);
5321
+ for (let e of a.on) e.as ? o.push(e.as(e.source, e.target)) : o.push(L(e.source, e.target));
5322
+ let s = o.length === 1 ? o[0] : R(...o), c = i.cube.sql(n);
4714
5323
  e = e.leftJoin(c.from, s), c.where && r.push(c.where);
4715
5324
  }
4716
5325
  return e;
4717
5326
  }
4718
5327
  buildFunnelResultsCTE(e, t, n, r) {
4719
5328
  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")
5329
+ binding_key: F`s0.binding_key`,
5330
+ step_0_time: F`s0.step_time`
4730
5331
  };
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`));
5332
+ for (let e = 1; e < t.length; e++) i[`step_${e}_time`] = F`s${F.raw(String(e))}.step_time`;
5333
+ let a = F`${F.identifier("step_0")} s0`;
5334
+ for (let e = 1; e < t.length; e++) a = F`${a}
5335
+ LEFT JOIN ${F.identifier(`step_${e}`)} s${F.raw(String(e))} ON s0.binding_key = s${F.raw(String(e))}.binding_key`;
5336
+ let o = Object.entries(i).map(([e, t]) => F`${t} AS ${F.identifier(e)}`), s = F`SELECT ${F.join(o, F`, `)} FROM ${a}`;
5337
+ return r.db.$with("funnel_joined").as(s);
4733
5338
  }
4734
5339
  buildAggregationCTE(e, t, n, r, i) {
4735
5340
  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`);
5341
+ a.step_0_count = F`COUNT(*)`.as("step_0_count");
5342
+ for (let e = 1; e < n.length; e++) a[`step_${e}_count`] = F`COUNT(${F.identifier(`step_${e}_time`)})`.as(`step_${e}_count`);
4738
5343
  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`));
5344
+ 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`;
5345
+ 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) {
5346
+ let n = this.databaseAdapter.buildPercentile(r, 50);
5347
+ n && (a[`step_${e}_median_seconds`] = F`(SELECT ${n} FROM ${F.identifier("funnel_joined")} WHERE ${t} IS NOT NULL)`.as(`step_${e}_median_seconds`));
5348
+ let i = this.databaseAdapter.buildPercentile(r, 90);
5349
+ i && (a[`step_${e}_p90_seconds`] = F`(SELECT ${i} FROM ${F.identifier("funnel_joined")} WHERE ${t} IS NOT NULL)`.as(`step_${e}_p90_seconds`));
5350
+ }
4745
5351
  }
4746
5352
  let o = i.db.select(a).from(e);
4747
5353
  return i.db.$with("funnel_metrics").as(o);
4748
5354
  }
4749
- }, Lt = class {
5355
+ }, Zt = class {
4750
5356
  filterBuilder;
4751
5357
  dateTimeBuilder;
4752
5358
  databaseAdapter;
4753
5359
  constructor(e) {
4754
- this.databaseAdapter = e, this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder);
5360
+ this.databaseAdapter = e, this.dateTimeBuilder = new Y(e), this.filterBuilder = new jt(e, this.dateTimeBuilder);
4755
5361
  }
4756
5362
  hasFlow(e) {
4757
5363
  return e.flow !== void 0 && e.flow.startingStep !== void 0 && e.flow.eventDimension !== void 0;
4758
5364
  }
4759
5365
  validateConfig(e, t) {
4760
- let n = [], r = [], i = this.databaseAdapter.getEngineType(), a = this.databaseAdapter.supportsLateralJoins();
5366
+ let n = [], r = [], i = this.databaseAdapter.getEngineType(), a = this.databaseAdapter.getCapabilities().supportsLateralSubqueriesInCTE;
4761
5367
  if (i === "sqlite") return n.push("Flow queries are not supported on SQLite. Use PostgreSQL or MySQL for flow analysis."), {
4762
5368
  isValid: !1,
4763
5369
  errors: n,
@@ -4806,8 +5412,8 @@ var Ft = class {
4806
5412
  }
4807
5413
  buildFlowQuery(e, t, n) {
4808
5414
  if (this.databaseAdapter.getEngineType() === "sqlite") throw Error("Flow queries are not supported on SQLite. Use PostgreSQL or MySQL for flow analysis.");
4809
- let r = this.databaseAdapter.supportsLateralJoins(), i = e.joinStrategy ?? "auto", a = i === "lateral" || i === "auto" && r;
4810
- if (i === "lateral" && !r) throw Error("Lateral joins are not supported on this database");
5415
+ let r = this.databaseAdapter.getCapabilities().supportsLateralSubqueriesInCTE, i = e.joinStrategy ?? "auto", a = i === "lateral" || i === "auto" && r;
5416
+ if (i === "lateral" && !r) throw Error("Lateral joins with CTE references are not supported on this database");
4811
5417
  let o = {
4812
5418
  ...e,
4813
5419
  stepsBefore: e.outputMode === "sunburst" ? 0 : e.stepsBefore
@@ -4913,7 +5519,7 @@ var Ft = class {
4913
5519
  let r = this.buildFilterCondition(e, t, n);
4914
5520
  r && i.push(r);
4915
5521
  }
4916
- return i.length === 0 ? null : i.length === 1 ? i[0] : "and" in e ? L(...i) : N`(${N.join(i, N` OR `)})`;
5522
+ return i.length === 0 ? null : i.length === 1 ? i[0] : "and" in e ? R(...i) : F`(${F.join(i, F` OR `)})`;
4917
5523
  }
4918
5524
  if ("type" in e && "filters" in e) {
4919
5525
  let r = e, i = [];
@@ -4921,7 +5527,7 @@ var Ft = class {
4921
5527
  let r = this.buildFilterCondition(e, t, n);
4922
5528
  r && i.push(r);
4923
5529
  }
4924
- return i.length === 0 ? null : i.length === 1 ? i[0] : r.type === "and" ? L(...i) : N`(${N.join(i, N` OR `)})`;
5530
+ return i.length === 0 ? null : i.length === 1 ? i[0] : r.type === "and" ? R(...i) : F`(${F.join(i, F` OR `)})`;
4925
5531
  }
4926
5532
  let r = e, [, i] = r.member.split("."), a = t.dimensions?.[i];
4927
5533
  if (!a) return null;
@@ -4932,13 +5538,13 @@ var Ft = class {
4932
5538
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o, startingStepFilters: s } = t, c = [];
4933
5539
  r.where && c.push(r.where), c.push(...s);
4934
5540
  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")
5541
+ binding_key: F`${i}`.as("binding_key"),
5542
+ start_time: F`MIN(${a})`.as("start_time"),
5543
+ event_type: F`${o}`.as("event_type"),
5544
+ event_path: F`${o}`.as("event_path")
4939
5545
  }).from(r.from);
4940
5546
  if (c.length > 0) {
4941
- let e = c.length === 1 ? c[0] : L(...c);
5547
+ let e = c.length === 1 ? c[0] : R(...c);
4942
5548
  l = l.where(e);
4943
5549
  }
4944
5550
  return l = l.groupBy(i, o), e.entityLimit && (l = l.limit(e.entityLimit)), n.db.$with("starting_entities").as(l);
@@ -4947,18 +5553,18 @@ var Ft = class {
4947
5553
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
4948
5554
  for (let t = 1; t <= e.stepsBefore; t++) {
4949
5555
  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"),
5556
+ r.where && d.push(r.where), d.push(F`${i} = ${F.identifier(e)}.binding_key`, F`${a} < ${F.identifier(e)}.${F.identifier(l)}`);
5557
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${o} || ${"→"} || ${F.identifier(e)}.event_path` : F`${o}`, m = n.db.select({
5558
+ binding_key: F`${i}`.as("binding_key"),
5559
+ step_time: F`${a}`.as("step_time"),
5560
+ event_type: F`${o}`.as("event_type"),
4955
5561
  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")));
5562
+ }).from(r.from).where(f).orderBy(F`${a} DESC`).limit(1), h = n.db.$with(u).as(n.db.select({
5563
+ binding_key: F`e.binding_key`.as("binding_key"),
5564
+ step_time: F`e.step_time`.as("step_time"),
5565
+ event_type: F`e.event_type`.as("event_type"),
5566
+ event_path: F`e.event_path`.as("event_path")
5567
+ }).from(F`${F.identifier(e)}`).crossJoinLateral(m.as("e")));
4962
5568
  s.push(h);
4963
5569
  }
4964
5570
  return s;
@@ -4967,18 +5573,18 @@ var Ft = class {
4967
5573
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
4968
5574
  for (let t = 1; t <= e.stepsAfter; t++) {
4969
5575
  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"),
5576
+ r.where && d.push(r.where), d.push(F`${i} = ${F.identifier(e)}.binding_key`, F`${a} > ${F.identifier(e)}.${F.identifier(l)}`);
5577
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${F.identifier(e)}.event_path || ${"→"} || ${o}` : F`${o}`, m = n.db.select({
5578
+ binding_key: F`${i}`.as("binding_key"),
5579
+ step_time: F`${a}`.as("step_time"),
5580
+ event_type: F`${o}`.as("event_type"),
4975
5581
  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")));
5582
+ }).from(r.from).where(f).orderBy(F`${a} ASC`).limit(1), h = n.db.$with(u).as(n.db.select({
5583
+ binding_key: F`e.binding_key`.as("binding_key"),
5584
+ step_time: F`e.step_time`.as("step_time"),
5585
+ event_type: F`e.event_type`.as("event_type"),
5586
+ event_path: F`e.event_path`.as("event_path")
5587
+ }).from(F`${F.identifier(e)}`).crossJoinLateral(m.as("e")));
4982
5588
  s.push(h);
4983
5589
  }
4984
5590
  return s;
@@ -4987,19 +5593,19 @@ var Ft = class {
4987
5593
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
4988
5594
  for (let t = 1; t <= e.stepsBefore; t++) {
4989
5595
  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"),
5596
+ r.where && d.push(r.where), d.push(F`${a} < ${F.identifier(e)}.${F.identifier(l)}`);
5597
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${o} || ${"→"} || ${F.identifier(e)}.event_path` : F`${o}`, m = n.db.select({
5598
+ binding_key: F`${i}`.as("binding_key"),
5599
+ step_time: F`${a}`.as("step_time"),
5600
+ event_type: F`${o}`.as("event_type"),
4995
5601
  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`);
5602
+ rn: F`ROW_NUMBER() OVER (PARTITION BY ${i} ORDER BY ${a} DESC)`.as("rn")
5603
+ }).from(r.from).innerJoin(F`${F.identifier(e)}`, F`${i} = ${F.identifier(e)}.binding_key`).where(f), h = n.db.select({
5604
+ binding_key: F`binding_key`.as("binding_key"),
5605
+ step_time: F`step_time`.as("step_time"),
5606
+ event_type: F`event_type`.as("event_type"),
5607
+ event_path: F`event_path`.as("event_path")
5608
+ }).from(m.as("ranked")).where(F`rn = 1`);
5003
5609
  s.push(n.db.$with(u).as(h));
5004
5610
  }
5005
5611
  return s;
@@ -5008,19 +5614,19 @@ var Ft = class {
5008
5614
  let { cubeBase: r, bindingKeyExpr: i, timeExpr: a, eventExpr: o } = t, s = [], c = e.outputMode === "sunburst";
5009
5615
  for (let t = 1; t <= e.stepsAfter; t++) {
5010
5616
  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"),
5617
+ r.where && d.push(r.where), d.push(F`${a} > ${F.identifier(e)}.${F.identifier(l)}`);
5618
+ let f = d.length === 1 ? d[0] : R(...d), p = c ? F`${F.identifier(e)}.event_path || ${"→"} || ${o}` : F`${o}`, m = n.db.select({
5619
+ binding_key: F`${i}`.as("binding_key"),
5620
+ step_time: F`${a}`.as("step_time"),
5621
+ event_type: F`${o}`.as("event_type"),
5016
5622
  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`);
5623
+ rn: F`ROW_NUMBER() OVER (PARTITION BY ${i} ORDER BY ${a} ASC)`.as("rn")
5624
+ }).from(r.from).innerJoin(F`${F.identifier(e)}`, F`${i} = ${F.identifier(e)}.binding_key`).where(f), h = n.db.select({
5625
+ binding_key: F`binding_key`.as("binding_key"),
5626
+ step_time: F`step_time`.as("step_time"),
5627
+ event_type: F`event_type`.as("event_type"),
5628
+ event_path: F`event_path`.as("event_path")
5629
+ }).from(m.as("ranked")).where(F`rn = 1`);
5024
5630
  s.push(n.db.$with(u).as(h));
5025
5631
  }
5026
5632
  return s;
@@ -5029,27 +5635,27 @@ var Ft = class {
5029
5635
  let n = [], r = e.outputMode === "sunburst";
5030
5636
  for (let t = e.stepsBefore; t >= 1; t--) {
5031
5637
  let e = -t, i = `before_step_${t}`;
5032
- r ? n.push(N`
5638
+ r ? n.push(F`
5033
5639
  SELECT
5034
- ${N.raw(`'before_${t}_'`)} || event_path AS node_id,
5640
+ ${F.raw(`'before_${t}_'`)} || event_path AS node_id,
5035
5641
  event_type AS name,
5036
- ${N.raw(String(e))} AS layer,
5642
+ ${F.raw(String(e))} AS layer,
5037
5643
  COUNT(*) AS value
5038
- FROM ${N.identifier(i)}
5644
+ FROM ${F.identifier(i)}
5039
5645
  GROUP BY event_path, event_type
5040
- `) : n.push(N`
5646
+ `) : n.push(F`
5041
5647
  SELECT
5042
- ${N.raw(`'before_${t}_'`)} || event_type AS node_id,
5648
+ ${F.raw(`'before_${t}_'`)} || event_type AS node_id,
5043
5649
  event_type AS name,
5044
- ${N.raw(String(e))} AS layer,
5650
+ ${F.raw(String(e))} AS layer,
5045
5651
  COUNT(*) AS value
5046
- FROM ${N.identifier(i)}
5652
+ FROM ${F.identifier(i)}
5047
5653
  GROUP BY event_type
5048
5654
  `);
5049
5655
  }
5050
- n.push(N`
5656
+ n.push(F`
5051
5657
  SELECT
5052
- ${N.raw("'start_'")} || event_type AS node_id,
5658
+ ${F.raw("'start_'")} || event_type AS node_id,
5053
5659
  event_type AS name,
5054
5660
  0 AS layer,
5055
5661
  COUNT(*) AS value
@@ -5058,82 +5664,82 @@ var Ft = class {
5058
5664
  `);
5059
5665
  for (let t = 1; t <= e.stepsAfter; t++) {
5060
5666
  let e = t, i = `after_step_${t}`;
5061
- r ? n.push(N`
5667
+ r ? n.push(F`
5062
5668
  SELECT
5063
- ${N.raw(`'after_${t}_'`)} || event_path AS node_id,
5669
+ ${F.raw(`'after_${t}_'`)} || event_path AS node_id,
5064
5670
  event_type AS name,
5065
- ${N.raw(String(e))} AS layer,
5671
+ ${F.raw(String(e))} AS layer,
5066
5672
  COUNT(*) AS value
5067
- FROM ${N.identifier(i)}
5673
+ FROM ${F.identifier(i)}
5068
5674
  GROUP BY event_path, event_type
5069
- `) : n.push(N`
5675
+ `) : n.push(F`
5070
5676
  SELECT
5071
- ${N.raw(`'after_${t}_'`)} || event_type AS node_id,
5677
+ ${F.raw(`'after_${t}_'`)} || event_type AS node_id,
5072
5678
  event_type AS name,
5073
- ${N.raw(String(e))} AS layer,
5679
+ ${F.raw(String(e))} AS layer,
5074
5680
  COUNT(*) AS value
5075
- FROM ${N.identifier(i)}
5681
+ FROM ${F.identifier(i)}
5076
5682
  GROUP BY event_type
5077
5683
  `);
5078
5684
  }
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`);
5685
+ let i = F.join(n, F` UNION ALL `), a = t.db.select({
5686
+ node_id: F`node_id`.as("node_id"),
5687
+ name: F`name`.as("name"),
5688
+ layer: F`layer`.as("layer"),
5689
+ value: F`value`.as("value")
5690
+ }).from(F`(${i}) AS nodes_union`);
5085
5691
  return t.db.$with("nodes_agg").as(a);
5086
5692
  }
5087
5693
  buildLinksAggregationCTE(e, t) {
5088
5694
  let n = [], r = e.outputMode === "sunburst";
5089
5695
  for (let t = e.stepsBefore; t >= 2; t--) {
5090
5696
  let e = `before_step_${t}`, i = `before_step_${t - 1}`;
5091
- r ? n.push(N`
5697
+ r ? n.push(F`
5092
5698
  SELECT
5093
- ${N.raw(`'before_${t}_'`)} || f.event_path AS source_id,
5094
- ${N.raw(`'before_${t - 1}_'`)} || t.event_path AS target_id,
5699
+ ${F.raw(`'before_${t}_'`)} || f.event_path AS source_id,
5700
+ ${F.raw(`'before_${t - 1}_'`)} || t.event_path AS target_id,
5095
5701
  COUNT(*) AS value
5096
- FROM ${N.identifier(e)} f
5097
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5702
+ FROM ${F.identifier(e)} f
5703
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5098
5704
  GROUP BY f.event_path, t.event_path
5099
- `) : n.push(N`
5705
+ `) : n.push(F`
5100
5706
  SELECT
5101
- ${N.raw(`'before_${t}_'`)} || f.event_type AS source_id,
5102
- ${N.raw(`'before_${t - 1}_'`)} || t.event_type AS target_id,
5707
+ ${F.raw(`'before_${t}_'`)} || f.event_type AS source_id,
5708
+ ${F.raw(`'before_${t - 1}_'`)} || t.event_type AS target_id,
5103
5709
  COUNT(*) AS value
5104
- FROM ${N.identifier(e)} f
5105
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5710
+ FROM ${F.identifier(e)} f
5711
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5106
5712
  GROUP BY f.event_type, t.event_type
5107
5713
  `);
5108
5714
  }
5109
- e.stepsBefore >= 1 && (r ? n.push(N`
5715
+ e.stepsBefore >= 1 && (r ? n.push(F`
5110
5716
  SELECT
5111
- ${N.raw("'before_1_'")} || b.event_path AS source_id,
5112
- ${N.raw("'start_'")} || s.event_type AS target_id,
5717
+ ${F.raw("'before_1_'")} || b.event_path AS source_id,
5718
+ ${F.raw("'start_'")} || s.event_type AS target_id,
5113
5719
  COUNT(*) AS value
5114
5720
  FROM before_step_1 b
5115
5721
  INNER JOIN starting_entities s ON b.binding_key = s.binding_key
5116
5722
  GROUP BY b.event_path, s.event_type
5117
- `) : n.push(N`
5723
+ `) : n.push(F`
5118
5724
  SELECT
5119
- ${N.raw("'before_1_'")} || b.event_type AS source_id,
5120
- ${N.raw("'start_'")} || s.event_type AS target_id,
5725
+ ${F.raw("'before_1_'")} || b.event_type AS source_id,
5726
+ ${F.raw("'start_'")} || s.event_type AS target_id,
5121
5727
  COUNT(*) AS value
5122
5728
  FROM before_step_1 b
5123
5729
  INNER JOIN starting_entities s ON b.binding_key = s.binding_key
5124
5730
  GROUP BY b.event_type, s.event_type
5125
- `)), e.stepsAfter >= 1 && (r ? n.push(N`
5731
+ `)), e.stepsAfter >= 1 && (r ? n.push(F`
5126
5732
  SELECT
5127
- ${N.raw("'start_'")} || s.event_type AS source_id,
5128
- ${N.raw("'after_1_'")} || a.event_path AS target_id,
5733
+ ${F.raw("'start_'")} || s.event_type AS source_id,
5734
+ ${F.raw("'after_1_'")} || a.event_path AS target_id,
5129
5735
  COUNT(*) AS value
5130
5736
  FROM starting_entities s
5131
5737
  INNER JOIN after_step_1 a ON s.binding_key = a.binding_key
5132
5738
  GROUP BY s.event_type, a.event_path
5133
- `) : n.push(N`
5739
+ `) : n.push(F`
5134
5740
  SELECT
5135
- ${N.raw("'start_'")} || s.event_type AS source_id,
5136
- ${N.raw("'after_1_'")} || a.event_type AS target_id,
5741
+ ${F.raw("'start_'")} || s.event_type AS source_id,
5742
+ ${F.raw("'after_1_'")} || a.event_type AS target_id,
5137
5743
  COUNT(*) AS value
5138
5744
  FROM starting_entities s
5139
5745
  INNER JOIN after_step_1 a ON s.binding_key = a.binding_key
@@ -5141,41 +5747,41 @@ var Ft = class {
5141
5747
  `));
5142
5748
  for (let t = 1; t < e.stepsAfter; t++) {
5143
5749
  let e = `after_step_${t}`, i = `after_step_${t + 1}`;
5144
- r ? n.push(N`
5750
+ r ? n.push(F`
5145
5751
  SELECT
5146
- ${N.raw(`'after_${t}_'`)} || f.event_path AS source_id,
5147
- ${N.raw(`'after_${t + 1}_'`)} || t.event_path AS target_id,
5752
+ ${F.raw(`'after_${t}_'`)} || f.event_path AS source_id,
5753
+ ${F.raw(`'after_${t + 1}_'`)} || t.event_path AS target_id,
5148
5754
  COUNT(*) AS value
5149
- FROM ${N.identifier(e)} f
5150
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5755
+ FROM ${F.identifier(e)} f
5756
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5151
5757
  GROUP BY f.event_path, t.event_path
5152
- `) : n.push(N`
5758
+ `) : n.push(F`
5153
5759
  SELECT
5154
- ${N.raw(`'after_${t}_'`)} || f.event_type AS source_id,
5155
- ${N.raw(`'after_${t + 1}_'`)} || t.event_type AS target_id,
5760
+ ${F.raw(`'after_${t}_'`)} || f.event_type AS source_id,
5761
+ ${F.raw(`'after_${t + 1}_'`)} || t.event_type AS target_id,
5156
5762
  COUNT(*) AS value
5157
- FROM ${N.identifier(e)} f
5158
- INNER JOIN ${N.identifier(i)} t ON f.binding_key = t.binding_key
5763
+ FROM ${F.identifier(e)} f
5764
+ INNER JOIN ${F.identifier(i)} t ON f.binding_key = t.binding_key
5159
5765
  GROUP BY f.event_type, t.event_type
5160
5766
  `);
5161
5767
  }
5162
5768
  if (n.length === 0) {
5163
5769
  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`);
5770
+ source_id: F`NULL`.as("source_id"),
5771
+ target_id: F`NULL`.as("target_id"),
5772
+ value: F`0`.as("value")
5773
+ }).from(F`(SELECT 1) AS empty`).where(F`1 = 0`);
5168
5774
  return t.db.$with("links_agg").as(e);
5169
5775
  }
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`);
5776
+ let i = F.join(n, F` UNION ALL `), a = t.db.select({
5777
+ source_id: F`source_id`.as("source_id"),
5778
+ target_id: F`target_id`.as("target_id"),
5779
+ value: F`value`.as("value")
5780
+ }).from(F`(${i}) AS links_union`);
5175
5781
  return t.db.$with("links_agg").as(a);
5176
5782
  }
5177
5783
  buildFinalResultCTE(e) {
5178
- let t = N`
5784
+ let t = F`
5179
5785
  SELECT
5180
5786
  'node' AS record_type,
5181
5787
  node_id AS id,
@@ -5197,44 +5803,44 @@ var Ft = class {
5197
5803
  FROM links_agg
5198
5804
  WHERE source_id IS NOT NULL
5199
5805
  `, 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`);
5806
+ record_type: F`record_type`.as("record_type"),
5807
+ id: F`id`.as("id"),
5808
+ name: F`name`.as("name"),
5809
+ layer: F`layer`.as("layer"),
5810
+ value: F`value`.as("value"),
5811
+ source_id: F`source_id`.as("source_id"),
5812
+ target_id: F`target_id`.as("target_id")
5813
+ }).from(F`(${t}) AS final_union`);
5208
5814
  return e.db.$with("final_result").as(n);
5209
5815
  }
5210
5816
  };
5211
5817
  //#endregion
5212
5818
  //#region src/server/types/retention.ts
5213
- function Rt(e) {
5819
+ function Qt(e) {
5214
5820
  return Array.isArray(e);
5215
5821
  }
5216
- function zt(e) {
5822
+ function $t(e) {
5217
5823
  return typeof e == "object" && !!e && "cube" in e;
5218
5824
  }
5219
- function Bt(e) {
5220
- if (zt(e)) return e.cube;
5825
+ function en(e) {
5826
+ if ($t(e)) return e.cube;
5221
5827
  let t = e.indexOf(".");
5222
5828
  if (t === -1) throw Error(`Invalid time dimension format: ${e}. Expected 'CubeName.dimensionName'`);
5223
5829
  return e.substring(0, t);
5224
5830
  }
5225
- function Vt(e) {
5226
- if (zt(e)) return e.dimension;
5831
+ function tn(e) {
5832
+ if ($t(e)) return e.dimension;
5227
5833
  let t = e.indexOf(".");
5228
5834
  if (t === -1) throw Error(`Invalid time dimension format: ${e}. Expected 'CubeName.dimensionName'`);
5229
5835
  return e.substring(t + 1);
5230
5836
  }
5231
5837
  //#endregion
5232
5838
  //#region src/server/builders/retention-query-builder.ts
5233
- var Ht = class {
5839
+ var nn = class {
5234
5840
  filterBuilder;
5235
5841
  dateTimeBuilder;
5236
5842
  constructor(e) {
5237
- this.databaseAdapter = e, this.dateTimeBuilder = new X(e), this.filterBuilder = new _t(e, this.dateTimeBuilder);
5843
+ this.databaseAdapter = e, this.dateTimeBuilder = new Y(e), this.filterBuilder = new jt(e, this.dateTimeBuilder);
5238
5844
  }
5239
5845
  hasRetention(e) {
5240
5846
  return e.retention !== void 0 && e.retention.timeDimension != null && e.retention.bindingKey != null;
@@ -5242,12 +5848,12 @@ var Ht = class {
5242
5848
  validateConfig(e, t) {
5243
5849
  let n = [];
5244
5850
  try {
5245
- let r = Bt(e.timeDimension), i = Vt(e.timeDimension), a = t.get(r);
5851
+ let r = en(e.timeDimension), i = tn(e.timeDimension), a = t.get(r);
5246
5852
  a ? a.dimensions?.[i] || n.push(`Time dimension not found: ${i} in cube ${r}`) : n.push(`Cube not found: ${r}`);
5247
5853
  } catch {
5248
5854
  n.push(`Invalid time dimension format: ${e.timeDimension}`);
5249
5855
  }
5250
- if (Rt(e.bindingKey)) for (let r of e.bindingKey) {
5856
+ if (Qt(e.bindingKey)) for (let r of e.bindingKey) {
5251
5857
  let e = t.get(r.cube);
5252
5858
  if (!e) n.push(`Binding key mapping cube not found: ${r.cube}`);
5253
5859
  else {
@@ -5299,23 +5905,23 @@ var Ht = class {
5299
5905
  }
5300
5906
  buildRetentionQuery(e, t, n) {
5301
5907
  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")
5908
+ period: F`rc.period_number`.as("period"),
5909
+ cohort_size: F`cs.cohort_size`.as("cohort_size"),
5910
+ retained_users: F`rc.retained_users`.as("retained_users"),
5911
+ retention_rate: F`CAST(rc.retained_users AS NUMERIC) / NULLIF(cs.cohort_size, 0)`.as("retention_rate")
5306
5912
  };
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`);
5913
+ for (let e = 0; e < r.breakdowns.length; e++) u[`breakdown_${e}`] = F.raw(`rc.breakdown_${e}`).as(`breakdown_${e}`);
5914
+ let d = n.db.with(a, o, s, c).select(u).from(F`retention_counts rc`);
5309
5915
  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`);
5916
+ 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 `);
5917
+ d = d.innerJoin(F`cohort_sizes cs`, t);
5918
+ } else d = d.innerJoin(F`cohort_sizes cs`, F`1 = 1`);
5313
5919
  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;
5920
+ for (let e = 0; e < r.breakdowns.length; e++) f.push(F.raw(`rc.breakdown_${e}`));
5921
+ return f.push(F`rc.period_number`), d = d.orderBy(...f), d;
5316
5922
  }
5317
5923
  transformResult(e, t) {
5318
- let n = t.breakdownDimensions || [], r = n.length > 0;
5924
+ let n = t.breakdownDimensions || [], r = Math.min(n.length, 100), i = r > 0;
5319
5925
  return e.map((e) => {
5320
5926
  let t = {
5321
5927
  period: Number(e.period),
@@ -5323,19 +5929,19 @@ var Ht = class {
5323
5929
  retainedUsers: Number(e.retained_users),
5324
5930
  retentionRate: e.retention_rate === null ? 0 : Number(e.retention_rate)
5325
5931
  };
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);
5932
+ if (i) {
5933
+ let i = {};
5934
+ for (let t = 0; t < r; t++) {
5935
+ let r = n[t], a = e[`breakdown_${t}`];
5936
+ i[r] = a === void 0 ? null : String(a);
5331
5937
  }
5332
- t.breakdownValues = r;
5938
+ t.breakdownValues = i;
5333
5939
  }
5334
5940
  return t;
5335
5941
  });
5336
5942
  }
5337
5943
  resolveConfig(e, t, n) {
5338
- let r = Bt(e.timeDimension), i = Vt(e.timeDimension), a = t.get(r);
5944
+ let r = en(e.timeDimension), i = tn(e.timeDimension), a = t.get(r);
5339
5945
  if (!a) throw Error(`Cube not found: ${r}`);
5340
5946
  let o = a.dimensions?.[i];
5341
5947
  if (!o) throw Error(`Time dimension not found: ${i}`);
@@ -5360,7 +5966,7 @@ var Ht = class {
5360
5966
  };
5361
5967
  }
5362
5968
  resolveBindingKey(e, t, n, r) {
5363
- if (Rt(e)) {
5969
+ if (Qt(e)) {
5364
5970
  let i = e.find((e) => e.cube === t.name);
5365
5971
  if (!i) throw Error(`No binding key mapping found for cube: ${t.name}`);
5366
5972
  let a = this.extractDimensionName(i.dimension), o = n.get(i.cube);
@@ -5391,7 +5997,7 @@ var Ht = class {
5391
5997
  let i = this.buildSingleFilterCondition(e, t, n, r);
5392
5998
  i && a.push(i);
5393
5999
  }
5394
- return a.length === 0 ? null : a.length === 1 ? a[0] : o ? L(...a) : N`(${N.join(a, N` OR `)})`;
6000
+ return a.length === 0 ? null : a.length === 1 ? a[0] : o ? R(...a) : F`(${F.join(a, F` OR `)})`;
5395
6001
  }
5396
6002
  let i = e, [a, o] = i.member.split("."), s = n.get(a);
5397
6003
  if (!s) return null;
@@ -5407,16 +6013,16 @@ var Ht = class {
5407
6013
  i.push(n);
5408
6014
  }
5409
6015
  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")
6016
+ binding_key: F`${t.bindingKeyExpr}`.as("binding_key"),
6017
+ cohort_entry: F`MIN(${a})`.as("cohort_entry")
5412
6018
  };
5413
6019
  for (let e = 0; e < t.breakdowns.length; e++) {
5414
6020
  let { expr: n } = t.breakdowns[e];
5415
- o[`breakdown_${e}`] = N`MIN(${n})`.as(`breakdown_${e}`);
6021
+ o[`breakdown_${e}`] = F`MIN(${n})`.as(`breakdown_${e}`);
5416
6022
  }
5417
6023
  let s = n.db.select(o).from(r.from);
5418
6024
  if (i.length > 0) {
5419
- let e = i.length === 1 ? i[0] : L(...i);
6025
+ let e = i.length === 1 ? i[0] : R(...i);
5420
6026
  s = s.where(e);
5421
6027
  }
5422
6028
  let c = [t.bindingKeyExpr];
@@ -5428,36 +6034,36 @@ var Ht = class {
5428
6034
  return n.db.$with("cohort_base").as(s);
5429
6035
  }
5430
6036
  buildDateRangeCondition(e, t) {
5431
- return N`${e} >= ${t.start}::date AND ${e} < (${t.end}::date + interval '1 day')`;
6037
+ return F`${e} >= ${t.start}::date AND ${e} < (${t.end}::date + interval '1 day')`;
5432
6038
  }
5433
6039
  buildDateRangeHavingCondition(e, t) {
5434
- return N`MIN(${e}) >= ${t.start}::date AND MIN(${e}) < (${t.end}::date + interval '1 day')`;
6040
+ return F`MIN(${e}) >= ${t.start}::date AND MIN(${e}) < (${t.end}::date + interval '1 day')`;
5435
6041
  }
5436
6042
  buildActivityPeriodsCTE(e, t, n) {
5437
6043
  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"),
6044
+ r.where && i.push(r.where), i.push(...t.activityFilterConditions), i.push(F`${t.timeExpr} >= cohort_base.cohort_entry`);
6045
+ let a = this.databaseAdapter.buildTimeDimension(e.granularity, t.timeExpr), o = this.buildPeriodNumberExpression(F`cohort_base.cohort_entry`, a, e.granularity), s = {
6046
+ binding_key: F`cohort_base.binding_key`.as("binding_key"),
5441
6047
  period_number: o.as("period_number")
5442
6048
  };
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`);
6049
+ for (let e = 0; e < t.breakdowns.length; e++) s[`breakdown_${e}`] = F.raw(`cohort_base.breakdown_${e}`).as(`breakdown_${e}`);
6050
+ let c = n.db.select(s).from(r.from).innerJoin(F`cohort_base`, F`${t.bindingKeyExpr} = cohort_base.binding_key`);
5445
6051
  if (i.length > 0) {
5446
- let e = i.length === 1 ? i[0] : L(...i);
6052
+ let e = i.length === 1 ? i[0] : R(...i);
5447
6053
  c = c.where(e);
5448
6054
  }
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}`));
6055
+ let l = [F`cohort_base.binding_key`, o];
6056
+ for (let e = 0; e < t.breakdowns.length; e++) l.push(F.raw(`cohort_base.breakdown_${e}`));
5451
6057
  return c = c.groupBy(...l), n.db.$with("activity_periods").as(c);
5452
6058
  }
5453
6059
  buildCohortSizesCTE(e, t, n) {
5454
6060
  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);
6061
+ let e = { cohort_size: F`COUNT(*)`.as("cohort_size") }, r = [];
6062
+ for (let t = 0; t < n; t++) e[`breakdown_${t}`] = F.raw(`breakdown_${t}`).as(`breakdown_${t}`), r.push(F.raw(`breakdown_${t}`));
6063
+ let i = t.db.select(e).from(F`cohort_base`).groupBy(...r);
5458
6064
  return t.db.$with("cohort_sizes").as(i);
5459
6065
  }
5460
- let r = t.db.select({ cohort_size: N`COUNT(*)`.as("cohort_size") }).from(N`cohort_base`);
6066
+ let r = t.db.select({ cohort_size: F`COUNT(*)`.as("cohort_size") }).from(F`cohort_base`);
5461
6067
  return t.db.$with("cohort_sizes").as(r);
5462
6068
  }
5463
6069
  buildRetentionCountsCTE(e, t, n) {
@@ -5465,31 +6071,32 @@ var Ht = class {
5465
6071
  if (e.retentionType === "rolling") r = this.buildRollingRetentionCountsQuery(e, t, n);
5466
6072
  else {
5467
6073
  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);
6074
+ period_number: F`period_number`.as("period_number"),
6075
+ retained_users: F`COUNT(DISTINCT binding_key)`.as("retained_users")
6076
+ }, a = [F`period_number`];
6077
+ for (let e = 0; e < n; e++) i[`breakdown_${e}`] = F.raw(`breakdown_${e}`).as(`breakdown_${e}`), a.push(F.raw(`breakdown_${e}`));
6078
+ let o = Math.min(e.periods, 52);
6079
+ r = t.db.select(i).from(F`activity_periods`).where(F`period_number >= 0 AND period_number <= ${o}`).groupBy(...a);
5473
6080
  }
5474
6081
  return t.db.$with("retention_counts").as(r);
5475
6082
  }
5476
6083
  buildRollingRetentionCountsQuery(e, t, n) {
5477
6084
  let r = [];
5478
6085
  for (let e = 0; e < n; e++) r.push(`breakdown_${e}`);
5479
- let i = r.length > 0 ? `, ${r.join(", ")}` : "", a = N`(
6086
+ let i = r.length > 0 ? `, ${r.join(", ")}` : "", a = F`(
5480
6087
  SELECT
5481
6088
  binding_key,
5482
- ${N.raw(r.map((e) => `${e}`).join(", ") + (r.length > 0 ? "," : ""))}
6089
+ ${F.raw(r.map((e) => `${e}`).join(", ") + (r.length > 0 ? "," : ""))}
5483
6090
  MAX(period_number) as max_period
5484
6091
  FROM activity_periods
5485
6092
  WHERE period_number >= 0 AND period_number <= ${e.periods}
5486
- GROUP BY binding_key${N.raw(i)}
6093
+ GROUP BY binding_key${F.raw(i)}
5487
6094
  )`, 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);
6095
+ period_number: F`p.period_number`.as("period_number"),
6096
+ retained_users: F`COUNT(DISTINCT CASE WHEN ump.max_period >= p.period_number THEN ump.binding_key END)`.as("retained_users")
6097
+ }, c = [F`p.period_number`];
6098
+ 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}`));
6099
+ return t.db.select(s).from(F`${a} ump`).innerJoin(o, F`TRUE`).groupBy(...c);
5493
6100
  }
5494
6101
  buildPeriodNumberExpression(e, t, n) {
5495
6102
  return this.databaseAdapter.buildDateDiffPeriods(e, t, n);
@@ -5498,7 +6105,7 @@ var Ht = class {
5498
6105
  let t = e.split(".");
5499
6106
  return t.length > 1 ? t[1] : t[0];
5500
6107
  }
5501
- }, Ut = class {
6108
+ }, rn = class {
5502
6109
  constructor(e) {
5503
6110
  this.queryPlanner = e;
5504
6111
  }
@@ -5515,7 +6122,7 @@ var Ht = class {
5515
6122
  let n = e.get(t);
5516
6123
  n && h.set(t, n);
5517
6124
  }
5518
- let g = Q.hasPostAggregationWindows(t.measures ?? [], h), _ = [...s.filter((e) => !e.pathFound && e.error).map((e) => e.error), ...u.map((e) => e.message)];
6125
+ let g = Z.hasPostAggregationWindows(t.measures ?? [], h), _ = [...s.filter((e) => !e.pathFound && e.error).map((e) => e.error), ...u.map((e) => e.message)];
5519
6126
  return {
5520
6127
  plan: p,
5521
6128
  analysis: {
@@ -5933,7 +6540,7 @@ var Ht = class {
5933
6540
  timeDimensions: []
5934
6541
  };
5935
6542
  }
5936
- }, Wt = class {
6543
+ }, an = class {
5937
6544
  name = "identity";
5938
6545
  optimise(e) {
5939
6546
  return e;
@@ -5941,7 +6548,7 @@ var Ht = class {
5941
6548
  };
5942
6549
  //#endregion
5943
6550
  //#region src/server/physical-plan/processors/cte-processor.ts
5944
- function Gt(e, t, n, r) {
6551
+ function on(e, t, n, r) {
5945
6552
  let i = /* @__PURE__ */ new Map();
5946
6553
  if (e.preAggregationCTEs && e.preAggregationCTEs.length > 0) {
5947
6554
  for (let t of e.preAggregationCTEs) if (t.propagatingFilters && t.propagatingFilters.length > 0) for (let e of t.propagatingFilters) {
@@ -5951,7 +6558,7 @@ function Gt(e, t, n, r) {
5951
6558
  i.set(t, s);
5952
6559
  }
5953
6560
  let a = i.get(t);
5954
- a && a.length > 0 && (e.preBuiltFilterSQL = a.length === 1 ? a[0] : L(...a));
6561
+ a && a.length > 0 && (e.preBuiltFilterSQL = a.length === 1 ? a[0] : R(...a));
5955
6562
  }
5956
6563
  }
5957
6564
  let a = [], o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
@@ -5971,27 +6578,27 @@ function Gt(e, t, n, r) {
5971
6578
  }
5972
6579
  //#endregion
5973
6580
  //#region src/server/physical-plan/processors/window-processor.ts
5974
- function Kt(e, t, n, r, i, a) {
6581
+ function sn(e, t, n, r, i, a) {
5975
6582
  if (n.measures) for (let o of n.measures) {
5976
6583
  let [s, c] = o.split("."), l = i.get(s);
5977
6584
  if (!l?.measures?.[c]) continue;
5978
6585
  let u = l.measures[c];
5979
- if (!Q.isPostAggregationWindow(u)) continue;
5980
- let d = Q.getWindowBaseMeasure(u, s);
6586
+ if (!Z.isPostAggregationWindow(u)) continue;
6587
+ let d = Z.getWindowBaseMeasure(u, s);
5981
6588
  if (!d) continue;
5982
6589
  let [f, p] = d.split("."), m = i.get(f);
5983
6590
  if (!m?.measures?.[p]) continue;
5984
6591
  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));
6592
+ _ = g ? F`sum(${F`${F.identifier(g.cteAlias)}.${F.identifier(p)}`})` : a.queryBuilder.buildMeasureExpression(h, r, m), e[d] || (e[d] = F`${_}`.as(d));
6593
+ let v = cn(u, _, n, r, l, t, a);
6594
+ v && (e[o] = F`${v}`.as(o));
5988
6595
  }
5989
6596
  }
5990
- function qt(e, t, n, r, i, a, o) {
6597
+ function cn(e, t, n, r, i, a, o) {
5991
6598
  let s = e.windowConfig || {}, c = (e, t) => {
5992
6599
  if (!a.preAggregationCTEs) return null;
5993
6600
  let n = a.preAggregationCTEs.find((t) => t.cube?.name === e);
5994
- return n && n.cteAlias ? N`${N.identifier(n.cteAlias)}.${N.identifier(t)}` : null;
6601
+ return n && n.cteAlias ? F`${F.identifier(n.cteAlias)}.${F.identifier(t)}` : null;
5995
6602
  }, l;
5996
6603
  if (s.orderBy && s.orderBy.length > 0) l = s.orderBy.map((e) => {
5997
6604
  let a = e.field.includes(".") ? e.field.split(".")[1] : e.field;
@@ -6048,16 +6655,16 @@ function qt(e, t, n, r, i, a, o) {
6048
6655
  frame: s.frame
6049
6656
  });
6050
6657
  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`;
6658
+ switch (s.operation || Z.getDefaultWindowOperation(e.type)) {
6659
+ case "difference": return F`${t} - ${d}`;
6660
+ case "ratio": return F`${t} / NULLIF(${d}, 0)`;
6661
+ case "percentChange": return F`((${t} - ${d}) / NULLIF(${d}, 0)) * 100`;
6055
6662
  default: return d;
6056
6663
  }
6057
6664
  }
6058
6665
  //#endregion
6059
6666
  //#region src/server/physical-plan/processors/selection-processor.ts
6060
- function Jt(e, t, n, r, i) {
6667
+ function ln(e, t, n, r, i) {
6061
6668
  let a = { ...i.queryBuilder.buildSelections(e.joinCubes.length > 0 ? r : e.primaryCube, t, n) };
6062
6669
  if (e.preAggregationCTEs) for (let o of e.preAggregationCTEs) {
6063
6670
  let e = o.cube.name;
@@ -6065,32 +6672,32 @@ function Jt(e, t, n, r, i) {
6065
6672
  if (!a[s]) continue;
6066
6673
  let [, c] = s.split("."), l = r.get(e);
6067
6674
  if (!l?.measures?.[c]) continue;
6068
- let u = l.measures[c], d = N`${N.identifier(o.cteAlias)}.${N.identifier(c)}`, f;
6675
+ let u = l.measures[c], d = F`${F.identifier(o.cteAlias)}.${F.identifier(c)}`, f;
6069
6676
  if (u.type === "calculated" && u.calculatedSql) f = i.queryBuilder.buildCTECalculatedMeasure(u, l, o, r, n);
6070
6677
  else {
6071
- let e = o.cteReason === "fanOutPrevention", n = Yt(o, t, r), a = e || n;
6678
+ let e = o.cteReason === "fanOutPrevention", n = un(o, t, r), a = e || n;
6072
6679
  switch (u.type) {
6073
6680
  case "count":
6074
6681
  case "countDistinct":
6075
6682
  case "sum":
6076
- f = a ? V(d) : B(d);
6683
+ f = a ? H(d) : V(d);
6077
6684
  break;
6078
6685
  case "avg":
6079
- f = a ? V(d) : i.databaseAdapter.buildAvg(d);
6686
+ f = a ? H(d) : i.databaseAdapter.buildAvg(d);
6080
6687
  break;
6081
6688
  case "min":
6082
- f = H(d);
6689
+ f = Ae(d);
6083
6690
  break;
6084
6691
  case "max":
6085
- f = V(d);
6692
+ f = H(d);
6086
6693
  break;
6087
6694
  case "number":
6088
- f = V(d);
6695
+ f = H(d);
6089
6696
  break;
6090
- default: f = a ? V(d) : B(d);
6697
+ default: f = a ? H(d) : V(d);
6091
6698
  }
6092
6699
  }
6093
- a[s] = N`${f}`.as(s);
6700
+ a[s] = F`${f}`.as(s);
6094
6701
  }
6095
6702
  for (let t in a) {
6096
6703
  let [n, i] = t.split(".");
@@ -6102,15 +6709,15 @@ function Jt(e, t, n, r, i) {
6102
6709
  let e = s.dimensions[i].sql;
6103
6710
  u = o.joinKeys.find((t) => t.targetColumnObj === e);
6104
6711
  }
6105
- (u || l && s?.dimensions?.[i]) && (a[t] = N`${N.identifier(o.cteAlias)}.${N.identifier(i)}`.as(t));
6712
+ (u || l && s?.dimensions?.[i]) && (a[t] = F`${F.identifier(o.cteAlias)}.${F.identifier(i)}`.as(t));
6106
6713
  }
6107
6714
  }
6108
- return Kt(a, e, t, n, r, i), a;
6715
+ return sn(a, e, t, n, r, i), a;
6109
6716
  }
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));
6717
+ function un(e, t, n) {
6718
+ 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 && dn(e.sourceColumnObj, t, n));
6112
6719
  }
6113
- function Xt(e, t, n) {
6720
+ function dn(e, t, n) {
6114
6721
  if (t.dimensions) for (let r of t.dimensions) {
6115
6722
  let [t, i] = r.split(".");
6116
6723
  if (n.get(t)?.dimensions?.[i]?.sql === e) return !0;
@@ -6124,7 +6731,7 @@ function Xt(e, t, n) {
6124
6731
  }
6125
6732
  //#endregion
6126
6733
  //#region src/server/physical-plan/processors/joins-processor.ts
6127
- function Zt(e, t, n, r, i, a) {
6734
+ function fn(e, t, n, r, i, a) {
6128
6735
  let o = [], s = t.db.select(r).from(n.from);
6129
6736
  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
6737
  case "left":
@@ -6155,10 +6762,10 @@ function Zt(e, t, n, r, i, a) {
6155
6762
  if (t && t.joinKeys.length > 0) {
6156
6763
  let e = [];
6157
6764
  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));
6765
+ let t = F`${F.identifier(c)}.${F.identifier(n.sourceColumn)}`, r = n.targetColumnObj;
6766
+ r && e.push(L(r, t));
6160
6767
  }
6161
- e.length > 0 && (a = L(...e));
6768
+ e.length > 0 && (a = R(...e));
6162
6769
  }
6163
6770
  }
6164
6771
  let l = [];
@@ -6185,19 +6792,19 @@ function Zt(e, t, n, r, i, a) {
6185
6792
  } catch {}
6186
6793
  }
6187
6794
  let d, f, p;
6188
- if (u) d = N`${N.identifier(u)}`, f = a.cteBuilder.buildCTEJoinCondition(n, u, e), p = void 0;
6795
+ if (u) d = F`${F.identifier(u)}`, f = a.cteBuilder.buildCTEJoinCondition(n, u, e), p = void 0;
6189
6796
  else {
6190
6797
  let e = i.downstreamCubeMap.get(n.cube.name), r = n.cube.sql(t);
6191
6798
  if (d = r.from, p = r.where, e && !n.junctionTable) {
6192
6799
  let t = [];
6193
6800
  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));
6801
+ let r = F`${F.identifier(e.cteAlias)}.${F.identifier(n.sourceColumn)}`, i = n.targetColumnObj || F.identifier(n.targetColumn);
6802
+ t.push(L(r, i));
6196
6803
  }
6197
- f = t.length === 1 ? t[0] : L(...t);
6804
+ f = t.length === 1 ? t[0] : R(...t);
6198
6805
  } else f = n.joinCondition;
6199
6806
  }
6200
- let m = n.joinType || "left", h = m !== "inner" && p ? L(f, p) : f;
6807
+ let m = n.joinType || "left", h = m !== "inner" && p ? R(f, p) : f;
6201
6808
  try {
6202
6809
  switch (m) {
6203
6810
  case "left":
@@ -6224,7 +6831,7 @@ function Zt(e, t, n, r, i, a) {
6224
6831
  }
6225
6832
  //#endregion
6226
6833
  //#region src/server/physical-plan/processors/predicates-processor.ts
6227
- function Qt(e, t, n, r, i, a, o, s) {
6834
+ function pn(e, t, n, r, i, a, o, s) {
6228
6835
  let c = [...o.allWhereConditions];
6229
6836
  if (i.where && c.push(i.where), e.joinCubes && e.joinCubes.length > 0) for (let t of e.joinCubes) {
6230
6837
  let e = t.cube.name;
@@ -6236,14 +6843,14 @@ function Qt(e, t, n, r, i, a, o, s) {
6236
6843
  l.length > 0 && c.push(...l);
6237
6844
  let u = o.drizzleQuery;
6238
6845
  if (c.length > 0) {
6239
- let e = c.length === 1 ? c[0] : L(...c);
6846
+ let e = c.length === 1 ? c[0] : R(...c);
6240
6847
  u = u.where(e);
6241
6848
  }
6242
6849
  let d = s.queryBuilder.buildGroupByFields(e.joinCubes.length > 0 ? r : e.primaryCube, t, n, e);
6243
6850
  d.length > 0 && (u = u.groupBy(...d));
6244
6851
  let f = s.queryBuilder.buildHavingConditions(e.joinCubes.length > 0 ? r : e.primaryCube, t, n, e);
6245
6852
  if (f.length > 0) {
6246
- let e = f.length === 1 ? f[0] : L(...f);
6853
+ let e = f.length === 1 ? f[0] : R(...f);
6247
6854
  u = u.having(e);
6248
6855
  }
6249
6856
  let p = s.queryBuilder.buildOrderBy(t);
@@ -6251,14 +6858,14 @@ function Qt(e, t, n, r, i, a, o, s) {
6251
6858
  }
6252
6859
  //#endregion
6253
6860
  //#region src/server/physical-plan/processors/shared.ts
6254
- function $t(e) {
6861
+ function mn(e) {
6255
6862
  let t = /* @__PURE__ */ new Map();
6256
6863
  if (t.set(e.primaryCube.name, e.primaryCube), e.joinCubes) for (let n of e.joinCubes) t.set(n.cube.name, n.cube);
6257
6864
  return t;
6258
6865
  }
6259
6866
  //#endregion
6260
6867
  //#region src/server/physical-plan/drizzle-plan-builder.ts
6261
- var en = class {
6868
+ var hn = class {
6262
6869
  constructor(e, t, n) {
6263
6870
  this.queryBuilder = e, this.cteBuilder = t, this.databaseAdapter = n;
6264
6871
  }
@@ -6398,13 +7005,13 @@ var en = class {
6398
7005
  if (i) return i;
6399
7006
  let a = this.tryBuildKeysDeduplicationQuery(e, t, n, r);
6400
7007
  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);
7008
+ let o = on(e, t, n, r), s = e.primaryCube.sql(n), c = e.joinCubes.length > 0 ? mn(e) : new Map([[e.primaryCube.name, e.primaryCube]]);
7009
+ return pn(e, t, n, c, s, o, fn(e, n, s, ln(e, t, n, c, r), o, r), r);
6403
7010
  }
6404
7011
  tryBuildKeysDeduplicationQuery(e, t, n, r) {
6405
7012
  let i = e.keysDeduplication;
6406
7013
  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);
7014
+ let a = e.joinCubes.length > 0 ? mn(e) : new Map([[e.primaryCube.name, e.primaryCube]]), o = a.get(i.multipliedCubeName);
6408
7015
  if (!o || !this.canExecuteKeysDeduplication(t, o, i.multipliedCubeName)) return null;
6409
7016
  let s = i.primaryKeyDimensions.length > 0 ? i.primaryKeyDimensions : this.getPrimaryKeyDimensions(o);
6410
7017
  if (s.length === 0) return null;
@@ -6413,20 +7020,20 @@ var en = class {
6413
7020
  let [t, r] = e.split("."), i = a.get(t), o = i?.dimensions?.[r];
6414
7021
  if (!i || !o) return null;
6415
7022
  let s = K(o.sql, n);
6416
- u[e] = N`${s}`.as(e), d.push(s);
7023
+ u[e] = F`${s}`.as(e), d.push(s);
6417
7024
  }
6418
7025
  if (t.timeDimensions) for (let e of t.timeDimensions) {
6419
7026
  let [t, i] = e.dimension.split("."), o = a.get(t), s = o?.dimensions?.[i];
6420
7027
  if (!o || !s) return null;
6421
7028
  let c = r.queryBuilder.buildTimeDimensionExpression(s.sql, e.granularity, n);
6422
- u[e.dimension] = N`${c}`.as(e.dimension), d.push(c);
7029
+ u[e.dimension] = F`${c}`.as(e.dimension), d.push(c);
6423
7030
  }
6424
7031
  let f = [];
6425
7032
  for (let e of s) {
6426
7033
  let t = o.dimensions?.[e];
6427
7034
  if (!t) return null;
6428
7035
  let r = K(t.sql, n), i = `__pk__${e}`;
6429
- u[i] = N`${r}`.as(i), d.push(r), f.push(i);
7036
+ u[i] = F`${r}`.as(i), d.push(r), f.push(i);
6430
7037
  }
6431
7038
  let p = i.regularMeasures ?? [], m = new Set(p), h = t.measures.filter((e) => !m.has(e));
6432
7039
  if (p.length > 0) {
@@ -6435,7 +7042,7 @@ var en = class {
6435
7042
  let n = e.get(t);
6436
7043
  if (!n) return null;
6437
7044
  let r = `__reg__${t.replace(".", "__")}`;
6438
- u[r] = N`${n()}`.as(r);
7045
+ u[r] = F`${n()}`.as(r);
6439
7046
  }
6440
7047
  }
6441
7048
  let g = e.primaryCube.sql(n), _ = [];
@@ -6450,58 +7057,58 @@ var en = class {
6450
7057
  let e = t.cube.sql(n);
6451
7058
  v = this.applyJoinByType(v, t.joinType ?? "left", e.from, t.joinCondition), e.where && _.push(e.where);
6452
7059
  }
6453
- _.push(...r.queryBuilder.buildWhereConditions(a, t, n)), _.length > 0 && (v = v.where(_.length === 1 ? _[0] : L(..._))), d.length > 0 && (v = v.groupBy(...d));
7060
+ _.push(...r.queryBuilder.buildWhereConditions(a, t, n)), _.length > 0 && (v = v.where(_.length === 1 ? _[0] : R(..._))), d.length > 0 && (v = v.groupBy(...d));
6454
7061
  let y = n.db.$with(c).as(v), b = o.sql(n), x = {}, ee = [];
6455
7062
  for (let e of s) {
6456
7063
  let t = o.dimensions?.[e];
6457
7064
  if (!t) return null;
6458
7065
  let r = K(t.sql, n);
6459
- x[e] = N`${r}`.as(e), ee.push(r);
7066
+ x[e] = F`${r}`.as(e), ee.push(r);
6460
7067
  }
6461
- let te = /* @__PURE__ */ new Set();
7068
+ let S = /* @__PURE__ */ new Set();
6462
7069
  for (let e of h) {
6463
7070
  let [, t] = e.split(".");
6464
- o.measures?.[t]?.type === "avg" && te.add(t);
7071
+ o.measures?.[t]?.type === "avg" && S.add(t);
6465
7072
  }
6466
- let S = h.filter((e) => {
7073
+ let C = h.filter((e) => {
6467
7074
  let [, t] = e.split(".");
6468
- return !te.has(t);
7075
+ return !S.has(t);
6469
7076
  });
6470
- if (S.length > 0) {
6471
- let e = r.queryBuilder.buildResolvedMeasures(S, new Map([[o.name, o]]), n);
6472
- for (let t of S) {
7077
+ if (C.length > 0) {
7078
+ let e = r.queryBuilder.buildResolvedMeasures(C, new Map([[o.name, o]]), n);
7079
+ for (let t of C) {
6473
7080
  let [, n] = t.split("."), r = e.get(t);
6474
- if (!r) return null;
6475
- x[n] = N`${r()}`.as(n);
7081
+ if (!r || typeof r != "function") return null;
7082
+ x[n] = F`${r()}`.as(n);
6476
7083
  }
6477
7084
  }
6478
7085
  for (let e of h) {
6479
7086
  let [, t] = e.split(".");
6480
- if (!te.has(t)) continue;
7087
+ if (!S.has(t)) continue;
6481
7088
  let r = o.measures?.[t];
6482
7089
  if (!r?.sql) return null;
6483
7090
  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);
7091
+ x[a] = F`sum(${i})`.as(a), x[s] = F`count(${i})`.as(s);
6485
7092
  }
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);
7093
+ let w = n.db.select(x).from(b.from), T = [];
7094
+ 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))), ee.length > 0 && (w = w.groupBy(...ee));
7095
+ let te = n.db.$with(l).as(w), E = {};
7096
+ for (let e of t.dimensions ?? []) E[e] = F`${F.identifier(c)}.${F.identifier(e)}`.as(e);
7097
+ for (let e of t.timeDimensions ?? []) E[e.dimension] = F`${F.identifier(c)}.${F.identifier(e.dimension)}`.as(e.dimension);
6491
7098
  for (let e of h) {
6492
7099
  let [, t] = e.split("."), n = o.measures?.[t];
6493
- T[e] = this.buildKeysOuterAggregation(n?.type ?? "sum", l, t, e);
7100
+ E[e] = this.buildKeysOuterAggregation(n?.type ?? "sum", l, t, e);
6494
7101
  }
6495
7102
  for (let e of p) {
6496
7103
  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);
7104
+ E[e] = this.buildKeysOuterAggregation(r?.type ?? "sum", c, i, e);
6498
7105
  }
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;
7106
+ 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);
7107
+ D = D.leftJoin(F`${F.identifier(l)}`, ne);
7108
+ 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)}`)];
7109
+ k.length > 0 && (D = D.groupBy(...k));
7110
+ let A = r.queryBuilder.buildOrderBy(t, Object.keys(E));
7111
+ return A.length > 0 && (D = D.orderBy(...A)), D = r.queryBuilder.applyLimitAndOffset(D, t), D;
6505
7112
  }
6506
7113
  tryBuildMultiFactMergeQuery(e, t, n, r) {
6507
7114
  let i = e.multiFactMerge;
@@ -6512,37 +7119,37 @@ var en = class {
6512
7119
  });
6513
7120
  if (s) return this.buildMultiFactUnionKeysFallbackQuery(t, n, r, i, l, o);
6514
7121
  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)}`);
7122
+ if (o.length > 0) for (let e of o) f[e] = F`${this.coalesceQualifiedColumn(d, e)}`.as(e);
7123
+ 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);
7124
+ let p = n.db.with(...l).select(f).from(F`${F.identifier(u)}`), m = /* @__PURE__ */ new Map();
7125
+ for (let e of o) m.set(e, F`${F.identifier(u)}.${F.identifier(e)}`);
6519
7126
  for (let e = 1; e < i.groups.length; e++) {
6520
7127
  let t = i.groups[e].alias, n;
6521
- if (o.length === 0) n = N`1 = 1`;
7128
+ if (o.length === 0) n = F`1 = 1`;
6522
7129
  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);
7130
+ let e = o.map((e) => L(m.get(e), F`${F.identifier(t)}.${F.identifier(e)}`));
7131
+ n = e.length === 1 ? e[0] : R(...e);
6525
7132
  }
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)}`})`);
7133
+ 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
7134
  }
6528
7135
  let h = r.queryBuilder.buildOrderBy(t, Object.keys(f));
6529
7136
  return h.length > 0 && (p = p.orderBy(...h)), r.queryBuilder.applyLimitAndOffset(p, t);
6530
7137
  }
6531
7138
  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)}`);
7139
+ 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 = {};
7140
+ for (let e of a) u[e] = F`${F.identifier(o)}.${F.identifier(e)}`.as(e);
7141
+ 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);
7142
+ let d = t.db.with(...i, l).select(u).from(F`${F.identifier(o)}`);
6536
7143
  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);
7144
+ 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);
7145
+ d = d.leftJoin(F`${F.identifier(e.alias)}`, n);
6539
7146
  }
6540
7147
  let f = n.queryBuilder.buildOrderBy(e, Object.keys(u));
6541
7148
  return f.length > 0 && (d = d.orderBy(...f)), n.queryBuilder.applyLimitAndOffset(d, e);
6542
7149
  }
6543
7150
  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`, `);
7151
+ let n = t.map((t) => F`${F.identifier(e)}.${F.identifier(t)} as ${F.identifier(t)}`);
7152
+ return F.join(n, F`, `);
6546
7153
  }
6547
7154
  selectRuntimeMergeStrategy(e, t) {
6548
7155
  return !t || e === "innerJoin" ? "inner" : e === "leftJoin" ? "left" : this.supportsFullOuterJoin() ? "full" : "left";
@@ -6552,9 +7159,9 @@ var en = class {
6552
7159
  return e === "postgres" || e === "duckdb";
6553
7160
  }
6554
7161
  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]})`;
7162
+ if (e.length === 1) return F`${F.identifier(e[0])}.${F.identifier(t)}`;
7163
+ let n = e.map((e) => F`${F.identifier(e)}.${F.identifier(t)}`), r = n[0];
7164
+ for (let e = 1; e < n.length; e++) r = F`coalesce(${r}, ${n[e]})`;
6558
7165
  return r;
6559
7166
  }
6560
7167
  canExecuteKeysDeduplication(e, t, n) {
@@ -6600,10 +7207,10 @@ var en = class {
6600
7207
  }
6601
7208
  buildKeysOuterAggregation(e, t, n, r) {
6602
7209
  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);
7210
+ case "min": return F`min(${F`${F.identifier(t)}.${F.identifier(n)}`})`.as(r);
7211
+ case "max": return F`max(${F`${F.identifier(t)}.${F.identifier(n)}`})`.as(r);
7212
+ 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);
7213
+ default: return F`coalesce(sum(${F`${F.identifier(t)}.${F.identifier(n)}`}), 0)`.as(r);
6607
7214
  }
6608
7215
  }
6609
7216
  applyJoinByType(e, t, n, r) {
@@ -6614,7 +7221,16 @@ var en = class {
6614
7221
  default: return e.leftJoin(n, r);
6615
7222
  }
6616
7223
  }
6617
- }, tn = class {
7224
+ };
7225
+ //#endregion
7226
+ //#region src/server/executor.ts
7227
+ function Q(e, t) {
7228
+ if (process.env.DC_DEBUG) try {
7229
+ let { sql: n, params: r } = t.toSQL();
7230
+ console.log(`\n[DC_DEBUG] ${e}`), console.log(n), r.length > 0 && console.log("params:", r), console.log();
7231
+ } catch {}
7232
+ }
7233
+ var gn = class {
6618
7234
  queryBuilder;
6619
7235
  drizzlePlanBuilder;
6620
7236
  databaseAdapter;
@@ -6627,16 +7243,16 @@ var en = class {
6627
7243
  planOptimiser;
6628
7244
  constructor(e, t) {
6629
7245
  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;
7246
+ this.queryBuilder = new Lt(this.databaseAdapter);
7247
+ let n = new zt(), r = new Bt(this.queryBuilder);
7248
+ this.drizzlePlanBuilder = new hn(this.queryBuilder, r, this.databaseAdapter), this.comparisonQueryBuilder = new Yt(this.databaseAdapter), this.funnelQueryBuilder = new Xt(this.databaseAdapter), this.flowQueryBuilder = new Zt(this.databaseAdapter), this.retentionQueryBuilder = new nn(this.databaseAdapter), this.logicalPlanBuilder = new rn(n), this.planOptimiser = new an(), this.cacheConfig = t;
6633
7249
  }
6634
7250
  async execute(e, t, n, r) {
6635
7251
  try {
6636
7252
  let i = this.resolveQueryMode(t);
6637
7253
  this.validateQueryForMode(i, e, t);
6638
7254
  let a;
6639
- if (this.cacheConfig?.enabled !== !1 && this.cacheConfig?.provider) if (a = ut(t, n, this.cacheConfig), r?.skipCache) this.cacheConfig.onCacheEvent?.({
7255
+ if (this.cacheConfig?.enabled !== !1 && this.cacheConfig?.provider) if (a = Ct(t, n, this.cacheConfig), r?.skipCache) this.cacheConfig.onCacheEvent?.({
6640
7256
  type: "miss",
6641
7257
  key: a,
6642
7258
  durationMs: 0
@@ -6730,13 +7346,15 @@ var en = class {
6730
7346
  db: this.dbExecutor.db,
6731
7347
  schema: this.dbExecutor.schema,
6732
7348
  securityContext: n
6733
- }, o = await this.funnelQueryBuilder.buildFunnelQuery(r, e, a), s = this.funnelQueryBuilder.transformResult(o, r), c = {
7349
+ }, o = this.funnelQueryBuilder.buildFunnelQuery(r, e, a);
7350
+ Q("funnel query", o);
7351
+ let s = await o, c = this.funnelQueryBuilder.transformResult(s, r), l = {
6734
7352
  measures: {},
6735
7353
  dimensions: {},
6736
7354
  segments: {},
6737
7355
  timeDimensions: {}
6738
7356
  };
6739
- return c.funnel = {
7357
+ return l.funnel = {
6740
7358
  config: r,
6741
7359
  steps: r.steps.map((e, t) => ({
6742
7360
  name: e.name,
@@ -6744,8 +7362,8 @@ var en = class {
6744
7362
  timeToConvert: e.timeToConvert
6745
7363
  }))
6746
7364
  }, {
6747
- data: s,
6748
- annotation: c
7365
+ data: c,
7366
+ annotation: l
6749
7367
  };
6750
7368
  }
6751
7369
  async executeFlowQueryWithCache(e, t, n, r) {
@@ -6762,20 +7380,22 @@ var en = class {
6762
7380
  db: this.dbExecutor.db,
6763
7381
  schema: this.dbExecutor.schema,
6764
7382
  securityContext: n
6765
- }, o = await this.flowQueryBuilder.buildFlowQuery(r, e, a), s = this.flowQueryBuilder.transformResult(o), c = {
7383
+ }, o = this.flowQueryBuilder.buildFlowQuery(r, e, a);
7384
+ Q("flow query", o);
7385
+ let s = await o, c = this.flowQueryBuilder.transformResult(s), l = {
6766
7386
  measures: {},
6767
7387
  dimensions: {},
6768
7388
  segments: {},
6769
7389
  timeDimensions: {}
6770
7390
  };
6771
- return c.flow = {
7391
+ return l.flow = {
6772
7392
  config: r,
6773
7393
  startingStep: { name: r.startingStep.name },
6774
7394
  stepsBefore: r.stepsBefore,
6775
7395
  stepsAfter: r.stepsAfter
6776
7396
  }, {
6777
- data: [s],
6778
- annotation: c
7397
+ data: [c],
7398
+ annotation: l
6779
7399
  };
6780
7400
  }
6781
7401
  async executeRetentionQueryWithCache(e, t, n, r) {
@@ -6792,29 +7412,33 @@ var en = class {
6792
7412
  db: this.dbExecutor.db,
6793
7413
  schema: this.dbExecutor.schema,
6794
7414
  securityContext: n
6795
- }, o = await this.retentionQueryBuilder.buildRetentionQuery(r, e, a), s = this.retentionQueryBuilder.transformResult(o, r), c = {
7415
+ }, o = this.retentionQueryBuilder.buildRetentionQuery(r, e, a);
7416
+ Q("retention query", o);
7417
+ let s = await o, c = this.retentionQueryBuilder.transformResult(s, r), l = {
6796
7418
  measures: {},
6797
7419
  dimensions: {},
6798
7420
  segments: {},
6799
7421
  timeDimensions: {}
6800
7422
  };
6801
- return c.retention = {
7423
+ return l.retention = {
6802
7424
  config: r,
6803
7425
  granularity: r.granularity,
6804
7426
  periods: r.periods,
6805
7427
  retentionType: r.retentionType,
6806
7428
  breakdownDimensions: r.breakdownDimensions
6807
7429
  }, {
6808
- data: s,
6809
- annotation: c
7430
+ data: c,
7431
+ annotation: l
6810
7432
  };
6811
7433
  }
6812
7434
  async executeStandardQuery(e, t, n) {
6813
7435
  let r = new q(), i = this.createQueryContext(n, r);
6814
7436
  this.preloadFilterCache(t, r, e, i);
6815
- 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);
7437
+ let { optimisedPlan: a } = this.buildRegularQueryArtifacts(e, t, i), o = this.drizzlePlanBuilder.derivePhysicalPlanContext(a), s = this.drizzlePlanBuilder.build(o, t, i);
7438
+ Q("query", s);
7439
+ let c = this.queryBuilder.collectNumericFields(e, t), l = await this.dbExecutor.execute(s, c);
6816
7440
  return {
6817
- data: Pt(Array.isArray(l) ? l.map((e) => {
7441
+ data: Jt(Array.isArray(l) ? l.map((e) => {
6818
7442
  let n = { ...e };
6819
7443
  if (t.timeDimensions) {
6820
7444
  for (let e of t.timeDimensions) if (e.dimension in n) {
@@ -6940,7 +7564,7 @@ var en = class {
6940
7564
  }
6941
7565
  validateQueryForMode(e, t, n) {
6942
7566
  let r = () => {
6943
- let e = an(t, n);
7567
+ let e = yn(t, n);
6944
7568
  if (!e.isValid) throw Error(`Query validation failed: ${e.errors.join(", ")}`);
6945
7569
  };
6946
7570
  ({
@@ -6958,7 +7582,7 @@ var en = class {
6958
7582
  let e = this.retentionQueryBuilder.validateConfig(n.retention, t);
6959
7583
  if (!e.isValid) throw Error(`Retention validation failed: ${e.errors.join(", ")}`);
6960
7584
  }
6961
- })[e]();
7585
+ })[vt(e)]();
6962
7586
  }
6963
7587
  async executeQueryByModeWithCache(e, t, n, r, i) {
6964
7588
  return {
@@ -6967,15 +7591,17 @@ var en = class {
6967
7591
  funnel: () => this.executeFunnelQueryWithCache(t, n, r, i),
6968
7592
  flow: () => this.executeFlowQueryWithCache(t, n, r, i),
6969
7593
  retention: () => this.executeRetentionQueryWithCache(t, n, r, i)
6970
- }[e]();
7594
+ }[vt(e)]();
6971
7595
  }
6972
7596
  async executeRegularQueryWithCache(e, t, n, r) {
6973
7597
  let i = new q(), a = this.createQueryContext(n, i);
6974
7598
  this.preloadFilterCache(t, i, e, a);
6975
7599
  let { optimisedPlan: o } = this.buildRegularQueryArtifacts(e, t, a), s = this.drizzlePlanBuilder.derivePhysicalPlanContext(o);
6976
7600
  this.validateSecurityContext(s, a);
6977
- 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) => {
7601
+ let c = this.drizzlePlanBuilder.build(s, t, a);
7602
+ Q("query", c);
7603
+ let l = this.queryBuilder.collectNumericFields(e, t), u = await this.dbExecutor.execute(c, l), d = {
7604
+ data: Jt(Array.isArray(u) ? u.map((e) => {
6979
7605
  let n = { ...e };
6980
7606
  if (t.timeDimensions) {
6981
7607
  for (let e of t.timeDimensions) if (e.dimension in n) {
@@ -7013,7 +7639,7 @@ var en = class {
7013
7639
  funnel: () => this.dryRunFunnel(t, n, r),
7014
7640
  flow: () => this.dryRunFlow(t, n, r),
7015
7641
  retention: () => this.dryRunRetention(t, n, r)
7016
- }[e]();
7642
+ }[vt(e)]();
7017
7643
  }
7018
7644
  async generateComparisonSQL(e, t, n) {
7019
7645
  let r = this.buildComparisonExecutionPlan(t).periodQueries[0];
@@ -7065,9 +7691,9 @@ var en = class {
7065
7691
  }
7066
7692
  preloadFilterCache(e, t, n, r) {
7067
7693
  if (e.filters && e.filters.length > 0) {
7068
- let i = lt(e.filters);
7694
+ let i = St(e.filters);
7069
7695
  for (let e of i) {
7070
- let i = st(e);
7696
+ let i = bt(e);
7071
7697
  if (t.has(i)) continue;
7072
7698
  let [a, o] = e.member.split("."), s = n.get(a);
7073
7699
  if (!s) continue;
@@ -7083,7 +7709,7 @@ var en = class {
7083
7709
  }
7084
7710
  if (e.timeDimensions) {
7085
7711
  for (let i of e.timeDimensions) if (i.dateRange) {
7086
- let e = ct(i.dimension, i.dateRange);
7712
+ let e = xt(i.dimension, i.dateRange);
7087
7713
  if (t.has(e)) continue;
7088
7714
  let [a, o] = i.dimension.split("."), s = n.get(a);
7089
7715
  if (!s) continue;
@@ -7094,13 +7720,13 @@ var en = class {
7094
7720
  }
7095
7721
  }
7096
7722
  }
7097
- }, nn = class e {
7723
+ }, _n = class e {
7098
7724
  cubes = /* @__PURE__ */ new Map();
7099
7725
  dbExecutor;
7100
7726
  metadataCache;
7101
7727
  cacheConfig;
7102
7728
  constructor(e) {
7103
- e?.databaseExecutor ? this.dbExecutor = e.databaseExecutor : e?.drizzle && (this.dbExecutor = nt(e.drizzle, e.schema, e.engineType)), this.cacheConfig = e?.cache;
7729
+ e?.databaseExecutor ? this.dbExecutor = e.databaseExecutor : e?.drizzle && (this.dbExecutor = mt(e.drizzle, e.schema, e.engineType)), this.cacheConfig = e?.cache;
7104
7730
  }
7105
7731
  setDatabaseExecutor(e) {
7106
7732
  this.dbExecutor = e;
@@ -7109,7 +7735,7 @@ var en = class {
7109
7735
  return this.dbExecutor?.getEngineType();
7110
7736
  }
7111
7737
  setDrizzle(e, t, n) {
7112
- this.dbExecutor = nt(e, t, n);
7738
+ this.dbExecutor = mt(e, t, n);
7113
7739
  }
7114
7740
  hasExecutor() {
7115
7741
  return !!this.dbExecutor;
@@ -7119,7 +7745,7 @@ var en = class {
7119
7745
  return this.dbExecutor;
7120
7746
  }
7121
7747
  createQueryExecutor(e = !1) {
7122
- return new tn(this.requireExecutor(), e ? this.cacheConfig : void 0);
7748
+ return new gn(this.requireExecutor(), e ? this.cacheConfig : void 0);
7123
7749
  }
7124
7750
  formatSqlResult(e) {
7125
7751
  let t = this.requireExecutor().getEngineType();
@@ -7129,7 +7755,7 @@ var en = class {
7129
7755
  };
7130
7756
  }
7131
7757
  registerCube(e) {
7132
- this.validateCalculatedMeasures(e), new Z(this.cubes).populateDependencies(e), this.cubes.set(e.name, e), this.invalidateMetadataCache();
7758
+ this.validateCalculatedMeasures(e), new X(this.cubes).populateDependencies(e), this.cubes.set(e.name, e), this.invalidateMetadataCache();
7133
7759
  }
7134
7760
  validateCubeReferences() {
7135
7761
  let e = [];
@@ -7143,14 +7769,14 @@ var en = class {
7143
7769
  t.push(`Calculated measure '${e.name}.${n}' must have calculatedSql property`);
7144
7770
  continue;
7145
7771
  }
7146
- let i = bt(r.calculatedSql);
7772
+ let i = Pt(r.calculatedSql);
7147
7773
  if (!i.isValid) {
7148
7774
  t.push(`Invalid calculatedSql syntax in '${e.name}.${n}': ${i.errors.join(", ")}`);
7149
7775
  continue;
7150
7776
  }
7151
7777
  let a = new Map(this.cubes);
7152
7778
  a.set(e.name, e);
7153
- let o = new Z(a);
7779
+ let o = new X(a);
7154
7780
  try {
7155
7781
  o.validateDependencies(e);
7156
7782
  } catch (e) {
@@ -7160,7 +7786,7 @@ var en = class {
7160
7786
  if (t.length === 0) {
7161
7787
  let n = new Map(this.cubes);
7162
7788
  n.set(e.name, e);
7163
- let r = new Z(n);
7789
+ let r = new X(n);
7164
7790
  r.buildGraph(e);
7165
7791
  let i = r.detectCycle();
7166
7792
  i && t.push(`Circular dependency detected in calculated measures: ${i.join(" -> ")}`);
@@ -7313,18 +7939,18 @@ var en = class {
7313
7939
  return Array.from(this.cubes.keys());
7314
7940
  }
7315
7941
  validateQuery(e) {
7316
- return an(this.cubes, e);
7942
+ return yn(this.cubes, e);
7317
7943
  }
7318
7944
  analyzeQuery(e, t) {
7319
7945
  return this.createQueryExecutor(!0).analyzeQuery(this.cubes, e, t);
7320
7946
  }
7321
7947
  };
7322
- function rn(e) {
7948
+ function vn(e) {
7323
7949
  let t = [];
7324
7950
  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
7951
  }
7326
- function an(e, t) {
7327
- let n = [], r = rn(t);
7952
+ function yn(e, t) {
7953
+ let n = [], r = vn(t);
7328
7954
  if (r.length > 1) return n.push(`Query contains multiple query modes: ${r.join(", ")}`), {
7329
7955
  isValid: !1,
7330
7956
  errors: n
@@ -7345,7 +7971,7 @@ function an(e, t) {
7345
7971
  }
7346
7972
  },
7347
7973
  retention: () => {
7348
- let r = t.retention, i = sn(r.timeDimension);
7974
+ let r = t.retention, i = xn(r.timeDimension);
7349
7975
  i && !e.has(i) && n.push(`Retention cube not found: ${i}`);
7350
7976
  let a = r.bindingKey;
7351
7977
  if (typeof a == "string") {
@@ -7411,16 +8037,16 @@ function an(e, t) {
7411
8037
  }
7412
8038
  o.dimensions[i] || n.push(`TimeDimension '${i}' not found on cube '${t}' (must be a dimension with time type)`);
7413
8039
  }
7414
- if (t.filters) for (let r of t.filters) on(r, e, n, a);
8040
+ if (t.filters) for (let r of t.filters) bn(r, e, n, a);
7415
8041
  return a.size === 0 && n.push("Query must reference at least one cube through measures, dimensions, or filters"), {
7416
8042
  isValid: n.length === 0,
7417
8043
  errors: n
7418
8044
  };
7419
8045
  }
7420
- function on(e, t, n, r) {
8046
+ function bn(e, t, n, r) {
7421
8047
  if ("and" in e || "or" in e) {
7422
8048
  let i = e.and || e.or || [];
7423
- for (let e of i) on(e, t, n, r);
8049
+ for (let e of i) bn(e, t, n, r);
7424
8050
  return;
7425
8051
  }
7426
8052
  if (!("member" in e)) {
@@ -7443,7 +8069,7 @@ function on(e, t, n, r) {
7443
8069
  n.push(`Filter field '${a}' not found on cube '${i}' (must be a dimension or measure)${e}`);
7444
8070
  }
7445
8071
  }
7446
- function sn(e) {
8072
+ function xn(e) {
7447
8073
  if (typeof e == "string") {
7448
8074
  let [t] = e.split(".");
7449
8075
  return t || null;
@@ -7452,31 +8078,31 @@ function sn(e) {
7452
8078
  }
7453
8079
  //#endregion
7454
8080
  //#region src/adapters/mcp-transport.ts
7455
- var cn = [
8081
+ var Sn = [
7456
8082
  "2025-11-25",
7457
8083
  "2025-06-18",
7458
8084
  "2025-03-26"
7459
- ], ln = "2025-11-25";
7460
- function un(e) {
7461
- let t = bn(e["mcp-protocol-version"]) || "2025-11-25";
8085
+ ], Cn = "2025-11-25";
8086
+ function wn(e) {
8087
+ let t = Pn(e["mcp-protocol-version"]) || "2025-11-25";
7462
8088
  return {
7463
- ok: cn.includes(t),
7464
- negotiated: cn.includes(t) ? t : null,
7465
- supported: cn
8089
+ ok: Sn.includes(t),
8090
+ negotiated: Sn.includes(t) ? t : null,
8091
+ supported: Sn
7466
8092
  };
7467
8093
  }
7468
- function dn(e) {
8094
+ function Tn(e) {
7469
8095
  if (!e) return !1;
7470
8096
  let t = e.split(",").map((e) => e.trim().toLowerCase()), n = t.includes("text/event-stream"), r = t.includes("application/json");
7471
8097
  return n && !r;
7472
8098
  }
7473
- var fn = "mcp-session-id";
7474
- function pn(e) {
8099
+ var En = "mcp-session-id";
8100
+ function Dn(e) {
7475
8101
  if (!e) return !1;
7476
8102
  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
8103
  return n && r;
7478
8104
  }
7479
- function mn(e, t = {}) {
8105
+ function On(e, t = {}) {
7480
8106
  let { allowMissingOrigin: n = !0, allowedOrigins: r } = t;
7481
8107
  if (!e) return n ? { valid: !0 } : {
7482
8108
  valid: !1,
@@ -7503,11 +8129,11 @@ function mn(e, t = {}) {
7503
8129
  reason: "Origin not in allowed list"
7504
8130
  };
7505
8131
  }
7506
- function hn(e, t, n) {
8132
+ function kn(e, t, n) {
7507
8133
  let r = [];
7508
8134
  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
8135
  }
7510
- function gn(e, t, n, r) {
8136
+ function An(e, t, n, r) {
7511
8137
  return {
7512
8138
  jsonrpc: "2.0",
7513
8139
  id: e ?? null,
@@ -7518,14 +8144,14 @@ function gn(e, t, n, r) {
7518
8144
  }
7519
8145
  };
7520
8146
  }
7521
- function _n(e, t) {
8147
+ function jn(e, t) {
7522
8148
  return {
7523
8149
  jsonrpc: "2.0",
7524
8150
  id: e ?? null,
7525
8151
  result: t
7526
8152
  };
7527
8153
  }
7528
- function vn(e) {
8154
+ function Mn(e) {
7529
8155
  if (!e || typeof e != "object") return null;
7530
8156
  let t = e;
7531
8157
  return t.jsonrpc !== "2.0" || typeof t.method != "string" ? null : {
@@ -7535,12 +8161,12 @@ function vn(e) {
7535
8161
  params: t.params
7536
8162
  };
7537
8163
  }
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;
8164
+ async function Nn(e, i, a) {
8165
+ let { semanticLayer: o, extractSecurityContext: s, rawRequest: c, rawResponse: l } = a, u = a.prompts ?? Bn, d = a.resources ?? Vn;
7540
8166
  switch (e) {
7541
8167
  case "initialize": {
7542
8168
  let e = i?.protocolVersion, t;
7543
- return t = e && cn.includes(e) ? e : ln, {
8169
+ return t = e && Sn.includes(e) ? e : Cn, {
7544
8170
  protocolVersion: t,
7545
8171
  capabilities: {
7546
8172
  tools: { listChanged: !1 },
@@ -7548,7 +8174,7 @@ async function yn(e, i, a) {
7548
8174
  prompts: { listChanged: !1 },
7549
8175
  sampling: {}
7550
8176
  },
7551
- sessionId: Sn(),
8177
+ sessionId: In(),
7552
8178
  serverInfo: {
7553
8179
  name: "drizzle-cube",
7554
8180
  version: typeof process < "u" ? process.env?.npm_package_version || "dev" : "worker"
@@ -7557,11 +8183,11 @@ async function yn(e, i, a) {
7557
8183
  }
7558
8184
  case "list_tools":
7559
8185
  case "tools/list": return {
7560
- tools: Cn(),
8186
+ tools: Ln(),
7561
8187
  nextCursor: ""
7562
8188
  };
7563
8189
  case "call_tool":
7564
- case "tools/call": return wn(i, a);
8190
+ case "tools/call": return Rn(i, a);
7565
8191
  case "resources/list": return {
7566
8192
  resources: d.map(({ uri: e, name: t, description: n, mimeType: r }) => ({
7567
8193
  uri: e,
@@ -7620,16 +8246,16 @@ function $(e, t, n) {
7620
8246
  let r = Error(t);
7621
8247
  return r.code = e, n !== void 0 && (r.data = n), r;
7622
8248
  }
7623
- function bn(e) {
8249
+ function Pn(e) {
7624
8250
  return e ? Array.isArray(e) ? e[0] || null : e : null;
7625
8251
  }
7626
- function xn(e) {
8252
+ function Fn(e) {
7627
8253
  return e.id === void 0 || e.id === null;
7628
8254
  }
7629
- function Sn() {
8255
+ function In() {
7630
8256
  return `evt-${e()}`;
7631
8257
  }
7632
- function Cn() {
8258
+ function Ln() {
7633
8259
  return [
7634
8260
  {
7635
8261
  name: "discover",
@@ -7682,26 +8308,26 @@ function Cn() {
7682
8308
  }
7683
8309
  ];
7684
8310
  }
7685
- async function wn(e, i) {
8311
+ async function Rn(e, i) {
7686
8312
  let { semanticLayer: a, extractSecurityContext: o, rawRequest: s, rawResponse: c } = i, l = e || {};
7687
8313
  if (!l.name) throw $(-32602, "name is required for tools/call");
7688
8314
  let u = l.arguments;
7689
8315
  switch (l.name) {
7690
- case "discover": return Tn(await t(a, u || {}));
8316
+ case "discover": return zn(await t(a, u || {}));
7691
8317
  case "validate": {
7692
8318
  let e = u || {};
7693
8319
  if (!e.query) throw $(-32602, "query is required");
7694
- return Tn(await n(a, e));
8320
+ return zn(await n(a, e));
7695
8321
  }
7696
8322
  case "load": {
7697
8323
  let e = u || {};
7698
8324
  if (!e.query) throw $(-32602, "query is required");
7699
- return Tn(await r(a, await o(s, c), e));
8325
+ return zn(await r(a, await o(s, c), e));
7700
8326
  }
7701
8327
  default: throw $(-32601, `Unknown tool: ${l.name}`);
7702
8328
  }
7703
8329
  }
7704
- function Tn(e) {
8330
+ function zn(e) {
7705
8331
  return {
7706
8332
  content: [{
7707
8333
  type: "text",
@@ -7710,7 +8336,7 @@ function Tn(e) {
7710
8336
  isError: !1
7711
8337
  };
7712
8338
  }
7713
- var En = a(), Dn = [{
8339
+ var Bn = a(), Vn = [{
7714
8340
  uri: "drizzle-cube://quickstart",
7715
8341
  name: "Drizzle Cube MCP Quickstart",
7716
8342
  description: "Minimal guide for using discover/suggest/validate/load",
@@ -7811,11 +8437,11 @@ var En = a(), Dn = [{
7811
8437
  "- Both can be combined: inDateRange filter + timeDimensions granularity."
7812
8438
  ].join("\n")
7813
8439
  }];
7814
- function On() {
7815
- return Dn;
8440
+ function Hn() {
8441
+ return Vn;
7816
8442
  }
7817
- function kn() {
7818
- return En;
8443
+ function Un() {
8444
+ return Bn;
7819
8445
  }
7820
8446
  //#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 };
8447
+ export { Un as a, wn as c, kn as d, Dn as f, _n as h, Nn as i, Mn as l, Tn as m, An as n, Hn as o, On as p, jn as r, Fn as s, En as t, In as u };