@quillsql/react 2.13.7 → 2.13.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/dist/cjs/Chart.d.ts +5 -5
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +19 -8
  4. package/dist/cjs/ChartBuilder.d.ts +1 -1
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +58 -93
  7. package/dist/cjs/ChartEditor.js +1 -1
  8. package/dist/cjs/Context.d.ts +9 -8
  9. package/dist/cjs/Context.d.ts.map +1 -1
  10. package/dist/cjs/Context.js +119 -34
  11. package/dist/cjs/Dashboard.d.ts +20 -8
  12. package/dist/cjs/Dashboard.d.ts.map +1 -1
  13. package/dist/cjs/Dashboard.js +68 -58
  14. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -2
  15. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  16. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +1 -2
  17. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +20 -20
  18. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +64 -52
  20. package/dist/cjs/ReportBuilder.d.ts +2 -1
  21. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  22. package/dist/cjs/ReportBuilder.js +339 -339
  23. package/dist/cjs/SQLEditor.d.ts +1 -1
  24. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  25. package/dist/cjs/SQLEditor.js +30 -18
  26. package/dist/cjs/components/Banner/index.d.ts +0 -1
  27. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  28. package/dist/cjs/components/Banner/index.js +1 -1
  29. package/dist/cjs/components/Chart/BarChart.d.ts +0 -1
  30. package/dist/cjs/components/Chart/BarChart.d.ts.map +1 -1
  31. package/dist/cjs/components/Chart/BarChart.js +1 -1
  32. package/dist/cjs/components/Chart/BarList.js +1 -2
  33. package/dist/cjs/components/Chart/ChartError.js +2 -3
  34. package/dist/cjs/components/Chart/ChartSkeleton.js +1 -1
  35. package/dist/cjs/components/Chart/ChartTooltip.js +1 -1
  36. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts +0 -1
  37. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
  38. package/dist/cjs/components/Chart/ChartTooltipFrame.js +1 -1
  39. package/dist/cjs/components/Chart/ChartTooltipGroup.js +1 -1
  40. package/dist/cjs/components/Chart/ChartTooltipRow.js +1 -1
  41. package/dist/cjs/components/Chart/LineChart.d.ts +0 -1
  42. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  43. package/dist/cjs/components/Chart/LineChart.js +1 -1
  44. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  45. package/dist/cjs/components/Chart/PieChart.js +18 -9
  46. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +0 -1
  47. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  48. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  49. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +10 -2
  50. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  51. package/dist/cjs/components/Dashboard/DashboardFilter.js +9 -23
  52. package/dist/cjs/components/Dashboard/DashboardSection.d.ts +0 -1
  53. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
  54. package/dist/cjs/components/Dashboard/DashboardSection.js +1 -1
  55. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts +0 -1
  56. package/dist/cjs/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  57. package/dist/cjs/components/Dashboard/DashboardSectionContainer.js +1 -1
  58. package/dist/cjs/components/Dashboard/DashboardTemplate.js +1 -1
  59. package/dist/cjs/components/Dashboard/DataLoader.d.ts +9 -7
  60. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  61. package/dist/cjs/components/Dashboard/DataLoader.js +104 -61
  62. package/dist/cjs/components/Dashboard/MetricComponent.d.ts +0 -1
  63. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  64. package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
  65. package/dist/cjs/components/Dashboard/TableComponent.d.ts +0 -1
  66. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  67. package/dist/cjs/components/Dashboard/TableComponent.js +1 -1
  68. package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts +0 -1
  69. package/dist/cjs/components/Dashboard/TemplateChartComponent.d.ts.map +1 -1
  70. package/dist/cjs/components/Dashboard/TemplateChartComponent.js +1 -1
  71. package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts +0 -1
  72. package/dist/cjs/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -1
  73. package/dist/cjs/components/Dashboard/TemplateMetricComponent.js +1 -1
  74. package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts +0 -1
  75. package/dist/cjs/components/Dashboard/TemplateTableComponent.d.ts.map +1 -1
  76. package/dist/cjs/components/Dashboard/TemplateTableComponent.js +1 -1
  77. package/dist/cjs/components/Dashboard/util.js +2 -3
  78. package/dist/cjs/components/QuillCard.js +1 -2
  79. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  80. package/dist/cjs/components/QuillMultiSelect.js +21 -20
  81. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  82. package/dist/cjs/components/QuillMultiSelectWithCombo.js +172 -70
  83. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  84. package/dist/cjs/components/QuillSelect.js +9 -8
  85. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -1
  86. package/dist/cjs/components/QuillSelectWithCombo.js +26 -12
  87. package/dist/cjs/components/QuillTable.d.ts +5 -1
  88. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  89. package/dist/cjs/components/QuillTable.js +5 -3
  90. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +1 -1
  91. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts +2 -3
  92. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  93. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +5 -6
  94. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  95. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +3 -4
  96. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  97. package/dist/cjs/components/ReportBuilder/FilterModal.js +45 -39
  98. package/dist/cjs/components/ReportBuilder/FilterStack.js +1 -1
  99. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  100. package/dist/cjs/components/ReportBuilder/ast.js +2 -2
  101. package/dist/cjs/components/ReportBuilder/convert.js +11 -12
  102. package/dist/cjs/components/ReportBuilder/postgres.js +4 -4
  103. package/dist/cjs/components/ReportBuilder/ui.d.ts +3 -3
  104. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  105. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  106. package/dist/cjs/components/ReportBuilder/util.js +21 -23
  107. package/dist/cjs/components/UiComponents.d.ts +14 -12
  108. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  109. package/dist/cjs/components/UiComponents.js +41 -17
  110. package/dist/cjs/components/selectUtils.js +3 -3
  111. package/dist/cjs/contexts/BaseColorContext.d.ts +0 -1
  112. package/dist/cjs/contexts/BaseColorContext.d.ts.map +1 -1
  113. package/dist/cjs/contexts/RootStylesContext.d.ts +0 -1
  114. package/dist/cjs/contexts/RootStylesContext.d.ts.map +1 -1
  115. package/dist/cjs/contexts/SelectedValueContext.d.ts +0 -1
  116. package/dist/cjs/contexts/SelectedValueContext.d.ts.map +1 -1
  117. package/dist/cjs/hooks/useAskQuill.d.ts +2 -2
  118. package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
  119. package/dist/cjs/hooks/useAskQuill.js +11 -11
  120. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
  121. package/dist/cjs/hooks/useDashboard.d.ts +8 -7
  122. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  123. package/dist/cjs/hooks/useDashboard.js +47 -31
  124. package/dist/cjs/hooks/useExport.d.ts +3 -4
  125. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  126. package/dist/cjs/hooks/useExport.js +6 -2
  127. package/dist/cjs/hooks/useInternalState.d.ts +1 -2
  128. package/dist/cjs/hooks/useInternalState.d.ts.map +1 -1
  129. package/dist/cjs/hooks/useOnClickOutside.d.ts +3 -1
  130. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  131. package/dist/cjs/hooks/useQuill.d.ts +0 -14
  132. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  133. package/dist/cjs/hooks/useQuill.js +17 -55
  134. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  135. package/dist/cjs/index.d.ts +2 -1
  136. package/dist/cjs/index.d.ts.map +1 -1
  137. package/dist/cjs/index.js +7 -2
  138. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +4 -1
  139. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  140. package/dist/cjs/internals/ReportBuilder/PivotForm.js +32 -7
  141. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +17 -13
  142. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  143. package/dist/cjs/internals/ReportBuilder/PivotModal.js +368 -162
  144. package/dist/cjs/lib/utils.d.ts +0 -1
  145. package/dist/cjs/lib/utils.d.ts.map +1 -1
  146. package/dist/cjs/lib/utils.js +2 -2
  147. package/dist/cjs/models/Filter.d.ts +49 -30
  148. package/dist/cjs/models/Filter.d.ts.map +1 -1
  149. package/dist/cjs/models/Filter.js +125 -52
  150. package/dist/cjs/models/Pivot.d.ts +3 -1
  151. package/dist/cjs/models/Pivot.d.ts.map +1 -1
  152. package/dist/cjs/models/Report.d.ts +2 -2
  153. package/dist/cjs/models/Report.d.ts.map +1 -1
  154. package/dist/cjs/utils/astFilterProcessing.d.ts +4 -4
  155. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  156. package/dist/cjs/utils/astFilterProcessing.js +3839 -3427
  157. package/dist/cjs/utils/astProcessing.d.ts +12 -3
  158. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  159. package/dist/cjs/utils/astProcessing.js +76 -11
  160. package/dist/cjs/utils/client.js +2 -2
  161. package/dist/cjs/utils/color.js +5 -6
  162. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  163. package/dist/cjs/utils/columnProcessing.js +7 -7
  164. package/dist/cjs/utils/crypto.js +1 -2
  165. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  166. package/dist/cjs/utils/dashboard.js +34 -30
  167. package/dist/cjs/utils/dataFetcher.js +3 -4
  168. package/dist/cjs/utils/dataProcessing.js +2 -2
  169. package/dist/cjs/utils/dates.d.ts +4 -1
  170. package/dist/cjs/utils/dates.d.ts.map +1 -1
  171. package/dist/cjs/utils/dates.js +12 -10
  172. package/dist/cjs/utils/errorProcessing.js +1 -2
  173. package/dist/cjs/utils/filterProcessing.d.ts +3 -3
  174. package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
  175. package/dist/cjs/utils/filterProcessing.js +30 -27
  176. package/dist/cjs/utils/getDomain.js +1 -1
  177. package/dist/cjs/utils/logging.js +1 -2
  178. package/dist/cjs/utils/merge.d.ts +1 -1
  179. package/dist/cjs/utils/merge.d.ts.map +1 -1
  180. package/dist/cjs/utils/merge.js +15 -11
  181. package/dist/cjs/utils/monacoConfig.js +3 -3
  182. package/dist/cjs/utils/paginationProcessing.js +3 -3
  183. package/dist/cjs/utils/pivotConstructor.d.ts +4 -4
  184. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  185. package/dist/cjs/utils/pivotConstructor.js +104 -127
  186. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  187. package/dist/cjs/utils/pivotProcessing.js +14 -16
  188. package/dist/cjs/utils/queryConstructor.d.ts +2 -2
  189. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  190. package/dist/cjs/utils/queryConstructor.js +344 -78
  191. package/dist/cjs/utils/report.d.ts.map +1 -1
  192. package/dist/cjs/utils/report.js +22 -12
  193. package/dist/cjs/utils/schema.d.ts.map +1 -1
  194. package/dist/cjs/utils/styles.js +1 -2
  195. package/dist/cjs/utils/tableProcessing.d.ts +12 -12
  196. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  197. package/dist/cjs/utils/tableProcessing.js +69 -26
  198. package/dist/cjs/utils/textProcessing.js +5 -6
  199. package/dist/cjs/utils/validation.d.ts.map +1 -1
  200. package/dist/cjs/utils/validation.js +3 -1
  201. package/dist/cjs/utils/valueFormatter.d.ts +1 -0
  202. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  203. package/dist/cjs/utils/valueFormatter.js +2 -0
  204. package/dist/cjs/utils/width.d.ts.map +1 -1
  205. package/dist/esm/Chart.d.ts +5 -5
  206. package/dist/esm/Chart.d.ts.map +1 -1
  207. package/dist/esm/Chart.js +15 -4
  208. package/dist/esm/ChartBuilder.d.ts +1 -1
  209. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  210. package/dist/esm/ChartBuilder.js +52 -87
  211. package/dist/esm/Context.d.ts +9 -8
  212. package/dist/esm/Context.d.ts.map +1 -1
  213. package/dist/esm/Context.js +119 -34
  214. package/dist/esm/Dashboard.d.ts +20 -8
  215. package/dist/esm/Dashboard.d.ts.map +1 -1
  216. package/dist/esm/Dashboard.js +68 -58
  217. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -2
  218. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  219. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +20 -20
  220. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  221. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +64 -52
  222. package/dist/esm/ReportBuilder.d.ts +2 -1
  223. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  224. package/dist/esm/ReportBuilder.js +343 -343
  225. package/dist/esm/SQLEditor.d.ts +1 -1
  226. package/dist/esm/SQLEditor.d.ts.map +1 -1
  227. package/dist/esm/SQLEditor.js +29 -17
  228. package/dist/esm/components/Banner/index.d.ts +0 -1
  229. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  230. package/dist/esm/components/Chart/BarChart.d.ts +0 -1
  231. package/dist/esm/components/Chart/BarChart.d.ts.map +1 -1
  232. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts +0 -1
  233. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
  234. package/dist/esm/components/Chart/LineChart.d.ts +0 -1
  235. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  236. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  237. package/dist/esm/components/Chart/PieChart.js +18 -9
  238. package/dist/esm/components/Dashboard/ChartComponent.d.ts +0 -1
  239. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  240. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +10 -2
  241. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  242. package/dist/esm/components/Dashboard/DashboardFilter.js +8 -21
  243. package/dist/esm/components/Dashboard/DashboardSection.d.ts +0 -1
  244. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
  245. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts +0 -1
  246. package/dist/esm/components/Dashboard/DashboardSectionContainer.d.ts.map +1 -1
  247. package/dist/esm/components/Dashboard/DataLoader.d.ts +9 -7
  248. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  249. package/dist/esm/components/Dashboard/DataLoader.js +102 -62
  250. package/dist/esm/components/Dashboard/MetricComponent.d.ts +0 -1
  251. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  252. package/dist/esm/components/Dashboard/MetricComponent.js +2 -2
  253. package/dist/esm/components/Dashboard/TableComponent.d.ts +0 -1
  254. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  255. package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts +0 -1
  256. package/dist/esm/components/Dashboard/TemplateChartComponent.d.ts.map +1 -1
  257. package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts +0 -1
  258. package/dist/esm/components/Dashboard/TemplateMetricComponent.d.ts.map +1 -1
  259. package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts +0 -1
  260. package/dist/esm/components/Dashboard/TemplateTableComponent.d.ts.map +1 -1
  261. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  262. package/dist/esm/components/QuillMultiSelect.js +19 -18
  263. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  264. package/dist/esm/components/QuillMultiSelectWithCombo.js +171 -69
  265. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  266. package/dist/esm/components/QuillSelect.js +8 -6
  267. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -1
  268. package/dist/esm/components/QuillSelectWithCombo.js +25 -10
  269. package/dist/esm/components/QuillTable.d.ts +5 -1
  270. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  271. package/dist/esm/components/QuillTable.js +4 -2
  272. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts +2 -3
  273. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  274. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +5 -6
  275. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  276. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +3 -4
  277. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
  278. package/dist/esm/components/ReportBuilder/FilterModal.js +46 -40
  279. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  280. package/dist/esm/components/ReportBuilder/ui.d.ts +3 -3
  281. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  282. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  283. package/dist/esm/components/ReportBuilder/util.js +0 -2
  284. package/dist/esm/components/UiComponents.d.ts +14 -12
  285. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  286. package/dist/esm/components/UiComponents.js +37 -14
  287. package/dist/esm/contexts/BaseColorContext.d.ts +0 -1
  288. package/dist/esm/contexts/BaseColorContext.d.ts.map +1 -1
  289. package/dist/esm/contexts/RootStylesContext.d.ts +0 -1
  290. package/dist/esm/contexts/RootStylesContext.d.ts.map +1 -1
  291. package/dist/esm/contexts/SelectedValueContext.d.ts +0 -1
  292. package/dist/esm/contexts/SelectedValueContext.d.ts.map +1 -1
  293. package/dist/esm/hooks/useAskQuill.d.ts +2 -2
  294. package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
  295. package/dist/esm/hooks/useAskQuill.js +12 -12
  296. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
  297. package/dist/esm/hooks/useDashboard.d.ts +8 -7
  298. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  299. package/dist/esm/hooks/useDashboard.js +48 -32
  300. package/dist/esm/hooks/useExport.d.ts +3 -4
  301. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  302. package/dist/esm/hooks/useExport.js +6 -2
  303. package/dist/esm/hooks/useInternalState.d.ts +1 -2
  304. package/dist/esm/hooks/useInternalState.d.ts.map +1 -1
  305. package/dist/esm/hooks/useOnClickOutside.d.ts +3 -1
  306. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  307. package/dist/esm/hooks/useQuill.d.ts +0 -14
  308. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  309. package/dist/esm/hooks/useQuill.js +16 -53
  310. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  311. package/dist/esm/index.d.ts +2 -1
  312. package/dist/esm/index.d.ts.map +1 -1
  313. package/dist/esm/index.js +2 -1
  314. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +4 -1
  315. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  316. package/dist/esm/internals/ReportBuilder/PivotForm.js +32 -7
  317. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +17 -13
  318. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  319. package/dist/esm/internals/ReportBuilder/PivotModal.js +364 -158
  320. package/dist/esm/lib/utils.d.ts +0 -1
  321. package/dist/esm/lib/utils.d.ts.map +1 -1
  322. package/dist/esm/models/Filter.d.ts +49 -30
  323. package/dist/esm/models/Filter.d.ts.map +1 -1
  324. package/dist/esm/models/Filter.js +123 -50
  325. package/dist/esm/models/Pivot.d.ts +3 -1
  326. package/dist/esm/models/Pivot.d.ts.map +1 -1
  327. package/dist/esm/models/Report.d.ts +2 -2
  328. package/dist/esm/models/Report.d.ts.map +1 -1
  329. package/dist/esm/utils/astFilterProcessing.d.ts +4 -4
  330. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  331. package/dist/esm/utils/astFilterProcessing.js +3835 -3423
  332. package/dist/esm/utils/astProcessing.d.ts +12 -3
  333. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  334. package/dist/esm/utils/astProcessing.js +64 -0
  335. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  336. package/dist/esm/utils/columnProcessing.js +1 -1
  337. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  338. package/dist/esm/utils/dashboard.js +31 -26
  339. package/dist/esm/utils/dates.d.ts +4 -1
  340. package/dist/esm/utils/dates.d.ts.map +1 -1
  341. package/dist/esm/utils/dates.js +6 -3
  342. package/dist/esm/utils/filterProcessing.d.ts +3 -3
  343. package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
  344. package/dist/esm/utils/filterProcessing.js +22 -19
  345. package/dist/esm/utils/merge.d.ts +1 -1
  346. package/dist/esm/utils/merge.d.ts.map +1 -1
  347. package/dist/esm/utils/merge.js +14 -9
  348. package/dist/esm/utils/pivotConstructor.d.ts +4 -4
  349. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  350. package/dist/esm/utils/pivotConstructor.js +103 -125
  351. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  352. package/dist/esm/utils/pivotProcessing.js +9 -11
  353. package/dist/esm/utils/queryConstructor.d.ts +2 -2
  354. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  355. package/dist/esm/utils/queryConstructor.js +338 -71
  356. package/dist/esm/utils/report.d.ts.map +1 -1
  357. package/dist/esm/utils/report.js +18 -8
  358. package/dist/esm/utils/schema.d.ts.map +1 -1
  359. package/dist/esm/utils/tableProcessing.d.ts +12 -12
  360. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  361. package/dist/esm/utils/tableProcessing.js +69 -26
  362. package/dist/esm/utils/validation.d.ts.map +1 -1
  363. package/dist/esm/utils/validation.js +3 -1
  364. package/dist/esm/utils/valueFormatter.d.ts +1 -0
  365. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  366. package/dist/esm/utils/valueFormatter.js +2 -1
  367. package/dist/esm/utils/width.d.ts.map +1 -1
  368. package/package.json +4 -4
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generatePivotQuery = exports.generateMinMaxRangeQueries = exports.generateDistinctQuery = exports.generateCountQuery = exports.replaceSpacesWithUnderscores = exports.processColumnReference = void 0;
3
+ exports.processColumnReference = processColumnReference;
4
+ exports.replaceSpacesWithUnderscores = replaceSpacesWithUnderscores;
5
+ exports.generateCountQuery = generateCountQuery;
6
+ exports.generateDistinctQuery = generateDistinctQuery;
7
+ exports.generateMinMaxRangeQueries = generateMinMaxRangeQueries;
8
+ exports.generatePivotQuery = generatePivotQuery;
4
9
  const constants_1 = require("./constants");
5
10
  const pivotProcessing_1 = require("./pivotProcessing");
6
11
  function processSingleQuotes(value, databaseType) {
@@ -19,42 +24,69 @@ function replaceBigQuerySpecialCharacters(column) {
19
24
  }
20
25
  function processColumnReference(column, databaseType, fallbackOnNull,
21
26
  // for mysql, we only want to use double quotes for pivot column field aliases
22
- isPivotFieldAlias) {
23
- if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
27
+ isPivotColumnFieldAlias, isPivotValueFieldAlias) {
28
+ if (['postgresql'].includes(databaseType.toLowerCase())) {
29
+ if (isPivotColumnFieldAlias) {
30
+ return `"${column.replaceAll('"', '')}"`;
31
+ }
24
32
  const columnParts = column.split('.');
25
33
  if (columnParts.length > 1) {
26
- return `"${columnParts[0]}"."${columnParts[1]}"`;
34
+ return (`"` +
35
+ columnParts.map((part) => part.replaceAll('"', '')).join('"."') +
36
+ `"`);
27
37
  }
28
38
  if (column === '' && fallbackOnNull) {
29
39
  return `"${fallbackOnNull}"`;
30
40
  }
31
- return `"${column}"`;
41
+ return `"${column.replaceAll('"', '')}"`;
32
42
  }
33
43
  if (['mysql'].includes(databaseType.toLowerCase())) {
34
- if (isPivotFieldAlias) {
35
- return `"${column}"`;
44
+ if (isPivotColumnFieldAlias) {
45
+ return `\`${column.replaceAll(`\``, '').replaceAll(`"`, '')}\``;
36
46
  }
37
47
  const columnParts = column.split('.');
38
48
  if (columnParts.length > 1) {
39
- return `${columnParts[0]}.${columnParts[1]}`;
49
+ return (`\`` +
50
+ columnParts.map((part) => part.replaceAll(`\``, '')).join('`.`') +
51
+ `\``);
40
52
  }
41
53
  if (column === '' && fallbackOnNull) {
42
54
  return `${fallbackOnNull}`;
43
55
  }
44
56
  // Wrap MySQL columns in backticks to handle whitespace
45
- return `\`${column}\``;
57
+ return `\`${column.replaceAll(`\``, '')}\``;
58
+ }
59
+ if (['snowflake'].includes(databaseType.toLowerCase())) {
60
+ if (isPivotColumnFieldAlias) {
61
+ return `"${column.replaceAll('"', '')}"`;
62
+ }
63
+ if (isPivotValueFieldAlias) {
64
+ const cleanedColumn = column.replaceAll(')', '').replaceAll('(', '_');
65
+ return `${cleanedColumn}`;
66
+ }
67
+ // const columnParts = column.split('.');
68
+ // if (columnParts.length > 1) {
69
+ // return '"' + columnParts.join('"."') + '"';
70
+ // }
71
+ if (column === '' && fallbackOnNull) {
72
+ return `${fallbackOnNull}`;
73
+ }
74
+ return column;
75
+ }
76
+ if (isPivotColumnFieldAlias) {
77
+ return `\`${column.replaceAll('`', '')}\``;
46
78
  }
47
79
  const columnParts = column.split('.');
48
80
  if (columnParts.length > 1) {
49
- return `\`${columnParts[0]}\`.\`${columnParts[1]}\``;
81
+ return (`\`` +
82
+ columnParts.map((part) => part.replaceAll(`\``, '')).join('`.`') +
83
+ `\``);
50
84
  }
51
- return `\`${replaceBigQuerySpecialCharacters(column)}\``;
85
+ return `\`${replaceBigQuerySpecialCharacters(column.replaceAll('`', ''))}\``;
52
86
  }
53
- exports.processColumnReference = processColumnReference;
54
87
  function replaceSpacesWithUnderscores(column) {
55
88
  return column.replaceAll(' ', '_');
56
89
  }
57
- exports.replaceSpacesWithUnderscores = replaceSpacesWithUnderscores;
58
90
  function processInterval(interval, rowField, databaseType) {
59
91
  if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
60
92
  return `(${processColumnReference(rowField, databaseType)} + INTERVAL '${interval}')`;
@@ -114,18 +146,18 @@ function generateCountQuery(fields, query, databaseType) {
114
146
  }
115
147
  return cteQuery + countQuery.join(' UNION ALL ');
116
148
  }
117
- exports.generateCountQuery = generateCountQuery;
118
149
  function generateDistinctQuery(stringFields, query, databaseType) {
119
150
  switch (databaseType.toLowerCase()) {
120
151
  case 'mysql':
121
152
  return generateDistinctQueryMySQL(stringFields, query);
122
153
  case 'postgresql':
123
154
  return generateDistinctQueryPostgres(stringFields, query);
155
+ case 'snowflake':
156
+ return generateDistinctQuerySnowflake(stringFields, query);
124
157
  default:
125
158
  return generateDistinctQueryDefault(stringFields, query, databaseType);
126
159
  }
127
160
  }
128
- exports.generateDistinctQuery = generateDistinctQuery;
129
161
  function generateDistinctQueryDefault(stringFields, query, databaseType) {
130
162
  const distinctQueries = stringFields.map((field) => {
131
163
  return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, ARRAY_AGG(DISTINCT ${field}) AS ${processColumnReference('string_values', databaseType)} FROM querytable`;
@@ -134,21 +166,6 @@ function generateDistinctQueryDefault(stringFields, query, databaseType) {
134
166
  return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
135
167
  }
136
168
  function generateDistinctQueryMySQL(stringFields, query) {
137
- // WITH querytable AS (
138
- // SELECT DISTINCT merchant, user_name, category
139
- // FROM transactions
140
- // )
141
- // SELECT 'merchant' AS field, JSON_ARRAYAGG(merchant) AS string_values
142
- // FROM (SELECT DISTINCT merchant FROM querytable) AS distinct_merchants
143
- // UNION ALL
144
- // SELECT 'user_name' AS field, JSON_ARRAYAGG(user_name) AS string_values
145
- // FROM (SELECT DISTINCT user_name FROM querytable) AS distinct_user_names
146
- // UNION ALL
147
- // SELECT 'category' AS field, JSON_ARRAYAGG(category) AS string_values
148
- // FROM (SELECT DISTINCT category FROM querytable) AS distinct_categories;
149
- // const distinctQueries = stringFields.map((field) => {
150
- // return `SELECT '${field}' AS ${processColumnReference('field', 'mysql')}, JSON_ARRAYAGG(${field}) AS ${processColumnReference('string_values', 'mysql')} FROM querytable`;
151
- // });
152
169
  const distinctQueries = stringFields.map((field) => {
153
170
  return `
154
171
  SELECT '${field}' AS ${processColumnReference('field', 'mysql')},
@@ -165,31 +182,40 @@ function generateDistinctQueryPostgres(stringFields, query) {
165
182
  const distinctQuery = distinctQueries.join(' UNION ALL ');
166
183
  return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
167
184
  }
185
+ function generateDistinctQuerySnowflake(stringFields, query) {
186
+ const distinctQueries = stringFields.map((field) => {
187
+ return `SELECT '${field}' AS "field", ARRAY_AGG(DISTINCT "${field}") AS "string_values" FROM querytable`;
188
+ });
189
+ const distinctQuery = distinctQueries.join(' UNION ALL ');
190
+ return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
191
+ }
168
192
  function generateMinMaxRangeQueries(columnFields, query, databaseType) {
193
+ const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
169
194
  const distinctQueries = columnFields.map((field) => {
170
- const wrappedField = ['postgresql', 'snowflake'].includes(databaseType.toLowerCase())
195
+ const wrappedField = ['postgresql'].includes(databaseType.toLowerCase())
171
196
  ? `"${field}"`
172
197
  : field;
173
- return `SELECT '${field}' AS field, MIN(${wrappedField}) AS min_range, MAX(${wrappedField}) AS max_range FROM querytable`;
198
+ return `SELECT '${field}' AS field, MIN(${wrappedField}) AS min_range, ${max}(${wrappedField}) AS max_range FROM querytable`;
174
199
  });
175
200
  const distinctQuery = distinctQueries.join(' UNION ALL ');
176
201
  return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
177
202
  }
178
- exports.generateMinMaxRangeQueries = generateMinMaxRangeQueries;
179
- function generatePivotQuery(pivot, itemQueries, databaseType, comparisonInterval, distinctStrings, dateBucket) {
203
+ function generatePivotQuery(pivot, itemQueries, databaseType, comparisonInterval, distinctStrings, dateBucket, rowLimit) {
180
204
  if (!(0, pivotProcessing_1.isValidPivot)(pivot)) {
181
205
  return undefined;
182
206
  }
183
207
  if (pivot.columnField) {
184
- return create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, comparisonInterval, distinctStrings);
208
+ console.log('1');
209
+ return create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, comparisonInterval, distinctStrings, rowLimit);
185
210
  }
186
211
  if (pivot.rowField) {
187
- return create1DPivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval);
212
+ console.log('2');
213
+ return create1DPivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval, rowLimit);
188
214
  }
189
- return createAggregationValuePivot(pivot, itemQueries, databaseType);
215
+ console.log('3');
216
+ return createAggregationValuePivot(pivot, itemQueries, databaseType, rowLimit);
190
217
  }
191
- exports.generatePivotQuery = generatePivotQuery;
192
- function create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, comparisonInterval, columnFieldValues) {
218
+ function create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, comparisonInterval, columnFieldValues, rowLimit) {
193
219
  if (!pivot || !pivot.columnField) {
194
220
  return undefined;
195
221
  }
@@ -198,123 +224,363 @@ function create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, compar
198
224
  }
199
225
  if (['string', 'varchar'].includes(pivot.rowFieldType || '') ||
200
226
  !pivot.rowFieldType) {
201
- return create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType);
227
+ return create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType, rowLimit);
202
228
  }
203
- return create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket, comparisonInterval);
229
+ return create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket, comparisonInterval, rowLimit);
204
230
  }
205
- function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType) {
231
+ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType, rowLimit) {
206
232
  if (!pivot.columnField || !pivot.rowField) {
207
233
  return undefined;
208
234
  }
209
235
  const rowField = pivot.rowField;
210
236
  const valueField = pivot.valueField;
211
237
  const columnField = pivot.columnField;
238
+ const rowFieldAlias = processColumnReference(rowField, databaseType, undefined, false, true);
239
+ const valueFieldAlias = processColumnReference(valueField, databaseType, undefined, false, true);
240
+ const columnFieldAlias = processColumnReference(columnField, databaseType, undefined, false, true);
241
+ const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
242
+ const valueAliasSubstring = valueField
243
+ ? `${processColumnReference(valueField, databaseType, undefined, true)} AS ${valueFieldAlias},`
244
+ : '';
245
+ if (pivot.aggregationType === 'percentage' && pivot.valueField2) {
246
+ const valueField2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
247
+ const value2AliasSubstring = `${processColumnReference(pivot.valueField2, databaseType, undefined, true)} AS ${valueField2Alias},`;
248
+ if (pivot.valueField === pivot.valueField2) {
249
+ const caseWhens = columnFieldValues.map((column) => {
250
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(${processColumnReference(pivot.valueField2, databaseType)}), 1) AS ${processColumnReference(column, databaseType, '_', true)}`;
251
+ });
252
+ const caseWhensCompare = columnFieldValues.map((column) => {
253
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)}) / ${max}(sum(${processColumnReference(pivot.valueField2, databaseType)}), 1) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
254
+ });
255
+ const compareCTE = itemQueries[1]
256
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
257
+ : '';
258
+ const aliasCTE = itemQueries[1]
259
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
260
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
261
+ : '';
262
+ const compareCaseWhenCTE = itemQueries[1]
263
+ ? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_c_alias GROUP BY ${rowFieldAlias})`
264
+ : '';
265
+ const joinQuery = itemQueries[1]
266
+ ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)} = qt.${rowFieldAlias}`
267
+ : '';
268
+ return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
269
+ quill_alias AS (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
270
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_qt),
271
+ quill_qt_cw AS (SELECT ${rowFieldAlias}, ${caseWhens.join(', ')} FROM quill_alias GROUP BY ${rowFieldAlias})
272
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
273
+ SELECT * FROM quill_qt_cw qt
274
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
275
+ }
276
+ const caseWhens = columnFieldValues.map((column) => {
277
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField2Alias)} END), 1) AS ${processColumnReference(column, databaseType, '_', true)}`;
278
+ });
279
+ const caseWhensCompare = columnFieldValues.map((column) => {
280
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField2Alias)} END), 1) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
281
+ });
282
+ const compareCTE = itemQueries[1]
283
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
284
+ : '';
285
+ const aliasCTE = itemQueries[1]
286
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring} ${value2AliasSubstring}
287
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
288
+ : '';
289
+ const compareCaseWhenCTE = itemQueries[1]
290
+ ? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_c_alias GROUP BY ${rowFieldAlias})`
291
+ : '';
292
+ const joinQuery = itemQueries[1]
293
+ ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)} = qt.${rowFieldAlias}`
294
+ : '';
295
+ return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
296
+ quill_alias AS (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring} ${value2AliasSubstring}
297
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_qt),
298
+ quill_qt_cw AS (SELECT ${rowFieldAlias}, ${caseWhens.join(', ')} FROM quill_alias GROUP BY ${rowFieldAlias})
299
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
300
+ SELECT * FROM quill_qt_cw qt
301
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
302
+ }
212
303
  const caseWhens = columnFieldValues.map((column) => {
213
- return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${processColumnReference(columnField, databaseType)} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField)} END) AS ${processColumnReference(column, databaseType, '_', true)}`;
304
+ return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) AS ${processColumnReference(column, databaseType, '_', true)}`;
214
305
  });
215
306
  const caseWhensCompare = columnFieldValues.map((column) => {
216
- return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${processColumnReference(columnField, databaseType)} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField)} END) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
307
+ return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
217
308
  });
218
309
  const compareCTE = itemQueries[1]
219
310
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
220
311
  : '';
312
+ const aliasCTE = itemQueries[1]
313
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
314
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
315
+ : '';
221
316
  const compareCaseWhenCTE = itemQueries[1]
222
- ? `, quill_ct_cw as (SELECT ${processColumnReference(rowField, databaseType)} as ${processColumnReference(`comparison_${rowField}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY ${processColumnReference(rowField, databaseType)})`
317
+ ? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_c_alias GROUP BY ${rowFieldAlias})`
223
318
  : '';
224
319
  const joinQuery = itemQueries[1]
225
- ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowField}`, databaseType)} = qt.${processColumnReference(rowField, databaseType)}`
320
+ ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)} = qt.${rowFieldAlias}`
226
321
  : '';
227
322
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
228
- quill_qt_cw AS (SELECT ${processColumnReference(rowField, databaseType)}, ${caseWhens.join(', ')} FROM quill_qt GROUP BY ${processColumnReference(rowField, databaseType)})
229
- ${compareCTE} ${compareCaseWhenCTE}
323
+ quill_alias AS (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
324
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_qt),
325
+ quill_qt_cw AS (SELECT ${rowFieldAlias}, ${caseWhens.join(', ')} FROM quill_alias GROUP BY ${rowFieldAlias})
326
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
230
327
  SELECT * FROM quill_qt_cw qt
231
- ${joinQuery}`;
328
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
232
329
  }
233
- function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket = 'month', comparisonInterval) {
330
+ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket = 'month', comparisonInterval, rowLimit) {
234
331
  if (!pivot.columnField || !pivot.rowField) {
235
332
  return undefined;
236
333
  }
237
334
  const rowField = pivot.rowField;
238
335
  const columnField = pivot.columnField;
336
+ const rowFieldAlias = processColumnReference(rowField, databaseType, undefined, false, true);
337
+ const valueFieldAlias = processColumnReference(pivot.valueField ?? rowField, databaseType, undefined, false, true);
338
+ const columnFieldAlias = processColumnReference(columnField, databaseType, undefined, false, true);
339
+ const valueAliasSubstring = pivot.valueField
340
+ ? `${processColumnReference(pivot.valueField, databaseType, undefined, true)} AS ${valueFieldAlias},`
341
+ : '';
342
+ const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
343
+ if (pivot.aggregationType === 'percentage' && pivot.valueField2) {
344
+ const valueField2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
345
+ const value2AliasSubstring = `${processColumnReference(pivot.valueField2, databaseType, undefined, true)} AS ${valueField2Alias},`;
346
+ // edge case. if the user picks amount and amount, we assume they want a pie chart like breakdown of amount. so the summation of valueField2 has to be moved outside of the case when
347
+ if (pivot.valueField === pivot.valueField2) {
348
+ const caseWhens = columnFieldValues.map((column) => {
349
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(${processColumnReference(valueField2Alias, databaseType)}), 1) AS ${processColumnReference(column, databaseType, '_', true)}`;
350
+ });
351
+ const caseWhensCompare = columnFieldValues.map((column) => {
352
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(${processColumnReference(valueField2Alias, databaseType)}), 1) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
353
+ });
354
+ const compareCTE = itemQueries[1] && comparisonInterval
355
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
356
+ : '';
357
+ const aliasCTE = itemQueries[1]
358
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
359
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
360
+ : '';
361
+ const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
362
+ ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})`
363
+ : '';
364
+ const joinQuery = itemQueries[1] && comparisonInterval
365
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${rowFieldAlias} = ${processDateTrunc(dateBucket, `ct.comparison_${rowFieldAlias}`, databaseType, comparisonInterval)}`
366
+ : '';
367
+ return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
368
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
369
+ ${processColumnReference(columnField, databaseType, undefined, true, true)} AS ${columnFieldAlias} FROM quill_query_table),
370
+ quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}, ${caseWhens.join(', ')} FROM quill_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
371
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
372
+ SELECT * FROM quill_qt_agg qt
373
+ ${joinQuery} ORDER BY qt.${rowFieldAlias}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
374
+ }
375
+ const caseWhens = columnFieldValues.map((column) => {
376
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField2Alias)} END), 1) AS ${processColumnReference(column, databaseType, '_', true)}`;
377
+ });
378
+ const caseWhensCompare = columnFieldValues.map((column) => {
379
+ return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) / ${max}(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField2Alias)} END), 1) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
380
+ });
381
+ const compareCTE = itemQueries[1] && comparisonInterval
382
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
383
+ : '';
384
+ const aliasCTE = itemQueries[1]
385
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring} ${value2AliasSubstring}
386
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
387
+ : '';
388
+ const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
389
+ ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})`
390
+ : '';
391
+ const joinQuery = itemQueries[1] && comparisonInterval
392
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${rowFieldAlias} = ${processDateTrunc(dateBucket, `ct.comparison_${rowFieldAlias}`, databaseType, comparisonInterval)}`
393
+ : '';
394
+ return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
395
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring} ${value2AliasSubstring}
396
+ ${processColumnReference(columnField, databaseType, undefined, true, true)} AS ${columnFieldAlias} FROM quill_query_table),
397
+ quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}, ${caseWhens.join(', ')} FROM quill_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
398
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
399
+ SELECT * FROM quill_qt_agg qt
400
+ ${joinQuery} ORDER BY qt.${rowFieldAlias}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
401
+ }
239
402
  const caseWhens = columnFieldValues.map((column) => {
240
- return `${processAggType(pivot.aggregationType, true)}(CASE WHEN qt.${processColumnReference(columnField, databaseType)} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, pivot.valueField)} END) AS ${processColumnReference(column, databaseType, '_', true)}`;
403
+ return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) AS ${processColumnReference(column, databaseType, '_', true)}`;
241
404
  });
242
405
  const caseWhensCompare = columnFieldValues.map((column) => {
243
- return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${processColumnReference(columnField, databaseType)} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, pivot.valueField)} END) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
406
+ return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueFieldAlias)} END) AS ${processColumnReference(`comparison_${column}`, databaseType, '_', true)}`;
244
407
  });
245
408
  const compareCTE = itemQueries[1] && comparisonInterval
246
409
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
247
410
  : '';
411
+ const aliasCTE = itemQueries[1]
412
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
413
+ ${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
414
+ : '';
248
415
  const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
249
- ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowField}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})`
416
+ ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})`
250
417
  : '';
251
418
  const joinQuery = itemQueries[1] && comparisonInterval
252
- ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(`${rowField}`, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
419
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${rowFieldAlias} = ${processDateTrunc(dateBucket, `ct.comparison_${rowFieldAlias}`, databaseType, comparisonInterval)}`
253
420
  : '';
254
421
  return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
255
- quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(rowField, databaseType)}, ${caseWhens.join(', ')} FROM quill_query_table qt GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})
256
- ${compareCTE} ${compareCaseWhenCTE}
422
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
423
+ ${processColumnReference(columnField, databaseType, undefined, true, true)} AS ${columnFieldAlias} FROM quill_query_table),
424
+ quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}, ${caseWhens.join(', ')} FROM quill_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
425
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
257
426
  SELECT * FROM quill_qt_agg qt
258
- ${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}`;
427
+ ${joinQuery} ORDER BY qt.${rowFieldAlias}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
259
428
  }
260
- function create1DPivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval) {
429
+ function create1DPivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval, rowLimit) {
430
+ console.log('HELLO 0: ', JSON.stringify(pivot), itemQueries);
261
431
  if (['string', 'varchar'].includes(pivot.rowFieldType || '') ||
262
432
  !pivot.rowFieldType) {
263
- return create1DStringPivotQuery(pivot, itemQueries, databaseType);
433
+ return create1DStringPivotQuery(pivot, itemQueries, databaseType, rowLimit);
264
434
  }
265
- return create1DDatePivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval);
435
+ return create1DDatePivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval, rowLimit);
266
436
  }
267
- function create1DStringPivotQuery(pivot, itemQueries, databaseType) {
437
+ function create1DStringPivotQuery(pivot, itemQueries, databaseType, rowLimit) {
268
438
  const rowField = pivot.rowField;
269
439
  const valueField = pivot.valueField;
440
+ const rowAlias = processColumnReference(rowField, databaseType, undefined, false, true);
441
+ const valueAlias = processColumnReference(valueField ?? rowField, databaseType, undefined, false, true);
442
+ const countAlias = processColumnReference('count', databaseType);
443
+ const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
444
+ const valueAliasSubstring = valueField
445
+ ? `, ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueAlias}`
446
+ : ``;
447
+ if (pivot.aggregationType === 'percentage' && pivot.valueField2) {
448
+ const value2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
449
+ const value2AliasSubstring = valueField && valueField !== pivot.valueField2
450
+ ? `, ${processColumnReference(`${pivot.valueField2}`, databaseType, undefined, true)} AS ${value2Alias}`
451
+ : ``;
452
+ const compareCTE = itemQueries[1]
453
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
454
+ : '';
455
+ const aliasCTE = itemQueries[1]
456
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowAlias}${valueAliasSubstring}${value2AliasSubstring} FROM quill_ct)`
457
+ : '';
458
+ const compareCaseWhenCTE = itemQueries[1]
459
+ ? `, quill_ct_cw as (SELECT ${rowAlias} as ${processColumnReference(`comparison_${rowAlias}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${valueField ? valueAlias : '*'}) as ${processColumnReference(`comparison_${valueField ? valueAlias : countAlias}`, databaseType)} FROM quill_c_alias GROUP BY ${rowAlias})`
460
+ : '';
461
+ const joinQuery = itemQueries[1]
462
+ ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowField}`, databaseType)} = qt.${processColumnReference(`${rowField}`, databaseType)}`
463
+ : '';
464
+ return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
465
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowAlias}${valueAliasSubstring}${value2AliasSubstring} FROM quill_qt),
466
+ quill_qt_cw AS (SELECT ${rowAlias}, sum(${valueAlias}) / ${max}(sum(${value2Alias}), 1) as ${valueField ? valueAlias : countAlias}_PERCENTAGE FROM quill_alias GROUP BY ${rowAlias})
467
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
468
+ SELECT * FROM quill_qt_cw qt
469
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
470
+ }
270
471
  const compareCTE = itemQueries[1]
271
472
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
272
473
  : '';
474
+ const aliasCTE = itemQueries[1]
475
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowAlias}${valueAliasSubstring} FROM quill_ct)`
476
+ : '';
273
477
  const compareCaseWhenCTE = itemQueries[1]
274
- ? `, quill_ct_cw as (SELECT ${processColumnReference(`${rowField}`, databaseType)} as ${processColumnReference(`comparison_${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${processColumnReference(`${valueField || rowField}`, databaseType)}) as ${processColumnReference(`comparison_${valueField || 'count'}`, databaseType)} FROM quill_ct GROUP BY ${processColumnReference(`${rowField}`, databaseType)})`
478
+ ? `, quill_ct_cw as (SELECT ${rowAlias} as ${processColumnReference(`comparison_${rowAlias}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${valueField ? valueAlias : '*'}) as ${processColumnReference(`comparison_${valueField ? valueAlias : countAlias}`, databaseType)} FROM quill_c_alias GROUP BY ${rowAlias})`
275
479
  : '';
276
480
  const joinQuery = itemQueries[1]
277
481
  ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowField}`, databaseType)} = qt.${processColumnReference(`${rowField}`, databaseType)}`
278
482
  : '';
279
483
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
280
- quill_qt_cw AS (SELECT ${processColumnReference(`${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${processColumnReference(`${valueField || rowField}`, databaseType)}) as ${processColumnReference(`${valueField}` || 'count', databaseType)} FROM quill_qt GROUP BY ${processColumnReference(`${rowField}`, databaseType)})
281
- ${compareCTE} ${compareCaseWhenCTE}
484
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowAlias}${valueAliasSubstring} FROM quill_qt),
485
+ quill_qt_cw AS (SELECT ${rowAlias}, ${processAggType(pivot.aggregationType)}(${valueField ? valueAlias : '*'}) as ${valueField ? valueAlias : countAlias} FROM quill_alias GROUP BY ${rowAlias})
486
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
282
487
  SELECT * FROM quill_qt_cw qt
283
- ${joinQuery}`;
488
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
284
489
  }
285
- function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval) {
490
+ function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval, rowLimit) {
286
491
  const rowField = pivot.rowField || '';
287
492
  const valueField = pivot.valueField;
493
+ const rowFieldAlias = processColumnReference(rowField, databaseType, undefined);
494
+ const valueFieldAlias = processColumnReference(valueField ?? rowField, databaseType, undefined, false, true);
495
+ const countAlias = processColumnReference('count', databaseType);
496
+ const valueAliasSubstring = valueField
497
+ ? `, ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueFieldAlias}`
498
+ : ``;
499
+ const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
500
+ // this "and" is for typescript. in reality, pivot.valueField2 must exist if pivot.aggregationType === 'percentage'
501
+ if (pivot.aggregationType === 'percentage' && pivot.valueField2) {
502
+ const valueField2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
503
+ const value2AliasSubstring = valueField !== pivot.valueField2
504
+ ? `, ${processColumnReference(`${pivot.valueField2}`, databaseType, undefined, true)} AS ${valueField2Alias}`
505
+ : '';
506
+ const compareCTE = itemQueries[1] && comparisonInterval
507
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
508
+ : '';
509
+ const aliasCTE = itemQueries[1] && comparisonInterval
510
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}${valueAliasSubstring}${value2AliasSubstring} FROM quill_ct)`
511
+ : '';
512
+ const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
513
+ ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)},
514
+ sum(${processColumnReference(`${valueFieldAlias}`, databaseType, undefined, true)}) / ${max}(sum(${processColumnReference(`${valueField2Alias}`, databaseType, undefined, true)}), 1) as ${processColumnReference(`comparison_${valueField ? valueFieldAlias : 'count'}`, databaseType)}_PERCENTAGE FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
515
+ : '';
516
+ const joinQuery = itemQueries[1] && comparisonInterval
517
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(rowField, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
518
+ : '';
519
+ return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
520
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}${valueAliasSubstring}${value2AliasSubstring} FROM quill_qt),
521
+ quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, sum(${valueFieldAlias}) / ${max}(sum(${valueField2Alias}), 1) as ${valueField ? valueFieldAlias : countAlias}_PERCENTAGE FROM quill_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
522
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
523
+ SELECT * FROM quill_qt_agg qt
524
+ ${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
525
+ }
288
526
  const compareCTE = itemQueries[1] && comparisonInterval
289
527
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
290
528
  : '';
529
+ const aliasCTE = itemQueries[1] && comparisonInterval
530
+ ? `, quill_c_alias as (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}${valueAliasSubstring} FROM quill_ct)`
531
+ : '';
291
532
  const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
292
- ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${processColumnReference(`${valueField || rowField}`, databaseType)}) as ${processColumnReference(`comparison_${valueField || 'count'}`, databaseType)} FROM quill_ct GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})`
533
+ ? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)},
534
+ ${processAggType(pivot.aggregationType)}(${valueFieldAlias}) as ${processColumnReference(`comparison_${valueField ? valueFieldAlias : 'count'}`, databaseType)} FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
293
535
  : '';
294
536
  const joinQuery = itemQueries[1] && comparisonInterval
295
- ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(`${rowField}`, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
537
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(rowField, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
296
538
  : '';
297
539
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
298
- quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${processColumnReference(`${valueField || rowField}`, databaseType)}) as ${processColumnReference(`${valueField || 'count'}`, databaseType)} FROM quill_qt GROUP BY ${processDateTrunc(dateBucket, rowField, databaseType)})
299
- ${compareCTE} ${compareCaseWhenCTE}
540
+ quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}${valueAliasSubstring} FROM quill_qt),
541
+ quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${valueField ? valueFieldAlias : rowFieldAlias}) as ${valueField ? valueFieldAlias : countAlias} FROM quill_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
542
+ ${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
300
543
  SELECT * FROM quill_qt_agg qt
301
- ${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}`;
544
+ ${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
302
545
  }
303
- function createAggregationValuePivot(pivot, itemQueries, databaseType) {
546
+ function createAggregationValuePivot(pivot, itemQueries, databaseType, rowLimit) {
304
547
  const valueField = pivot.valueField;
305
548
  const aggregationType = processAggType(pivot.aggregationType);
306
549
  if (!pivot.valueField)
307
550
  return undefined;
551
+ const valueAlias = processColumnReference(valueField, databaseType, undefined, false, true);
552
+ if (aggregationType === 'percentage' && pivot.valueField2) {
553
+ const value2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
554
+ const max = databaseType.toLowerCase() === 'snowflake' ? 'GREATEST' : 'MAX';
555
+ const compareCTE = itemQueries[1]
556
+ ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
557
+ : '';
558
+ const aliasCTE = itemQueries[1]
559
+ ? `, quill_c_alias as (SELECT ${processColumnReference(valueField, databaseType, undefined, true)} AS ${valueAlias}, ${processColumnReference(pivot.valueField2, databaseType, undefined, true)} AS ${value2Alias} FROM quill_ct)`
560
+ : '';
561
+ const compareAggregation = itemQueries[1]
562
+ ? `, quill_ct_cw as (SELECT sum(${processColumnReference(`${valueField}`, databaseType)}) / ${max}(sum(${processColumnReference(`${pivot.valueField2}`, databaseType)}), 1) as ${processColumnReference(`comparison_${valueField}_PERCENTAGE`, databaseType)} FROM quill_c_alias)`
563
+ : '';
564
+ const joinQuery = itemQueries[1] ? `CROSS JOIN quill_ct_cw ct` : '';
565
+ return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}), quill_alias AS (SELECT ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueAlias}, ${processColumnReference(`${pivot.valueField2}`, databaseType, undefined, true)} AS ${value2Alias} FROM quill_qt),
566
+ quill_qt_agg AS (SELECT sum(${valueAlias}) / ${max}(sum(${value2Alias}), 1) as ${processColumnReference(`${valueField}`, databaseType)}_PERCENTAGE FROM quill_alias)
567
+ ${compareCTE} ${aliasCTE} ${compareAggregation}
568
+ SELECT * FROM quill_qt_agg qt
569
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
570
+ }
308
571
  const compareCTE = itemQueries[1]
309
572
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
310
573
  : '';
574
+ const aliasCTE = itemQueries[1]
575
+ ? `, quill_c_alias as (SELECT ${processColumnReference(valueField, databaseType, undefined, true)} AS ${valueAlias} FROM quill_ct)`
576
+ : '';
311
577
  const compareAggregation = itemQueries[1]
312
- ? `, quill_ct_cw as (SELECT ${aggregationType}(${processColumnReference(`${valueField}`, databaseType)}) as ${processColumnReference(`comparison_${valueField}`, databaseType)} FROM quill_ct)`
578
+ ? `, quill_ct_cw as (SELECT ${aggregationType}(${processColumnReference(`${valueField}`, databaseType)}) as ${processColumnReference(`comparison_${valueField}`, databaseType)} FROM quill_c_alias)`
313
579
  : '';
314
580
  const joinQuery = itemQueries[1] ? `CROSS JOIN quill_ct_cw ct` : '';
315
- return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
316
- quill_qt_agg AS (SELECT ${aggregationType}(${processColumnReference(`${valueField}`, databaseType)}) as ${processColumnReference(`${valueField}`, databaseType)} FROM quill_qt)
317
- ${compareCTE} ${compareAggregation}
318
- SELECT * FROM quill_qt_agg qt
319
- ${joinQuery}`;
581
+ return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}), quill_alias AS (SELECT ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueAlias} FROM quill_qt),
582
+ quill_qt_agg AS (SELECT ${aggregationType}(${valueAlias}) as ${processColumnReference(`${valueField}`, databaseType)} FROM quill_alias)
583
+ ${compareCTE} ${aliasCTE} ${compareAggregation}
584
+ SELECT * FROM quill_qt_agg qt
585
+ ${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
320
586
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,kBAAkB,EAClB,KAAK,EACL,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAa1B,OAAO,EACL,oBAAoB,EAIrB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE;QAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,aAAa,EAAE,GAAG,EAAE,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,mBAAmB,CAAC;IAClC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,WAkB1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,mBAGnC,CAAC;AA2BF,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,GAAG,EAClB,QAAQ,CAAC,EAAE,OAAO,EAClB,YAAY,CAAC,EAAE,OAAO,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuI1D;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,CAAC,EAAE,GAAG,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B;AAED,wBAAsB,UAAU,CAAC,EAC/B,MAAM,EACN,eAAe,EACf,MAAM,GACP,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,GAAG,OAAO,CAAC,GAAG,CAAC,CA4Cf;AAED,eAAO,MAAM,oBAAoB,WAAY,GAAG,QAkB/C,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mBAAmB,GAC1B,WAAW,CAsDb;AAED,eAAO,MAAM,6BAA6B,YAC/B,GAAG,YACF,GAAG,UACL,KAAK,EAAE,UACP,mBAAmB,UACnB,KAAK,qBACM,GAAG,iBACP,MAAM,qBACF;IACjB,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,kBAAkB,CAAC;CAChC,WACQ,mBAAmB,iBACb,GAAG,qBACC,OAAO,iBACX,OAAO,eACT,oBAAoB,KAChC,QAAQ,iBAAiB,CAgK3B,CAAC"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,kBAAkB,EAClB,KAAK,EACL,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EACL,oBAAoB,EAIrB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE;QAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,aAAa,EAAE,GAAG,EAAE,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,mBAAmB,CAAC;IAClC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,WAkB1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,mBAGnC,CAAC;AA2BF,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,GAAG,EAClB,QAAQ,CAAC,EAAE,OAAO,EAClB,YAAY,CAAC,EAAE,OAAO,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuI1D;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,EAC3B,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,CAAC,EAAE,GAAG,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B;AAED,wBAAsB,UAAU,CAAC,EAC/B,MAAM,EACN,eAAe,EACf,MAAM,GACP,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,GAAG,OAAO,CAAC,GAAG,CAAC,CA4Cf;AAED,eAAO,MAAM,oBAAoB,WAAY,GAAG,QAkB/C,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,mBAAmB,GAC1B,WAAW,CAsDb;AAED,eAAO,MAAM,6BAA6B,YAC/B,GAAG,YACF,GAAG,UACL,KAAK,EAAE,UACP,mBAAmB,UACnB,KAAK,qBACM,GAAG,iBACP,MAAM,qBACF;IACjB,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,kBAAkB,CAAC;CAChC,WACQ,mBAAmB,iBACb,GAAG,qBACC,OAAO,iBACX,OAAO,eACT,oBAAoB,KAChC,OAAO,CAAC,iBAAiB,CAgK3B,CAAC"}