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