drizzle-cube 0.5.6 → 0.5.8
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.
- package/dist/{server/dist-DxegvyZF.cjs → adapters/dist-BOdf-GQO.cjs} +1 -1
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +4 -4
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +4 -4
- package/dist/{server/google-BXwMolCu.js → adapters/google-CFYljAOF.js} +1 -1
- package/dist/adapters/{google-Dgo9-Kb5.cjs → google-DUlXeeDA.cjs} +1 -1
- package/dist/adapters/{handler-Odsi9_Rd.js → handler-Cx8QYLk6.js} +20 -6
- package/dist/adapters/{handler-C0nUppAK.cjs → handler-CzbCuS6_.cjs} +4 -4
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +7 -7
- package/dist/adapters/{locale-Dy3LcTwN.js → locale-BPB7flIG.js} +16 -1
- package/dist/adapters/{locale-Dv6bl_eU.cjs → locale-tIMrNcCr.cjs} +6 -6
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +2 -2
- package/dist/adapters/mcp-transport-C2QzXm6h.cjs +40 -0
- package/dist/adapters/mcp-transport-D0B3S1tB.js +579 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +4 -4
- package/dist/{server/openai-zpXlGbbF.js → adapters/openai-B5jEiqiB.js} +2139 -948
- package/dist/{server/openai-CLWSwD-D.js → adapters/openai-BZdAA7Ji.js} +1 -1
- package/dist/adapters/openai-D0musiYP.cjs +17 -0
- package/dist/adapters/{openai-BjLV_Wjx.cjs → openai-D_U4V0kT.cjs} +1 -1
- package/dist/adapters/{utils-Bd5mzZfk.js → utils-D9JPLmfl.js} +24 -10
- package/dist/adapters/{utils-DklqMBHn.cjs → utils-KV37IBIv.cjs} +4 -4
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.js +1 -1
- package/dist/client/charts/ChartLoader.d.ts +1 -1
- package/dist/client/charts.js +13 -13
- package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js +9682 -0
- package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +1 -0
- package/dist/client/chunks/{RetentionCombinedChart-CivIny9P.js → RetentionCombinedChart-BPkfcTa8.js} +4 -4
- package/dist/client/chunks/{RetentionCombinedChart-CivIny9P.js.map → RetentionCombinedChart-BPkfcTa8.js.map} +1 -1
- package/dist/client/chunks/{RetentionHeatmap-BHCgwZmB.js → RetentionHeatmap-DGzLzr7h.js} +3 -3
- package/dist/client/chunks/{RetentionHeatmap-BHCgwZmB.js.map → RetentionHeatmap-DGzLzr7h.js.map} +1 -1
- package/dist/client/chunks/{af-ZA-BdL6DOWy.js → af-ZA-BTaChuqI.js} +1 -1
- package/dist/client/chunks/{af-ZA-BdL6DOWy.js.map → af-ZA-BTaChuqI.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-MoGvbMRe.js → analysis-builder-MuMIzoRq.js} +244 -244
- package/dist/client/chunks/{analysis-builder-MoGvbMRe.js.map → analysis-builder-MuMIzoRq.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-shared-DmyRh2O3.js → analysis-builder-shared-CYVwSPqt.js} +289 -289
- package/dist/client/chunks/{analysis-builder-shared-DmyRh2O3.js.map → analysis-builder-shared-CYVwSPqt.js.map} +1 -1
- package/dist/client/chunks/{chart-activity-grid-Bdb8U_NC.js → chart-activity-grid-DmruKPab.js} +13 -8
- package/dist/client/chunks/{chart-activity-grid-Bdb8U_NC.js.map → chart-activity-grid-DmruKPab.js.map} +1 -1
- package/dist/client/chunks/{chart-area-BZEnT-tf.js → chart-area-DHCPM4Em.js} +3 -3
- package/dist/client/chunks/{chart-area-BZEnT-tf.js.map → chart-area-DHCPM4Em.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-CTmdv_v0.js → chart-bar-KddciGDv.js} +4 -4
- package/dist/client/chunks/{chart-bar-CTmdv_v0.js.map → chart-bar-KddciGDv.js.map} +1 -1
- package/dist/client/chunks/{chart-box-plot-CYObdFtp.js → chart-box-plot-DYKfyOI8.js} +3 -3
- package/dist/client/chunks/{chart-box-plot-CYObdFtp.js.map → chart-box-plot-DYKfyOI8.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-CjFprySz.js → chart-bubble-CfqiB538.js} +3 -3
- package/dist/client/chunks/{chart-bubble-CjFprySz.js.map → chart-bubble-CfqiB538.js.map} +1 -1
- package/dist/client/chunks/{chart-candlestick-D2HoM3B5.js → chart-candlestick-Dwc92Mrj.js} +3 -3
- package/dist/client/chunks/{chart-candlestick-D2HoM3B5.js.map → chart-candlestick-Dwc92Mrj.js.map} +1 -1
- package/dist/client/chunks/{chart-config-activity-grid-Bom99j9m.js → chart-config-activity-grid-D_UX4NHC.js} +2 -2
- package/dist/client/chunks/{chart-config-activity-grid-Bom99j9m.js.map → chart-config-activity-grid-D_UX4NHC.js.map} +1 -1
- package/dist/client/chunks/{chart-config-area-DtYTKZxS.js → chart-config-area-Bq_UsW3x.js} +2 -2
- package/dist/client/chunks/{chart-config-area-DtYTKZxS.js.map → chart-config-area-Bq_UsW3x.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bar-7v5JVY2y.js → chart-config-bar-_JEGZnAu.js} +2 -2
- package/dist/client/chunks/{chart-config-bar-7v5JVY2y.js.map → chart-config-bar-_JEGZnAu.js.map} +1 -1
- package/dist/client/chunks/{chart-config-box-plot-BHGv-wqu.js → chart-config-box-plot-DJ-dWWXA.js} +2 -2
- package/dist/client/chunks/{chart-config-box-plot-BHGv-wqu.js.map → chart-config-box-plot-DJ-dWWXA.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bubble-BkHm-mfu.js → chart-config-bubble-gIoqVyjZ.js} +2 -2
- package/dist/client/chunks/{chart-config-bubble-BkHm-mfu.js.map → chart-config-bubble-gIoqVyjZ.js.map} +1 -1
- package/dist/client/chunks/{chart-config-candlestick-D1aaHvTe.js → chart-config-candlestick-N6DchAA3.js} +2 -2
- package/dist/client/chunks/{chart-config-candlestick-D1aaHvTe.js.map → chart-config-candlestick-N6DchAA3.js.map} +1 -1
- package/dist/client/chunks/{chart-config-data-table-B_Hw8w2J.js → chart-config-data-table-d7VBY-y_.js} +2 -2
- package/dist/client/chunks/{chart-config-data-table-B_Hw8w2J.js.map → chart-config-data-table-d7VBY-y_.js.map} +1 -1
- package/dist/client/chunks/{chart-config-funnel-DL8PSGuL.js → chart-config-funnel-DEYMcxsD.js} +2 -2
- package/dist/client/chunks/{chart-config-funnel-DL8PSGuL.js.map → chart-config-funnel-DEYMcxsD.js.map} +1 -1
- package/dist/client/chunks/{chart-config-gauge-BVLxuA3f.js → chart-config-gauge-DSwC04l0.js} +2 -2
- package/dist/client/chunks/{chart-config-gauge-BVLxuA3f.js.map → chart-config-gauge-DSwC04l0.js.map} +1 -1
- package/dist/client/chunks/{chart-config-heat-map-CjudGdui.js → chart-config-heat-map-CfRnRNcw.js} +2 -2
- package/dist/client/chunks/{chart-config-heat-map-CjudGdui.js.map → chart-config-heat-map-CfRnRNcw.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-delta-Bf47hGqD.js → chart-config-kpi-delta-D6BIkHL3.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-delta-Bf47hGqD.js.map → chart-config-kpi-delta-D6BIkHL3.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-number-QTQRNgOi.js → chart-config-kpi-number-Bx-V9a62.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-number-QTQRNgOi.js.map → chart-config-kpi-number-Bx-V9a62.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-text-BRze2eyh.js → chart-config-kpi-text-CcqC1u-8.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-text-BRze2eyh.js.map → chart-config-kpi-text-CcqC1u-8.js.map} +1 -1
- package/dist/client/chunks/{chart-config-line-BFeCqmKH.js → chart-config-line-Db3jDsWc.js} +2 -2
- package/dist/client/chunks/{chart-config-line-BFeCqmKH.js.map → chart-config-line-Db3jDsWc.js.map} +1 -1
- package/dist/client/chunks/{chart-config-markdown-EWYckwXv.js → chart-config-markdown-BtRIe8JN.js} +2 -2
- package/dist/client/chunks/{chart-config-markdown-EWYckwXv.js.map → chart-config-markdown-BtRIe8JN.js.map} +1 -1
- package/dist/client/chunks/{chart-config-measure-profile-B9nIhqKR.js → chart-config-measure-profile-DxRGa-zf.js} +2 -2
- package/dist/client/chunks/{chart-config-measure-profile-B9nIhqKR.js.map → chart-config-measure-profile-DxRGa-zf.js.map} +1 -1
- package/dist/client/chunks/{chart-config-pie-6LHtEyMM.js → chart-config-pie-DD4SmRTF.js} +2 -2
- package/dist/client/chunks/{chart-config-pie-6LHtEyMM.js.map → chart-config-pie-DD4SmRTF.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radar-BuLS6Inn.js → chart-config-radar-CC2XAaGr.js} +2 -2
- package/dist/client/chunks/{chart-config-radar-BuLS6Inn.js.map → chart-config-radar-CC2XAaGr.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radial-bar-BP0eMohx.js → chart-config-radial-bar-DmxKx1R0.js} +2 -2
- package/dist/client/chunks/{chart-config-radial-bar-BP0eMohx.js.map → chart-config-radial-bar-DmxKx1R0.js.map} +1 -1
- package/dist/client/chunks/{chart-config-sankey-CT8oGIGP.js → chart-config-sankey-BTnWA7EW.js} +2 -2
- package/dist/client/chunks/{chart-config-sankey-CT8oGIGP.js.map → chart-config-sankey-BTnWA7EW.js.map} +1 -1
- package/dist/client/chunks/{chart-config-scatter-DOSpN07Z.js → chart-config-scatter-DSYTjwRb.js} +2 -2
- package/dist/client/chunks/{chart-config-scatter-DOSpN07Z.js.map → chart-config-scatter-DSYTjwRb.js.map} +1 -1
- package/dist/client/chunks/{chart-config-sunburst-BSUX_YoB.js → chart-config-sunburst-Bwjtdf7X.js} +2 -2
- package/dist/client/chunks/{chart-config-sunburst-BSUX_YoB.js.map → chart-config-sunburst-Bwjtdf7X.js.map} +1 -1
- package/dist/client/chunks/{chart-config-tree-map-D8GuAgVB.js → chart-config-tree-map-BI-oQStO.js} +2 -2
- package/dist/client/chunks/{chart-config-tree-map-D8GuAgVB.js.map → chart-config-tree-map-BI-oQStO.js.map} +1 -1
- package/dist/client/chunks/{chart-config-waterfall-BDi7BoJP.js → chart-config-waterfall-DSnyixbI.js} +2 -2
- package/dist/client/chunks/{chart-config-waterfall-BDi7BoJP.js.map → chart-config-waterfall-DSnyixbI.js.map} +1 -1
- package/dist/client/chunks/{chart-data-table-DT4uBZaq.js → chart-data-table-BO4sXsim.js} +842 -834
- package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-B9crR3b3.js → chart-funnel-DnWRsmnS.js} +3 -3
- package/dist/client/chunks/{chart-funnel-B9crR3b3.js.map → chart-funnel-DnWRsmnS.js.map} +1 -1
- package/dist/client/chunks/{chart-gauge-DAMFsicz.js → chart-gauge-CgMeqeGb.js} +3 -3
- package/dist/client/chunks/{chart-gauge-DAMFsicz.js.map → chart-gauge-CgMeqeGb.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-BxgM_X1G.js → chart-heat-map-DcGm9SWK.js} +3 -3
- package/dist/client/chunks/{chart-heat-map-BxgM_X1G.js.map → chart-heat-map-DcGm9SWK.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-delta-DJKL02Ut.js → chart-kpi-delta-C2wKPqCb.js} +6 -6
- package/dist/client/chunks/{chart-kpi-delta-DJKL02Ut.js.map → chart-kpi-delta-C2wKPqCb.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-CuNEYbRx.js → chart-kpi-number-gWYF44ol.js} +8 -8
- package/dist/client/chunks/{chart-kpi-number-CuNEYbRx.js.map → chart-kpi-number-gWYF44ol.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-u8FJaZDQ.js → chart-kpi-text-DIYtJtk4.js} +4 -4
- package/dist/client/chunks/{chart-kpi-text-u8FJaZDQ.js.map → chart-kpi-text-DIYtJtk4.js.map} +1 -1
- package/dist/client/chunks/{chart-line-BZhzOjRl.js → chart-line-9BEGN5Ti.js} +4 -4
- package/dist/client/chunks/{chart-line-BZhzOjRl.js.map → chart-line-9BEGN5Ti.js.map} +1 -1
- package/dist/client/chunks/chart-markdown-dgUetjyM.js +3654 -0
- package/dist/client/chunks/chart-markdown-dgUetjyM.js.map +1 -0
- package/dist/client/chunks/{chart-measure-profile-BnpIOS4Q.js → chart-measure-profile-ClfpLs4q.js} +4 -4
- package/dist/client/chunks/{chart-measure-profile-BnpIOS4Q.js.map → chart-measure-profile-ClfpLs4q.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-CsdzxmSK.js → chart-pie-BjAIhyOi.js} +4 -4
- package/dist/client/chunks/{chart-pie-CsdzxmSK.js.map → chart-pie-BjAIhyOi.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-C_9RwMKw.js → chart-radar-Dgkcl2bN.js} +4 -4
- package/dist/client/chunks/{chart-radar-C_9RwMKw.js.map → chart-radar-Dgkcl2bN.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-CewRelyQ.js → chart-radial-bar-DdWJjAhK.js} +4 -4
- package/dist/client/chunks/{chart-radial-bar-CewRelyQ.js.map → chart-radial-bar-DdWJjAhK.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-ItraHWH1.js → chart-sankey-M3XpO_ah.js} +3 -3
- package/dist/client/chunks/{chart-sankey-ItraHWH1.js.map → chart-sankey-M3XpO_ah.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-k2IJbO2Y.js → chart-scatter-DaHYP_OL.js} +4 -4
- package/dist/client/chunks/{chart-scatter-k2IJbO2Y.js.map → chart-scatter-DaHYP_OL.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-NsFRuqi9.js → chart-sunburst-A_u6lqlS.js} +4 -4
- package/dist/client/chunks/{chart-sunburst-NsFRuqi9.js.map → chart-sunburst-A_u6lqlS.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-Cj_ewpwJ.js → chart-tree-map-uiwUU4nb.js} +4 -4
- package/dist/client/chunks/{chart-tree-map-Cj_ewpwJ.js.map → chart-tree-map-uiwUU4nb.js.map} +1 -1
- package/dist/client/chunks/{chart-waterfall-C-MTFcOz.js → chart-waterfall-BuhMoagf.js} +4 -4
- package/dist/client/chunks/{chart-waterfall-C-MTFcOz.js.map → chart-waterfall-BuhMoagf.js.map} +1 -1
- package/dist/client/chunks/{charts-core-vZA3zPKb.js → charts-core-jRtb0S2M.js} +2 -2
- package/dist/client/chunks/{charts-core-vZA3zPKb.js.map → charts-core-jRtb0S2M.js.map} +1 -1
- package/dist/client/chunks/{core-Su6tIYhp.js → core-D7vPfUIe.js} +84 -84
- package/dist/client/chunks/{core-Su6tIYhp.js.map → core-D7vPfUIe.js.map} +1 -1
- package/dist/client/chunks/{dist-BTq3NoG3.js → dist-zPWyTBdU.js} +1 -1
- package/dist/client/chunks/{dist-BTq3NoG3.js.map → dist-zPWyTBdU.js.map} +1 -1
- package/dist/client/chunks/{en-US-D-1JPTPv.js → en-US-BE6VoG0o.js} +1 -1
- package/dist/client/chunks/{en-US-D-1JPTPv.js.map → en-US-BE6VoG0o.js.map} +1 -1
- package/dist/client/chunks/{exceljs.min-Dc1cBQ5l.js → exceljs.min-CIqBqwTW.js} +2 -2
- package/dist/client/chunks/{exceljs.min-Dc1cBQ5l.js.map → exceljs.min-CIqBqwTW.js.map} +1 -1
- package/dist/client/chunks/{javascript-YXkoOgWa.js → javascript-DFnKaHmQ.js} +3 -3
- package/dist/client/chunks/{javascript-YXkoOgWa.js.map → javascript-DFnKaHmQ.js.map} +1 -1
- package/dist/client/chunks/{json-O7MKB_4V.js → json-Cu6rbgWf.js} +1 -1
- package/dist/client/chunks/{json-O7MKB_4V.js.map → json-Cu6rbgWf.js.map} +1 -1
- package/dist/client/chunks/{nl-NL-BErZMygi.js → nl-NL-CpVs7ox3.js} +7 -2
- package/dist/client/chunks/{nl-NL-BErZMygi.js.map → nl-NL-CpVs7ox3.js.map} +1 -1
- package/dist/client/chunks/{providers-DX3Vw5kc.js → providers-DwQCKdGW.js} +1 -1
- package/dist/client/chunks/{providers-DX3Vw5kc.js.map → providers-DwQCKdGW.js.map} +1 -1
- package/dist/client/chunks/{retention-YhT1Oohi.js → retention-ChW9jYdy.js} +1 -1
- package/dist/client/chunks/{retention-YhT1Oohi.js.map → retention-ChW9jYdy.js.map} +1 -1
- package/dist/client/chunks/{schema-visualization-BY9L2nBQ.js → schema-visualization-DE09kQE3.js} +5 -5
- package/dist/client/chunks/{schema-visualization-BY9L2nBQ.js.map → schema-visualization-DE09kQE3.js.map} +1 -1
- package/dist/client/chunks/{sql-r2a-9CCK.js → sql-CmVzGP4w.js} +1 -1
- package/dist/client/chunks/{sql-r2a-9CCK.js.map → sql-CmVzGP4w.js.map} +1 -1
- package/dist/client/chunks/{useDebounce-DGfYXtkm.js → useDirtyStateTracking-CoeQbprt.js} +99 -37
- package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-CD0KuKwY.js → useExplainAI-DlnXWdmz.js} +19 -19
- package/dist/client/chunks/{useExplainAI-CD0KuKwY.js.map → useExplainAI-DlnXWdmz.js.map} +1 -1
- package/dist/client/chunks/{useNotebookLayout-DKkMenhj.js → useNotebookLayout-Ck3Z3uzg.js} +2 -2
- package/dist/client/chunks/{useNotebookLayout-DKkMenhj.js.map → useNotebookLayout-Ck3Z3uzg.js.map} +1 -1
- package/dist/client/chunks/{utils-D2SCtAkZ.js → utils-CTKNaXS8.js} +40 -13
- package/dist/client/chunks/utils-CTKNaXS8.js.map +1 -0
- package/dist/client/chunks/{vendor-CfR5hJGc.js → vendor-CPIYyeuD.js} +102 -97
- package/dist/client/chunks/vendor-CPIYyeuD.js.map +1 -0
- package/dist/client/components/AnalysisBuilder/AnalysisAIPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +2 -1
- package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -1
- package/dist/client/components/AnalysisBuilder/LimitSection.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +1 -1
- package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
- package/dist/client/components/AnalyticsPage.d.ts +1 -1
- package/dist/client/components/ChartErrorBoundary.d.ts +1 -1
- package/dist/client/components/ChartTypeSelector.d.ts +1 -1
- package/dist/client/components/ColorPaletteSelector.d.ts +1 -1
- package/dist/client/components/DashboardEditModal.d.ts +2 -1
- package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +1 -1
- package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +1 -1
- package/dist/client/components/DashboardGrid.d.ts +3 -1
- package/dist/client/components/DashboardThumbnailPlaceholder.d.ts +1 -1
- package/dist/client/components/DataBrowser/DataBrowserSidebar.d.ts +1 -1
- package/dist/client/components/DataBrowser/DataBrowserToolbar.d.ts +1 -1
- package/dist/client/components/DataBrowser/index.d.ts +1 -1
- package/dist/client/components/DataHistogram.d.ts +1 -1
- package/dist/client/components/DebugModal.d.ts +1 -1
- package/dist/client/components/DrillBreadcrumb.d.ts +2 -1
- package/dist/client/components/LoadingIndicator.d.ts +1 -1
- package/dist/client/components/MobileStackedLayout.d.ts +1 -1
- package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
- package/dist/client/components/PortletContainer.d.ts +1 -1
- package/dist/client/components/PortletFilterConfigModal.d.ts +6 -4
- package/dist/client/components/RowManagedLayout.d.ts +1 -1
- package/dist/client/components/ScaledGridWrapper.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/index.d.ts +1 -1
- package/dist/client/components/TextPortletModal.d.ts +1 -1
- package/dist/client/components/charts/AxisFormatControls.d.ts +2 -2
- package/dist/client/components/charts/ChartContainer.d.ts +1 -1
- package/dist/client/components/charts/ChartLegend.d.ts +1 -1
- package/dist/client/components/charts/ChartTooltip.d.ts +1 -1
- package/dist/client/components/charts/MissingDependencyFallback.d.ts +1 -1
- package/dist/client/components/dashboard/DashboardContext.d.ts +113 -0
- package/dist/client/components/dashboard/DashboardCoordinator.d.ts +2 -0
- package/dist/client/components/dashboard/DashboardFilterBar.d.ts +8 -0
- package/dist/client/components/dashboard/DashboardGridSurface.d.ts +8 -0
- package/dist/client/components/dashboard/DashboardModals.d.ts +8 -0
- package/dist/client/components/dashboard/DashboardProvider.d.ts +2 -0
- package/dist/client/components/dashboard/DashboardToolbar.d.ts +11 -0
- package/dist/client/components/dashboard/dashboardGridUtils.d.ts +17 -0
- package/dist/client/components/dashboard/index.d.ts +13 -0
- package/dist/client/components.d.ts +2 -0
- package/dist/client/components.js +3 -4
- package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
- package/dist/client/hooks/useDashboardHook.d.ts +2 -2
- package/dist/client/hooks.js +5 -6
- package/dist/client/icons.d.ts +1 -1
- package/dist/client/icons.js +2 -2
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +161 -163
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers/CubeApiProvider.d.ts +1 -1
- package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
- package/dist/client/providers/CubeMetaProvider.d.ts +1 -1
- package/dist/client/providers/CubeProvider.d.ts +1 -1
- package/dist/client/providers/I18nProvider.d.ts +1 -1
- package/dist/client/providers.js +3 -3
- package/dist/client/schema.js +1 -1
- package/dist/client/stores/analysisBuilderStore.d.ts +1 -1
- package/dist/client/stores/dashboardStore.d.ts +1 -1
- package/dist/client/stores/dataBrowserStore.d.ts +1 -1
- package/dist/client/stores/notebookStore.d.ts +1 -1
- package/dist/client/styles.css +1 -1
- package/dist/client/types/drill.d.ts +1 -1
- package/dist/client/types.d.ts +7 -2
- package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
- package/dist/client/utils/filterUtils.d.ts +33 -5
- package/dist/client/utils/joinReachability.d.ts +27 -0
- package/dist/client/utils.js +6 -7
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +78 -52
- package/dist/{adapters/dist-Boc63-1q.cjs → server/dist-BOdf-GQO.cjs} +1 -1
- package/dist/{adapters/google-CT4kgmBf.js → server/google-CFYljAOF.js} +1 -1
- package/dist/server/{google-DzQWXFwF.cjs → google-DUlXeeDA.cjs} +1 -1
- package/dist/server/index.cjs +11 -11
- package/dist/server/index.d.ts +2 -5050
- package/dist/server/index.js +58 -15
- package/dist/{adapters/openai-CuUGrKaK.js → server/openai-B5jEiqiB.js} +2139 -948
- package/dist/{adapters/openai-DQawCWQb.js → server/openai-BZdAA7Ji.js} +1 -1
- package/dist/server/openai-D0musiYP.cjs +17 -0
- package/dist/server/{openai-BfiZU0rG.cjs → openai-D_U4V0kT.cjs} +1 -1
- package/dist/server/server/adapters/base-adapter.d.ts +287 -0
- package/dist/server/server/adapters/databend-adapter.d.ts +114 -0
- package/dist/server/server/adapters/duckdb-adapter.d.ts +122 -0
- package/dist/server/server/adapters/mysql-adapter.d.ts +122 -0
- package/dist/server/server/adapters/postgres-adapter.d.ts +119 -0
- package/dist/server/server/adapters/singlestore-adapter.d.ts +4 -0
- package/dist/server/server/adapters/snowflake-adapter.d.ts +116 -0
- package/dist/server/server/adapters/sqlite-adapter.d.ts +140 -0
- package/dist/server/server/agent/chart-validation.d.ts +27 -0
- package/dist/server/server/agent/handler.d.ts +25 -0
- package/dist/server/server/agent/index.d.ts +11 -0
- package/dist/server/server/agent/providers/anthropic.d.ts +24 -0
- package/dist/server/server/agent/providers/factory.d.ts +12 -0
- package/dist/server/server/agent/providers/google.d.ts +23 -0
- package/dist/server/server/agent/providers/index.d.ts +6 -0
- package/dist/server/server/agent/providers/openai.d.ts +26 -0
- package/dist/server/server/agent/providers/types.d.ts +95 -0
- package/dist/server/server/agent/system-prompt.d.ts +5 -0
- package/dist/server/server/agent/tools.d.ts +28 -0
- package/dist/server/server/agent/types.d.ts +192 -0
- package/dist/server/server/ai/discovery.d.ts +62 -0
- package/dist/server/server/ai/index.d.ts +10 -0
- package/dist/server/server/ai/mcp-prompts.d.ts +83 -0
- package/dist/server/server/ai/query-schema.d.ts +258 -0
- package/dist/server/server/ai/schemas.d.ts +63 -0
- package/dist/server/server/ai/suggestion.d.ts +19 -0
- package/dist/server/server/ai/validation.d.ts +34 -0
- package/dist/server/server/builders/comparison-query-builder.d.ts +70 -0
- package/dist/server/server/builders/cte-builder.d.ts +62 -0
- package/dist/server/server/builders/date-time-builder.d.ts +29 -0
- package/dist/server/server/builders/filter-builder.d.ts +23 -0
- package/dist/server/server/builders/flow-query-builder.d.ts +109 -0
- package/dist/server/server/builders/funnel-query-builder.d.ts +134 -0
- package/dist/server/server/builders/group-by-builder.d.ts +27 -0
- package/dist/server/server/builders/index.d.ts +13 -0
- package/dist/server/server/builders/measure-builder.d.ts +142 -0
- package/dist/server/server/builders/retention-query-builder.d.ts +100 -0
- package/dist/server/server/cache-providers/index.d.ts +5 -0
- package/dist/server/server/cache-providers/memory.d.ts +105 -0
- package/dist/server/server/cache-utils.d.ts +65 -0
- package/dist/server/server/compiler.d.ts +218 -0
- package/dist/server/server/cube-utils.d.ts +133 -0
- package/dist/server/server/database-utils.d.ts +18 -0
- package/dist/server/server/executor.d.ts +183 -0
- package/dist/server/server/executors/base-executor.d.ts +16 -0
- package/dist/server/server/executors/databend-executor.d.ts +33 -0
- package/dist/server/server/executors/duckdb-executor.d.ts +33 -0
- package/dist/server/server/executors/index.d.ts +21 -0
- package/dist/server/server/executors/mysql-executor.d.ts +27 -0
- package/dist/server/server/executors/postgres-executor.d.ts +27 -0
- package/dist/server/server/executors/singlestore-executor.d.ts +9 -0
- package/dist/server/server/executors/snowflake-executor.d.ts +33 -0
- package/dist/server/server/executors/sqlite-executor.d.ts +28 -0
- package/dist/server/server/explain/databend-parser.d.ts +16 -0
- package/dist/server/server/explain/duckdb-parser.d.ts +28 -0
- package/dist/server/server/explain/index.d.ts +9 -0
- package/dist/server/server/explain/mysql-parser.d.ts +38 -0
- package/dist/server/server/explain/postgres-parser.d.ts +18 -0
- package/dist/server/server/explain/snowflake-parser.d.ts +17 -0
- package/dist/server/server/explain/sqlite-parser.d.ts +23 -0
- package/dist/server/server/filter-cache.d.ts +73 -0
- package/dist/server/server/gap-filler.d.ts +42 -0
- package/dist/server/server/index.d.ts +36 -0
- package/dist/server/server/logical-plan/index.d.ts +14 -0
- package/dist/server/server/logical-plan/logical-plan-builder.d.ts +58 -0
- package/dist/server/server/logical-plan/logical-planner.d.ts +232 -0
- package/dist/server/server/logical-plan/optimiser.d.ts +32 -0
- package/dist/server/server/logical-plan/types.d.ts +191 -0
- package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
- package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +107 -0
- package/dist/server/server/physical-plan/index.d.ts +2 -0
- package/dist/server/server/physical-plan/processors/cte-processor.d.ts +6 -0
- package/dist/server/server/physical-plan/processors/index.d.ts +6 -0
- package/dist/server/server/physical-plan/processors/joins-processor.d.ts +6 -0
- package/dist/server/server/physical-plan/processors/predicates-processor.d.ts +6 -0
- package/dist/server/server/physical-plan/processors/selection-processor.d.ts +6 -0
- package/dist/server/server/physical-plan/processors/shared.d.ts +33 -0
- package/dist/server/server/physical-plan/processors/window-processor.d.ts +6 -0
- package/dist/server/server/prompts/explain-analysis-prompt.d.ts +47 -0
- package/dist/server/server/prompts/index.d.ts +27 -0
- package/dist/server/server/prompts/single-step-prompt.d.ts +31 -0
- package/dist/server/server/prompts/step0-validation-prompt.d.ts +39 -0
- package/dist/server/server/prompts/step1-shape-prompt.d.ts +29 -0
- package/dist/server/server/prompts/step2-complete-prompt.d.ts +19 -0
- package/dist/server/server/prompts/types.d.ts +37 -0
- package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +93 -0
- package/dist/server/server/resolvers/index.d.ts +6 -0
- package/dist/server/server/resolvers/join-path-resolver.d.ts +152 -0
- package/dist/server/server/template-substitution.d.ts +57 -0
- package/dist/server/server/types/analysis.d.ts +189 -0
- package/dist/server/server/types/cache.d.ts +132 -0
- package/dist/server/server/types/core.d.ts +164 -0
- package/dist/server/server/types/cube.d.ts +530 -0
- package/dist/server/server/types/executor.d.ts +156 -0
- package/dist/server/server/types/flow.d.ts +143 -0
- package/dist/server/server/types/funnel.d.ts +118 -0
- package/dist/server/server/types/index.d.ts +11 -0
- package/dist/server/server/types/metadata.d.ts +113 -0
- package/dist/server/server/types/query.d.ts +153 -0
- package/dist/server/server/types/retention.d.ts +141 -0
- package/dist/server/server/types/utils.d.ts +11 -0
- package/package.json +6 -6
- package/dist/adapters/mcp-transport-BCtjU0lC.cjs +0 -40
- package/dist/adapters/mcp-transport-DW_Uks-O.js +0 -579
- package/dist/adapters/openai-Bgri5TJc.cjs +0 -16
- package/dist/client/chunks/DashboardEditModal-BiJwVv0b.js +0 -6696
- package/dist/client/chunks/DashboardEditModal-BiJwVv0b.js.map +0 -1
- package/dist/client/chunks/FieldSearchModal-DdcbCwAi.js +0 -2660
- package/dist/client/chunks/FieldSearchModal-DdcbCwAi.js.map +0 -1
- package/dist/client/chunks/chart-data-table-DT4uBZaq.js.map +0 -1
- package/dist/client/chunks/chart-markdown-DEtjn8gx.js +0 -3539
- package/dist/client/chunks/chart-markdown-DEtjn8gx.js.map +0 -1
- package/dist/client/chunks/syntaxHighlighting-5zHcjn27.js +0 -30
- package/dist/client/chunks/syntaxHighlighting-5zHcjn27.js.map +0 -1
- package/dist/client/chunks/useDebounce-DGfYXtkm.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js +0 -66
- package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js.map +0 -1
- package/dist/client/chunks/utils-D2SCtAkZ.js.map +0 -1
- package/dist/client/chunks/vendor-CfR5hJGc.js.map +0 -1
- package/dist/server/openai-BwsBio1K.cjs +0 -16
- /package/dist/adapters/{express → adapters/express}/index.d.ts +0 -0
- /package/dist/adapters/{fastify → adapters/fastify}/index.d.ts +0 -0
- /package/dist/adapters/{hono → adapters/hono}/index.d.ts +0 -0
- /package/dist/adapters/{locale.d.ts → adapters/locale.d.ts} +0 -0
- /package/dist/adapters/{mcp-tools.d.ts → adapters/mcp-tools.d.ts} +0 -0
- /package/dist/adapters/{mcp-transport.d.ts → adapters/mcp-transport.d.ts} +0 -0
- /package/dist/adapters/{nextjs → adapters/nextjs}/index.d.ts +0 -0
- /package/dist/adapters/{types.d.ts → adapters/types.d.ts} +0 -0
- /package/dist/adapters/{utils.d.ts → adapters/utils.d.ts} +0 -0
- /package/dist/adapters/{anthropic-B_rg0BhK.js → anthropic-CZh4hB-m.js} +0 -0
- /package/dist/adapters/{anthropic-BIva8k1r.cjs → anthropic-DG4r1LSm.cjs} +0 -0
- /package/dist/adapters/{dist-De5fzUEM.js → dist-CH3hwAUk.js} +0 -0
- /package/dist/client/chunks/{rolldown-runtime-CKnJJeip.js → rolldown-runtime-CWhphoD1.js} +0 -0
- /package/dist/server/{anthropic-BsNspi1r.js → anthropic-CZh4hB-m.js} +0 -0
- /package/dist/server/{anthropic-DsCEX6Fm.cjs → anthropic-DG4r1LSm.cjs} +0 -0
- /package/dist/server/{dist-CMWZC51B.js → dist-CH3hwAUk.js} +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { SQL } from 'drizzle-orm';
|
|
2
|
+
import { Cube, QueryContext, PhysicalQueryPlan } from '../types';
|
|
3
|
+
import { DatabaseAdapter } from '../adapters/base-adapter';
|
|
4
|
+
import { ResolvedMeasures } from '../template-substitution';
|
|
5
|
+
export declare class MeasureBuilder {
|
|
6
|
+
private databaseAdapter;
|
|
7
|
+
constructor(databaseAdapter: DatabaseAdapter);
|
|
8
|
+
/**
|
|
9
|
+
* Build resolvedMeasures map for a set of measures
|
|
10
|
+
* This centralizes the logic for building both regular and calculated measures
|
|
11
|
+
* in dependency order, avoiding duplication across main queries and CTEs
|
|
12
|
+
*
|
|
13
|
+
* @param measureNames - Array of measure names to resolve (e.g., ["Employees.count", "Employees.activePercentage"])
|
|
14
|
+
* @param cubeMap - Map of all cubes involved in the query
|
|
15
|
+
* @param context - Query context with database and security context
|
|
16
|
+
* @param customMeasureBuilder - Optional function to override how individual measures are built
|
|
17
|
+
* @returns Map of measure names to SQL builder functions
|
|
18
|
+
*/
|
|
19
|
+
buildResolvedMeasures(measureNames: string[], cubeMap: Map<string, Cube>, context: QueryContext, customMeasureBuilder?: (measureName: string, measure: any, cube: Cube) => SQL): ResolvedMeasures;
|
|
20
|
+
/**
|
|
21
|
+
* Build calculated measure expression by substituting {member} references
|
|
22
|
+
* with resolved SQL expressions
|
|
23
|
+
*/
|
|
24
|
+
buildCalculatedMeasure(measure: any, cube: Cube, allCubes: Map<string, Cube>, resolvedMeasures: ResolvedMeasures, context: QueryContext): SQL;
|
|
25
|
+
/**
|
|
26
|
+
* Build resolved measures map for a calculated measure from CTE columns
|
|
27
|
+
* This handles re-aggregating pre-aggregated CTE columns for calculated measures
|
|
28
|
+
*
|
|
29
|
+
* IMPORTANT: For calculated measures in CTEs, we cannot sum/avg pre-computed ratios.
|
|
30
|
+
* We must recalculate from the base measures that were pre-aggregated in the CTE.
|
|
31
|
+
*
|
|
32
|
+
* @param measure - The calculated measure to build
|
|
33
|
+
* @param cube - The cube containing this measure
|
|
34
|
+
* @param cteInfo - CTE metadata (alias, measures, cube reference)
|
|
35
|
+
* @param allCubes - Map of all cubes in the query
|
|
36
|
+
* @param context - Query context
|
|
37
|
+
* @returns SQL expression for the calculated measure using CTE column references
|
|
38
|
+
*/
|
|
39
|
+
buildCTECalculatedMeasure(measure: any, cube: Cube, cteInfo: {
|
|
40
|
+
cteAlias: string;
|
|
41
|
+
measures: string[];
|
|
42
|
+
cube: Cube;
|
|
43
|
+
}, allCubes: Map<string, Cube>, context: QueryContext): SQL;
|
|
44
|
+
/**
|
|
45
|
+
* Build measure expression for HAVING clause, handling CTE references correctly
|
|
46
|
+
*/
|
|
47
|
+
buildHavingMeasureExpression(cubeName: string, fieldKey: string, measure: any, context: QueryContext, queryPlan?: PhysicalQueryPlan): SQL;
|
|
48
|
+
/**
|
|
49
|
+
* Build measure expression with aggregation and filters
|
|
50
|
+
* Note: This should NOT be called for calculated measures
|
|
51
|
+
*
|
|
52
|
+
* @param measure - The measure definition
|
|
53
|
+
* @param context - Query context with security context and database info
|
|
54
|
+
* @param cube - Optional cube reference for resolving dimension references (window functions)
|
|
55
|
+
*/
|
|
56
|
+
buildMeasureExpression(measure: any, context: QueryContext, cube?: Cube): SQL;
|
|
57
|
+
/**
|
|
58
|
+
* List of measure types that are window functions
|
|
59
|
+
* Window functions require special handling in CTEs:
|
|
60
|
+
* - No GROUP BY in the CTE
|
|
61
|
+
* - No re-aggregation in outer query
|
|
62
|
+
* - Return individual rows, not grouped results
|
|
63
|
+
*/
|
|
64
|
+
static WINDOW_FUNCTION_TYPES: readonly ["lag", "lead", "rank", "denseRank", "rowNumber", "ntile", "firstValue", "lastValue", "movingAvg", "movingSum"];
|
|
65
|
+
/**
|
|
66
|
+
* Check if a measure type is a window function
|
|
67
|
+
* @param measureType - The measure type string
|
|
68
|
+
* @returns true if this is a window function type
|
|
69
|
+
*/
|
|
70
|
+
static isWindowFunction(measureType: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Categorize measures into window functions and regular aggregates
|
|
73
|
+
* Used by query planner to create separate CTEs for each category
|
|
74
|
+
*
|
|
75
|
+
* @param measureNames - Array of measure names (e.g., ["Productivity.rank", "Productivity.totalLines"])
|
|
76
|
+
* @param cubeMap - Map of cubes to look up measure definitions
|
|
77
|
+
* @returns Object with windowMeasures and aggregateMeasures arrays
|
|
78
|
+
*/
|
|
79
|
+
static categorizeMeasures(measureNames: string[], cubeMap: Map<string, Cube>): {
|
|
80
|
+
windowMeasures: string[];
|
|
81
|
+
aggregateMeasures: string[];
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Check if a query contains any window function measures
|
|
85
|
+
* @param measureNames - Array of measure names
|
|
86
|
+
* @param cubeMap - Map of cubes
|
|
87
|
+
* @returns true if any measure is a window function
|
|
88
|
+
*/
|
|
89
|
+
static hasWindowFunctions(measureNames: string[], cubeMap: Map<string, Cube>): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Check if a measure is a post-aggregation window function.
|
|
92
|
+
* Post-aggregation windows have a `measure` reference in their windowConfig,
|
|
93
|
+
* indicating they should operate on aggregated data rather than raw rows.
|
|
94
|
+
*
|
|
95
|
+
* @param measure - The measure definition
|
|
96
|
+
* @returns true if this is a post-aggregation window function
|
|
97
|
+
*/
|
|
98
|
+
static isPostAggregationWindow(measure: any): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Get the base measure reference for a post-aggregation window function.
|
|
101
|
+
* Resolves simple names (e.g., 'totalRevenue') to fully qualified names ('Sales.totalRevenue').
|
|
102
|
+
*
|
|
103
|
+
* @param measure - The measure definition
|
|
104
|
+
* @param cubeName - The name of the cube containing this measure
|
|
105
|
+
* @returns Fully qualified base measure name, or null if not a post-agg window
|
|
106
|
+
*/
|
|
107
|
+
static getWindowBaseMeasure(measure: any, cubeName: string): string | null;
|
|
108
|
+
/**
|
|
109
|
+
* Get the default operation for a window function type.
|
|
110
|
+
* - lag/lead default to 'difference' (compare current vs previous/next)
|
|
111
|
+
* - rank/rowNumber/ntile/firstValue/lastValue default to 'raw'
|
|
112
|
+
* - movingAvg/movingSum default to 'raw'
|
|
113
|
+
*
|
|
114
|
+
* @param windowType - The window function type
|
|
115
|
+
* @returns Default operation for the window type
|
|
116
|
+
*/
|
|
117
|
+
static getDefaultWindowOperation(windowType: string): 'raw' | 'difference' | 'ratio' | 'percentChange';
|
|
118
|
+
/**
|
|
119
|
+
* Categorize measures for post-aggregation window function handling.
|
|
120
|
+
* Separates measures into:
|
|
121
|
+
* - aggregateMeasures: Regular aggregates (count, sum, avg, etc.)
|
|
122
|
+
* - postAggWindowMeasures: Window functions that reference a base measure
|
|
123
|
+
* - requiredBaseMeasures: Base measures needed by window functions (auto-added to query)
|
|
124
|
+
*
|
|
125
|
+
* @param measureNames - Array of measure names from the query
|
|
126
|
+
* @param cubeMap - Map of cubes to look up measure definitions
|
|
127
|
+
* @returns Categorized measures with base measure dependencies
|
|
128
|
+
*/
|
|
129
|
+
static categorizeForPostAggregation(measureNames: string[], cubeMap: Map<string, Cube>): {
|
|
130
|
+
aggregateMeasures: string[];
|
|
131
|
+
postAggWindowMeasures: string[];
|
|
132
|
+
requiredBaseMeasures: Set<string>;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Check if any measures in the query are post-aggregation window functions.
|
|
136
|
+
*
|
|
137
|
+
* @param measureNames - Array of measure names
|
|
138
|
+
* @param cubeMap - Map of cubes
|
|
139
|
+
* @returns true if any measure is a post-aggregation window function
|
|
140
|
+
*/
|
|
141
|
+
static hasPostAggregationWindows(measureNames: string[], cubeMap: Map<string, Cube>): boolean;
|
|
142
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { DatabaseAdapter } from '../adapters/base-adapter';
|
|
2
|
+
import { RetentionQueryConfig, RetentionResultRow } from '../types/retention';
|
|
3
|
+
import { Cube, QueryContext, SemanticQuery } from '../types';
|
|
4
|
+
export declare class RetentionQueryBuilder {
|
|
5
|
+
private databaseAdapter;
|
|
6
|
+
private filterBuilder;
|
|
7
|
+
private dateTimeBuilder;
|
|
8
|
+
constructor(databaseAdapter: DatabaseAdapter);
|
|
9
|
+
/**
|
|
10
|
+
* Check if query contains retention configuration
|
|
11
|
+
*/
|
|
12
|
+
hasRetention(query: SemanticQuery): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Validate retention configuration against registered cubes
|
|
15
|
+
*/
|
|
16
|
+
validateConfig(config: RetentionQueryConfig, cubes: Map<string, Cube>): {
|
|
17
|
+
isValid: boolean;
|
|
18
|
+
errors: string[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Build the retention SQL query using CTEs
|
|
22
|
+
*
|
|
23
|
+
* CTE Structure (Simplified Mixpanel-style):
|
|
24
|
+
* 1. cohort_base - Users entering the cohort (first event in date range)
|
|
25
|
+
* - When breakdown is specified, includes breakdown_value
|
|
26
|
+
* 2. activity_periods - All activity with period_number relative to cohort entry
|
|
27
|
+
* 3. cohort_sizes - Aggregate cohort sizes (per breakdown value if applicable)
|
|
28
|
+
* 4. retention_counts - Retained users per period (and breakdown value)
|
|
29
|
+
* 5. Final SELECT - Join with retention rate calculation
|
|
30
|
+
*/
|
|
31
|
+
buildRetentionQuery(config: RetentionQueryConfig, cubes: Map<string, Cube>, context: QueryContext): any;
|
|
32
|
+
/**
|
|
33
|
+
* Transform raw SQL results to RetentionResultRow[]
|
|
34
|
+
*/
|
|
35
|
+
transformResult(rawResult: unknown[], config: RetentionQueryConfig): RetentionResultRow[];
|
|
36
|
+
/**
|
|
37
|
+
* Resolve retention configuration with SQL expressions
|
|
38
|
+
* Same cube/dimension used for both cohort entry and activity detection
|
|
39
|
+
*/
|
|
40
|
+
private resolveConfig;
|
|
41
|
+
/**
|
|
42
|
+
* Resolve binding key expression for a cube
|
|
43
|
+
*/
|
|
44
|
+
private resolveBindingKey;
|
|
45
|
+
/**
|
|
46
|
+
* Build filter conditions from config filters
|
|
47
|
+
*/
|
|
48
|
+
private buildFilterConditions;
|
|
49
|
+
/**
|
|
50
|
+
* Build a single filter condition
|
|
51
|
+
*/
|
|
52
|
+
private buildSingleFilterCondition;
|
|
53
|
+
/**
|
|
54
|
+
* Build cohort_base CTE
|
|
55
|
+
* Groups users by their first activity (cohort entry) within the date range.
|
|
56
|
+
* When breakdowns are specified, includes breakdown values for each dimension.
|
|
57
|
+
*/
|
|
58
|
+
private buildCohortBaseCTE;
|
|
59
|
+
/**
|
|
60
|
+
* Build date range condition for WHERE clause
|
|
61
|
+
* Filters records to those within the specified date range
|
|
62
|
+
*/
|
|
63
|
+
private buildDateRangeCondition;
|
|
64
|
+
/**
|
|
65
|
+
* Build date range condition for HAVING clause
|
|
66
|
+
* Used to filter aggregated cohort_period values
|
|
67
|
+
*/
|
|
68
|
+
private buildDateRangeHavingCondition;
|
|
69
|
+
/**
|
|
70
|
+
* Build activity_periods CTE
|
|
71
|
+
* Joins activity events to cohort_base and calculates period_number.
|
|
72
|
+
* Includes breakdown values from cohort_base when breakdowns are specified.
|
|
73
|
+
*/
|
|
74
|
+
private buildActivityPeriodsCTE;
|
|
75
|
+
/**
|
|
76
|
+
* Build cohort_sizes CTE
|
|
77
|
+
* Aggregates the size of the cohort (or per breakdown combination if specified).
|
|
78
|
+
*/
|
|
79
|
+
private buildCohortSizesCTE;
|
|
80
|
+
/**
|
|
81
|
+
* Build retention_counts CTE
|
|
82
|
+
* Aggregates retained users per period (and breakdown combination if specified).
|
|
83
|
+
*/
|
|
84
|
+
private buildRetentionCountsCTE;
|
|
85
|
+
/**
|
|
86
|
+
* Build rolling retention counts query
|
|
87
|
+
* For rolling retention, a user is retained in period N if they were active
|
|
88
|
+
* in period N or any later period
|
|
89
|
+
*/
|
|
90
|
+
private buildRollingRetentionCountsQuery;
|
|
91
|
+
/**
|
|
92
|
+
* Build period number expression using database-specific DATE_DIFF
|
|
93
|
+
*/
|
|
94
|
+
private buildPeriodNumberExpression;
|
|
95
|
+
/**
|
|
96
|
+
* Extract dimension name from a dimension reference
|
|
97
|
+
* Handles both 'CubeName.dimName' and just 'dimName' formats
|
|
98
|
+
*/
|
|
99
|
+
private extractDimensionName;
|
|
100
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { CacheProvider, CacheGetResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Options for MemoryCacheProvider
|
|
4
|
+
*/
|
|
5
|
+
export interface MemoryCacheProviderOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Default TTL in milliseconds
|
|
8
|
+
* @default 300000 (5 minutes)
|
|
9
|
+
*/
|
|
10
|
+
defaultTtlMs?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Maximum number of entries in the cache
|
|
13
|
+
* When exceeded, oldest entries are evicted (LRU)
|
|
14
|
+
* @default undefined (unlimited)
|
|
15
|
+
*/
|
|
16
|
+
maxEntries?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Interval in milliseconds to run automatic cleanup
|
|
19
|
+
* Set to 0 to disable automatic cleanup
|
|
20
|
+
* @default 60000 (1 minute)
|
|
21
|
+
*/
|
|
22
|
+
cleanupIntervalMs?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Simple in-memory cache provider implementing the CacheProvider interface
|
|
26
|
+
*
|
|
27
|
+
* Features:
|
|
28
|
+
* - TTL support with automatic expiration on read
|
|
29
|
+
* - Optional automatic cleanup of expired entries
|
|
30
|
+
* - Optional max entries limit with LRU eviction
|
|
31
|
+
* - Full metadata support for TTL tracking
|
|
32
|
+
*
|
|
33
|
+
* Limitations:
|
|
34
|
+
* - Not shared across processes/instances
|
|
35
|
+
* - Data lost on process restart
|
|
36
|
+
* - Not suitable for distributed deployments
|
|
37
|
+
*/
|
|
38
|
+
export declare class MemoryCacheProvider implements CacheProvider {
|
|
39
|
+
private cache;
|
|
40
|
+
private defaultTtlMs;
|
|
41
|
+
private maxEntries?;
|
|
42
|
+
private cleanupIntervalId?;
|
|
43
|
+
private accessOrder;
|
|
44
|
+
constructor(options?: MemoryCacheProviderOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Get a cached value by key
|
|
47
|
+
* Returns null if not found or expired
|
|
48
|
+
* Automatically removes expired entries on access
|
|
49
|
+
*/
|
|
50
|
+
get<T>(key: string): Promise<CacheGetResult<T> | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Set a value in the cache
|
|
53
|
+
* Respects maxEntries limit with LRU eviction
|
|
54
|
+
*/
|
|
55
|
+
set<T>(key: string, value: T, ttlMs?: number): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Delete a specific key from the cache
|
|
58
|
+
* Returns true if key existed and was deleted
|
|
59
|
+
*/
|
|
60
|
+
delete(key: string): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Delete all keys matching a pattern
|
|
63
|
+
* Supports glob-style patterns with trailing '*'
|
|
64
|
+
* Returns number of keys deleted
|
|
65
|
+
*/
|
|
66
|
+
deletePattern(pattern: string): Promise<number>;
|
|
67
|
+
/**
|
|
68
|
+
* Check if a key exists in the cache
|
|
69
|
+
* Returns false for expired entries
|
|
70
|
+
*/
|
|
71
|
+
has(key: string): Promise<boolean>;
|
|
72
|
+
/**
|
|
73
|
+
* Stop automatic cleanup and clear the cache
|
|
74
|
+
* Call this when the cache provider is no longer needed
|
|
75
|
+
*/
|
|
76
|
+
close(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Remove all expired entries from the cache
|
|
79
|
+
* Called automatically by cleanup interval
|
|
80
|
+
* Can also be called manually
|
|
81
|
+
*
|
|
82
|
+
* @returns Number of entries removed
|
|
83
|
+
*/
|
|
84
|
+
cleanup(): number;
|
|
85
|
+
/**
|
|
86
|
+
* Get current cache size (number of entries)
|
|
87
|
+
* Note: May include expired entries that haven't been cleaned up yet
|
|
88
|
+
*/
|
|
89
|
+
size(): number;
|
|
90
|
+
/**
|
|
91
|
+
* Clear all entries from the cache
|
|
92
|
+
*/
|
|
93
|
+
clear(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get cache statistics
|
|
96
|
+
*/
|
|
97
|
+
stats(): {
|
|
98
|
+
size: number;
|
|
99
|
+
maxEntries?: number;
|
|
100
|
+
defaultTtlMs: number;
|
|
101
|
+
};
|
|
102
|
+
private touchAccessOrder;
|
|
103
|
+
private removeFromAccessOrder;
|
|
104
|
+
private evictOldest;
|
|
105
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SemanticQuery, SecurityContext } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for cache key generation
|
|
4
|
+
*/
|
|
5
|
+
export interface CacheKeyConfig {
|
|
6
|
+
/** Prefix for all cache keys */
|
|
7
|
+
keyPrefix?: string;
|
|
8
|
+
/** Whether to include security context in cache key */
|
|
9
|
+
includeSecurityContext?: boolean;
|
|
10
|
+
/** Custom serializer for security context */
|
|
11
|
+
securityContextSerializer?: (ctx: SecurityContext) => string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate a deterministic cache key from query and security context
|
|
15
|
+
*
|
|
16
|
+
* Key structure: {prefix}query:{queryHash}:ctx:{securityHash}
|
|
17
|
+
*
|
|
18
|
+
* Uses FNV-1a hash for:
|
|
19
|
+
* - Speed: ~3x faster than SHA-256
|
|
20
|
+
* - Simplicity: No dependencies required
|
|
21
|
+
* - Sufficient collision resistance for cache keys
|
|
22
|
+
*
|
|
23
|
+
* @param query - The semantic query to cache
|
|
24
|
+
* @param securityContext - Security context for tenant isolation
|
|
25
|
+
* @param config - Cache key configuration
|
|
26
|
+
* @returns Deterministic cache key string
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateCacheKey(query: SemanticQuery, securityContext: SecurityContext, config?: CacheKeyConfig): string;
|
|
29
|
+
/**
|
|
30
|
+
* Normalize query for consistent hashing
|
|
31
|
+
* Sorts arrays and object keys to ensure same query = same hash
|
|
32
|
+
*
|
|
33
|
+
* @param query - The semantic query to normalize
|
|
34
|
+
* @returns Normalized query with sorted arrays and keys
|
|
35
|
+
*/
|
|
36
|
+
export declare function normalizeQuery(query: SemanticQuery): SemanticQuery;
|
|
37
|
+
/**
|
|
38
|
+
* Recursively sort object keys for deterministic serialization
|
|
39
|
+
*
|
|
40
|
+
* @param obj - Object to sort
|
|
41
|
+
* @returns Object with sorted keys (recursively)
|
|
42
|
+
*/
|
|
43
|
+
export declare function sortObject<T>(obj: T): T;
|
|
44
|
+
/**
|
|
45
|
+
* FNV-1a hash - fast, non-cryptographic hash function
|
|
46
|
+
* Returns hex string for cache key readability
|
|
47
|
+
*
|
|
48
|
+
* Properties:
|
|
49
|
+
* - O(n) time complexity
|
|
50
|
+
* - Low collision rate for similar strings
|
|
51
|
+
* - Deterministic across runs
|
|
52
|
+
*
|
|
53
|
+
* @param str - String to hash
|
|
54
|
+
* @returns 8-character hex string
|
|
55
|
+
*/
|
|
56
|
+
export declare function fnv1aHash(str: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Generate invalidation pattern for a cube
|
|
59
|
+
* Used when cube data changes and all related cache entries need clearing
|
|
60
|
+
*
|
|
61
|
+
* @param cubeName - Name of the cube to invalidate
|
|
62
|
+
* @param keyPrefix - Cache key prefix
|
|
63
|
+
* @returns Glob pattern for cache invalidation
|
|
64
|
+
*/
|
|
65
|
+
export declare function getCubeInvalidationPattern(cubeName: string, keyPrefix?: string): string;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { SemanticQuery, QueryResult, SecurityContext, DatabaseExecutor, CubeMetadata, Cube, QueryAnalysis, CacheConfig, ExplainOptions, ExplainResult, ExecutionOptions, RLSSetupFn } from './types';
|
|
2
|
+
export declare class SemanticLayerCompiler {
|
|
3
|
+
private cubes;
|
|
4
|
+
private metadataCache?;
|
|
5
|
+
private cacheConfig?;
|
|
6
|
+
private rlsSetup?;
|
|
7
|
+
private db?;
|
|
8
|
+
private schema?;
|
|
9
|
+
private engineType?;
|
|
10
|
+
constructor(options?: {
|
|
11
|
+
drizzle?: DatabaseExecutor['db'];
|
|
12
|
+
schema?: any;
|
|
13
|
+
databaseExecutor?: DatabaseExecutor;
|
|
14
|
+
engineType?: 'postgres' | 'mysql' | 'sqlite' | 'singlestore' | 'duckdb' | 'databend' | 'snowflake';
|
|
15
|
+
/** Cache configuration for query result caching */
|
|
16
|
+
cache?: CacheConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Row-Level Security setup function.
|
|
19
|
+
* When provided, every query execution opens a transaction, calls this function
|
|
20
|
+
* to configure RLS (e.g., set JWT claims and switch roles), then runs the query.
|
|
21
|
+
* Dry-run/SQL generation is NOT wrapped in a transaction.
|
|
22
|
+
*/
|
|
23
|
+
rlsSetup?: RLSSetupFn;
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Set or update the database connection
|
|
27
|
+
*/
|
|
28
|
+
setDatabaseExecutor(executor: DatabaseExecutor): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get the database engine type for SQL formatting
|
|
31
|
+
*/
|
|
32
|
+
getEngineType(): 'postgres' | 'mysql' | 'sqlite' | 'singlestore' | 'duckdb' | 'databend' | 'snowflake' | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Set Drizzle instance and schema directly
|
|
35
|
+
*/
|
|
36
|
+
setDrizzle(db: DatabaseExecutor['db'], schema?: any, engineType?: 'postgres' | 'mysql' | 'sqlite' | 'singlestore' | 'duckdb' | 'databend' | 'snowflake'): void;
|
|
37
|
+
/**
|
|
38
|
+
* Check if database executor is configured
|
|
39
|
+
*/
|
|
40
|
+
hasExecutor(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Create a fresh DatabaseExecutor from stored ingredients, or throw.
|
|
43
|
+
*/
|
|
44
|
+
private createDbExecutor;
|
|
45
|
+
/**
|
|
46
|
+
* Create a query executor with optional cache integration.
|
|
47
|
+
* Each call creates a fresh DatabaseExecutor so concurrent requests
|
|
48
|
+
* never share mutable state.
|
|
49
|
+
*/
|
|
50
|
+
private createQueryExecutor;
|
|
51
|
+
/**
|
|
52
|
+
* Format SQL result using current engine dialect.
|
|
53
|
+
*/
|
|
54
|
+
private formatSqlResult;
|
|
55
|
+
/**
|
|
56
|
+
* Register a simplified cube with dynamic query building
|
|
57
|
+
* Validates calculated measures during registration
|
|
58
|
+
*/
|
|
59
|
+
registerCube(cube: Cube): void;
|
|
60
|
+
/**
|
|
61
|
+
* Validate that all string-based cube references in joins resolve to registered cubes.
|
|
62
|
+
* Call after all cubes are registered for strict startup validation.
|
|
63
|
+
* Throws an error listing all unresolved references.
|
|
64
|
+
*/
|
|
65
|
+
validateCubeReferences(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Validate calculated measures in a cube
|
|
68
|
+
* Checks template syntax, dependency existence, and circular dependencies
|
|
69
|
+
*/
|
|
70
|
+
private validateCalculatedMeasures;
|
|
71
|
+
/**
|
|
72
|
+
* Get a cube by name
|
|
73
|
+
*/
|
|
74
|
+
getCube(name: string): Cube | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Get all registered cubes
|
|
77
|
+
*/
|
|
78
|
+
getAllCubes(): Cube[];
|
|
79
|
+
/**
|
|
80
|
+
* Get all cubes as a Map for multi-cube queries
|
|
81
|
+
*/
|
|
82
|
+
getAllCubesMap(): Map<string, Cube>;
|
|
83
|
+
/**
|
|
84
|
+
* Unified query execution method that handles both single and multi-cube queries
|
|
85
|
+
* @param options.skipCache - Skip cache lookup (but still cache the fresh result)
|
|
86
|
+
*/
|
|
87
|
+
execute(query: SemanticQuery, securityContext: SecurityContext, options?: ExecutionOptions): Promise<QueryResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Execute a multi-cube query
|
|
90
|
+
* @param options.skipCache - Skip cache lookup (but still cache the fresh result)
|
|
91
|
+
*/
|
|
92
|
+
executeMultiCubeQuery(query: SemanticQuery, securityContext: SecurityContext, options?: ExecutionOptions): Promise<QueryResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Execute a single cube query
|
|
95
|
+
*/
|
|
96
|
+
executeQuery(cubeName: string, query: SemanticQuery, securityContext: SecurityContext): Promise<QueryResult>;
|
|
97
|
+
/**
|
|
98
|
+
* Get metadata for all cubes (for API responses)
|
|
99
|
+
* Uses caching to improve performance for repeated requests
|
|
100
|
+
* Cache is invalidated when cubes are modified (registerCube, removeCube, clearCubes)
|
|
101
|
+
*/
|
|
102
|
+
getMetadata(): CubeMetadata[];
|
|
103
|
+
/**
|
|
104
|
+
* Extract column name from Drizzle column reference
|
|
105
|
+
* Handles different column types and extracts the actual column name
|
|
106
|
+
*/
|
|
107
|
+
private getColumnName;
|
|
108
|
+
/**
|
|
109
|
+
* Default time granularities for time dimensions (ordered from least to most granular)
|
|
110
|
+
* Used when dimension.granularities is not specified
|
|
111
|
+
*/
|
|
112
|
+
private static readonly DEFAULT_TIME_GRANULARITIES;
|
|
113
|
+
/**
|
|
114
|
+
* Generate cube metadata for API responses from cubes
|
|
115
|
+
* Optimized version that minimizes object iterations
|
|
116
|
+
* Includes drill-down support: drillMembers on measures, granularities on time dimensions, hierarchies
|
|
117
|
+
*/
|
|
118
|
+
private generateCubeMetadata;
|
|
119
|
+
/**
|
|
120
|
+
* Get SQL for a query without executing it (debugging)
|
|
121
|
+
*/
|
|
122
|
+
generateSQL(cubeName: string, query: SemanticQuery, securityContext: SecurityContext): Promise<{
|
|
123
|
+
sql: string;
|
|
124
|
+
params?: any[];
|
|
125
|
+
}>;
|
|
126
|
+
/**
|
|
127
|
+
* Get SQL for a multi-cube query without executing it (debugging)
|
|
128
|
+
*/
|
|
129
|
+
generateMultiCubeSQL(query: SemanticQuery, securityContext: SecurityContext): Promise<{
|
|
130
|
+
sql: string;
|
|
131
|
+
params?: any[];
|
|
132
|
+
}>;
|
|
133
|
+
/**
|
|
134
|
+
* Canonical dry-run SQL generation entrypoint for all query modes.
|
|
135
|
+
*/
|
|
136
|
+
dryRun(query: SemanticQuery, securityContext: SecurityContext): Promise<{
|
|
137
|
+
sql: string;
|
|
138
|
+
params?: any[];
|
|
139
|
+
}>;
|
|
140
|
+
/**
|
|
141
|
+
* Get SQL for a funnel query without executing it (debugging)
|
|
142
|
+
* Returns the actual CTE-based SQL that would be executed for funnel queries
|
|
143
|
+
*/
|
|
144
|
+
dryRunFunnel(query: SemanticQuery, securityContext: SecurityContext): Promise<{
|
|
145
|
+
sql: string;
|
|
146
|
+
params?: any[];
|
|
147
|
+
}>;
|
|
148
|
+
/**
|
|
149
|
+
* Get SQL for a flow query without executing it (debugging)
|
|
150
|
+
* Returns the actual CTE-based SQL that would be executed for flow queries
|
|
151
|
+
*/
|
|
152
|
+
dryRunFlow(query: SemanticQuery, securityContext: SecurityContext): Promise<{
|
|
153
|
+
sql: string;
|
|
154
|
+
params?: any[];
|
|
155
|
+
}>;
|
|
156
|
+
/**
|
|
157
|
+
* Generate SQL for a retention query without execution (dry-run)
|
|
158
|
+
* Returns the CTE-based SQL that would be executed for retention analysis
|
|
159
|
+
*/
|
|
160
|
+
dryRunRetention(query: SemanticQuery, securityContext: SecurityContext): Promise<{
|
|
161
|
+
sql: string;
|
|
162
|
+
params?: any[];
|
|
163
|
+
}>;
|
|
164
|
+
/**
|
|
165
|
+
* Execute EXPLAIN on a query to get the execution plan
|
|
166
|
+
* Uses the same secure path as execute/dryRun to generate SQL,
|
|
167
|
+
* then runs database EXPLAIN on it.
|
|
168
|
+
*/
|
|
169
|
+
explainQuery(query: SemanticQuery, securityContext: SecurityContext, options?: ExplainOptions): Promise<ExplainResult>;
|
|
170
|
+
/**
|
|
171
|
+
* Check if a cube exists
|
|
172
|
+
*/
|
|
173
|
+
hasCube(name: string): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* Unregister a cube by name.
|
|
176
|
+
* Returns true if the cube existed and was removed, false if not found.
|
|
177
|
+
*/
|
|
178
|
+
unregisterCube(name: string): boolean;
|
|
179
|
+
/**
|
|
180
|
+
* Remove a cube
|
|
181
|
+
*/
|
|
182
|
+
removeCube(name: string): boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Clear all cubes
|
|
185
|
+
*/
|
|
186
|
+
clearCubes(): void;
|
|
187
|
+
/**
|
|
188
|
+
* Invalidate the metadata cache
|
|
189
|
+
* Called whenever cubes are modified
|
|
190
|
+
*/
|
|
191
|
+
private invalidateMetadataCache;
|
|
192
|
+
/**
|
|
193
|
+
* Get cube names
|
|
194
|
+
*/
|
|
195
|
+
getCubeNames(): string[];
|
|
196
|
+
/**
|
|
197
|
+
* Validate a query against registered cubes
|
|
198
|
+
* Ensures all referenced cubes and fields exist
|
|
199
|
+
*/
|
|
200
|
+
validateQuery(query: SemanticQuery): {
|
|
201
|
+
isValid: boolean;
|
|
202
|
+
errors: string[];
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* Analyze query planning decisions for debugging and transparency
|
|
206
|
+
* Returns detailed metadata about how the query would be planned
|
|
207
|
+
* Used by the playground UI to help users understand query structure
|
|
208
|
+
*/
|
|
209
|
+
analyzeQuery(query: SemanticQuery, securityContext: SecurityContext): QueryAnalysis;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Validate a query against a cubes map
|
|
213
|
+
* Standalone function that can be used by both compiler and executor
|
|
214
|
+
*/
|
|
215
|
+
export declare function validateQueryAgainstCubes(cubes: Map<string, Cube>, query: SemanticQuery): {
|
|
216
|
+
isValid: boolean;
|
|
217
|
+
errors: string[];
|
|
218
|
+
};
|