drizzle-cube 0.5.7 → 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 (541) 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/{utils.d.ts → 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/{server/google-CFYljAOF.js → adapters/google-CvKM9yVM.js} +83 -71
  13. package/dist/adapters/{handler-Dz1F4iwf.js → handler-CfgE0JSL.js} +515 -578
  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 +208 -178
  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/{server/openai-y7GhJNdn.js → adapters/openai-B5jEiqiB.js} +776 -719
  26. package/dist/adapters/openai-D0musiYP.cjs +17 -0
  27. package/dist/{server/openai-DiVskd89.js → adapters/openai-cDlFSTk6.js} +61 -59
  28. package/dist/adapters/openai-vXvLni8v.cjs +1 -0
  29. package/dist/adapters/{utils-DosuoabY.js → utils-BPWZsX7k.js} +1285 -1220
  30. package/dist/adapters/utils-_whV4fXL.cjs +128 -0
  31. package/dist/adapters/utils.cjs +1 -1
  32. package/dist/adapters/utils.js +2 -2
  33. package/dist/client/charts/ChartLoader.d.ts +3 -17
  34. package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
  35. package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
  36. package/dist/client/charts.js +14 -13
  37. package/dist/client/chunks/{DashboardEditModal-6KRE36mm.js → DashboardEditModal-okVfH8ZK.js} +5446 -4486
  38. package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
  39. package/dist/client/chunks/{RetentionCombinedChart-CCpu0C-s.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
  40. package/dist/client/chunks/{RetentionCombinedChart-CCpu0C-s.js.map → RetentionCombinedChart-BgbDhsPz.js.map} +1 -1
  41. package/dist/client/chunks/{RetentionHeatmap-B24PiIfr.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
  42. package/dist/client/chunks/{RetentionHeatmap-B24PiIfr.js.map → RetentionHeatmap-DjXZaTPq.js.map} +1 -1
  43. package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
  44. package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
  45. package/dist/client/chunks/{analysis-builder-shared-x576-O5p.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
  46. package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
  47. package/dist/client/chunks/{chart-activity-grid-CiHrLH6Y.js → chart-activity-grid-DX0SJbxs.js} +642 -494
  48. package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
  49. package/dist/client/chunks/chart-area-of01_62R.js +775 -0
  50. package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
  51. package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
  52. package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
  53. package/dist/client/chunks/{chart-box-plot-Bu9hy-17.js → chart-box-plot-kkBixZ27.js} +2 -2
  54. package/dist/client/chunks/{chart-box-plot-Bu9hy-17.js.map → chart-box-plot-kkBixZ27.js.map} +1 -1
  55. package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
  56. package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
  57. package/dist/client/chunks/{chart-candlestick-Dau5AF4E.js → chart-candlestick-DZp19Tzh.js} +2 -2
  58. package/dist/client/chunks/{chart-candlestick-Dau5AF4E.js.map → chart-candlestick-DZp19Tzh.js.map} +1 -1
  59. package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
  60. package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
  61. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
  62. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
  63. package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
  64. package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
  65. package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
  66. package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
  67. package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
  68. package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
  69. package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
  70. package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
  71. package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
  72. package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
  73. package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
  74. package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
  75. package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
  76. package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
  77. package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
  78. package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
  79. package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
  80. package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
  81. package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
  82. package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
  83. package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
  84. package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
  85. package/dist/client/chunks/{chart-data-table-Cm5jrpaw.js → chart-data-table-CKauQXme.js} +1046 -1121
  86. package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
  87. package/dist/client/chunks/{chart-funnel-Eke8IPtG.js → chart-funnel-CToKSBaL.js} +184 -222
  88. package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
  89. package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
  90. package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
  91. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
  92. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
  93. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
  94. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
  95. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
  96. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
  97. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
  98. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
  99. package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
  100. package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
  101. package/dist/client/chunks/{chart-markdown-BPW-EAm9.js → chart-markdown-CV75S_zL.js} +1359 -1240
  102. package/dist/client/chunks/chart-markdown-CV75S_zL.js.map +1 -0
  103. package/dist/client/chunks/{chart-measure-profile-BI3kADCp.js → chart-measure-profile-Ket8fJyf.js} +7 -7
  104. package/dist/client/chunks/{chart-measure-profile-BI3kADCp.js.map → chart-measure-profile-Ket8fJyf.js.map} +1 -1
  105. package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
  106. package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
  107. package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
  108. package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
  109. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
  110. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
  111. package/dist/client/chunks/{chart-sankey-CFzjGvZX.js → chart-sankey-DjrvKw6K.js} +36 -39
  112. package/dist/client/chunks/{chart-sankey-CFzjGvZX.js.map → chart-sankey-DjrvKw6K.js.map} +1 -1
  113. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
  114. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
  115. package/dist/client/chunks/{chart-sunburst-91Q2tzaB.js → chart-sunburst-leGpuDj7.js} +3 -3
  116. package/dist/client/chunks/{chart-sunburst-91Q2tzaB.js.map → chart-sunburst-leGpuDj7.js.map} +1 -1
  117. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
  118. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
  119. package/dist/client/chunks/{chart-waterfall-DcHbbPaG.js → chart-waterfall-DyvQReN5.js} +7 -7
  120. package/dist/client/chunks/{chart-waterfall-DcHbbPaG.js.map → chart-waterfall-DyvQReN5.js.map} +1 -1
  121. package/dist/client/chunks/{charts-core-CrBDYN6N.js → charts-core-DaXSt1Dd.js} +2 -2
  122. package/dist/client/chunks/{charts-core-CrBDYN6N.js.map → charts-core-DaXSt1Dd.js.map} +1 -1
  123. package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
  124. package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
  125. package/dist/client/chunks/{core-DsAWNRRv.js → core-D7vPfUIe.js} +2 -2
  126. package/dist/client/chunks/{core-DsAWNRRv.js.map → core-D7vPfUIe.js.map} +1 -1
  127. package/dist/client/chunks/{nl-NL-oyr2wENY.js → nl-NL-2zTAWTej.js} +8 -2
  128. package/dist/client/chunks/{nl-NL-oyr2wENY.js.map → nl-NL-2zTAWTej.js.map} +1 -1
  129. package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
  130. package/dist/client/chunks/{schema-visualization-BszcrmZX.js → schema-visualization-Cb_E9_Gd.js} +12 -12
  131. package/dist/client/chunks/{schema-visualization-BszcrmZX.js.map → schema-visualization-Cb_E9_Gd.js.map} +1 -1
  132. package/dist/client/chunks/{useDirtyStateTracking-B5wCDJSj.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
  133. package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
  134. package/dist/client/chunks/{useExplainAI-CCeCYzDm.js → useExplainAI-evnZkjCY.js} +14 -14
  135. package/dist/client/chunks/{useExplainAI-CCeCYzDm.js.map → useExplainAI-evnZkjCY.js.map} +1 -1
  136. package/dist/client/chunks/{utils-kqa-JIMg.js → utils-3P6z1vz5.js} +3 -3
  137. package/dist/client/chunks/{utils-kqa-JIMg.js.map → utils-3P6z1vz5.js.map} +1 -1
  138. package/dist/client/chunks/{vendor-0hJNlZXQ.js → vendor-DSpR0IW6.js} +43 -43
  139. package/dist/client/chunks/{vendor-0hJNlZXQ.js.map → vendor-DSpR0IW6.js.map} +1 -1
  140. package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
  141. package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
  142. package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
  143. package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
  144. package/dist/client/components/AnalysisBuilder/AnalysisAIPanel.d.ts +1 -1
  145. package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
  146. package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +1 -1
  147. package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
  148. package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +1 -1
  149. package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +1 -1
  150. package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +1 -1
  151. package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
  152. package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
  153. package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
  154. package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
  155. package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
  156. package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
  157. package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
  158. package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +2 -1
  159. package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
  160. package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
  161. package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
  162. package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
  163. package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -1
  164. package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
  165. package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
  166. package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
  167. package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
  168. package/dist/client/components/AnalysisBuilder/LimitSection.d.ts +1 -1
  169. package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
  170. package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +1 -1
  171. package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
  172. package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
  173. package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
  174. package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
  175. package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
  176. package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
  177. package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
  178. package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
  179. package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +5 -0
  180. package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
  181. package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
  182. package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
  183. package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
  184. package/dist/client/components/AnalyticsPage.d.ts +1 -1
  185. package/dist/client/components/ChartErrorBoundary.d.ts +1 -1
  186. package/dist/client/components/ChartTypeSelector.d.ts +1 -1
  187. package/dist/client/components/ColorPaletteSelector.d.ts +1 -1
  188. package/dist/client/components/DashboardEditModal.d.ts +2 -1
  189. package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
  190. package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +1 -1
  191. package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
  192. package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +1 -1
  193. package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
  194. package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
  195. package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
  196. package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
  197. package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
  198. package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
  199. package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
  200. package/dist/client/components/DashboardGrid.d.ts +1 -1
  201. package/dist/client/components/DashboardPortletCard.d.ts +2 -57
  202. package/dist/client/components/DashboardThumbnailPlaceholder.d.ts +1 -1
  203. package/dist/client/components/DataBrowser/DataBrowserSidebar.d.ts +1 -1
  204. package/dist/client/components/DataBrowser/DataBrowserToolbar.d.ts +1 -1
  205. package/dist/client/components/DataBrowser/index.d.ts +1 -1
  206. package/dist/client/components/DataHistogram.d.ts +1 -1
  207. package/dist/client/components/DebugModal.d.ts +1 -1
  208. package/dist/client/components/DrillBreadcrumb.d.ts +2 -1
  209. package/dist/client/components/LoadingIndicator.d.ts +1 -1
  210. package/dist/client/components/MobileStackedLayout.d.ts +1 -1
  211. package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
  212. package/dist/client/components/PortletContainer.d.ts +1 -1
  213. package/dist/client/components/PortletFilterConfigModal.d.ts +6 -4
  214. package/dist/client/components/RowManagedLayout.d.ts +1 -1
  215. package/dist/client/components/ScaledGridWrapper.d.ts +1 -1
  216. package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
  217. package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
  218. package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
  219. package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
  220. package/dist/client/components/SchemaVisualization/index.d.ts +1 -1
  221. package/dist/client/components/TextPortletModal.d.ts +1 -1
  222. package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
  223. package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
  224. package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
  225. package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
  226. package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
  227. package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
  228. package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
  229. package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
  230. package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
  231. package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
  232. package/dist/client/components/charts/AxisFormatControls.d.ts +5 -3
  233. package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
  234. package/dist/client/components/charts/BarSeries.d.ts +29 -0
  235. package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
  236. package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
  237. package/dist/client/components/charts/ChartContainer.d.ts +1 -1
  238. package/dist/client/components/charts/ChartLegend.d.ts +1 -1
  239. package/dist/client/components/charts/ChartStates.d.ts +38 -0
  240. package/dist/client/components/charts/ChartTooltip.d.ts +1 -1
  241. package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
  242. package/dist/client/components/charts/FunnelViews.d.ts +16 -0
  243. package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
  244. package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
  245. package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
  246. package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
  247. package/dist/client/components/charts/KpiStates.d.ts +19 -0
  248. package/dist/client/components/charts/MissingDependencyFallback.d.ts +1 -1
  249. package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
  250. package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
  251. package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
  252. package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
  253. package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
  254. package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
  255. package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
  256. package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
  257. package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
  258. package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
  259. package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
  260. package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
  261. package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
  262. package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
  263. package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
  264. package/dist/client/components/dashboard/DashboardContext.d.ts +2 -2
  265. package/dist/client/components/dashboard/DashboardCoordinator.d.ts +1 -1
  266. package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
  267. package/dist/client/components/dashboard/DashboardFilterBar.d.ts +1 -1
  268. package/dist/client/components/dashboard/DashboardGridSurface.d.ts +1 -1
  269. package/dist/client/components/dashboard/DashboardModals.d.ts +1 -1
  270. package/dist/client/components/dashboard/DashboardProvider.d.ts +1 -1
  271. package/dist/client/components/dashboard/DashboardToolbar.d.ts +1 -1
  272. package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
  273. package/dist/client/components/dashboard/dashboardGridUtils.d.ts +1 -1
  274. package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
  275. package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
  276. package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
  277. package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
  278. package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
  279. package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
  280. package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
  281. package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
  282. package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
  283. package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
  284. package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
  285. package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
  286. package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
  287. package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
  288. package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
  289. package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
  290. package/dist/client/components/shared/utils.d.ts +4 -43
  291. package/dist/client/components.js +3 -3
  292. package/dist/client/hooks/agentChatStream.d.ts +39 -0
  293. package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
  294. package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
  295. package/dist/client/hooks/drillNavigation.d.ts +25 -0
  296. package/dist/client/hooks/useDashboardHook.d.ts +2 -2
  297. package/dist/client/hooks.js +3 -3
  298. package/dist/client/icons.d.ts +1 -1
  299. package/dist/client/icons.js +2 -2
  300. package/dist/client/index.js +816 -669
  301. package/dist/client/index.js.map +1 -1
  302. package/dist/client/providers/CubeApiProvider.d.ts +1 -1
  303. package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
  304. package/dist/client/providers/CubeMetaProvider.d.ts +1 -1
  305. package/dist/client/providers/CubeProvider.d.ts +1 -1
  306. package/dist/client/providers/I18nProvider.d.ts +1 -1
  307. package/dist/client/providers.js +3 -3
  308. package/dist/client/schema.js +1 -1
  309. package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
  310. package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
  311. package/dist/client/shared/queryTransforms.d.ts +20 -0
  312. package/dist/client/shared/utils.d.ts +2 -4
  313. package/dist/client/stores/analysisBuilderStore.d.ts +1 -1
  314. package/dist/client/stores/dashboardStore.d.ts +1 -1
  315. package/dist/client/stores/dataBrowserStore.d.ts +1 -1
  316. package/dist/client/stores/notebookStore.d.ts +1 -1
  317. package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
  318. package/dist/client/styles.css +1 -1
  319. package/dist/client/types/drill.d.ts +1 -1
  320. package/dist/client/types.d.ts +7 -2
  321. package/dist/client/utils/axisValueFormatting.d.ts +32 -0
  322. package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
  323. package/dist/client/utils/filterUtils.d.ts +33 -5
  324. package/dist/client/utils/joinReachability.d.ts +27 -0
  325. package/dist/client/utils/timeValueFormatting.d.ts +32 -0
  326. package/dist/client/utils.js +6 -6
  327. package/dist/client-bundle-stats.html +1 -1
  328. package/dist/mcp-app/mcp-app.html +55 -55
  329. package/dist/server/google-BOnRIN1w.cjs +2 -0
  330. package/dist/{adapters/google-CFYljAOF.js → server/google-CvKM9yVM.js} +83 -71
  331. package/dist/server/index.cjs +179 -211
  332. package/dist/server/index.d.ts +2 -5050
  333. package/dist/server/index.js +6360 -6462
  334. package/dist/{adapters/openai-y7GhJNdn.js → server/openai-B5jEiqiB.js} +776 -719
  335. package/dist/server/openai-D0musiYP.cjs +17 -0
  336. package/dist/{adapters/openai-DiVskd89.js → server/openai-cDlFSTk6.js} +61 -59
  337. package/dist/server/openai-vXvLni8v.cjs +1 -0
  338. package/dist/server/server/adapters/base-adapter.d.ts +332 -0
  339. package/dist/server/server/adapters/databend-adapter.d.ts +63 -0
  340. package/dist/server/server/adapters/duckdb-adapter.d.ts +68 -0
  341. package/dist/server/server/adapters/mysql-adapter.d.ts +65 -0
  342. package/dist/server/server/adapters/postgres-adapter.d.ts +55 -0
  343. package/dist/server/server/adapters/singlestore-adapter.d.ts +4 -0
  344. package/dist/server/server/adapters/snowflake-adapter.d.ts +53 -0
  345. package/dist/server/server/adapters/sqlite-adapter.d.ts +120 -0
  346. package/dist/server/server/adapters/window-function-builder.d.ts +11 -0
  347. package/dist/server/server/agent/chart-validation.d.ts +22 -0
  348. package/dist/server/server/agent/handler-steps.d.ts +37 -0
  349. package/dist/server/server/agent/handler.d.ts +25 -0
  350. package/dist/server/server/agent/index.d.ts +11 -0
  351. package/dist/server/server/agent/providers/anthropic.d.ts +24 -0
  352. package/dist/server/server/agent/providers/factory.d.ts +12 -0
  353. package/dist/server/server/agent/providers/google.d.ts +23 -0
  354. package/dist/server/server/agent/providers/index.d.ts +6 -0
  355. package/dist/server/server/agent/providers/openai.d.ts +26 -0
  356. package/dist/server/server/agent/providers/types.d.ts +95 -0
  357. package/dist/server/server/agent/system-prompt.d.ts +5 -0
  358. package/dist/server/server/agent/tools.d.ts +28 -0
  359. package/dist/server/server/agent/types.d.ts +192 -0
  360. package/dist/server/server/ai/discovery-helpers.d.ts +29 -0
  361. package/dist/server/server/ai/discovery.d.ts +66 -0
  362. package/dist/server/server/ai/index.d.ts +10 -0
  363. package/dist/server/server/ai/mcp-prompts.d.ts +83 -0
  364. package/dist/server/server/ai/query-schema.d.ts +258 -0
  365. package/dist/server/server/ai/schemas.d.ts +63 -0
  366. package/dist/server/server/ai/suggestion-helpers.d.ts +33 -0
  367. package/dist/server/server/ai/suggestion.d.ts +16 -0
  368. package/dist/server/server/ai/validation-helpers.d.ts +21 -0
  369. package/dist/server/server/ai/validation.d.ts +31 -0
  370. package/dist/server/server/builders/analysis-utils.d.ts +106 -0
  371. package/dist/server/server/builders/comparison-query-builder.d.ts +70 -0
  372. package/dist/server/server/builders/cte-builder.d.ts +108 -0
  373. package/dist/server/server/builders/date-time-builder.d.ts +34 -0
  374. package/dist/server/server/builders/date-time-helpers.d.ts +34 -0
  375. package/dist/server/server/builders/filter-builder.d.ts +25 -0
  376. package/dist/server/server/builders/filter-operators.d.ts +23 -0
  377. package/dist/server/server/builders/flow-query-builder.d.ts +136 -0
  378. package/dist/server/server/builders/funnel-query-builder.d.ts +145 -0
  379. package/dist/server/server/builders/group-by-builder.d.ts +38 -0
  380. package/dist/server/server/builders/index.d.ts +13 -0
  381. package/dist/server/server/builders/measure-builder.d.ts +185 -0
  382. package/dist/server/server/builders/retention-query-builder.d.ts +98 -0
  383. package/dist/server/server/cache-providers/index.d.ts +5 -0
  384. package/dist/server/server/cache-providers/memory.d.ts +105 -0
  385. package/dist/server/server/cache-utils.d.ts +85 -0
  386. package/dist/server/server/compiler-metadata.d.ts +11 -0
  387. package/dist/server/server/compiler.d.ts +212 -0
  388. package/dist/server/server/cube-utils.d.ts +158 -0
  389. package/dist/server/server/database-utils.d.ts +18 -0
  390. package/dist/server/server/execution/annotation-builder.d.ts +12 -0
  391. package/dist/server/server/execution/filter-cache-preloader.d.ts +19 -0
  392. package/dist/server/server/execution/mode-router.d.ts +25 -0
  393. package/dist/server/server/execution/query-result-cache.d.ts +21 -0
  394. package/dist/server/server/execution/result-post-processor.d.ts +10 -0
  395. package/dist/server/server/executor.d.ts +186 -0
  396. package/dist/server/server/executors/base-executor.d.ts +16 -0
  397. package/dist/server/server/executors/databend-executor.d.ts +33 -0
  398. package/dist/server/server/executors/duckdb-executor.d.ts +33 -0
  399. package/dist/server/server/executors/explain-utils.d.ts +28 -0
  400. package/dist/server/server/executors/index.d.ts +21 -0
  401. package/dist/server/server/executors/mysql-executor.d.ts +27 -0
  402. package/dist/server/server/executors/postgres-executor.d.ts +27 -0
  403. package/dist/server/server/executors/singlestore-executor.d.ts +9 -0
  404. package/dist/server/server/executors/snowflake-executor.d.ts +33 -0
  405. package/dist/server/server/executors/sqlite-executor.d.ts +28 -0
  406. package/dist/server/server/explain/databend-parser.d.ts +16 -0
  407. package/dist/server/server/explain/duckdb-parser.d.ts +28 -0
  408. package/dist/server/server/explain/explain-tree.d.ts +20 -0
  409. package/dist/server/server/explain/index.d.ts +9 -0
  410. package/dist/server/server/explain/mysql-parser.d.ts +38 -0
  411. package/dist/server/server/explain/postgres-parser.d.ts +18 -0
  412. package/dist/server/server/explain/snowflake-parser.d.ts +17 -0
  413. package/dist/server/server/explain/sqlite-parser.d.ts +23 -0
  414. package/dist/server/server/filter-cache.d.ts +73 -0
  415. package/dist/server/server/gap-filler.d.ts +48 -0
  416. package/dist/server/server/index.d.ts +38 -0
  417. package/dist/server/server/logical-plan/cte-planner-helpers.d.ts +37 -0
  418. package/dist/server/server/logical-plan/cte-planner.d.ts +104 -0
  419. package/dist/server/server/logical-plan/filter-propagation.d.ts +44 -0
  420. package/dist/server/server/logical-plan/index.d.ts +19 -0
  421. package/dist/server/server/logical-plan/join-planner.d.ts +27 -0
  422. package/dist/server/server/logical-plan/logical-plan-builder.d.ts +58 -0
  423. package/dist/server/server/logical-plan/logical-planner.d.ts +39 -0
  424. package/dist/server/server/logical-plan/optimiser.d.ts +34 -0
  425. package/dist/server/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
  426. package/dist/server/server/logical-plan/planner-utils.d.ts +20 -0
  427. package/dist/server/server/logical-plan/types.d.ts +199 -0
  428. package/dist/server/server/measure-classification.d.ts +40 -0
  429. package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
  430. package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +118 -0
  431. package/dist/server/server/physical-plan/index.d.ts +2 -0
  432. package/dist/server/server/physical-plan/processors/cte-processor.d.ts +6 -0
  433. package/dist/server/server/physical-plan/processors/index.d.ts +8 -0
  434. package/dist/server/server/physical-plan/processors/joins-processor.d.ts +6 -0
  435. package/dist/server/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
  436. package/dist/server/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
  437. package/dist/server/server/physical-plan/processors/predicates-processor.d.ts +6 -0
  438. package/dist/server/server/physical-plan/processors/selection-processor.d.ts +6 -0
  439. package/dist/server/server/physical-plan/processors/shared.d.ts +38 -0
  440. package/dist/server/server/physical-plan/processors/window-processor.d.ts +6 -0
  441. package/dist/server/server/prompts/explain-analysis-prompt.d.ts +47 -0
  442. package/dist/server/server/prompts/index.d.ts +27 -0
  443. package/dist/server/server/prompts/single-step-prompt.d.ts +31 -0
  444. package/dist/server/server/prompts/step0-validation-prompt.d.ts +39 -0
  445. package/dist/server/server/prompts/step1-shape-prompt.d.ts +29 -0
  446. package/dist/server/server/prompts/step2-complete-prompt.d.ts +19 -0
  447. package/dist/server/server/prompts/types.d.ts +37 -0
  448. package/dist/server/server/query-handlers.d.ts +79 -0
  449. package/dist/server/server/query-modes.d.ts +28 -0
  450. package/dist/server/server/query-validator.d.ts +9 -0
  451. package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +98 -0
  452. package/dist/server/server/resolvers/index.d.ts +6 -0
  453. package/dist/server/server/resolvers/join-path-resolver.d.ts +158 -0
  454. package/dist/server/server/sql-format.d.ts +11 -0
  455. package/dist/server/server/template-substitution.d.ts +57 -0
  456. package/dist/server/server/types/analysis.d.ts +189 -0
  457. package/dist/server/server/types/cache.d.ts +132 -0
  458. package/dist/server/server/types/core.d.ts +164 -0
  459. package/dist/server/server/types/cube.d.ts +544 -0
  460. package/dist/server/server/types/executor.d.ts +156 -0
  461. package/dist/server/server/types/flow.d.ts +144 -0
  462. package/dist/server/server/types/funnel.d.ts +118 -0
  463. package/dist/server/server/types/index.d.ts +11 -0
  464. package/dist/server/server/types/metadata.d.ts +113 -0
  465. package/dist/server/server/types/query.d.ts +153 -0
  466. package/dist/server/server/types/retention.d.ts +141 -0
  467. package/dist/server/server/types/utils.d.ts +11 -0
  468. package/dist/server/server/types/validation.d.ts +14 -0
  469. package/package.json +15 -8
  470. package/dist/adapters/google-DUlXeeDA.cjs +0 -2
  471. package/dist/adapters/handler-C63rJUUK.cjs +0 -25
  472. package/dist/adapters/locale-CTNwPVZI.cjs +0 -198
  473. package/dist/adapters/locale-gU_d1Wja.js +0 -8249
  474. package/dist/adapters/mcp-transport-C4J4SAcn.cjs +0 -40
  475. package/dist/adapters/mcp-transport-CVUiifEc.js +0 -579
  476. package/dist/adapters/openai-6wrBvAnv.cjs +0 -1
  477. package/dist/adapters/openai-BDwb2u7y.cjs +0 -17
  478. package/dist/adapters/utils-CkEkU8Bo.cjs +0 -128
  479. package/dist/client/chunks/DashboardEditModal-6KRE36mm.js.map +0 -1
  480. package/dist/client/chunks/analysis-builder-shared-x576-O5p.js.map +0 -1
  481. package/dist/client/chunks/analysis-builder-zd48FVJO.js +0 -5367
  482. package/dist/client/chunks/analysis-builder-zd48FVJO.js.map +0 -1
  483. package/dist/client/chunks/chart-activity-grid-CiHrLH6Y.js.map +0 -1
  484. package/dist/client/chunks/chart-area-CXFK-Grv.js +0 -450
  485. package/dist/client/chunks/chart-area-CXFK-Grv.js.map +0 -1
  486. package/dist/client/chunks/chart-bar-DKXfLoGG.js +0 -271
  487. package/dist/client/chunks/chart-bar-DKXfLoGG.js.map +0 -1
  488. package/dist/client/chunks/chart-bubble-DGkTQlxM.js +0 -273
  489. package/dist/client/chunks/chart-bubble-DGkTQlxM.js.map +0 -1
  490. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
  491. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
  492. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
  493. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
  494. package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
  495. package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
  496. package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
  497. package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
  498. package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
  499. package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
  500. package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
  501. package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
  502. package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
  503. package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
  504. package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
  505. package/dist/client/chunks/chart-data-table-Cm5jrpaw.js.map +0 -1
  506. package/dist/client/chunks/chart-funnel-Eke8IPtG.js.map +0 -1
  507. package/dist/client/chunks/chart-gauge-DeRZNsyl.js +0 -424
  508. package/dist/client/chunks/chart-gauge-DeRZNsyl.js.map +0 -1
  509. package/dist/client/chunks/chart-heat-map-C86thSJ4.js +0 -231
  510. package/dist/client/chunks/chart-heat-map-C86thSJ4.js.map +0 -1
  511. package/dist/client/chunks/chart-kpi-delta-CxOYD2f1.js +0 -343
  512. package/dist/client/chunks/chart-kpi-delta-CxOYD2f1.js.map +0 -1
  513. package/dist/client/chunks/chart-kpi-number-C6gWz-x4.js +0 -322
  514. package/dist/client/chunks/chart-kpi-number-C6gWz-x4.js.map +0 -1
  515. package/dist/client/chunks/chart-kpi-text-dDONrhS-.js +0 -149
  516. package/dist/client/chunks/chart-kpi-text-dDONrhS-.js.map +0 -1
  517. package/dist/client/chunks/chart-line-r4iWevKZ.js +0 -433
  518. package/dist/client/chunks/chart-line-r4iWevKZ.js.map +0 -1
  519. package/dist/client/chunks/chart-markdown-BPW-EAm9.js.map +0 -1
  520. package/dist/client/chunks/chart-pie-yqH2YVEI.js +0 -172
  521. package/dist/client/chunks/chart-pie-yqH2YVEI.js.map +0 -1
  522. package/dist/client/chunks/chart-radar-B-_3v-rE.js +0 -154
  523. package/dist/client/chunks/chart-radar-B-_3v-rE.js.map +0 -1
  524. package/dist/client/chunks/chart-radial-bar-C0EgzfAF.js +0 -148
  525. package/dist/client/chunks/chart-radial-bar-C0EgzfAF.js.map +0 -1
  526. package/dist/client/chunks/chart-scatter-DZPirzwX.js +0 -255
  527. package/dist/client/chunks/chart-scatter-DZPirzwX.js.map +0 -1
  528. package/dist/client/chunks/chart-tree-map-Bi4axCvh.js +0 -298
  529. package/dist/client/chunks/chart-tree-map-Bi4axCvh.js.map +0 -1
  530. package/dist/client/chunks/useDirtyStateTracking-B5wCDJSj.js.map +0 -1
  531. package/dist/server/google-DUlXeeDA.cjs +0 -2
  532. package/dist/server/openai-6wrBvAnv.cjs +0 -1
  533. package/dist/server/openai-BDwb2u7y.cjs +0 -17
  534. /package/dist/adapters/{express → adapters/express}/index.d.ts +0 -0
  535. /package/dist/adapters/{fastify → adapters/fastify}/index.d.ts +0 -0
  536. /package/dist/adapters/{hono → adapters/hono}/index.d.ts +0 -0
  537. /package/dist/adapters/{locale.d.ts → adapters/locale.d.ts} +0 -0
  538. /package/dist/adapters/{mcp-tools.d.ts → adapters/mcp-tools.d.ts} +0 -0
  539. /package/dist/adapters/{mcp-transport.d.ts → adapters/mcp-transport.d.ts} +0 -0
  540. /package/dist/adapters/{nextjs → adapters/nextjs}/index.d.ts +0 -0
  541. /package/dist/adapters/{types.d.ts → adapters/types.d.ts} +0 -0
@@ -0,0 +1,199 @@
1
+ import { AnyColumn, Table } from 'drizzle-orm';
2
+ import { Cube, CubeJoin, JoinKeyInfo, PropagatingFilter, IntermediateJoinInfo, DownstreamJoinKeyInfo } from '../types/cube';
3
+ import { Filter } from '../types/query';
4
+ import { QueryWarning, TimeGranularity } from '../types/core';
5
+ /** Reference to a registered cube */
6
+ export interface CubeRef {
7
+ /** Cube name (e.g. 'Employees') */
8
+ name: string;
9
+ /** Resolved cube object */
10
+ cube: Cube;
11
+ }
12
+ /** Reference to a measure on a specific cube */
13
+ export interface MeasureRef {
14
+ /** Fully qualified name: CubeName.measureName */
15
+ name: string;
16
+ /** Cube that owns this measure */
17
+ cube: CubeRef;
18
+ /** Local measure name (without cube prefix) */
19
+ localName: string;
20
+ }
21
+ /** Reference to a dimension on a specific cube */
22
+ export interface DimensionRef {
23
+ /** Fully qualified name: CubeName.dimensionName */
24
+ name: string;
25
+ /** Cube that owns this dimension */
26
+ cube: CubeRef;
27
+ /** Local dimension name (without cube prefix) */
28
+ localName: string;
29
+ }
30
+ /** Reference to a time dimension with granularity/dateRange */
31
+ export interface TimeDimensionRef {
32
+ /** Fully qualified dimension name */
33
+ name: string;
34
+ cube: CubeRef;
35
+ localName: string;
36
+ granularity?: TimeGranularity;
37
+ dateRange?: string | string[];
38
+ fillMissingDates?: boolean;
39
+ compareDateRange?: (string | [string, string])[];
40
+ }
41
+ /** Reference to a column for join keys */
42
+ export interface ColumnRef {
43
+ column: AnyColumn;
44
+ alias?: string;
45
+ }
46
+ /** Order-by specification */
47
+ export interface OrderByRef {
48
+ /** Fully qualified field name */
49
+ name: string;
50
+ direction: 'asc' | 'desc';
51
+ }
52
+ export interface LogicalSchema {
53
+ measures: MeasureRef[];
54
+ dimensions: DimensionRef[];
55
+ timeDimensions: TimeDimensionRef[];
56
+ }
57
+ export interface JoinRef {
58
+ /** Target cube being joined */
59
+ target: CubeRef;
60
+ /** Table alias in the generated SQL */
61
+ alias: string;
62
+ /** SQL join type (already resolved from the effective relationship) */
63
+ joinType: 'inner' | 'left' | 'right' | 'full';
64
+ /**
65
+ * Symbolic join definition. The Drizzle join condition is materialized from
66
+ * this by DrizzlePlanBuilder — the logical plan itself holds no SQL and no
67
+ * baked security context.
68
+ */
69
+ joinDef: CubeJoin;
70
+ /** Relationship type from the join definition */
71
+ relationship?: 'belongsTo' | 'hasOne' | 'hasMany' | 'belongsToMany';
72
+ /**
73
+ * Junction table for belongsToMany relationships (symbolic).
74
+ * The junction join condition and security WHERE are materialized from
75
+ * `joinDef.through` by DrizzlePlanBuilder at physical-plan time.
76
+ */
77
+ junctionTable?: {
78
+ table: Table;
79
+ alias: string;
80
+ joinType: 'inner' | 'left' | 'right' | 'full';
81
+ sourceCubeName?: string;
82
+ };
83
+ }
84
+ /** Discriminated union tag for all node types */
85
+ export type LogicalNodeType = 'query' | 'simpleSource' | 'fullKeyAggregate' | 'ctePreAggregate' | 'keysDeduplication' | 'multiFactMerge';
86
+ /** Base interface shared by all logical plan nodes */
87
+ export interface LogicalNodeBase {
88
+ readonly type: LogicalNodeType;
89
+ readonly schema: LogicalSchema;
90
+ }
91
+ /**
92
+ * Root query node — represents the outermost SELECT.
93
+ * Wraps a source node with dimensions, measures, filters, ordering, etc.
94
+ */
95
+ export interface QueryNode extends LogicalNodeBase {
96
+ readonly type: 'query';
97
+ /** Source of rows (SimpleSource, FullKeyAggregate, etc.) */
98
+ source: LogicalNode;
99
+ /** Dimensions to group by */
100
+ dimensions: DimensionRef[];
101
+ /** Measures to aggregate */
102
+ measures: MeasureRef[];
103
+ /** User-supplied filters */
104
+ filters: Filter[];
105
+ /** Time dimensions with granularity / date range */
106
+ timeDimensions: TimeDimensionRef[];
107
+ /** ORDER BY clauses */
108
+ orderBy: OrderByRef[];
109
+ limit?: number;
110
+ offset?: number;
111
+ /** When true, skip GROUP BY (raw rows) */
112
+ ungrouped?: boolean;
113
+ /** Planning warnings surfaced to the caller */
114
+ warnings: QueryWarning[];
115
+ }
116
+ /**
117
+ * Simple source: one primary cube optionally joined to other cubes.
118
+ * This is the runtime physical-source shape used by SQL generation today.
119
+ */
120
+ export interface SimpleSource extends LogicalNodeBase {
121
+ readonly type: 'simpleSource';
122
+ /** Primary cube (FROM clause) */
123
+ primaryCube: CubeRef;
124
+ /** Cubes joined to the primary */
125
+ joins: JoinRef[];
126
+ /** Pre-aggregation CTEs attached to this source */
127
+ ctes: CTEPreAggregate[];
128
+ }
129
+ /**
130
+ * Full key aggregate: merges results from multiple subqueries
131
+ * that share the same dimension key set.
132
+ */
133
+ export interface FullKeyAggregate extends LogicalNodeBase {
134
+ readonly type: 'fullKeyAggregate';
135
+ /** Subqueries whose results will be merged */
136
+ subqueries: LogicalNode[];
137
+ /** Shared dimensions used as the merge key */
138
+ dimensions: DimensionRef[];
139
+ }
140
+ /**
141
+ * CTE pre-aggregation node.
142
+ * Represents a WITH clause that pre-aggregates a hasMany cube
143
+ * to prevent fan-out in the outer query.
144
+ */
145
+ export interface CTEPreAggregate extends LogicalNodeBase {
146
+ readonly type: 'ctePreAggregate';
147
+ /** The cube being pre-aggregated */
148
+ cube: CubeRef;
149
+ /** Table alias for the cube in the main query */
150
+ alias: string;
151
+ /** CTE alias (WITH clause name) */
152
+ cteAlias: string;
153
+ /** Keys connecting CTE back to the main query */
154
+ joinKeys: JoinKeyInfo[];
155
+ /** Measure names included in this CTE */
156
+ measures: string[];
157
+ /** Cross-cube filter propagation */
158
+ propagatingFilters?: PropagatingFilter[];
159
+ /** Downstream join keys for transitive joins through this CTE */
160
+ downstreamJoinKeys?: DownstreamJoinKeyInfo[];
161
+ /** Intermediate joins absorbed into this CTE for fan-out prevention */
162
+ intermediateJoins?: IntermediateJoinInfo[];
163
+ /** CTE type (currently only 'aggregate') */
164
+ cteType: 'aggregate';
165
+ /**
166
+ * Reason for creating this CTE:
167
+ * - 'hasMany': Direct hasMany target — outer query uses SUM
168
+ * - 'fanOutPrevention': Affected by hasMany elsewhere — outer query uses MAX
169
+ */
170
+ cteReason: 'hasMany' | 'fanOutPrevention';
171
+ }
172
+ /**
173
+ * Keys-based deduplication for multiplied measures.
174
+ */
175
+ export interface KeysDeduplication extends LogicalNodeBase {
176
+ readonly type: 'keysDeduplication';
177
+ /** SELECT DISTINCT PKs + dims */
178
+ keysSource: LogicalNode;
179
+ /** Aggregated measures source */
180
+ measureSource: LogicalNode;
181
+ /** Primary key columns to join on */
182
+ joinOn: ColumnRef[];
183
+ /** Measure names NOT from the multiplied cube (pre-aggregated in keys CTE) */
184
+ regularMeasures?: string[];
185
+ }
186
+ /**
187
+ * Multi-fact merge: combines independent fact subqueries
188
+ * that share dimensions.
189
+ */
190
+ export interface MultiFactMerge extends LogicalNodeBase {
191
+ readonly type: 'multiFactMerge';
192
+ /** Independent fact subqueries */
193
+ groups: LogicalNode[];
194
+ /** Shared dimensions for the merge */
195
+ sharedDimensions: DimensionRef[];
196
+ /** How to combine the groups */
197
+ mergeStrategy: 'fullJoin' | 'leftJoin' | 'innerJoin';
198
+ }
199
+ export type LogicalNode = QueryNode | SimpleSource | FullKeyAggregate | CTEPreAggregate | KeysDeduplication | MultiFactMerge;
@@ -0,0 +1,40 @@
1
+ import { Cube } from './types';
2
+ /**
3
+ * Measure types that are window functions. Window functions require special
4
+ * handling: no GROUP BY in the CTE, no re-aggregation in the outer query, and
5
+ * they return individual rows rather than grouped results.
6
+ */
7
+ export declare const WINDOW_FUNCTION_TYPES: readonly ["lag", "lead", "rank", "denseRank", "rowNumber", "ntile", "firstValue", "lastValue", "movingAvg", "movingSum"];
8
+ /** Check if a measure type is a window function. */
9
+ export declare function isWindowFunction(measureType: string): boolean;
10
+ /**
11
+ * Check if a measure is a post-aggregation window function.
12
+ * Post-aggregation windows reference a base `measure` in their windowConfig,
13
+ * indicating they operate on aggregated data rather than raw rows.
14
+ */
15
+ export declare function isPostAggregationWindow(measure: any): boolean;
16
+ /**
17
+ * Resolve the base-measure reference for a post-aggregation window function to a
18
+ * fully qualified name (e.g. 'totalRevenue' -> 'Sales.totalRevenue').
19
+ * Returns null when the measure is not a post-aggregation window.
20
+ */
21
+ export declare function getWindowBaseMeasure(measure: any, cubeName: string): string | null;
22
+ /**
23
+ * Default operation for a window function type.
24
+ * - lag/lead default to 'difference' (compare current vs previous/next)
25
+ * - all others default to 'raw'
26
+ */
27
+ export declare function getDefaultWindowOperation(windowType: string): 'raw' | 'difference' | 'ratio' | 'percentChange';
28
+ /**
29
+ * Categorize measures for post-aggregation window-function handling.
30
+ * - aggregateMeasures: regular aggregates (count, sum, avg, etc.)
31
+ * - postAggWindowMeasures: window functions referencing a base measure
32
+ * - requiredBaseMeasures: base measures those windows depend on (auto-added)
33
+ */
34
+ export declare function categorizeForPostAggregation(measureNames: string[], cubeMap: Map<string, Cube>): {
35
+ aggregateMeasures: string[];
36
+ postAggWindowMeasures: string[];
37
+ requiredBaseMeasures: Set<string>;
38
+ };
39
+ /** Whether any measure in the list is a post-aggregation window function. */
40
+ export declare function hasPostAggregationWindows(measureNames: string[], cubeMap: Map<string, Cube>): boolean;
@@ -0,0 +1,50 @@
1
+ import { DatabaseAdapter } from '../adapters/base-adapter';
2
+ import { DrizzleSqlBuilder } from './drizzle-sql-builder';
3
+ import { CTEBuilder } from '../builders/cte-builder';
4
+ import { PhysicalQueryPlan, QueryContext, SemanticQuery } from '../types';
5
+ import { QueryNode } from '../logical-plan';
6
+ /**
7
+ * Converts optimised logical plans into runtime physical query plans,
8
+ * then builds executable Drizzle queries.
9
+ */
10
+ export declare class DrizzlePlanBuilder {
11
+ private readonly queryBuilder;
12
+ private readonly cteBuilder;
13
+ private readonly databaseAdapter;
14
+ constructor(queryBuilder: DrizzleSqlBuilder, cteBuilder: CTEBuilder, databaseAdapter: DatabaseAdapter);
15
+ /**
16
+ * Build runtime physical context from an optimised logical plan.
17
+ * This is the physical-builder input for SQL generation.
18
+ */
19
+ derivePhysicalPlanContext(plan: QueryNode): PhysicalQueryPlan;
20
+ /**
21
+ * Materialize a symbolic JoinRef into a runtime JoinCubePlanEntry, building
22
+ * the Drizzle join condition(s) from the join definition. This is the seam
23
+ * where the logical plan's symbolic join refs become executable SQL — the
24
+ * planner no longer pre-builds any join SQL.
25
+ *
26
+ * Junction-table security is NOT materialized here: the stored
27
+ * `through.securitySql` function is carried forward and applied (in the WHERE
28
+ * clause) at build time with the request's security context.
29
+ */
30
+ private materializeJoin;
31
+ private derivePhysicalPlanContextFromMultiFact;
32
+ private derivePhysicalPlanContextFromFullKeyAggregate;
33
+ /**
34
+ * Reconstruct a SemanticQuery from a (possibly optimised) QueryNode.
35
+ *
36
+ * This is the materialization seam that makes the logical plan a real IR:
37
+ * the executor derives the query the physical builder consumes from the
38
+ * optimised plan, so optimiser rewrites of measures/filters/limit/etc. take
39
+ * effect in the generated SQL. Must faithfully round-trip every field the
40
+ * physical builder and processors read off a SemanticQuery.
41
+ */
42
+ toSemanticQuery(node: QueryNode): SemanticQuery;
43
+ private resolvePhysicalSimpleSource;
44
+ private resolvePhysicalSimpleSourceFromKeysDedup;
45
+ private resolveKeysDeduplicationMeta;
46
+ /**
47
+ * Build unified query that works for both single and multi-cube queries.
48
+ */
49
+ build(queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext): any;
50
+ }
@@ -0,0 +1,118 @@
1
+ import { SQL, AnyColumn } from 'drizzle-orm';
2
+ import { SemanticQuery, FilterOperator, Filter, Cube, QueryContext, PhysicalQueryPlan } from '../types';
3
+ import { DatabaseAdapter } from '../adapters/base-adapter';
4
+ import { ResolvedMeasures } from '../template-substitution';
5
+ export declare class DrizzleSqlBuilder {
6
+ private dateTimeBuilder;
7
+ private filterBuilder;
8
+ private groupByBuilder;
9
+ private measureBuilder;
10
+ constructor(databaseAdapter: DatabaseAdapter);
11
+ /**
12
+ * Build resolvedMeasures map for a set of measures
13
+ * Delegates to MeasureBuilder
14
+ */
15
+ buildResolvedMeasures(measureNames: string[], cubeMap: Map<string, Cube>, context: QueryContext, customMeasureBuilder?: (measureName: string, measure: any, cube: Cube) => SQL): ResolvedMeasures;
16
+ /**
17
+ * Build dynamic selections for measures, dimensions, and time dimensions
18
+ * Works for both single and multi-cube queries
19
+ * Handles calculated measures with dependency resolution
20
+ */
21
+ buildSelections(cubes: Map<string, Cube> | Cube, query: SemanticQuery, context: QueryContext): Record<string, SQL | AnyColumn>;
22
+ /**
23
+ * Build calculated measure expression by substituting {member} references
24
+ * Delegates to MeasureBuilder
25
+ */
26
+ buildCalculatedMeasure(measure: any, cube: Cube, allCubes: Map<string, Cube>, resolvedMeasures: ResolvedMeasures, context: QueryContext): SQL;
27
+ /**
28
+ * Build resolved measures map for a calculated measure from CTE columns
29
+ * Delegates to MeasureBuilder
30
+ */
31
+ buildCTECalculatedMeasure(measure: any, cube: Cube, cteInfo: {
32
+ cteAlias: string;
33
+ measures: string[];
34
+ cube: Cube;
35
+ }, allCubes: Map<string, Cube>, context: QueryContext): SQL;
36
+ /**
37
+ * Build measure expression for HAVING clause, handling CTE references correctly
38
+ * Delegates to MeasureBuilder
39
+ */
40
+ private buildHavingMeasureExpression;
41
+ /**
42
+ * Build measure expression with aggregation and filters
43
+ * Delegates to MeasureBuilder
44
+ */
45
+ buildMeasureExpression(measure: any, context: QueryContext, cube?: Cube): SQL;
46
+ /**
47
+ * Build time dimension expression with granularity using database adapter
48
+ * Delegates to DateTimeBuilder
49
+ */
50
+ buildTimeDimensionExpression(dimensionSql: any, granularity: string | undefined, context: QueryContext): SQL;
51
+ /**
52
+ * Build WHERE conditions from semantic query filters (dimensions only)
53
+ * Works for both single and multi-cube queries
54
+ * @param preBuiltFilters - Optional map of cube name to pre-built filter SQL for parameter deduplication
55
+ */
56
+ buildWhereConditions(cubes: Map<string, Cube> | Cube, query: SemanticQuery, context: QueryContext, queryPlan?: PhysicalQueryPlan, preBuiltFilters?: Map<string, SQL[]>): SQL[];
57
+ /**
58
+ * Append a single regular filter's WHERE condition, preferring pre-built
59
+ * filter SQL (for parameter deduplication) and skipping CTE-handled cubes.
60
+ */
61
+ private appendWhereFilter;
62
+ /** Append a time dimension's date-range WHERE condition (cached when possible). */
63
+ private appendTimeDimensionWhere;
64
+ /** Whether a cube is materialized in a pre-aggregation CTE of the plan. */
65
+ private cubeIsInCTE;
66
+ /**
67
+ * Build HAVING conditions from semantic query filters (measures only)
68
+ * Works for both single and multi-cube queries
69
+ */
70
+ buildHavingConditions(cubes: Map<string, Cube> | Cube, query: SemanticQuery, context: QueryContext, queryPlan?: PhysicalQueryPlan): SQL[];
71
+ /**
72
+ * Process a single filter (basic or logical)
73
+ * @param filterType - 'where' for dimension filters, 'having' for measure filters
74
+ */
75
+ private processFilter;
76
+ /** Build a WHERE condition for a dimension filter, honouring CTE skips and the filter cache. */
77
+ private processWhereDimensionFilter;
78
+ /**
79
+ * Build filter condition using Drizzle operators
80
+ * Delegates to FilterBuilder
81
+ */
82
+ private buildFilterCondition;
83
+ /**
84
+ * Build date range condition for time dimensions
85
+ * Delegates to DateTimeBuilder
86
+ */
87
+ buildDateRangeCondition(fieldExpr: AnyColumn | SQL, dateRange: string | string[]): SQL | null;
88
+ /**
89
+ * Build GROUP BY fields from dimensions and time dimensions
90
+ * Delegates to GroupByBuilder
91
+ */
92
+ buildGroupByFields(cubes: Map<string, Cube> | Cube, query: SemanticQuery, context: QueryContext, queryPlan?: any): (SQL | AnyColumn)[];
93
+ /**
94
+ * Build ORDER BY clause with automatic time dimension sorting
95
+ */
96
+ buildOrderBy(query: SemanticQuery, selectedFields?: string[]): SQL[];
97
+ /**
98
+ * Collect numeric field names (measures + numeric dimensions) for type conversion
99
+ * Works for both single and multi-cube queries
100
+ */
101
+ collectNumericFields(cubes: Map<string, Cube> | Cube, query: SemanticQuery): string[];
102
+ /**
103
+ * Apply LIMIT and OFFSET to a query with validation
104
+ * If offset is provided without limit, add a reasonable default limit
105
+ */
106
+ applyLimitAndOffset<T>(query: T, semanticQuery: SemanticQuery): T;
107
+ /**
108
+ * Public wrapper for buildFilterCondition - used by executor for cache preloading
109
+ * This allows pre-building filter SQL before query construction
110
+ */
111
+ buildFilterConditionPublic(fieldExpr: AnyColumn | SQL, operator: FilterOperator, values: any[], field?: any, dateRange?: string | string[]): SQL | null;
112
+ /**
113
+ * Build a logical filter (AND/OR) - used by executor for cache preloading
114
+ * This handles nested filter structures and builds combined SQL
115
+ * Delegates to FilterBuilder
116
+ */
117
+ buildLogicalFilter(filter: Filter, cubes: Map<string, Cube>, context: QueryContext): SQL | null;
118
+ }
@@ -0,0 +1,2 @@
1
+ export { DrizzlePlanBuilder } from './drizzle-plan-builder';
2
+ export { DrizzleSqlBuilder } from './drizzle-sql-builder';
@@ -0,0 +1,6 @@
1
+ import { PhysicalQueryPlan, QueryContext, SemanticQuery } from '../../types';
2
+ import { PhysicalBuildDependencies, CTEBuildState } from './shared';
3
+ /**
4
+ * Builds pre-aggregation CTE state used by selection/join/predicate processors.
5
+ */
6
+ export declare function buildCTEState(queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext, deps: PhysicalBuildDependencies): CTEBuildState;
@@ -0,0 +1,8 @@
1
+ export { buildCTEState } from './cte-processor';
2
+ export { buildModifiedSelections } from './selection-processor';
3
+ export { applyJoins } from './joins-processor';
4
+ export { applyPredicatesAndFinalize } from './predicates-processor';
5
+ export { buildKeysDeduplicationQuery } from './keys-dedup-processor';
6
+ export { buildMultiFactMergeQuery } from './multi-fact-processor';
7
+ export type { PhysicalBuildDependencies, CTEBuildState, JoinBuildState, SelectionMap, DownstreamJoinState } from './shared';
8
+ export { getCubesFromPlan } from './shared';
@@ -0,0 +1,6 @@
1
+ import { Cube, PhysicalQueryPlan, QueryContext } from '../../types';
2
+ import { CTEBuildState, JoinBuildState, PhysicalBuildDependencies, SelectionMap } from './shared';
3
+ /**
4
+ * Applies CTEs and JOIN graph construction to the query builder.
5
+ */
6
+ export declare function applyJoins(queryPlan: PhysicalQueryPlan, context: QueryContext, primaryCubeBase: ReturnType<Cube['sql']>, modifiedSelections: SelectionMap, cteState: CTEBuildState, deps: Pick<PhysicalBuildDependencies, 'cteBuilder'>): JoinBuildState;
@@ -0,0 +1,13 @@
1
+ import { PhysicalQueryPlan, QueryContext, SemanticQuery } from '../../types';
2
+ import { PhysicalBuildDependencies } from './shared';
3
+ /**
4
+ * Build the dual-CTE keys-deduplication query, or return null when the plan
5
+ * does not qualify (caller falls back to the standard build).
6
+ *
7
+ * The query splits into:
8
+ * - a "keys" CTE that groups by the query grain + multiplied cube primary key
9
+ * (pre-aggregating regular measures), and
10
+ * - a "pk_agg" CTE that pre-aggregates the multiplied cube's measures per PK,
11
+ * then re-aggregates both in an outer query joined on the primary key.
12
+ */
13
+ export declare function buildKeysDeduplicationQuery(queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext, deps: PhysicalBuildDependencies): any | null;
@@ -0,0 +1,13 @@
1
+ import { PhysicalQueryPlan, QueryContext, SemanticQuery } from '../../types';
2
+ import { PhysicalBuildDependencies } from './shared';
3
+ /**
4
+ * Build a function for `build()` so each group CTE can be materialized through
5
+ * the standard physical-plan builder without a class dependency.
6
+ */
7
+ export type GroupQueryBuilder = (queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext) => any;
8
+ /**
9
+ * Build a multi-fact-merge query (joining independent measure groups on shared
10
+ * grain keys), or return null when the plan does not qualify. Falls back to a
11
+ * UNION-of-keys strategy when a FULL OUTER JOIN is requested but unsupported.
12
+ */
13
+ export declare function buildMultiFactMergeQuery(queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext, deps: PhysicalBuildDependencies, buildGroup: GroupQueryBuilder): any | null;
@@ -0,0 +1,6 @@
1
+ import { Cube, PhysicalQueryPlan, QueryContext, SemanticQuery } from '../../types';
2
+ import { CTEBuildState, JoinBuildState, PhysicalBuildDependencies } from './shared';
3
+ /**
4
+ * Applies WHERE/GROUP/HAVING/ORDER/LIMIT phases.
5
+ */
6
+ export declare function applyPredicatesAndFinalize(queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext, allCubes: Map<string, Cube>, primaryCubeBase: ReturnType<Cube['sql']>, cteState: CTEBuildState, joinState: JoinBuildState, deps: Pick<PhysicalBuildDependencies, 'queryBuilder'>): any;
@@ -0,0 +1,6 @@
1
+ import { Cube, PhysicalQueryPlan, QueryContext, SemanticQuery } from '../../types';
2
+ import { PhysicalBuildDependencies, SelectionMap } from './shared';
3
+ /**
4
+ * Builds and rewrites selections (including CTE and window handling).
5
+ */
6
+ export declare function buildModifiedSelections(queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext, allCubes: Map<string, Cube>, deps: Pick<PhysicalBuildDependencies, 'queryBuilder' | 'databaseAdapter'>): SelectionMap;
@@ -0,0 +1,38 @@
1
+ import { SQL } from 'drizzle-orm';
2
+ import { DatabaseAdapter } from '../../adapters/base-adapter';
3
+ import { DrizzleSqlBuilder } from '../drizzle-sql-builder';
4
+ import { CTEBuilder } from '../../builders/cte-builder';
5
+ import { Cube, PhysicalQueryPlan } from '../../types';
6
+ export interface PhysicalBuildDependencies {
7
+ queryBuilder: DrizzleSqlBuilder;
8
+ cteBuilder: CTEBuilder;
9
+ databaseAdapter: DatabaseAdapter;
10
+ }
11
+ export interface DownstreamJoinState {
12
+ cteAlias: string;
13
+ joinKeys: Array<{
14
+ sourceColumn: string;
15
+ targetColumn: string;
16
+ sourceColumnObj?: any;
17
+ targetColumnObj?: any;
18
+ }>;
19
+ }
20
+ export interface CTEBuildState {
21
+ preBuiltFilterMap: Map<string, SQL[]>;
22
+ ctes: any[];
23
+ cteAliasMap: Map<string, string>;
24
+ downstreamCubeMap: Map<string, DownstreamJoinState>;
25
+ }
26
+ export interface JoinBuildState {
27
+ drizzleQuery: any;
28
+ allWhereConditions: SQL[];
29
+ cubesWithSecurityInJoin: Set<string>;
30
+ absorbedIntermediateCubes: Set<string>;
31
+ }
32
+ export type SelectionMap = Record<string, any>;
33
+ /**
34
+ * Apply a join of the given type to a Drizzle query builder.
35
+ * Shared by the physical-plan builders that assemble CTE/merge queries.
36
+ */
37
+ export declare function applyJoinByType(drizzleQuery: any, joinType: 'inner' | 'left' | 'right' | 'full', joinTarget: any, joinCondition: SQL): any;
38
+ export declare function getCubesFromPlan(queryPlan: PhysicalQueryPlan): Map<string, Cube>;
@@ -0,0 +1,6 @@
1
+ import { Cube, PhysicalQueryPlan, QueryContext, SemanticQuery } from '../../types';
2
+ import { PhysicalBuildDependencies, SelectionMap } from './shared';
3
+ /**
4
+ * Applies post-aggregation window measures to the selection map.
5
+ */
6
+ export declare function applyPostAggregationWindows(modifiedSelections: SelectionMap, queryPlan: PhysicalQueryPlan, query: SemanticQuery, context: QueryContext, allCubes: Map<string, Cube>, deps: Pick<PhysicalBuildDependencies, 'queryBuilder' | 'databaseAdapter'>): void;
@@ -0,0 +1,47 @@
1
+ import { CubeMetadata } from '../types/metadata.js';
2
+ /**
3
+ * System prompt template for EXPLAIN plan analysis.
4
+ *
5
+ * Placeholders:
6
+ * - {DATABASE_TYPE} - postgres, mysql, or sqlite
7
+ * - {CUBE_SCHEMA} - JSON-formatted cube schema with relationships
8
+ * - {SEMANTIC_QUERY} - The original semantic query object
9
+ * - {SQL_QUERY} - The generated SQL query
10
+ * - {NORMALIZED_PLAN} - JSON of normalized ExplainOperation[]
11
+ * - {RAW_EXPLAIN} - Raw EXPLAIN output from database
12
+ */
13
+ export declare const EXPLAIN_ANALYSIS_PROMPT = "You are a database performance expert analyzing query execution plans for a semantic layer (Cube.js/drizzle-cube).\n\nCRITICAL CONTEXT - READ CAREFULLY:\nThe user is working with a semantic layer that auto-generates SQL queries. They do NOT write or modify SQL directly.\n\nTherefore, your recommendations MUST focus ONLY on:\n1. INDEX CREATION - Specific CREATE INDEX statements they can run\n2. TABLE STRUCTURE - Schema changes (column types, constraints)\n3. CUBE CONFIGURATION - How cube definitions (joins, filters) might be improved\n4. GENERAL INSIGHTS - Understanding what makes the query slow\n\nDO NOT recommend:\n- Rewriting the SQL query (users can't do this)\n- Changing JOIN order (the semantic layer handles this)\n- Using different query patterns (CTEs, subqueries, etc.)\n- Any SQL modification beyond index/schema changes\n\nDATABASE TYPE: {DATABASE_TYPE}\n\nCUBE DEFINITION SYNTAX (drizzle-cube):\nUsers define cubes in TypeScript like this. There are TWO valid syntax patterns for security context:\n\nPATTERN 1 - Simple WHERE filter (older syntax):\n```typescript\nconst employeesCube = defineCube({\n name: 'Employees',\n // Security filter - returns just the WHERE condition\n sql: (securityContext) => eq(employees.organisationId, securityContext.organisationId),\n // ...\n})\n```\n\nPATTERN 2 - Full QueryContext with BaseQueryDefinition (recommended):\n```typescript\nconst employeesCube = defineCube({\n name: 'Employees',\n // Security filter - returns object with 'from' and 'where'\n sql: (ctx: QueryContext<Schema>): BaseQueryDefinition => ({\n from: employees,\n where: eq(employees.organisationId, ctx.securityContext.organisationId)\n }),\n // ...\n})\n```\n\nBOTH patterns correctly implement security context filtering. The key is:\n- Pattern 1: The function receives securityContext directly and returns a WHERE condition\n- Pattern 2: The function receives ctx (QueryContext) and accesses ctx.securityContext\n\nFULL CUBE EXAMPLE:\n```typescript\nconst employeesCube = defineCube({\n name: 'Employees',\n // Security filter using Pattern 2 (recommended)\n sql: (ctx: QueryContext<Schema>): BaseQueryDefinition => ({\n from: employees,\n where: eq(employees.organisationId, ctx.securityContext.organisationId)\n }),\n\n // Joins to other cubes\n joins: {\n Departments: {\n targetCube: () => departmentsCube,\n relationship: 'belongsTo', // or 'hasOne', 'hasMany', 'belongsToMany'\n on: [{ source: employees.departmentId, target: departments.id }]\n }\n },\n\n measures: {\n count: { type: 'count', sql: () => employees.id },\n avgSalary: { type: 'avg', sql: () => employees.salary }\n },\n\n dimensions: {\n name: { type: 'string', sql: () => employees.name },\n createdAt: { type: 'time', sql: () => employees.createdAt }\n }\n})\n```\n\nSECURITY CONTEXT VALIDATION:\nWhen checking if a cube has proper security context, look for EITHER:\n- `sql: (securityContext) => eq(table.organisationId, securityContext.organisationId)`\n- `sql: (ctx) => ({ from: table, where: eq(table.organisationId, ctx.securityContext.organisationId) })`\n- Any variation that filters by organisationId using the security context parameter\n\nA cube is MISSING security context ONLY if:\n- The sql function doesn't use the securityContext/ctx parameter at all\n- There's no filter on organisationId (or equivalent tenant identifier)\n- The sql property is missing entirely\n\nCUBE RECOMMENDATION TYPES:\nWhen suggesting cube changes, ONLY recommend features that drizzle-cube supports:\n\nSUPPORTED FEATURES:\n- dimensions (with sql expressions)\n- measures (count, sum, avg, min, max, countDistinct, countDistinctApprox)\n- joins (belongsTo, hasOne, hasMany, belongsToMany)\n- security context filtering via sql function\n\nNOT SUPPORTED (do NOT recommend these):\n- preAggregations (not implemented)\n- segments (not implemented)\n- refreshKey (not implemented)\n- scheduledRefresh (not implemented)\n\n1. ADDING JOINS - If queries frequently combine cubes without explicit joins:\n ```typescript\n joins: {\n TargetCube: {\n targetCube: () => targetCube,\n relationship: 'belongsTo', // or 'hasOne', 'hasMany', 'belongsToMany'\n on: [{ source: table.foreignKey, target: targetTable.id }]\n }\n }\n ```\n\n2. OPTIMIZING BASE QUERY FILTERS (ONLY if SQL lacks tenant filtering):\n NOTE: If the SQL already filters by organisation_id, tenant_id, or similar, the cube is correctly configured.\n Only suggest this if security/tenant filtering is genuinely missing from the generated SQL.\n ```typescript\n sql: (ctx: QueryContext<Schema>): BaseQueryDefinition => ({\n from: table,\n where: and(\n eq(table.organisationId, ctx.securityContext.organisationId),\n eq(table.isActive, true) // Add commonly-used filters to base query\n )\n })\n ```\n\n3. ADDING CALCULATED MEASURES - For commonly-needed aggregations:\n ```typescript\n measures: {\n averageOrderValue: {\n type: 'avg',\n sql: () => orders.total\n },\n activeUserCount: {\n type: 'count',\n sql: () => users.id,\n filters: [{ sql: () => eq(users.isActive, true) }]\n }\n }\n ```\n\nCUBE SCHEMA (the semantic layer structure):\n{CUBE_SCHEMA}\n\nSEMANTIC QUERY (what the user requested):\n{SEMANTIC_QUERY}\n\nGENERATED SQL:\n{SQL_QUERY}\n\nEXECUTION PLAN (normalized format):\n{NORMALIZED_PLAN}\n\nRAW EXPLAIN OUTPUT:\n{RAW_EXPLAIN}\n\nEXISTING INDEXES ON RELEVANT TABLES:\n{EXISTING_INDEXES}\n\nIMPORTANT: Before recommending an index, check if it already exists above. If an index already exists:\n- Do NOT recommend creating it again\n- Instead, note that the index exists and analyze whether it's being used effectively\n- If the index exists but isn't being used, recommend investigating why (wrong column order, statistics outdated, etc.)\n\nIMPORTANT: Before recommending security context optimizations, CHECK THE SQL QUERY above for existing filters:\n- Look for tenant/security filters like: organisation_id, organizationId, tenant_id, tenantId, org_id, orgId, company_id, companyId, or similar\n- If the SQL already contains parameterized filters on any of these columns (e.g., \"organisation_id = $1\", \"tenant_id = ?\"), security context IS ALREADY IMPLEMENTED\n- Do NOT suggest \"add security context\" or \"optimize base query filters\" if the SQL already filters by a tenant identifier\n- drizzle-cube AUTOMATICALLY applies security context to all queries - if you see tenant filters in the SQL, the cube is correctly configured\n- Only suggest security filter optimizations if the SQL genuinely lacks tenant filtering (which would be a serious bug)\n\nANALYSIS TASKS:\n\n1. UNDERSTAND THE QUERY\n - What business question is this answering?\n - What cubes and relationships are involved?\n - What aggregations and filters are applied?\n\n2. IDENTIFY PERFORMANCE ISSUES\n - Sequential scans on large tables (look for \"Seq Scan\" / \"ALL\" access)\n - Missing indexes (filters/joins on unindexed columns)\n - High row estimates with filters that could benefit from indexes\n - Sort operations that could use indexes\n\n3. GENERATE ACTIONABLE RECOMMENDATIONS\n For each issue, provide:\n - Specific CREATE INDEX statement (if applicable)\n - Exact table and column names\n - Expected impact estimate\n - {DATABASE_TYPE}-specific syntax\n\nINDEX SYNTAX BY DATABASE:\n- PostgreSQL: CREATE INDEX idx_name ON table_name (column1, column2);\n- MySQL: CREATE INDEX idx_name ON table_name (column1, column2);\n- SQLite: CREATE INDEX idx_name ON table_name (column1, column2);\n\nCOMPOSITE INDEX GUIDANCE:\n- For filters: Index columns used in WHERE clauses\n- For joins: Index foreign key columns (e.g., department_id, organisation_id)\n- For sorting: Include ORDER BY columns in index\n- Multi-tenant: Always consider including organisation_id in composite indexes\n\nRESPONSE FORMAT (JSON):\n{\n \"summary\": \"Brief description of what this query does\",\n \"assessment\": \"good|warning|critical\",\n \"assessmentReason\": \"Why this assessment\",\n \"queryUnderstanding\": \"Detailed explanation of the query's purpose and structure\",\n \"issues\": [\n {\n \"type\": \"sequential_scan|missing_index|high_cost|sort_operation\",\n \"description\": \"What the issue is\",\n \"severity\": \"high|medium|low\"\n }\n ],\n \"recommendations\": [\n {\n \"type\": \"index\",\n \"severity\": \"critical|warning|suggestion\",\n \"title\": \"Short actionable title\",\n \"description\": \"Detailed explanation of why this helps\",\n \"sql\": \"CREATE INDEX idx_name ON table (columns);\",\n \"table\": \"table_name\",\n \"columns\": [\"col1\", \"col2\"],\n \"estimatedImpact\": \"Expected improvement\"\n },\n {\n \"type\": \"cube\",\n \"severity\": \"critical|warning|suggestion\",\n \"title\": \"Short actionable title\",\n \"description\": \"Why this cube change helps\",\n \"cubeCode\": \"TypeScript snippet to add to the cube definition\",\n \"cubeName\": \"CubeName\",\n \"estimatedImpact\": \"Expected improvement\"\n }\n ]\n}\n\nCRITICAL: Return ONLY valid JSON. No markdown, no explanations outside JSON.";
14
+ /**
15
+ * Build the complete EXPLAIN analysis prompt with all context
16
+ *
17
+ * @param databaseType - The database engine type
18
+ * @param cubeSchema - JSON-formatted cube schema
19
+ * @param semanticQuery - JSON of the original semantic query
20
+ * @param sqlQuery - The generated SQL query
21
+ * @param normalizedPlan - JSON of the normalized ExplainOperation[]
22
+ * @param rawExplain - Raw EXPLAIN output from the database
23
+ * @param existingIndexes - Optional: JSON of existing indexes on relevant tables
24
+ * @returns Complete prompt ready to send to AI
25
+ */
26
+ export declare function buildExplainAnalysisPrompt(databaseType: 'postgres' | 'mysql' | 'sqlite', cubeSchema: string, semanticQuery: string, sqlQuery: string, normalizedPlan: string, rawExplain: string, existingIndexes?: string): string;
27
+ /**
28
+ * Format cube metadata for AI consumption
29
+ * Includes relationships and joins for full context
30
+ *
31
+ * @param metadata - Array of CubeMetadata from the semantic layer
32
+ * @returns JSON string formatted for the AI prompt
33
+ */
34
+ export declare function formatCubeSchemaForExplain(metadata: CubeMetadata[]): string;
35
+ /**
36
+ * Format existing indexes for AI consumption
37
+ *
38
+ * @param indexes - Array of index information from database query
39
+ * @returns Formatted string for the AI prompt
40
+ */
41
+ export declare function formatExistingIndexes(indexes: Array<{
42
+ table_name: string;
43
+ index_name: string;
44
+ columns: string[];
45
+ is_unique?: boolean;
46
+ is_primary?: boolean;
47
+ }>): string;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * AI Prompt Templates for Drizzle Cube Query Generation
3
+ *
4
+ * This module provides the system prompts used for AI-assisted query building.
5
+ * The prompts power a multi-stage generation flow:
6
+ *
7
+ * 0. **Step 0 - Validation**: Validate input for security and relevance
8
+ * - Uses STEP0_VALIDATION_PROMPT (fast/cheap model recommended)
9
+ *
10
+ * 1. **Single-Step Flow**: Used when no dimension values need to be fetched
11
+ * - Uses SYSTEM_PROMPT_TEMPLATE directly
12
+ *
13
+ * 2. **Multi-Stage Flow**: Used when dimension values are needed for filters
14
+ * - Step 1: Analyze query shape (STEP1_SYSTEM_PROMPT)
15
+ * - Step 2: Fetch dimension values from database (with security context)
16
+ * - Step 3: Generate final query (STEP2_SYSTEM_PROMPT)
17
+ *
18
+ * @see https://github.com/cliftonc/drizzle-cube/tree/main/src/server/prompts
19
+ * @module
20
+ */
21
+ export type { PromptContext, DimensionValues, Step1Result } from './types.js';
22
+ export type { Step0Result } from './step0-validation-prompt.js';
23
+ export { STEP0_VALIDATION_PROMPT, buildStep0Prompt } from './step0-validation-prompt.js';
24
+ export { SYSTEM_PROMPT_TEMPLATE, buildSystemPrompt } from './single-step-prompt.js';
25
+ export { STEP1_SYSTEM_PROMPT, buildStep1Prompt } from './step1-shape-prompt.js';
26
+ export { STEP2_SYSTEM_PROMPT, buildStep2Prompt } from './step2-complete-prompt.js';
27
+ export { EXPLAIN_ANALYSIS_PROMPT, buildExplainAnalysisPrompt, formatCubeSchemaForExplain, formatExistingIndexes } from './explain-analysis-prompt.js';