drizzle-cube 0.5.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/adapters/hono/agent-handler.d.ts +9 -0
  3. package/dist/adapters/adapters/hono/mcp-handler.d.ts +37 -0
  4. package/dist/adapters/adapters/mcp-tools-handlers.d.ts +18 -0
  5. package/dist/adapters/adapters/nextjs/mcp-handler.d.ts +36 -0
  6. package/dist/adapters/adapters/utils.d.ts +6 -81
  7. package/dist/adapters/express/index.cjs +1 -1
  8. package/dist/adapters/express/index.js +50 -50
  9. package/dist/adapters/fastify/index.cjs +1 -1
  10. package/dist/adapters/fastify/index.js +78 -78
  11. package/dist/adapters/google-BOnRIN1w.cjs +2 -0
  12. package/dist/adapters/{google-CFYljAOF.js → google-CvKM9yVM.js} +83 -71
  13. package/dist/adapters/{handler-Cx8QYLk6.js → handler-CfgE0JSL.js} +499 -576
  14. package/dist/adapters/handler-Cn0dOctE.cjs +25 -0
  15. package/dist/adapters/hono/index.cjs +2 -2
  16. package/dist/adapters/hono/index.js +205 -175
  17. package/dist/adapters/locale-DDvZDFVn.js +8114 -0
  18. package/dist/adapters/locale-ZLUUNUxr.cjs +166 -0
  19. package/dist/adapters/mcp-tools.cjs +1 -1
  20. package/dist/adapters/mcp-tools.js +49 -38
  21. package/dist/adapters/mcp-transport-Chiaj4ll.cjs +40 -0
  22. package/dist/adapters/mcp-transport-H96VG3WY.js +591 -0
  23. package/dist/adapters/nextjs/index.cjs +1 -1
  24. package/dist/adapters/nextjs/index.js +190 -197
  25. package/dist/adapters/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
  26. package/dist/adapters/openai-vXvLni8v.cjs +1 -0
  27. package/dist/adapters/{utils-D9JPLmfl.js → utils-BPWZsX7k.js} +1271 -1218
  28. package/dist/adapters/utils-_whV4fXL.cjs +128 -0
  29. package/dist/adapters/utils.cjs +1 -1
  30. package/dist/adapters/utils.js +2 -2
  31. package/dist/client/charts/ChartLoader.d.ts +2 -16
  32. package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
  33. package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
  34. package/dist/client/charts.js +14 -13
  35. package/dist/client/chunks/{DashboardEditModal-CjCIAT-J.js → DashboardEditModal-okVfH8ZK.js} +5296 -4544
  36. package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
  37. package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
  38. package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js.map → RetentionCombinedChart-BgbDhsPz.js.map} +1 -1
  39. package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
  40. package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js.map → RetentionHeatmap-DjXZaTPq.js.map} +1 -1
  41. package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
  42. package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
  43. package/dist/client/chunks/{analysis-builder-shared-CYVwSPqt.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
  44. package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
  45. package/dist/client/chunks/{chart-activity-grid-DmruKPab.js → chart-activity-grid-DX0SJbxs.js} +635 -492
  46. package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
  47. package/dist/client/chunks/chart-area-of01_62R.js +775 -0
  48. package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
  49. package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
  50. package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
  51. package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js → chart-box-plot-kkBixZ27.js} +2 -2
  52. package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js.map → chart-box-plot-kkBixZ27.js.map} +1 -1
  53. package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
  54. package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
  55. package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js → chart-candlestick-DZp19Tzh.js} +2 -2
  56. package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js.map → chart-candlestick-DZp19Tzh.js.map} +1 -1
  57. package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
  58. package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
  59. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
  60. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
  61. package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
  62. package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
  63. package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
  64. package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
  65. package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
  66. package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
  67. package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
  68. package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
  69. package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
  70. package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
  71. package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
  72. package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
  73. package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
  74. package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
  75. package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
  76. package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
  77. package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
  78. package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
  79. package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
  80. package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
  81. package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
  82. package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
  83. package/dist/client/chunks/{chart-data-table-BO4sXsim.js → chart-data-table-CKauQXme.js} +1046 -1121
  84. package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
  85. package/dist/client/chunks/{chart-funnel-DnWRsmnS.js → chart-funnel-CToKSBaL.js} +184 -222
  86. package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
  87. package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
  88. package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
  89. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
  90. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
  91. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
  92. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
  93. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
  94. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
  95. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
  96. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
  97. package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
  98. package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
  99. package/dist/client/chunks/{chart-markdown-dgUetjyM.js → chart-markdown-CV75S_zL.js} +2 -2
  100. package/dist/client/chunks/{chart-markdown-dgUetjyM.js.map → chart-markdown-CV75S_zL.js.map} +1 -1
  101. package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js → chart-measure-profile-Ket8fJyf.js} +7 -7
  102. package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js.map → chart-measure-profile-Ket8fJyf.js.map} +1 -1
  103. package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
  104. package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
  105. package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
  106. package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
  107. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
  108. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
  109. package/dist/client/chunks/{chart-sankey-M3XpO_ah.js → chart-sankey-DjrvKw6K.js} +36 -39
  110. package/dist/client/chunks/{chart-sankey-M3XpO_ah.js.map → chart-sankey-DjrvKw6K.js.map} +1 -1
  111. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
  112. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
  113. package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js → chart-sunburst-leGpuDj7.js} +3 -3
  114. package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js.map → chart-sunburst-leGpuDj7.js.map} +1 -1
  115. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
  116. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
  117. package/dist/client/chunks/{chart-waterfall-BuhMoagf.js → chart-waterfall-DyvQReN5.js} +7 -7
  118. package/dist/client/chunks/{chart-waterfall-BuhMoagf.js.map → chart-waterfall-DyvQReN5.js.map} +1 -1
  119. package/dist/client/chunks/{charts-core-jRtb0S2M.js → charts-core-DaXSt1Dd.js} +2 -2
  120. package/dist/client/chunks/{charts-core-jRtb0S2M.js.map → charts-core-DaXSt1Dd.js.map} +1 -1
  121. package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
  122. package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
  123. package/dist/client/chunks/{nl-NL-CpVs7ox3.js → nl-NL-2zTAWTej.js} +2 -1
  124. package/dist/client/chunks/{nl-NL-CpVs7ox3.js.map → nl-NL-2zTAWTej.js.map} +1 -1
  125. package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
  126. package/dist/client/chunks/{schema-visualization-DE09kQE3.js → schema-visualization-Cb_E9_Gd.js} +12 -12
  127. package/dist/client/chunks/{schema-visualization-DE09kQE3.js.map → schema-visualization-Cb_E9_Gd.js.map} +1 -1
  128. package/dist/client/chunks/{useDirtyStateTracking-CoeQbprt.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
  129. package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
  130. package/dist/client/chunks/{useExplainAI-DlnXWdmz.js → useExplainAI-evnZkjCY.js} +14 -14
  131. package/dist/client/chunks/{useExplainAI-DlnXWdmz.js.map → useExplainAI-evnZkjCY.js.map} +1 -1
  132. package/dist/client/chunks/{utils-CTKNaXS8.js → utils-3P6z1vz5.js} +2 -2
  133. package/dist/client/chunks/{utils-CTKNaXS8.js.map → utils-3P6z1vz5.js.map} +1 -1
  134. package/dist/client/chunks/{vendor-CPIYyeuD.js → vendor-DSpR0IW6.js} +43 -43
  135. package/dist/client/chunks/{vendor-CPIYyeuD.js.map → vendor-DSpR0IW6.js.map} +1 -1
  136. package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
  137. package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
  138. package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
  139. package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
  140. package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
  141. package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
  142. package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
  143. package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
  144. package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
  145. package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
  146. package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
  147. package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
  148. package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
  149. package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
  150. package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
  151. package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
  152. package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
  153. package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
  154. package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
  155. package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
  156. package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
  157. package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
  158. package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
  159. package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
  160. package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +5 -0
  161. package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
  162. package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
  163. package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
  164. package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
  165. package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
  166. package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
  167. package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
  168. package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
  169. package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
  170. package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
  171. package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
  172. package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
  173. package/dist/client/components/DashboardPortletCard.d.ts +2 -57
  174. package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
  175. package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
  176. package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
  177. package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
  178. package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
  179. package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
  180. package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
  181. package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
  182. package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
  183. package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
  184. package/dist/client/components/charts/AxisFormatControls.d.ts +3 -1
  185. package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
  186. package/dist/client/components/charts/BarSeries.d.ts +29 -0
  187. package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
  188. package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
  189. package/dist/client/components/charts/ChartStates.d.ts +38 -0
  190. package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
  191. package/dist/client/components/charts/FunnelViews.d.ts +16 -0
  192. package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
  193. package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
  194. package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
  195. package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
  196. package/dist/client/components/charts/KpiStates.d.ts +19 -0
  197. package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
  198. package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
  199. package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
  200. package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
  201. package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
  202. package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
  203. package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
  204. package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
  205. package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
  206. package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
  207. package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
  208. package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
  209. package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
  210. package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
  211. package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
  212. package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
  213. package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
  214. package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
  215. package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
  216. package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
  217. package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
  218. package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
  219. package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
  220. package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
  221. package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
  222. package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
  223. package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
  224. package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
  225. package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
  226. package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
  227. package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
  228. package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
  229. package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
  230. package/dist/client/components/shared/utils.d.ts +4 -43
  231. package/dist/client/components.js +3 -3
  232. package/dist/client/hooks/agentChatStream.d.ts +39 -0
  233. package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
  234. package/dist/client/hooks/drillNavigation.d.ts +25 -0
  235. package/dist/client/hooks.js +3 -3
  236. package/dist/client/icons.js +2 -2
  237. package/dist/client/index.js +816 -669
  238. package/dist/client/index.js.map +1 -1
  239. package/dist/client/providers.js +3 -3
  240. package/dist/client/schema.js +1 -1
  241. package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
  242. package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
  243. package/dist/client/shared/queryTransforms.d.ts +20 -0
  244. package/dist/client/shared/utils.d.ts +2 -4
  245. package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
  246. package/dist/client/styles.css +1 -1
  247. package/dist/client/utils/axisValueFormatting.d.ts +32 -0
  248. package/dist/client/utils/timeValueFormatting.d.ts +32 -0
  249. package/dist/client/utils.js +6 -6
  250. package/dist/client-bundle-stats.html +1 -1
  251. package/dist/mcp-app/mcp-app.html +55 -55
  252. package/dist/server/google-BOnRIN1w.cjs +2 -0
  253. package/dist/server/{google-CFYljAOF.js → google-CvKM9yVM.js} +83 -71
  254. package/dist/server/index.cjs +179 -211
  255. package/dist/server/index.js +6330 -6458
  256. package/dist/server/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
  257. package/dist/server/openai-vXvLni8v.cjs +1 -0
  258. package/dist/server/server/adapters/base-adapter.d.ts +80 -35
  259. package/dist/server/server/adapters/databend-adapter.d.ts +8 -59
  260. package/dist/server/server/adapters/duckdb-adapter.d.ts +5 -59
  261. package/dist/server/server/adapters/mysql-adapter.d.ts +13 -70
  262. package/dist/server/server/adapters/postgres-adapter.d.ts +1 -65
  263. package/dist/server/server/adapters/snowflake-adapter.d.ts +5 -68
  264. package/dist/server/server/adapters/sqlite-adapter.d.ts +12 -32
  265. package/dist/server/server/adapters/window-function-builder.d.ts +11 -0
  266. package/dist/server/server/agent/chart-validation.d.ts +0 -5
  267. package/dist/server/server/agent/handler-steps.d.ts +37 -0
  268. package/dist/server/server/ai/discovery-helpers.d.ts +29 -0
  269. package/dist/server/server/ai/discovery.d.ts +4 -0
  270. package/dist/server/server/ai/suggestion-helpers.d.ts +33 -0
  271. package/dist/server/server/ai/suggestion.d.ts +0 -3
  272. package/dist/server/server/ai/validation-helpers.d.ts +21 -0
  273. package/dist/server/server/ai/validation.d.ts +0 -3
  274. package/dist/server/server/builders/analysis-utils.d.ts +106 -0
  275. package/dist/server/server/builders/cte-builder.d.ts +46 -0
  276. package/dist/server/server/builders/date-time-builder.d.ts +5 -0
  277. package/dist/server/server/builders/date-time-helpers.d.ts +34 -0
  278. package/dist/server/server/builders/filter-builder.d.ts +2 -0
  279. package/dist/server/server/builders/filter-operators.d.ts +23 -0
  280. package/dist/server/server/builders/flow-query-builder.d.ts +46 -19
  281. package/dist/server/server/builders/funnel-query-builder.d.ts +16 -5
  282. package/dist/server/server/builders/group-by-builder.d.ts +11 -0
  283. package/dist/server/server/builders/measure-builder.d.ts +43 -0
  284. package/dist/server/server/builders/retention-query-builder.d.ts +12 -14
  285. package/dist/server/server/cache-utils.d.ts +25 -5
  286. package/dist/server/server/compiler-metadata.d.ts +11 -0
  287. package/dist/server/server/compiler.d.ts +8 -14
  288. package/dist/server/server/cube-utils.d.ts +29 -4
  289. package/dist/server/server/execution/annotation-builder.d.ts +12 -0
  290. package/dist/server/server/execution/filter-cache-preloader.d.ts +19 -0
  291. package/dist/server/server/execution/mode-router.d.ts +25 -0
  292. package/dist/server/server/execution/query-result-cache.d.ts +21 -0
  293. package/dist/server/server/execution/result-post-processor.d.ts +10 -0
  294. package/dist/server/server/executor.d.ts +33 -30
  295. package/dist/server/server/executors/explain-utils.d.ts +28 -0
  296. package/dist/server/server/explain/explain-tree.d.ts +20 -0
  297. package/dist/server/server/filter-cache.d.ts +2 -2
  298. package/dist/server/server/gap-filler.d.ts +6 -0
  299. package/dist/server/server/index.d.ts +3 -1
  300. package/dist/server/server/logical-plan/cte-planner-helpers.d.ts +37 -0
  301. package/dist/server/server/logical-plan/cte-planner.d.ts +104 -0
  302. package/dist/server/server/logical-plan/filter-propagation.d.ts +44 -0
  303. package/dist/server/server/logical-plan/index.d.ts +6 -1
  304. package/dist/server/server/logical-plan/join-planner.d.ts +27 -0
  305. package/dist/server/server/logical-plan/logical-planner.d.ts +7 -200
  306. package/dist/server/server/logical-plan/optimiser.d.ts +3 -1
  307. package/dist/server/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
  308. package/dist/server/server/logical-plan/planner-utils.d.ts +20 -0
  309. package/dist/server/server/logical-plan/types.d.ts +17 -9
  310. package/dist/server/server/measure-classification.d.ts +40 -0
  311. package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +21 -21
  312. package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +11 -0
  313. package/dist/server/server/physical-plan/processors/index.d.ts +2 -0
  314. package/dist/server/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
  315. package/dist/server/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
  316. package/dist/server/server/physical-plan/processors/shared.d.ts +5 -0
  317. package/dist/server/server/query-handlers.d.ts +79 -0
  318. package/dist/server/server/query-modes.d.ts +28 -0
  319. package/dist/server/server/query-validator.d.ts +9 -0
  320. package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +5 -0
  321. package/dist/server/server/resolvers/join-path-resolver.d.ts +6 -0
  322. package/dist/server/server/sql-format.d.ts +11 -0
  323. package/dist/server/server/types/cube.d.ts +18 -4
  324. package/dist/server/server/types/flow.d.ts +6 -5
  325. package/dist/server/server/types/index.d.ts +1 -1
  326. package/dist/server/server/types/validation.d.ts +14 -0
  327. package/package.json +11 -4
  328. package/dist/adapters/google-DUlXeeDA.cjs +0 -2
  329. package/dist/adapters/handler-CzbCuS6_.cjs +0 -25
  330. package/dist/adapters/locale-BPB7flIG.js +0 -8249
  331. package/dist/adapters/locale-tIMrNcCr.cjs +0 -198
  332. package/dist/adapters/mcp-transport-C2QzXm6h.cjs +0 -40
  333. package/dist/adapters/mcp-transport-D0B3S1tB.js +0 -579
  334. package/dist/adapters/openai-D_U4V0kT.cjs +0 -1
  335. package/dist/adapters/utils-KV37IBIv.cjs +0 -128
  336. package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +0 -1
  337. package/dist/client/chunks/analysis-builder-MuMIzoRq.js +0 -5367
  338. package/dist/client/chunks/analysis-builder-MuMIzoRq.js.map +0 -1
  339. package/dist/client/chunks/analysis-builder-shared-CYVwSPqt.js.map +0 -1
  340. package/dist/client/chunks/chart-activity-grid-DmruKPab.js.map +0 -1
  341. package/dist/client/chunks/chart-area-DHCPM4Em.js +0 -450
  342. package/dist/client/chunks/chart-area-DHCPM4Em.js.map +0 -1
  343. package/dist/client/chunks/chart-bar-KddciGDv.js +0 -271
  344. package/dist/client/chunks/chart-bar-KddciGDv.js.map +0 -1
  345. package/dist/client/chunks/chart-bubble-CfqiB538.js +0 -273
  346. package/dist/client/chunks/chart-bubble-CfqiB538.js.map +0 -1
  347. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
  348. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
  349. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
  350. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
  351. package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
  352. package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
  353. package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
  354. package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
  355. package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
  356. package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
  357. package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
  358. package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
  359. package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
  360. package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
  361. package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
  362. package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +0 -1
  363. package/dist/client/chunks/chart-funnel-DnWRsmnS.js.map +0 -1
  364. package/dist/client/chunks/chart-gauge-CgMeqeGb.js +0 -424
  365. package/dist/client/chunks/chart-gauge-CgMeqeGb.js.map +0 -1
  366. package/dist/client/chunks/chart-heat-map-DcGm9SWK.js +0 -231
  367. package/dist/client/chunks/chart-heat-map-DcGm9SWK.js.map +0 -1
  368. package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js +0 -343
  369. package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js.map +0 -1
  370. package/dist/client/chunks/chart-kpi-number-gWYF44ol.js +0 -322
  371. package/dist/client/chunks/chart-kpi-number-gWYF44ol.js.map +0 -1
  372. package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js +0 -149
  373. package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js.map +0 -1
  374. package/dist/client/chunks/chart-line-9BEGN5Ti.js +0 -433
  375. package/dist/client/chunks/chart-line-9BEGN5Ti.js.map +0 -1
  376. package/dist/client/chunks/chart-pie-BjAIhyOi.js +0 -172
  377. package/dist/client/chunks/chart-pie-BjAIhyOi.js.map +0 -1
  378. package/dist/client/chunks/chart-radar-Dgkcl2bN.js +0 -154
  379. package/dist/client/chunks/chart-radar-Dgkcl2bN.js.map +0 -1
  380. package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js +0 -148
  381. package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js.map +0 -1
  382. package/dist/client/chunks/chart-scatter-DaHYP_OL.js +0 -255
  383. package/dist/client/chunks/chart-scatter-DaHYP_OL.js.map +0 -1
  384. package/dist/client/chunks/chart-tree-map-uiwUU4nb.js +0 -298
  385. package/dist/client/chunks/chart-tree-map-uiwUU4nb.js.map +0 -1
  386. package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +0 -1
  387. package/dist/server/google-DUlXeeDA.cjs +0 -2
  388. package/dist/server/openai-D_U4V0kT.cjs +0 -1
@@ -1,5 +1,62 @@
1
1
  //#region src/server/agent/providers/openai.ts
2
- var e = class {
2
+ function* e(e, t) {
3
+ let n = e.index ?? 0;
4
+ if (e.id && (t.set(n, {
5
+ id: e.id,
6
+ name: e.function?.name || "",
7
+ arguments: ""
8
+ }), yield {
9
+ type: "tool_use_start",
10
+ id: e.id,
11
+ name: e.function?.name || ""
12
+ }), e.function?.name && t.has(n)) {
13
+ let r = t.get(n);
14
+ r.name ||= e.function.name;
15
+ }
16
+ if (e.function?.arguments) {
17
+ let r = t.get(n);
18
+ r && (r.arguments += e.function.arguments, yield {
19
+ type: "tool_input_delta",
20
+ json: e.function.arguments
21
+ });
22
+ }
23
+ }
24
+ function* t(e, t) {
25
+ for (let [e, n] of t) {
26
+ let r = {};
27
+ try {
28
+ n.arguments && (r = JSON.parse(n.arguments));
29
+ } catch {}
30
+ yield {
31
+ type: "tool_use_end",
32
+ id: n.id,
33
+ input: r
34
+ }, t.delete(e);
35
+ }
36
+ yield {
37
+ type: "message_meta",
38
+ stopReason: e
39
+ };
40
+ }
41
+ function* n(n, r) {
42
+ n.usage && (yield {
43
+ type: "message_meta",
44
+ inputTokens: n.usage.prompt_tokens,
45
+ outputTokens: n.usage.completion_tokens,
46
+ stopReason: ""
47
+ });
48
+ let i = n.choices?.[0];
49
+ if (!i) return;
50
+ let a = i.delta;
51
+ if (a) {
52
+ if (a.content && (yield {
53
+ type: "text_delta",
54
+ text: a.content
55
+ }), a.tool_calls) for (let t of a.tool_calls) yield* e(t, r);
56
+ i.finish_reason && (yield* t(i.finish_reason, r));
57
+ }
58
+ }
59
+ var r = class {
3
60
  client;
4
61
  apiKey;
5
62
  baseURL;
@@ -36,62 +93,7 @@ var e = class {
36
93
  }
37
94
  async *parseStreamEvents(e) {
38
95
  let t = /* @__PURE__ */ new Map();
39
- for await (let n of e) {
40
- let e = n;
41
- e.usage && (yield {
42
- type: "message_meta",
43
- inputTokens: e.usage.prompt_tokens,
44
- outputTokens: e.usage.completion_tokens,
45
- stopReason: ""
46
- });
47
- let r = e.choices?.[0];
48
- if (!r) continue;
49
- let i = r.delta;
50
- if (i) {
51
- if (i.content && (yield {
52
- type: "text_delta",
53
- text: i.content
54
- }), i.tool_calls) for (let e of i.tool_calls) {
55
- let n = e.index ?? 0;
56
- if (e.id && (t.set(n, {
57
- id: e.id,
58
- name: e.function?.name || "",
59
- arguments: ""
60
- }), yield {
61
- type: "tool_use_start",
62
- id: e.id,
63
- name: e.function?.name || ""
64
- }), e.function?.name && t.has(n)) {
65
- let r = t.get(n);
66
- r.name ||= e.function.name;
67
- }
68
- if (e.function?.arguments) {
69
- let r = t.get(n);
70
- r && (r.arguments += e.function.arguments, yield {
71
- type: "tool_input_delta",
72
- json: e.function.arguments
73
- });
74
- }
75
- }
76
- if (r.finish_reason) {
77
- for (let [e, n] of t) {
78
- let r = {};
79
- try {
80
- n.arguments && (r = JSON.parse(n.arguments));
81
- } catch {}
82
- yield {
83
- type: "tool_use_end",
84
- id: n.id,
85
- input: r
86
- }, t.delete(e);
87
- }
88
- yield {
89
- type: "message_meta",
90
- stopReason: r.finish_reason
91
- };
92
- }
93
- }
94
- }
96
+ for await (let r of e) yield* n(r, t);
95
97
  }
96
98
  formatTools(e) {
97
99
  return e.map((e) => ({
@@ -150,4 +152,4 @@ var e = class {
150
152
  }
151
153
  };
152
154
  //#endregion
153
- export { e as OpenAIProvider };
155
+ export { r as OpenAIProvider };
@@ -0,0 +1 @@
1
+ function*e(e,t){let n=e.index??0;if(e.id&&(t.set(n,{id:e.id,name:e.function?.name||``,arguments:``}),yield{type:`tool_use_start`,id:e.id,name:e.function?.name||``}),e.function?.name&&t.has(n)){let r=t.get(n);r.name||=e.function.name}if(e.function?.arguments){let r=t.get(n);r&&(r.arguments+=e.function.arguments,yield{type:`tool_input_delta`,json:e.function.arguments})}}function*t(e,t){for(let[e,n]of t){let r={};try{n.arguments&&(r=JSON.parse(n.arguments))}catch{}yield{type:`tool_use_end`,id:n.id,input:r},t.delete(e)}yield{type:`message_meta`,stopReason:e}}function*n(n,r){n.usage&&(yield{type:`message_meta`,inputTokens:n.usage.prompt_tokens,outputTokens:n.usage.completion_tokens,stopReason:``});let i=n.choices?.[0];if(!i)return;let a=i.delta;if(a){if(a.content&&(yield{type:`text_delta`,text:a.content}),a.tool_calls)for(let t of a.tool_calls)yield*e(t,r);i.finish_reason&&(yield*t(i.finish_reason,r))}}var r=class{client;apiKey;baseURL;initialized=!1;constructor(e,t){this.apiKey=e,this.baseURL=t?.baseURL}async ensureClient(){if(this.initialized)return;let e;try{let t=await Promise.resolve().then(()=>require("./openai-D0musiYP.cjs"));e=t.default||t.OpenAI||t}catch{throw Error(`openai is required for the OpenAI provider. Install it with: npm install openai`)}let t={apiKey:this.apiKey};this.baseURL&&(t.baseURL=this.baseURL),this.client=new e(t),this.initialized=!0}async createStream(e){await this.ensureClient();let{messages:t}=this.formatMessages(e.messages,e.system);return this.client.chat.completions.create({model:e.model,max_completion_tokens:e.maxTokens,tools:this.formatTools(e.tools),messages:t,stream:!0,stream_options:{include_usage:!0}})}async*parseStreamEvents(e){let t=new Map;for await(let r of e)yield*n(r,t)}formatTools(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}formatMessages(e,t){let n=[{role:`system`,content:t}];for(let t of e)if(t.role===`user`)n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});else if(t.role===`assistant`)if(typeof t.content==`string`)n.push({role:`assistant`,content:t.content});else{let e=t.content,r=e.filter(e=>e.type===`text`).map(e=>e.text).join(``),i=e.filter(e=>e.type===`tool_use`).map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input||{})}})),a={role:`assistant`};r&&(a.content=r),i.length>0&&(a.tool_calls=i),n.push(a)}else t.role===`tool`?n.push(t):t.role===`tool_result`&&n.push({role:`user`,content:typeof t.content==`string`?t.content:JSON.stringify(t.content)});return{messages:n}}formatToolResults(e){return e.map(e=>({role:`tool`,tool_call_id:e.toolUseId,content:e.content}))}shouldContinue(e){return e===`tool_calls`}formatError(e){if(!e||!(e instanceof Error))return`Something went wrong. Please try again.`;let t=e.message||``,n=e;return n.status===429?`Too many requests. Please wait a moment and try again.`:n.status===401?`Authentication failed. Please check your API key configuration.`:n.status===503||n.status===502?`The AI service is temporarily unavailable. Please try again in a moment.`:n.status===400?`There was a problem with the request. Please try again.`:t.startsWith(`{`)||t.startsWith(`Error: {`)?`The AI service encountered an error. Please try again.`:t}};exports.OpenAIProvider=r;
@@ -5,22 +5,12 @@ import { TimeGranularity } from '../types';
5
5
  * Used for graceful degradation when functions aren't supported
6
6
  */
7
7
  export interface DatabaseCapabilities {
8
- /** Whether the database supports STDDEV_POP/STDDEV_SAMP */
9
- supportsStddev: boolean;
10
- /** Whether the database supports VAR_POP/VAR_SAMP */
11
- supportsVariance: boolean;
12
8
  /** Whether the database supports PERCENTILE_CONT or similar */
13
9
  supportsPercentile: boolean;
14
- /** Whether the database supports window functions (LAG, LEAD, RANK, etc.) */
15
- supportsWindowFunctions: boolean;
16
- /** Whether the database supports frame clauses (ROWS BETWEEN, RANGE BETWEEN) */
17
- supportsFrameClause: boolean;
18
10
  /** Whether the database supports LATERAL joins (PostgreSQL 9.3+, MySQL 8.0.14+) */
19
11
  supportsLateralJoins: boolean;
20
12
  /** Whether percentile functions work in subqueries against CTEs (false for DuckDB) */
21
13
  supportsPercentileSubqueries: boolean;
22
- /** Whether derived tables (subqueries) work in FROM clauses inside CTEs (false for Databend) */
23
- supportsDerivedTablesInCTE: boolean;
24
14
  /** Whether correlated LATERAL subqueries can reference CTEs (false for Snowflake) */
25
15
  supportsLateralSubqueriesInCTE: boolean;
26
16
  }
@@ -50,12 +40,6 @@ export interface DatabaseAdapter {
50
40
  * Get the database engine type this adapter supports
51
41
  */
52
42
  getEngineType(): 'postgres' | 'mysql' | 'sqlite' | 'singlestore' | 'duckdb' | 'databend' | 'snowflake';
53
- /**
54
- * Check if the database supports LATERAL joins
55
- * Required for optimized flow queries with index-backed seeks
56
- * @returns true for PostgreSQL 9.3+, MySQL 8.0.14+, SingleStore; false for SQLite
57
- */
58
- supportsLateralJoins(): boolean;
59
43
  /**
60
44
  * Build SQL INTERVAL from ISO 8601 duration string
61
45
  * Used for time window constraints in funnel analysis
@@ -225,39 +209,100 @@ export interface DatabaseAdapter {
225
209
  */
226
210
  export declare abstract class BaseDatabaseAdapter implements DatabaseAdapter {
227
211
  abstract getEngineType(): 'postgres' | 'mysql' | 'sqlite' | 'singlestore' | 'duckdb' | 'databend' | 'snowflake';
228
- abstract supportsLateralJoins(): boolean;
229
212
  abstract buildIntervalFromISO(duration: string): SQL;
230
213
  abstract buildTimeDifferenceSeconds(end: SQL, start: SQL): SQL;
231
214
  abstract buildDateAddInterval(timestamp: SQL, duration: string): SQL;
232
- abstract buildConditionalAggregation(aggFn: 'count' | 'avg' | 'min' | 'max' | 'sum', expr: SQL | null, condition: SQL): SQL;
233
215
  abstract buildDateDiffPeriods(startDate: SQL, endDate: SQL, unit: 'day' | 'week' | 'month'): SQL;
234
216
  abstract buildPeriodSeriesSubquery(maxPeriod: number): SQL;
235
217
  abstract buildTimeDimension(granularity: TimeGranularity, fieldExpr: AnyColumn | SQL): SQL;
236
- abstract buildStringCondition(fieldExpr: AnyColumn | SQL, operator: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'like' | 'notLike' | 'ilike' | 'regex' | 'notRegex', value: string): SQL;
237
218
  abstract castToType(fieldExpr: AnyColumn | SQL, targetType: 'timestamp' | 'decimal' | 'integer'): SQL;
238
- abstract buildAvg(fieldExpr: AnyColumn | SQL): SQL;
239
- abstract buildCaseWhen(conditions: Array<{
240
- when: SQL;
241
- then: any;
242
- }>, elseValue?: any): SQL;
243
- abstract buildBooleanLiteral(value: boolean): SQL;
244
- abstract convertFilterValue(value: any): any;
245
- abstract prepareDateValue(date: Date): any;
246
- abstract isTimestampInteger(): boolean;
247
- abstract convertTimeDimensionResult(value: any): any;
248
219
  abstract getCapabilities(): DatabaseCapabilities;
249
- abstract buildStddev(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL | null;
250
- abstract buildVariance(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL | null;
251
220
  abstract buildPercentile(fieldExpr: AnyColumn | SQL, percentile: number): SQL | null;
252
- abstract buildWindowFunction(type: WindowFunctionType, fieldExpr: AnyColumn | SQL | null, partitionBy?: (AnyColumn | SQL)[], orderBy?: Array<{
253
- field: AnyColumn | SQL;
254
- direction: 'asc' | 'desc';
255
- }>, config?: WindowFunctionConfig): SQL | null;
256
221
  /**
257
222
  * Default implementation returns template unchanged
258
223
  * Override in specific adapters for database-specific preprocessing
259
224
  */
260
225
  preprocessCalculatedTemplate(calculatedSql: string): string;
226
+ /**
227
+ * Wrap an aggregate so NULL (empty set) becomes 0.
228
+ * Default uses COALESCE; engines without COALESCE (MySQL/SQLite) override with IFNULL.
229
+ */
230
+ protected nullToZero(expr: SQL): SQL;
231
+ /**
232
+ * Case-insensitive LIKE matching for contains/startsWith/endsWith/ilike.
233
+ * Default uses native ILIKE (PostgreSQL/DuckDB/Snowflake); engines without ILIKE
234
+ * (MySQL/SQLite/Databend) override with LOWER()+LIKE.
235
+ * @param pattern - the LIKE pattern in its original case (already wrapped with % as needed)
236
+ */
237
+ protected caseInsensitiveLike(fieldExpr: AnyColumn | SQL, pattern: string, negated: boolean): SQL;
238
+ /**
239
+ * Regular-expression matching. Default uses PostgreSQL's ~* / !~* operators;
240
+ * each other engine overrides with its own regex syntax (REGEXP, GLOB, regexp_matches, REGEXP_LIKE).
241
+ */
242
+ protected regexCondition(fieldExpr: AnyColumn | SQL, value: string, negated: boolean): SQL;
243
+ /**
244
+ * Build a string matching condition. The case-insensitive and regex families are
245
+ * delegated to the caseInsensitiveLike()/regexCondition() hooks; plain LIKE/NOT LIKE
246
+ * are identical across all engines.
247
+ */
248
+ buildStringCondition(fieldExpr: AnyColumn | SQL, operator: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'like' | 'notLike' | 'ilike' | 'regex' | 'notRegex', value: string): SQL;
249
+ /**
250
+ * Build conditional aggregation. Default uses portable CASE WHEN
251
+ * (MySQL/SQLite/Databend/Snowflake); PostgreSQL/DuckDB override with the FILTER clause.
252
+ */
253
+ buildConditionalAggregation(aggFn: 'count' | 'avg' | 'min' | 'max' | 'sum', expr: SQL | null, condition: SQL): SQL;
254
+ /**
255
+ * Build AVG with null-to-zero handling (COALESCE/IFNULL via nullToZero()).
256
+ */
257
+ buildAvg(fieldExpr: AnyColumn | SQL): SQL;
258
+ /**
259
+ * Build CASE WHEN conditional expression.
260
+ * SQLite overrides this to handle embedded SQL objects in THEN/ELSE.
261
+ */
262
+ buildCaseWhen(conditions: Array<{
263
+ when: SQL;
264
+ then: any;
265
+ }>, elseValue?: any): SQL;
266
+ /**
267
+ * Build boolean literal. Default uses TRUE/FALSE keywords; SQLite overrides with 1/0.
268
+ */
269
+ buildBooleanLiteral(value: boolean): SQL;
270
+ /**
271
+ * Convert filter values to database-compatible types.
272
+ * Default is a pass-through; SQLite overrides to handle booleans/dates as integers.
273
+ */
274
+ convertFilterValue(value: any): any;
275
+ /**
276
+ * Prepare a Date for storage. Default passes the Date through (native timestamps);
277
+ * SQLite overrides to convert to integer milliseconds.
278
+ */
279
+ prepareDateValue(date: Date): any;
280
+ /**
281
+ * Whether timestamps are stored as integers. Default false; SQLite overrides to true.
282
+ */
283
+ isTimestampInteger(): boolean;
284
+ /**
285
+ * Convert a time-dimension result value. Default is a pass-through.
286
+ */
287
+ convertTimeDimensionResult(value: any): any;
288
+ /**
289
+ * Build STDDEV aggregation. Default uses STDDEV_POP/STDDEV_SAMP with null-to-zero.
290
+ * Engines without native STDDEV (SQLite) override to return null.
291
+ */
292
+ buildStddev(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL | null;
293
+ /**
294
+ * Build VARIANCE aggregation. Default uses VAR_POP/VAR_SAMP with null-to-zero.
295
+ * SQLite overrides to null; Databend overrides to a COVAR-based workaround.
296
+ */
297
+ buildVariance(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL | null;
298
+ /**
299
+ * Build a window function expression. Identical across all supported engines
300
+ * (standard SQL:2003 window syntax), so it lives here as a shared default.
301
+ */
302
+ buildWindowFunction(type: WindowFunctionType, fieldExpr: AnyColumn | SQL | null, partitionBy?: (AnyColumn | SQL)[], orderBy?: Array<{
303
+ field: AnyColumn | SQL;
304
+ direction: 'asc' | 'desc';
305
+ }>, config?: WindowFunctionConfig): SQL | null;
261
306
  /**
262
307
  * Helper method to build pattern for string matching
263
308
  * Can be overridden by specific adapters if needed
@@ -1,12 +1,8 @@
1
1
  import { SQL, AnyColumn } from 'drizzle-orm';
2
2
  import { TimeGranularity } from '../types';
3
- import { BaseDatabaseAdapter, DatabaseCapabilities, WindowFunctionType, WindowFunctionConfig } from './base-adapter';
3
+ import { BaseDatabaseAdapter, DatabaseCapabilities } from './base-adapter';
4
4
  export declare class DatabendAdapter extends BaseDatabaseAdapter {
5
5
  getEngineType(): 'databend';
6
- /**
7
- * Databend does not support LATERAL joins
8
- */
9
- supportsLateralJoins(): boolean;
10
6
  /**
11
7
  * Build Databend INTERVAL from ISO 8601 duration
12
8
  * Databend supports INTERVAL n UNIT syntax (e.g., INTERVAL 7 DAY)
@@ -22,11 +18,6 @@ export declare class DatabendAdapter extends BaseDatabaseAdapter {
22
18
  * Uses timestamp + INTERVAL n UNIT syntax (Databend doesn't support DATE_ADD function)
23
19
  */
24
20
  buildDateAddInterval(timestamp: SQL, duration: string): SQL;
25
- /**
26
- * Build Databend conditional aggregation using CASE WHEN
27
- * FILTER clause support is uncertain in Databend, so use CASE WHEN for safety
28
- */
29
- buildConditionalAggregation(aggFn: 'count' | 'avg' | 'min' | 'max' | 'sum', expr: SQL | null, condition: SQL): SQL;
30
21
  /**
31
22
  * Build Databend date difference in periods using DATE_DIFF
32
23
  */
@@ -38,60 +29,26 @@ export declare class DatabendAdapter extends BaseDatabaseAdapter {
38
29
  buildPeriodSeriesSubquery(maxPeriod: number): SQL;
39
30
  /**
40
31
  * Build Databend time dimension using DATE_TRUNC function
41
- * Databend supports DATE_TRUNC with quoted granularity like PostgreSQL
32
+ * Databend supports DATE_TRUNC with unquoted granularity keywords
42
33
  */
43
34
  buildTimeDimension(granularity: TimeGranularity, fieldExpr: AnyColumn | SQL): SQL;
44
35
  /**
45
- * Build Databend string matching conditions using LOWER+LIKE fallback
46
- * Databend does not support ILIKE
36
+ * Databend has no ILIKE use LOWER()+LIKE with SQL-side LOWER() on the pattern.
37
+ */
38
+ protected caseInsensitiveLike(fieldExpr: AnyColumn | SQL, pattern: string, negated: boolean): SQL;
39
+ /**
40
+ * Databend regex matching uses the REGEXP operator
47
41
  */
48
- buildStringCondition(fieldExpr: AnyColumn | SQL, operator: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'like' | 'notLike' | 'ilike' | 'regex' | 'notRegex', value: string): SQL;
42
+ protected regexCondition(fieldExpr: AnyColumn | SQL, value: string, negated: boolean): SQL;
49
43
  /**
50
44
  * Build Databend type casting
51
45
  * Databend supports both :: syntax and CAST() function
52
46
  */
53
47
  castToType(fieldExpr: AnyColumn | SQL, targetType: 'timestamp' | 'decimal' | 'integer'): SQL;
54
- /**
55
- * Build Databend AVG aggregation with COALESCE for NULL handling
56
- */
57
- buildAvg(fieldExpr: AnyColumn | SQL): SQL;
58
- /**
59
- * Build Databend CASE WHEN conditional expression
60
- */
61
- buildCaseWhen(conditions: Array<{
62
- when: SQL;
63
- then: any;
64
- }>, elseValue?: any): SQL;
65
- /**
66
- * Build Databend boolean literal
67
- * Databend uses TRUE/FALSE keywords
68
- */
69
- buildBooleanLiteral(value: boolean): SQL;
70
- /**
71
- * Convert filter values - Databend uses native types
72
- */
73
- convertFilterValue(value: any): any;
74
- /**
75
- * Prepare date value for Databend
76
- * Databend accepts Date objects directly
77
- */
78
- prepareDateValue(date: Date): any;
79
- /**
80
- * Databend stores timestamps as native timestamp types
81
- */
82
- isTimestampInteger(): boolean;
83
- /**
84
- * Databend time dimensions already return proper values
85
- */
86
- convertTimeDimensionResult(value: any): any;
87
48
  /**
88
49
  * Databend capabilities - start conservative
89
50
  */
90
51
  getCapabilities(): DatabaseCapabilities;
91
- /**
92
- * Build Databend STDDEV aggregation
93
- */
94
- buildStddev(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL;
95
52
  /**
96
53
  * Build Databend VARIANCE aggregation
97
54
  * Databend doesn't have VAR_POP/VAR_SAMP, but COVAR_POP(x,x) = VAR_POP(x)
@@ -103,12 +60,4 @@ export declare class DatabendAdapter extends BaseDatabaseAdapter {
103
60
  * Databend may support QUANTILE or PERCENTILE_CONT - start with unsupported
104
61
  */
105
62
  buildPercentile(_fieldExpr: AnyColumn | SQL, _percentile: number): SQL;
106
- /**
107
- * Build Databend window function expression
108
- * Databend has full window function support
109
- */
110
- buildWindowFunction(type: WindowFunctionType, fieldExpr: AnyColumn | SQL | null, partitionBy?: (AnyColumn | SQL)[], orderBy?: Array<{
111
- field: AnyColumn | SQL;
112
- direction: 'asc' | 'desc';
113
- }>, config?: WindowFunctionConfig): SQL;
114
63
  }
@@ -1,6 +1,6 @@
1
1
  import { SQL, AnyColumn } from 'drizzle-orm';
2
2
  import { TimeGranularity } from '../types';
3
- import { BaseDatabaseAdapter, DatabaseCapabilities, WindowFunctionType, WindowFunctionConfig } from './base-adapter';
3
+ import { BaseDatabaseAdapter, DatabaseCapabilities } from './base-adapter';
4
4
  export declare class DuckDBAdapter extends BaseDatabaseAdapter {
5
5
  getEngineType(): 'duckdb';
6
6
  /**
@@ -8,7 +8,6 @@ export declare class DuckDBAdapter extends BaseDatabaseAdapter {
8
8
  * which is required for the LATERAL join strategy in flow queries.
9
9
  * Use window function strategy instead.
10
10
  */
11
- supportsLateralJoins(): boolean;
12
11
  /**
13
12
  * Build DuckDB INTERVAL from ISO 8601 duration
14
13
  * DuckDB supports PostgreSQL-style INTERVAL literal syntax: INTERVAL '7 days'
@@ -25,9 +24,8 @@ export declare class DuckDBAdapter extends BaseDatabaseAdapter {
25
24
  */
26
25
  buildDateAddInterval(timestamp: SQL, duration: string): SQL;
27
26
  /**
28
- * Build DuckDB conditional aggregation using CASE WHEN
29
- * DuckDB supports FILTER clause, but CASE WHEN provides broader compatibility
30
- * Using FILTER clause as DuckDB does support it
27
+ * Build DuckDB conditional aggregation using the FILTER clause
28
+ * DuckDB supports the standard SQL FILTER clause like PostgreSQL
31
29
  */
32
30
  buildConditionalAggregation(aggFn: 'count' | 'avg' | 'min' | 'max' | 'sum', expr: SQL | null, condition: SQL): SQL;
33
31
  /**
@@ -46,48 +44,14 @@ export declare class DuckDBAdapter extends BaseDatabaseAdapter {
46
44
  */
47
45
  buildTimeDimension(granularity: TimeGranularity, fieldExpr: AnyColumn | SQL): SQL;
48
46
  /**
49
- * Build DuckDB string matching conditions using ILIKE (case-insensitive)
50
- * DuckDB supports ILIKE like PostgreSQL
47
+ * DuckDB uses function-style regex matching: regexp_matches(field, pattern)
51
48
  */
52
- buildStringCondition(fieldExpr: AnyColumn | SQL, operator: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'like' | 'notLike' | 'ilike' | 'regex' | 'notRegex', value: string): SQL;
49
+ protected regexCondition(fieldExpr: AnyColumn | SQL, value: string, negated: boolean): SQL;
53
50
  /**
54
51
  * Build DuckDB type casting
55
52
  * DuckDB supports both :: syntax and CAST() function
56
53
  */
57
54
  castToType(fieldExpr: AnyColumn | SQL, targetType: 'timestamp' | 'decimal' | 'integer'): SQL;
58
- /**
59
- * Build DuckDB AVG aggregation with COALESCE for NULL handling
60
- */
61
- buildAvg(fieldExpr: AnyColumn | SQL): SQL;
62
- /**
63
- * Build DuckDB CASE WHEN conditional expression
64
- */
65
- buildCaseWhen(conditions: Array<{
66
- when: SQL;
67
- then: any;
68
- }>, elseValue?: any): SQL;
69
- /**
70
- * Build DuckDB boolean literal
71
- * DuckDB uses TRUE/FALSE keywords
72
- */
73
- buildBooleanLiteral(value: boolean): SQL;
74
- /**
75
- * Convert filter values - DuckDB uses native types
76
- */
77
- convertFilterValue(value: any): any;
78
- /**
79
- * Prepare date value for DuckDB
80
- * DuckDB accepts Date objects directly
81
- */
82
- prepareDateValue(date: Date): any;
83
- /**
84
- * DuckDB stores timestamps as native timestamp types
85
- */
86
- isTimestampInteger(): boolean;
87
- /**
88
- * DuckDB time dimensions already return proper values
89
- */
90
- convertTimeDimensionResult(value: any): any;
91
55
  /**
92
56
  * DuckDB has full support for statistical and window functions
93
57
  * Note: supportsPercentileSubqueries is false because DuckDB's QUANTILE_CONT
@@ -96,27 +60,9 @@ export declare class DuckDBAdapter extends BaseDatabaseAdapter {
96
60
  * LIMIT in correlated subqueries, which is required for flow query LATERAL joins
97
61
  */
98
62
  getCapabilities(): DatabaseCapabilities;
99
- /**
100
- * Build DuckDB STDDEV aggregation
101
- * Uses STDDEV_POP for population, STDDEV_SAMP for sample
102
- */
103
- buildStddev(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL;
104
- /**
105
- * Build DuckDB VARIANCE aggregation
106
- * Uses VAR_POP for population, VAR_SAMP for sample
107
- */
108
- buildVariance(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL;
109
63
  /**
110
64
  * Build DuckDB PERCENTILE aggregation
111
65
  * DuckDB uses QUANTILE_CONT instead of PERCENTILE_CONT
112
66
  */
113
67
  buildPercentile(fieldExpr: AnyColumn | SQL, percentile: number): SQL;
114
- /**
115
- * Build DuckDB window function expression
116
- * DuckDB has full window function support
117
- */
118
- buildWindowFunction(type: WindowFunctionType, fieldExpr: AnyColumn | SQL | null, partitionBy?: (AnyColumn | SQL)[], orderBy?: Array<{
119
- field: AnyColumn | SQL;
120
- direction: 'asc' | 'desc';
121
- }>, config?: WindowFunctionConfig): SQL;
122
68
  }
@@ -1,16 +1,12 @@
1
1
  import { SQL, AnyColumn } from 'drizzle-orm';
2
2
  import { TimeGranularity } from '../types';
3
- import { BaseDatabaseAdapter, DatabaseCapabilities, WindowFunctionType, WindowFunctionConfig } from './base-adapter';
3
+ import { BaseDatabaseAdapter, DatabaseCapabilities } from './base-adapter';
4
4
  export declare class MySQLAdapter extends BaseDatabaseAdapter {
5
5
  getEngineType(): 'mysql' | 'singlestore';
6
- /**
7
- * MySQL supports LATERAL joins since version 8.0.14
8
- */
9
- supportsLateralJoins(): boolean;
10
6
  /**
11
7
  * Build MySQL INTERVAL from ISO 8601 duration
12
- * MySQL uses DATE_ADD with INTERVAL syntax but intervals must be added separately
13
- * For simplicity, we convert to seconds for consistent handling
8
+ * MySQL has no standalone interval literal usable in arithmetic, so we convert
9
+ * to total seconds for consistent handling.
14
10
  */
15
11
  buildIntervalFromISO(duration: string): SQL;
16
12
  /**
@@ -20,15 +16,9 @@ export declare class MySQLAdapter extends BaseDatabaseAdapter {
20
16
  buildTimeDifferenceSeconds(end: SQL, start: SQL): SQL;
21
17
  /**
22
18
  * Build MySQL timestamp + interval expression
23
- * Uses DATE_ADD function
19
+ * Uses a chain of DATE_ADD calls, one per duration component
24
20
  */
25
21
  buildDateAddInterval(timestamp: SQL, duration: string): SQL;
26
- /**
27
- * Build MySQL conditional aggregation using CASE WHEN
28
- * MySQL doesn't support FILTER clause, so we use CASE WHEN pattern
29
- * Example: AVG(CASE WHEN step_1_time IS NOT NULL THEN time_diff END)
30
- */
31
- buildConditionalAggregation(aggFn: 'count' | 'avg' | 'min' | 'max' | 'sum', expr: SQL | null, condition: SQL): SQL;
32
22
  /**
33
23
  * Build MySQL date difference in periods using TIMESTAMPDIFF
34
24
  * For retention analysis period calculations
@@ -45,78 +35,31 @@ export declare class MySQLAdapter extends BaseDatabaseAdapter {
45
35
  */
46
36
  buildTimeDimension(granularity: TimeGranularity, fieldExpr: AnyColumn | SQL): SQL;
47
37
  /**
48
- * Build MySQL string matching conditions using LIKE
49
- * MySQL LIKE is case-insensitive by default (depending on collation)
50
- * For guaranteed case-insensitive matching, we use LOWER() functions
38
+ * MySQL has no ILIKE use LOWER()+LIKE with the pattern lowercased in JS.
39
+ */
40
+ protected caseInsensitiveLike(fieldExpr: AnyColumn | SQL, pattern: string, negated: boolean): SQL;
41
+ /**
42
+ * MySQL regex matching uses the REGEXP operator
51
43
  */
52
- buildStringCondition(fieldExpr: AnyColumn | SQL, operator: 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'like' | 'notLike' | 'ilike' | 'regex' | 'notRegex', value: string): SQL;
44
+ protected regexCondition(fieldExpr: AnyColumn | SQL, value: string, negated: boolean): SQL;
53
45
  /**
54
46
  * Build MySQL type casting using CAST() function
55
47
  * MySQL equivalent to PostgreSQL's :: casting syntax
56
48
  */
57
49
  castToType(fieldExpr: AnyColumn | SQL, targetType: 'timestamp' | 'decimal' | 'integer'): SQL;
58
50
  /**
59
- * Build MySQL AVG aggregation with IFNULL for NULL handling
60
- * MySQL AVG returns NULL for empty sets, using IFNULL for consistency
61
- */
62
- buildAvg(fieldExpr: AnyColumn | SQL): SQL;
63
- /**
64
- * Build MySQL CASE WHEN conditional expression
65
- */
66
- buildCaseWhen(conditions: Array<{
67
- when: SQL;
68
- then: any;
69
- }>, elseValue?: any): SQL;
70
- /**
71
- * Build MySQL boolean literal
72
- * MySQL uses TRUE/FALSE keywords (equivalent to 1/0)
73
- */
74
- buildBooleanLiteral(value: boolean): SQL;
75
- /**
76
- * Convert filter values - MySQL uses native types
77
- * No conversion needed for MySQL
51
+ * MySQL AVG/STDDEV/VARIANCE use IFNULL (no COALESCE-for-zero idiom mismatch,
52
+ * but IFNULL is the MySQL-idiomatic null guard).
78
53
  */
79
- convertFilterValue(value: any): any;
80
- /**
81
- * Prepare date value for MySQL
82
- * MySQL accepts Date objects directly
83
- */
84
- prepareDateValue(date: Date): any;
85
- /**
86
- * MySQL stores timestamps as native timestamp types
87
- */
88
- isTimestampInteger(): boolean;
89
- /**
90
- * MySQL time dimensions already return proper values
91
- * No conversion needed
92
- */
93
- convertTimeDimensionResult(value: any): any;
54
+ protected nullToZero(expr: SQL): SQL;
94
55
  /**
95
56
  * MySQL 8.0+ has support for statistical and window functions
96
57
  * but not PERCENTILE_CONT
97
58
  */
98
59
  getCapabilities(): DatabaseCapabilities;
99
- /**
100
- * Build MySQL STDDEV aggregation
101
- * Uses STDDEV_POP for population, STDDEV_SAMP for sample
102
- */
103
- buildStddev(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL;
104
- /**
105
- * Build MySQL VARIANCE aggregation
106
- * Uses VAR_POP for population, VAR_SAMP for sample
107
- */
108
- buildVariance(fieldExpr: AnyColumn | SQL, useSample?: boolean): SQL;
109
60
  /**
110
61
  * MySQL does not support PERCENTILE_CONT
111
62
  * Returns null for graceful degradation
112
63
  */
113
64
  buildPercentile(_fieldExpr: AnyColumn | SQL, _percentile: number): SQL | null;
114
- /**
115
- * Build MySQL window function expression
116
- * MySQL 8.0+ has full window function support
117
- */
118
- buildWindowFunction(type: WindowFunctionType, fieldExpr: AnyColumn | SQL | null, partitionBy?: (AnyColumn | SQL)[], orderBy?: Array<{
119
- field: AnyColumn | SQL;
120
- direction: 'asc' | 'desc';
121
- }>, config?: WindowFunctionConfig): SQL;
122
65
  }