@quillsql/react 2.12.28 → 2.12.30

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 (502) hide show
  1. package/dist/cjs/Chart.d.ts +24 -10
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +151 -189
  4. package/dist/cjs/ChartBuilder.d.ts +51 -11
  5. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  6. package/dist/cjs/ChartBuilder.js +162 -101
  7. package/dist/cjs/ChartEditor.d.ts +13 -1
  8. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  9. package/dist/cjs/ChartEditor.js +62 -121
  10. package/dist/cjs/Context.d.ts +1 -19
  11. package/dist/cjs/Context.d.ts.map +1 -1
  12. package/dist/cjs/Context.js +74 -85
  13. package/dist/cjs/Dashboard.d.ts +16 -7
  14. package/dist/cjs/Dashboard.d.ts.map +1 -1
  15. package/dist/cjs/Dashboard.js +90 -68
  16. package/dist/cjs/DateRangePicker/Calendar.d.ts.map +1 -1
  17. package/dist/cjs/DateRangePicker/Calendar.js +3 -6
  18. package/dist/cjs/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  19. package/dist/cjs/DateRangePicker/DateRangePicker.js +2 -3
  20. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  21. package/dist/cjs/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  22. package/dist/cjs/DateRangePicker/DateRangePickerButton.js +2 -4
  23. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  24. package/dist/cjs/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  25. package/dist/cjs/DateRangePicker/QuillDateRangePicker.js +4 -4
  26. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  27. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  28. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +1 -15
  29. package/dist/cjs/ReportBuilder.d.ts +22 -1
  30. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  31. package/dist/cjs/ReportBuilder.js +758 -505
  32. package/dist/cjs/SQLEditor.d.ts +2 -9
  33. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  34. package/dist/cjs/SQLEditor.js +142 -90
  35. package/dist/cjs/Table.d.ts +19 -3
  36. package/dist/cjs/Table.d.ts.map +1 -1
  37. package/dist/cjs/Table.js +110 -92
  38. package/dist/cjs/TableChart.d.ts.map +1 -1
  39. package/dist/cjs/TableChart.js +0 -1
  40. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  41. package/dist/cjs/assets/ArrowDownIcon.d.ts.map +1 -1
  42. package/dist/cjs/assets/ArrowDownRightIcon.d.ts.map +1 -1
  43. package/dist/cjs/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  44. package/dist/cjs/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  45. package/dist/cjs/assets/ArrowRightIcon.d.ts.map +1 -1
  46. package/dist/cjs/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  47. package/dist/cjs/assets/ArrowUpIcon.d.ts.map +1 -1
  48. package/dist/cjs/assets/ArrowUpRightIcon.d.ts.map +1 -1
  49. package/dist/cjs/assets/CalendarIcon.d.ts.map +1 -1
  50. package/dist/cjs/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  51. package/dist/cjs/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  52. package/dist/cjs/assets/ExclamationFilledIcon.d.ts.map +1 -1
  53. package/dist/cjs/assets/LoadingSpinner.d.ts.map +1 -1
  54. package/dist/cjs/assets/SearchIcon.d.ts.map +1 -1
  55. package/dist/cjs/assets/XCircleIcon.d.ts.map +1 -1
  56. package/dist/cjs/components/Banner/index.d.ts +1 -1
  57. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  58. package/dist/cjs/components/Banner/index.js +1 -1
  59. package/dist/cjs/components/BigModal/BigModal.d.ts.map +1 -1
  60. package/dist/cjs/components/BigModal/BigModal.js +6 -12
  61. package/dist/cjs/components/Chart/BarList.d.ts.map +1 -1
  62. package/dist/cjs/components/Chart/BarList.js +21 -14
  63. package/dist/cjs/components/Chart/ChartError.d.ts +8 -1
  64. package/dist/cjs/components/Chart/ChartError.d.ts.map +1 -1
  65. package/dist/cjs/components/Chart/ChartError.js +40 -5
  66. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  67. package/dist/cjs/components/Chart/ChartTooltip.js +8 -2
  68. package/dist/cjs/components/Chart/LineChart.d.ts.map +1 -1
  69. package/dist/cjs/components/Chart/LineChart.js +2 -2
  70. package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
  71. package/dist/cjs/components/Chart/PieChart.js +1 -3
  72. package/dist/cjs/components/Dashboard/ChartComponent.d.ts +1 -1
  73. package/dist/cjs/components/Dashboard/ChartComponent.d.ts.map +1 -1
  74. package/dist/cjs/components/Dashboard/ChartComponent.js +1 -1
  75. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +5 -1
  76. package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  77. package/dist/cjs/components/Dashboard/DashboardFilter.js +10 -5
  78. package/dist/cjs/components/Dashboard/DataLoader.d.ts +2 -6
  79. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  80. package/dist/cjs/components/Dashboard/DataLoader.js +98 -187
  81. package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
  82. package/dist/cjs/components/Dashboard/MetricComponent.js +1 -1
  83. package/dist/cjs/components/Dashboard/TableComponent.d.ts +1 -4
  84. package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
  85. package/dist/cjs/components/Dashboard/TableComponent.js +3 -3
  86. package/dist/cjs/components/Dropdown/Dropdown.d.ts.map +1 -1
  87. package/dist/cjs/components/Dropdown/Dropdown.js +1 -3
  88. package/dist/cjs/components/Dropdown/DropdownItem.d.ts.map +1 -1
  89. package/dist/cjs/components/Dropdown/DropdownItem.js +3 -8
  90. package/dist/cjs/components/Dropdown/index.d.ts +2 -2
  91. package/dist/cjs/components/Modal/Modal.d.ts.map +1 -1
  92. package/dist/cjs/components/Modal/Modal.js +2 -3
  93. package/dist/cjs/components/Modal/index.d.ts +1 -1
  94. package/dist/cjs/components/QuillMultiSelect.d.ts.map +1 -1
  95. package/dist/cjs/components/QuillMultiSelect.js +18 -3
  96. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  97. package/dist/cjs/components/QuillMultiSelectWithCombo.js +2 -2
  98. package/dist/cjs/components/QuillSelect.js +1 -1
  99. package/dist/cjs/components/QuillSelectWithCombo.js +2 -2
  100. package/dist/cjs/components/QuillTable.d.ts +1 -4
  101. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  102. package/dist/cjs/components/QuillTable.js +5 -11
  103. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  104. package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  105. package/dist/cjs/components/ReportBuilder/AddColumnModal.js +5 -8
  106. package/dist/cjs/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  107. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -3
  108. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  109. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +12 -1
  110. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +22 -0
  111. package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  112. package/dist/cjs/components/ReportBuilder/FilterModal.js +555 -0
  113. package/dist/cjs/components/ReportBuilder/ast.d.ts +2 -1
  114. package/dist/cjs/components/ReportBuilder/ast.d.ts.map +1 -1
  115. package/dist/cjs/components/ReportBuilder/ast.js +33 -6
  116. package/dist/cjs/components/ReportBuilder/constants.d.ts +18 -3
  117. package/dist/cjs/components/ReportBuilder/constants.d.ts.map +1 -1
  118. package/dist/cjs/components/ReportBuilder/constants.js +24 -3
  119. package/dist/cjs/components/ReportBuilder/convert.d.ts +12 -15
  120. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  121. package/dist/cjs/components/ReportBuilder/convert.js +326 -494
  122. package/dist/cjs/components/ReportBuilder/operators.d.ts +24 -4
  123. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  124. package/dist/cjs/components/ReportBuilder/operators.js +32 -4
  125. package/dist/cjs/components/ReportBuilder/ui.d.ts +20 -0
  126. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  127. package/dist/cjs/components/ReportBuilder/ui.js +30 -4
  128. package/dist/cjs/components/ReportBuilder/util.d.ts +3 -11
  129. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  130. package/dist/cjs/components/ReportBuilder/util.js +15 -18
  131. package/dist/cjs/components/UiComponents.d.ts +10 -7
  132. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  133. package/dist/cjs/components/UiComponents.js +9 -8
  134. package/dist/cjs/components/selectUtils.d.ts +0 -1
  135. package/dist/cjs/components/selectUtils.d.ts.map +1 -1
  136. package/dist/cjs/components/selectUtils.js +1 -22
  137. package/dist/cjs/hooks/index.d.ts +4 -4
  138. package/dist/cjs/hooks/useAstToFilterTree.d.ts +11 -0
  139. package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -0
  140. package/dist/cjs/hooks/useAstToFilterTree.js +26 -0
  141. package/dist/cjs/hooks/useDashboard.d.ts +1 -1
  142. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  143. package/dist/cjs/hooks/useDashboard.js +22 -4
  144. package/dist/cjs/hooks/useExport.d.ts.map +1 -1
  145. package/dist/cjs/hooks/useExport.js +3 -1
  146. package/dist/cjs/hooks/useOnClickOutside.js +4 -4
  147. package/dist/cjs/hooks/useOnWindowResize.d.ts.map +1 -1
  148. package/dist/cjs/hooks/useOnWindowResize.js +2 -2
  149. package/dist/cjs/hooks/useQuill.d.ts +10 -27
  150. package/dist/cjs/hooks/useQuill.d.ts.map +1 -1
  151. package/dist/cjs/hooks/useQuill.js +114 -82
  152. package/dist/cjs/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  153. package/dist/cjs/hooks/useSelectOnKeyDown.js +4 -4
  154. package/dist/cjs/hooks/useTheme.js +1 -1
  155. package/dist/cjs/index.d.ts +1 -0
  156. package/dist/cjs/index.d.ts.map +1 -1
  157. package/dist/cjs/index.js +3 -1
  158. package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  159. package/dist/cjs/internals/ReportBuilder/PivotForm.js +8 -1
  160. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +2 -2
  161. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  162. package/dist/cjs/internals/ReportBuilder/PivotList.js +2 -2
  163. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
  164. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  165. package/dist/cjs/internals/ReportBuilder/PivotModal.js +64 -78
  166. package/dist/cjs/lib/utils.js +2 -2
  167. package/dist/cjs/models/Filter.d.ts +104 -4
  168. package/dist/cjs/models/Filter.d.ts.map +1 -1
  169. package/dist/cjs/models/Filter.js +91 -0
  170. package/dist/cjs/models/Pagination.d.ts +10 -0
  171. package/dist/cjs/models/Pagination.d.ts.map +1 -0
  172. package/dist/cjs/models/Pagination.js +2 -0
  173. package/dist/cjs/models/Report.d.ts +116 -0
  174. package/dist/cjs/models/Report.d.ts.map +1 -0
  175. package/dist/cjs/models/Report.js +2 -0
  176. package/dist/cjs/utils/aggregate.js +1 -1
  177. package/dist/cjs/utils/astFilterProcessing.d.ts +36 -0
  178. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -0
  179. package/dist/cjs/utils/astFilterProcessing.js +8056 -0
  180. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  181. package/dist/cjs/utils/astProcessing.js +4 -3
  182. package/dist/cjs/utils/axisFormatter.js +0 -71
  183. package/dist/cjs/utils/color.js +9 -87
  184. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  185. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  186. package/dist/cjs/utils/columnProcessing.js +8 -1
  187. package/dist/cjs/utils/csv.d.ts.map +1 -1
  188. package/dist/cjs/utils/dashboard.d.ts.map +1 -1
  189. package/dist/cjs/utils/dashboard.js +4 -4
  190. package/dist/cjs/utils/dataFetcher.d.ts +1 -1
  191. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  192. package/dist/cjs/utils/dataFetcher.js +72 -5
  193. package/dist/cjs/utils/dataProcessing.d.ts +8 -0
  194. package/dist/cjs/utils/dataProcessing.d.ts.map +1 -0
  195. package/dist/cjs/utils/dataProcessing.js +127 -0
  196. package/dist/cjs/utils/dates.d.ts +2 -1
  197. package/dist/cjs/utils/dates.d.ts.map +1 -1
  198. package/dist/cjs/utils/dates.js +12 -3
  199. package/dist/cjs/utils/error.d.ts +5 -0
  200. package/dist/cjs/utils/error.d.ts.map +1 -0
  201. package/dist/cjs/utils/error.js +12 -0
  202. package/dist/cjs/utils/filterConstants.d.ts +34 -0
  203. package/dist/cjs/utils/filterConstants.d.ts.map +1 -0
  204. package/dist/cjs/utils/filterConstants.js +36 -0
  205. package/dist/cjs/utils/filterProcessing.js +4 -4
  206. package/dist/cjs/utils/logging.d.ts.map +1 -1
  207. package/dist/cjs/utils/logging.js +1 -0
  208. package/dist/cjs/utils/merge.js +0 -21
  209. package/dist/cjs/utils/monacoConfig.d.ts +21 -0
  210. package/dist/cjs/utils/monacoConfig.d.ts.map +1 -0
  211. package/dist/cjs/utils/monacoConfig.js +324 -0
  212. package/dist/cjs/utils/paginationProcessing.d.ts +5 -0
  213. package/dist/cjs/utils/paginationProcessing.d.ts.map +1 -0
  214. package/dist/cjs/utils/paginationProcessing.js +30 -0
  215. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  216. package/dist/cjs/utils/pivotConstructor.js +67 -5
  217. package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
  218. package/dist/cjs/utils/pivotProcessing.js +12 -6
  219. package/dist/cjs/utils/queryConstructor.d.ts +4 -2
  220. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  221. package/dist/cjs/utils/queryConstructor.js +121 -59
  222. package/dist/cjs/utils/report.d.ts +7 -0
  223. package/dist/cjs/utils/report.d.ts.map +1 -0
  224. package/dist/cjs/utils/report.js +93 -0
  225. package/dist/cjs/utils/schema.d.ts.map +1 -1
  226. package/dist/cjs/utils/schema.js +35 -6
  227. package/dist/cjs/utils/styles.d.ts +1 -1
  228. package/dist/cjs/utils/styles.d.ts.map +1 -1
  229. package/dist/cjs/utils/tableProcessing.d.ts +23 -8
  230. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  231. package/dist/cjs/utils/tableProcessing.js +156 -38
  232. package/dist/cjs/utils/textProcessing.js +3 -3
  233. package/dist/cjs/utils/validation.d.ts +9 -0
  234. package/dist/cjs/utils/validation.d.ts.map +1 -0
  235. package/dist/cjs/utils/validation.js +24 -0
  236. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  237. package/dist/cjs/utils/valueFormatter.js +8 -4
  238. package/dist/esm/Chart.d.ts +24 -10
  239. package/dist/esm/Chart.d.ts.map +1 -1
  240. package/dist/esm/Chart.js +154 -192
  241. package/dist/esm/ChartBuilder.d.ts +51 -11
  242. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  243. package/dist/esm/ChartBuilder.js +161 -101
  244. package/dist/esm/ChartEditor.d.ts +13 -1
  245. package/dist/esm/ChartEditor.d.ts.map +1 -1
  246. package/dist/esm/ChartEditor.js +63 -122
  247. package/dist/esm/Context.d.ts +1 -19
  248. package/dist/esm/Context.d.ts.map +1 -1
  249. package/dist/esm/Context.js +74 -84
  250. package/dist/esm/Dashboard.d.ts +16 -7
  251. package/dist/esm/Dashboard.d.ts.map +1 -1
  252. package/dist/esm/Dashboard.js +91 -69
  253. package/dist/esm/DateRangePicker/Calendar.d.ts.map +1 -1
  254. package/dist/esm/DateRangePicker/Calendar.js +5 -8
  255. package/dist/esm/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  256. package/dist/esm/DateRangePicker/DateRangePicker.js +2 -3
  257. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts +1 -2
  258. package/dist/esm/DateRangePicker/DateRangePickerButton.d.ts.map +1 -1
  259. package/dist/esm/DateRangePicker/DateRangePickerButton.js +2 -4
  260. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts +2 -1
  261. package/dist/esm/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -1
  262. package/dist/esm/DateRangePicker/QuillDateRangePicker.js +4 -4
  263. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +1 -1
  264. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  265. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +1 -15
  266. package/dist/esm/ReportBuilder.d.ts +22 -1
  267. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  268. package/dist/esm/ReportBuilder.js +766 -513
  269. package/dist/esm/SQLEditor.d.ts +2 -9
  270. package/dist/esm/SQLEditor.d.ts.map +1 -1
  271. package/dist/esm/SQLEditor.js +144 -92
  272. package/dist/esm/Table.d.ts +19 -3
  273. package/dist/esm/Table.d.ts.map +1 -1
  274. package/dist/esm/Table.js +112 -94
  275. package/dist/esm/TableChart.d.ts.map +1 -1
  276. package/dist/esm/TableChart.js +0 -1
  277. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  278. package/dist/esm/assets/ArrowDownIcon.d.ts.map +1 -1
  279. package/dist/esm/assets/ArrowDownRightIcon.d.ts.map +1 -1
  280. package/dist/esm/assets/ArrowLeftHeadIcon.d.ts.map +1 -1
  281. package/dist/esm/assets/ArrowRightHeadIcon.d.ts.map +1 -1
  282. package/dist/esm/assets/ArrowRightIcon.d.ts.map +1 -1
  283. package/dist/esm/assets/ArrowUpHeadIcon.d.ts.map +1 -1
  284. package/dist/esm/assets/ArrowUpIcon.d.ts.map +1 -1
  285. package/dist/esm/assets/ArrowUpRightIcon.d.ts.map +1 -1
  286. package/dist/esm/assets/CalendarIcon.d.ts.map +1 -1
  287. package/dist/esm/assets/DoubleArrowLeftHeadIcon.d.ts.map +1 -1
  288. package/dist/esm/assets/DoubleArrowRightHeadIcon.d.ts.map +1 -1
  289. package/dist/esm/assets/ExclamationFilledIcon.d.ts.map +1 -1
  290. package/dist/esm/assets/LoadingSpinner.d.ts.map +1 -1
  291. package/dist/esm/assets/SearchIcon.d.ts.map +1 -1
  292. package/dist/esm/assets/XCircleIcon.d.ts.map +1 -1
  293. package/dist/esm/components/Banner/index.d.ts +1 -1
  294. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  295. package/dist/esm/components/Banner/index.js +1 -1
  296. package/dist/esm/components/BigModal/BigModal.d.ts.map +1 -1
  297. package/dist/esm/components/BigModal/BigModal.js +7 -13
  298. package/dist/esm/components/Chart/BarList.d.ts.map +1 -1
  299. package/dist/esm/components/Chart/BarList.js +21 -14
  300. package/dist/esm/components/Chart/ChartError.d.ts +8 -1
  301. package/dist/esm/components/Chart/ChartError.d.ts.map +1 -1
  302. package/dist/esm/components/Chart/ChartError.js +39 -6
  303. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  304. package/dist/esm/components/Chart/ChartTooltip.js +8 -2
  305. package/dist/esm/components/Chart/LineChart.d.ts.map +1 -1
  306. package/dist/esm/components/Chart/LineChart.js +2 -2
  307. package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
  308. package/dist/esm/components/Chart/PieChart.js +1 -3
  309. package/dist/esm/components/Dashboard/ChartComponent.d.ts +1 -1
  310. package/dist/esm/components/Dashboard/ChartComponent.d.ts.map +1 -1
  311. package/dist/esm/components/Dashboard/ChartComponent.js +1 -1
  312. package/dist/esm/components/Dashboard/DashboardFilter.d.ts +5 -1
  313. package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
  314. package/dist/esm/components/Dashboard/DashboardFilter.js +10 -5
  315. package/dist/esm/components/Dashboard/DataLoader.d.ts +2 -6
  316. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  317. package/dist/esm/components/Dashboard/DataLoader.js +98 -187
  318. package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
  319. package/dist/esm/components/Dashboard/MetricComponent.js +1 -1
  320. package/dist/esm/components/Dashboard/TableComponent.d.ts +1 -4
  321. package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
  322. package/dist/esm/components/Dashboard/TableComponent.js +3 -3
  323. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  324. package/dist/esm/components/Dropdown/Dropdown.js +2 -4
  325. package/dist/esm/components/Dropdown/DropdownItem.d.ts.map +1 -1
  326. package/dist/esm/components/Dropdown/DropdownItem.js +4 -9
  327. package/dist/esm/components/Dropdown/index.d.ts +2 -2
  328. package/dist/esm/components/Dropdown/index.js +2 -2
  329. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  330. package/dist/esm/components/Modal/Modal.js +2 -3
  331. package/dist/esm/components/Modal/index.d.ts +1 -1
  332. package/dist/esm/components/Modal/index.js +1 -1
  333. package/dist/esm/components/QuillMultiSelect.d.ts.map +1 -1
  334. package/dist/esm/components/QuillMultiSelect.js +18 -3
  335. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
  336. package/dist/esm/components/QuillMultiSelectWithCombo.js +2 -2
  337. package/dist/esm/components/QuillSelect.js +1 -1
  338. package/dist/esm/components/QuillSelectWithCombo.js +2 -2
  339. package/dist/esm/components/QuillTable.d.ts +1 -4
  340. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  341. package/dist/esm/components/QuillTable.js +5 -11
  342. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +3 -1
  343. package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
  344. package/dist/esm/components/ReportBuilder/AddColumnModal.js +8 -11
  345. package/dist/esm/components/ReportBuilder/AddLimitPopover.d.ts.map +1 -1
  346. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +2 -4
  347. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  348. package/dist/esm/components/ReportBuilder/AddSortPopover.js +12 -1
  349. package/dist/esm/components/ReportBuilder/FilterModal.d.ts +22 -0
  350. package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -0
  351. package/dist/esm/components/ReportBuilder/FilterModal.js +552 -0
  352. package/dist/esm/components/ReportBuilder/ast.d.ts +2 -1
  353. package/dist/esm/components/ReportBuilder/ast.d.ts.map +1 -1
  354. package/dist/esm/components/ReportBuilder/ast.js +31 -5
  355. package/dist/esm/components/ReportBuilder/constants.d.ts +18 -3
  356. package/dist/esm/components/ReportBuilder/constants.d.ts.map +1 -1
  357. package/dist/esm/components/ReportBuilder/constants.js +24 -3
  358. package/dist/esm/components/ReportBuilder/convert.d.ts +12 -15
  359. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  360. package/dist/esm/components/ReportBuilder/convert.js +324 -493
  361. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts +2 -0
  362. package/dist/esm/components/ReportBuilder/convert.uspec.d.ts.map +1 -0
  363. package/dist/esm/components/ReportBuilder/convert.uspec.js +1152 -0
  364. package/dist/esm/components/ReportBuilder/operators.d.ts +24 -4
  365. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  366. package/dist/esm/components/ReportBuilder/operators.js +32 -4
  367. package/dist/esm/components/ReportBuilder/ui.d.ts +20 -0
  368. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  369. package/dist/esm/components/ReportBuilder/ui.js +28 -3
  370. package/dist/esm/components/ReportBuilder/util.d.ts +3 -11
  371. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  372. package/dist/esm/components/ReportBuilder/util.js +16 -19
  373. package/dist/esm/components/UiComponents.d.ts +10 -7
  374. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  375. package/dist/esm/components/UiComponents.js +9 -8
  376. package/dist/esm/components/selectUtils.d.ts +0 -1
  377. package/dist/esm/components/selectUtils.d.ts.map +1 -1
  378. package/dist/esm/components/selectUtils.js +0 -20
  379. package/dist/esm/hooks/index.d.ts +4 -4
  380. package/dist/esm/hooks/index.js +4 -4
  381. package/dist/esm/hooks/useAstToFilterTree.d.ts +11 -0
  382. package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -0
  383. package/dist/esm/hooks/useAstToFilterTree.js +24 -0
  384. package/dist/esm/hooks/useDashboard.d.ts +1 -1
  385. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  386. package/dist/esm/hooks/useDashboard.js +23 -5
  387. package/dist/esm/hooks/useExport.d.ts.map +1 -1
  388. package/dist/esm/hooks/useExport.js +4 -2
  389. package/dist/esm/hooks/useOnClickOutside.js +5 -5
  390. package/dist/esm/hooks/useOnWindowResize.d.ts.map +1 -1
  391. package/dist/esm/hooks/useOnWindowResize.js +3 -3
  392. package/dist/esm/hooks/useQuill.d.ts +10 -27
  393. package/dist/esm/hooks/useQuill.d.ts.map +1 -1
  394. package/dist/esm/hooks/useQuill.js +114 -82
  395. package/dist/esm/hooks/useSelectOnKeyDown.d.ts.map +1 -1
  396. package/dist/esm/hooks/useSelectOnKeyDown.js +5 -5
  397. package/dist/esm/hooks/useTheme.js +1 -1
  398. package/dist/esm/index.d.ts +1 -0
  399. package/dist/esm/index.d.ts.map +1 -1
  400. package/dist/esm/index.js +1 -0
  401. package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
  402. package/dist/esm/internals/ReportBuilder/PivotForm.js +9 -2
  403. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +2 -2
  404. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  405. package/dist/esm/internals/ReportBuilder/PivotList.js +3 -3
  406. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
  407. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  408. package/dist/esm/internals/ReportBuilder/PivotModal.js +68 -82
  409. package/dist/esm/lib/utils.js +2 -2
  410. package/dist/esm/models/Filter.d.ts +104 -4
  411. package/dist/esm/models/Filter.d.ts.map +1 -1
  412. package/dist/esm/models/Filter.js +90 -1
  413. package/dist/esm/models/Pagination.d.ts +10 -0
  414. package/dist/esm/models/Pagination.d.ts.map +1 -0
  415. package/dist/esm/models/Pagination.js +1 -0
  416. package/dist/esm/models/Report.d.ts +116 -0
  417. package/dist/esm/models/Report.d.ts.map +1 -0
  418. package/dist/esm/models/Report.js +1 -0
  419. package/dist/esm/utils/aggregate.js +1 -1
  420. package/dist/esm/utils/astFilterProcessing.d.ts +36 -0
  421. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -0
  422. package/dist/esm/utils/astFilterProcessing.js +8049 -0
  423. package/dist/esm/utils/astFilterProcessing.uspec.d.ts +2 -0
  424. package/dist/esm/utils/astFilterProcessing.uspec.d.ts.map +1 -0
  425. package/dist/esm/utils/astFilterProcessing.uspec.js +2729 -0
  426. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  427. package/dist/esm/utils/astProcessing.js +4 -3
  428. package/dist/esm/utils/axisFormatter.js +0 -71
  429. package/dist/esm/utils/color.js +9 -87
  430. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  431. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  432. package/dist/esm/utils/columnProcessing.js +6 -0
  433. package/dist/esm/utils/csv.d.ts.map +1 -1
  434. package/dist/esm/utils/dashboard.d.ts.map +1 -1
  435. package/dist/esm/utils/dashboard.js +4 -4
  436. package/dist/esm/utils/dataFetcher.d.ts +1 -1
  437. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  438. package/dist/esm/utils/dataFetcher.js +72 -5
  439. package/dist/esm/utils/dataProcessing.d.ts +8 -0
  440. package/dist/esm/utils/dataProcessing.d.ts.map +1 -0
  441. package/dist/esm/utils/dataProcessing.js +122 -0
  442. package/dist/esm/utils/dataProcessing.uspec.d.ts +2 -0
  443. package/dist/esm/utils/dataProcessing.uspec.d.ts.map +1 -0
  444. package/dist/esm/utils/dataProcessing.uspec.js +204 -0
  445. package/dist/esm/utils/dates.d.ts +2 -1
  446. package/dist/esm/utils/dates.d.ts.map +1 -1
  447. package/dist/esm/utils/dates.js +10 -2
  448. package/dist/esm/utils/error.d.ts +5 -0
  449. package/dist/esm/utils/error.d.ts.map +1 -0
  450. package/dist/esm/utils/error.js +8 -0
  451. package/dist/esm/utils/filterConstants.d.ts +34 -0
  452. package/dist/esm/utils/filterConstants.d.ts.map +1 -0
  453. package/dist/esm/utils/filterConstants.js +33 -0
  454. package/dist/esm/utils/filterProcessing.js +4 -4
  455. package/dist/esm/utils/logging.d.ts.map +1 -1
  456. package/dist/esm/utils/logging.js +1 -0
  457. package/dist/esm/utils/merge.js +0 -21
  458. package/dist/esm/utils/monacoConfig.d.ts +21 -0
  459. package/dist/esm/utils/monacoConfig.d.ts.map +1 -0
  460. package/dist/esm/utils/monacoConfig.js +319 -0
  461. package/dist/esm/utils/paginationProcessing.d.ts +5 -0
  462. package/dist/esm/utils/paginationProcessing.d.ts.map +1 -0
  463. package/dist/esm/utils/paginationProcessing.js +25 -0
  464. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  465. package/dist/esm/utils/pivotConstructor.js +67 -5
  466. package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
  467. package/dist/esm/utils/pivotProcessing.js +12 -6
  468. package/dist/esm/utils/queryConstructor.d.ts +4 -2
  469. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  470. package/dist/esm/utils/queryConstructor.js +118 -58
  471. package/dist/esm/utils/queryConstructor.uspec.d.ts +2 -0
  472. package/dist/esm/utils/queryConstructor.uspec.d.ts.map +1 -0
  473. package/dist/esm/utils/queryConstructor.uspec.js +223 -0
  474. package/dist/esm/utils/report.d.ts +7 -0
  475. package/dist/esm/utils/report.d.ts.map +1 -0
  476. package/dist/esm/utils/report.ispec.d.ts +2 -0
  477. package/dist/esm/utils/report.ispec.d.ts.map +1 -0
  478. package/dist/esm/utils/report.ispec.js +46 -0
  479. package/dist/esm/utils/report.js +88 -0
  480. package/dist/esm/utils/schema.d.ts.map +1 -1
  481. package/dist/esm/utils/schema.js +35 -6
  482. package/dist/esm/utils/styles.d.ts +1 -1
  483. package/dist/esm/utils/styles.d.ts.map +1 -1
  484. package/dist/esm/utils/tableProcessing.d.ts +23 -8
  485. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  486. package/dist/esm/utils/tableProcessing.ispec.d.ts +2 -0
  487. package/dist/esm/utils/tableProcessing.ispec.d.ts.map +1 -0
  488. package/dist/esm/utils/tableProcessing.ispec.js +61 -0
  489. package/dist/esm/utils/tableProcessing.js +152 -37
  490. package/dist/esm/utils/textProcessing.js +3 -3
  491. package/dist/esm/utils/validation.d.ts +9 -0
  492. package/dist/esm/utils/validation.d.ts.map +1 -0
  493. package/dist/esm/utils/validation.js +20 -0
  494. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  495. package/dist/esm/utils/valueFormatter.js +8 -4
  496. package/package.json +1 -1
  497. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  498. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  499. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +0 -213
  500. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  501. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  502. package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +0 -211
@@ -1,19 +1,71 @@
1
1
  import { isValidPivot } from './pivotProcessing';
2
- function processAggType(aggType) {
3
- if (aggType === 'count')
2
+ function processSingleQuotes(value, databaseType) {
3
+ if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
4
+ return value.replaceAll("'", "''");
5
+ }
6
+ return value.replaceAll("'", "\\'");
7
+ }
8
+ function processAggType(aggType, hasColumnField = false) {
9
+ if (aggType === 'count' && hasColumnField)
4
10
  return 'SUM';
5
11
  return aggType?.toLowerCase() === 'average' ? 'AVG' : aggType?.toLowerCase();
6
12
  }
7
- function processValueField(aggType, valueField) {
8
- if (aggType === 'min' || aggType === 'max')
9
- return `"${valueField}" ELSE null`;
13
+ function replaceBigQuerySpecialCharacters(column) {
14
+ return column.replaceAll('/', 'quill_forward_slash');
15
+ }
16
+ export function processColumnReference(column, databaseType) {
17
+ if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
18
+ const columnParts = column.split('.');
19
+ if (columnParts.length > 1) {
20
+ return `"${columnParts[0]}"."${columnParts[1]}"`;
21
+ }
22
+ return `"${column}"`;
23
+ }
24
+ const columnParts = column.split('.');
25
+ if (columnParts.length > 1) {
26
+ return `\`${columnParts[0]}\`.\`${columnParts[1]}\``;
27
+ }
28
+ return `\`${replaceBigQuerySpecialCharacters(column)}\``;
29
+ }
30
+ function processInterval(interval, rowField, databaseType) {
31
+ if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
32
+ return `(${processColumnReference(rowField, databaseType)} + INTERVAL '${interval}')`;
33
+ }
34
+ return `TIMESTAMP_ADD(${processColumnReference(rowField, databaseType)}, INTERVAL ${interval} )`;
35
+ }
36
+ function processDateTrunc(dateBucket, rowField, databaseType, comparisonInterval) {
37
+ if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
38
+ const date = comparisonInterval
39
+ ? processInterval(comparisonInterval, rowField, databaseType)
40
+ : processColumnReference(rowField, databaseType);
41
+ return `date_trunc('${dateBucket}', ${date})`;
42
+ }
43
+ const date = comparisonInterval
44
+ ? processInterval(comparisonInterval, rowField, databaseType)
45
+ : processColumnReference(rowField, databaseType);
46
+ return `TIMESTAMP_TRUNC(${date}, ${dateBucket})`;
47
+ }
48
+ function processValueField(aggType, databaseType, valueField) {
49
+ if (aggType === 'min' ||
50
+ aggType === 'max' ||
51
+ aggType?.toLowerCase() === 'average')
52
+ return `${processColumnReference(valueField, databaseType)} ELSE null`;
10
53
  if (aggType === 'count')
11
54
  return `1 ELSE 0`;
12
- return valueField ? `"${valueField}" ELSE 0` : `1 ELSE 0`;
55
+ return valueField
56
+ ? `${processColumnReference(valueField, databaseType)} ELSE 0`
57
+ : `1 ELSE 0`;
58
+ }
59
+ export function generateCountQuery(fields, query, databaseType) {
60
+ const countQuery = fields.map((field) => {
61
+ return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, COUNT(DISTINCT ${processColumnReference(field, databaseType)}) AS ${processColumnReference('count', databaseType)} FROM querytable`;
62
+ });
63
+ return (`WITH querytable AS (${query.replace(';', '')}) ` +
64
+ countQuery.join(' UNION ALL '));
13
65
  }
14
- export function generateDistinctQuery(stringFields, query) {
66
+ export function generateDistinctQuery(stringFields, query, databaseType) {
15
67
  const distinctQueries = stringFields.map((field) => {
16
- return `SELECT '${field}' AS field, ARRAY_AGG(DISTINCT ${field}) AS string_values FROM querytable`;
68
+ return `SELECT '${field}' AS ${processColumnReference('field', databaseType)}, ARRAY_AGG(DISTINCT ${field}) AS ${processColumnReference('string_values', databaseType)} FROM querytable`;
17
69
  });
18
70
  const distinctQuery = distinctQueries.join(' UNION ALL ');
19
71
  return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
@@ -28,135 +80,143 @@ export function generateMinMaxRangeQueries(columnFields, query, databaseType) {
28
80
  const distinctQuery = distinctQueries.join(' UNION ALL ');
29
81
  return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
30
82
  }
31
- export function generatePivotQuery(pivot, itemQueries, rows, dateBucket, comparisonInterval, distinctStrings) {
83
+ export function generatePivotQuery(pivot, itemQueries, databaseType, comparisonInterval, distinctStrings, dateBucket) {
32
84
  if (!isValidPivot(pivot)) {
33
85
  return undefined;
34
86
  }
35
87
  if (pivot.columnField) {
36
- return create2DPivotQuery(pivot, itemQueries, rows, dateBucket, comparisonInterval, distinctStrings);
88
+ return create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, comparisonInterval, distinctStrings);
37
89
  }
38
90
  if (pivot.rowField) {
39
- return create1DPivotQuery(pivot, itemQueries, dateBucket, comparisonInterval);
91
+ return create1DPivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval);
40
92
  }
41
- return createAggregationValuePivot(pivot, itemQueries);
93
+ return createAggregationValuePivot(pivot, itemQueries, databaseType);
42
94
  }
43
- function create2DPivotQuery(pivot, itemQueries, rows, dateBucket, comparisonInterval, distinctStrings) {
95
+ function create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, comparisonInterval, columnFieldValues) {
44
96
  if (!pivot || !pivot.columnField) {
45
97
  return undefined;
46
98
  }
47
- // @ts-ignore
48
- const columnValues = rows.map((row) => row[pivot.columnField]);
49
- const distinctColumnValues = distinctStrings
50
- ? distinctStrings
51
- : Array.from(new Set(columnValues)).filter((value) => value !== undefined && value !== null);
52
- if (distinctColumnValues.length === 0) {
99
+ if (!columnFieldValues) {
53
100
  return undefined;
54
101
  }
55
102
  if (['string', 'varchar'].includes(pivot.rowFieldType) ||
56
103
  !pivot.rowFieldType) {
57
- return create2DStringPivotQuery(pivot, itemQueries, distinctColumnValues);
104
+ return create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType);
58
105
  }
59
- return create2DDatePivotQuery(pivot, itemQueries, distinctColumnValues, dateBucket, comparisonInterval);
106
+ return create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket, comparisonInterval);
60
107
  }
61
- function create2DStringPivotQuery(pivot, itemQueries, distinctColumnValues) {
62
- const caseWhens = distinctColumnValues.map((column) => {
63
- return `${processAggType(pivot.aggregationType)}(CASE WHEN "${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "${column}"`;
108
+ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType) {
109
+ if (!pivot.columnField || !pivot.rowField) {
110
+ return undefined;
111
+ }
112
+ const rowField = pivot.rowField;
113
+ const valueField = pivot.valueField;
114
+ const columnField = pivot.columnField;
115
+ const caseWhens = columnFieldValues.map((column) => {
116
+ return `${processAggType(pivot.aggregationType, true)}(CASE WHEN ${processColumnReference(columnField, databaseType)} = '${processSingleQuotes(column, databaseType)}' THEN ${processValueField(pivot.aggregationType, databaseType, valueField)} END) AS ${processColumnReference(column, databaseType)}`;
64
117
  });
65
- const caseWhensCompare = distinctColumnValues.map((column) => {
66
- return `${processAggType(pivot.aggregationType)}(CASE WHEN "${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "comparison_${column}"`;
118
+ const caseWhensCompare = columnFieldValues.map((column) => {
119
+ 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)}`;
67
120
  });
68
121
  const compareCTE = itemQueries[1]
69
122
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
70
123
  : '';
71
124
  const compareCaseWhenCTE = itemQueries[1]
72
- ? `, quill_ct_cw as (SELECT "${pivot.rowField}" as "comparison_${pivot.rowField}", ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY ${pivot.rowField})`
125
+ ? `, quill_ct_cw as (SELECT ${processColumnReference(rowField, databaseType)} as ${processColumnReference(`comparison_${rowField}`, databaseType)}, ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY ${processColumnReference(rowField, databaseType)})`
73
126
  : '';
74
127
  const joinQuery = itemQueries[1]
75
- ? `JOIN quill_ct_cw ct ON ct."comparison_${pivot.rowField}" = qt."${pivot.rowField}"`
128
+ ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowField}`, databaseType)} = qt.${processColumnReference(rowField, databaseType)}`
76
129
  : '';
77
130
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
78
- quill_qt_cw AS (SELECT ${pivot.rowField}, ${caseWhens.join(', ')} FROM quill_qt GROUP BY ${pivot.rowField})
131
+ quill_qt_cw AS (SELECT ${processColumnReference(rowField, databaseType)}, ${caseWhens.join(', ')} FROM quill_qt GROUP BY ${processColumnReference(rowField, databaseType)})
79
132
  ${compareCTE} ${compareCaseWhenCTE}
80
133
  SELECT * FROM quill_qt_cw qt
81
134
  ${joinQuery}`;
82
135
  }
83
- function create2DDatePivotQuery(pivot, itemQueries, distinctColumnValues, dateBucket = 'month', comparisonInterval) {
84
- const caseWhens = distinctColumnValues.map((column) => {
85
- return `${processAggType(pivot.aggregationType)}(CASE WHEN qt."${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "${column}"`;
136
+ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket = 'month', comparisonInterval) {
137
+ if (!pivot.columnField || !pivot.rowField) {
138
+ return undefined;
139
+ }
140
+ const rowField = pivot.rowField;
141
+ const columnField = pivot.columnField;
142
+ const caseWhens = columnFieldValues.map((column) => {
143
+ 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)}`;
86
144
  });
87
- const caseWhensCompare = distinctColumnValues.map((column) => {
88
- return `${processAggType(pivot.aggregationType)}(CASE WHEN "${pivot.columnField}" = '${column.replaceAll("'", "''")}' THEN ${processValueField(pivot.aggregationType, pivot.valueField)} END) AS "comparison_${column}"`;
145
+ const caseWhensCompare = columnFieldValues.map((column) => {
146
+ 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)}`;
89
147
  });
90
148
  const compareCTE = itemQueries[1] && comparisonInterval
91
149
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
92
150
  : '';
93
151
  const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
94
- ? `, quill_ct_cw as (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as comparison_${pivot.rowField}, ${caseWhensCompare.join(', ')} FROM quill_ct GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))`
152
+ ? `, 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)})`
95
153
  : '';
96
154
  const joinQuery = itemQueries[1] && comparisonInterval
97
- ? `LEFT JOIN quill_ct_cw ct ON qt."${pivot.rowField}" = date_trunc('${dateBucket}', (ct."comparison_${pivot.rowField}" + INTERVAL '${comparisonInterval} day'))`
155
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(`${rowField}`, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
98
156
  : '';
99
157
  return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
100
- quill_qt_agg as (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as ${pivot.rowField}, ${caseWhens.join(', ')} FROM quill_query_table qt GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))
158
+ 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)})
101
159
  ${compareCTE} ${compareCaseWhenCTE}
102
160
  SELECT * FROM quill_qt_agg qt
103
- ${joinQuery} ORDER BY qt."${pivot.rowField}"`;
161
+ ${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}`;
104
162
  }
105
- function create1DPivotQuery(pivot, itemQueries, dateBucket = 'month', comparisonInterval) {
163
+ function create1DPivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval) {
106
164
  if (['string', 'varchar'].includes(pivot.rowFieldType) ||
107
165
  !pivot.rowFieldType) {
108
- return create1DStringPivotQuery(pivot, itemQueries);
166
+ return create1DStringPivotQuery(pivot, itemQueries, databaseType);
109
167
  }
110
- return create1DDatePivotQuery(pivot, itemQueries, dateBucket, comparisonInterval);
168
+ return create1DDatePivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval);
111
169
  }
112
- function create1DStringPivotQuery(pivot, itemQueries) {
170
+ function create1DStringPivotQuery(pivot, itemQueries, databaseType) {
171
+ const rowField = pivot.rowField;
172
+ const valueField = pivot.valueField;
113
173
  const compareCTE = itemQueries[1]
114
174
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
115
175
  : '';
116
176
  const compareCaseWhenCTE = itemQueries[1]
117
- ? `, quill_ct_cw as (SELECT ${pivot.rowField} as "comparison_${pivot.rowField}", ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as comparison_${pivot.valueField} FROM quill_ct GROUP BY ${pivot.rowField})`
177
+ ? `, 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)})`
118
178
  : '';
119
179
  const joinQuery = itemQueries[1]
120
- ? `JOIN quill_ct_cw ct ON ct."comparison_${pivot.rowField}" = qt."${pivot.rowField}"`
180
+ ? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowField}`, databaseType)} = qt.${processColumnReference(`${rowField}`, databaseType)}`
121
181
  : '';
122
182
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
123
- quill_qt_cw AS (SELECT ${pivot.rowField}, ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as ${pivot.valueField} FROM quill_qt GROUP BY ${pivot.rowField})
183
+ 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)})
124
184
  ${compareCTE} ${compareCaseWhenCTE}
125
- SELECT * FROM quill_qt_cw qt
185
+ SELECT * FROM quill_qt_cw qt
126
186
  ${joinQuery}`;
127
187
  }
128
- function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', comparisonInterval) {
188
+ function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval) {
189
+ const rowField = pivot.rowField;
190
+ const valueField = pivot.valueField;
129
191
  const compareCTE = itemQueries[1] && comparisonInterval
130
192
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
131
193
  : '';
132
194
  const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
133
- ? `, quill_ct_cw as (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as comparison_${pivot.rowField}, ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as comparison_${pivot.valueField} FROM quill_ct GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))`
195
+ ? `, 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)})`
134
196
  : '';
135
197
  const joinQuery = itemQueries[1] && comparisonInterval
136
- ? `LEFT JOIN quill_ct_cw ct ON qt."${pivot.rowField}" = date_trunc('${dateBucket}', (ct."comparison_${pivot.rowField}" + INTERVAL '${comparisonInterval}'))`
198
+ ? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(`${rowField}`, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
137
199
  : '';
138
200
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
139
- quill_qt_agg AS (SELECT date_trunc('${dateBucket}', ${pivot.rowField}) as ${pivot.rowField}, ${processAggType(pivot.aggregationType)}(${pivot.valueField}) as ${pivot.valueField} FROM quill_qt GROUP BY date_trunc('${dateBucket}', ${pivot.rowField}))
201
+ 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)})
140
202
  ${compareCTE} ${compareCaseWhenCTE}
141
203
  SELECT * FROM quill_qt_agg qt
142
- ${joinQuery} ORDER BY qt."${pivot.rowField}"`;
204
+ ${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}`;
143
205
  }
144
- function createAggregationValuePivot(pivot, itemQueries) {
145
- let aggregationType = processAggType(pivot.aggregationType);
146
- if (pivot.aggregationType === 'count') {
147
- aggregationType = 'COUNT';
148
- }
206
+ function createAggregationValuePivot(pivot, itemQueries, databaseType) {
207
+ const valueField = pivot.valueField;
208
+ const aggregationType = processAggType(pivot.aggregationType);
149
209
  if (!pivot.valueField)
150
210
  return undefined;
151
211
  const compareCTE = itemQueries[1]
152
212
  ? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
153
213
  : '';
154
214
  const compareAggregation = itemQueries[1]
155
- ? `, quill_ct_cw as (SELECT ${aggregationType}(${pivot.valueField}) as comparison_${pivot.valueField} FROM quill_ct)`
215
+ ? `, quill_ct_cw as (SELECT ${aggregationType}(${processColumnReference(`${valueField}`, databaseType)}) as ${processColumnReference(`comparison_${valueField}`, databaseType)} FROM quill_ct)`
156
216
  : '';
157
217
  const joinQuery = itemQueries[1] ? `CROSS JOIN quill_ct_cw ct` : '';
158
218
  return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
159
- quill_qt_agg AS (SELECT ${aggregationType}(${pivot.valueField}) as ${pivot.valueField} FROM quill_qt)
219
+ quill_qt_agg AS (SELECT ${aggregationType}(${processColumnReference(`${valueField}`, databaseType)}) as ${processColumnReference(`${valueField}`, databaseType)} FROM quill_qt)
160
220
  ${compareCTE} ${compareAggregation}
161
221
  SELECT * FROM quill_qt_agg qt
162
222
  ${joinQuery}`;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queryConstructor.uspec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryConstructor.uspec.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.uspec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,223 @@
1
+ import { generatePivotQuery } from './queryConstructor';
2
+ const removeExtraSpacesAndNewLines = (str) => {
3
+ return str.replace(/\s+/g, ' ').trim();
4
+ };
5
+ describe('queryConstructor', () => {
6
+ const default2DPivot = {
7
+ rowField: 'merchant',
8
+ rowFieldType: 'string',
9
+ columnField: 'user',
10
+ valueField: 'amount',
11
+ aggregationType: 'sum',
12
+ };
13
+ const nonComparisonQuery = ['select * from transactions'];
14
+ const comparisonQueries = [
15
+ `select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'`,
16
+ `select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01'`,
17
+ ];
18
+ describe('bigquery - generatePivotQuery', () => {
19
+ const databaseType = 'bigquery';
20
+ it('should return a 2d string pivot query', async () => {
21
+ const query = generatePivotQuery(default2DPivot, nonComparisonQuery, databaseType, undefined, ['value1', 'value2']);
22
+ const expected = `WITH quill_qt AS (select * from transactions),
23
+ quill_qt_cw AS (SELECT \`merchant\`,
24
+ sum(CASE WHEN \`user\` = 'value1' THEN \`amount\` ELSE 0 END) AS \`value1\`,
25
+ sum(CASE WHEN \`user\` = 'value2' THEN \`amount\` ELSE 0 END) AS \`value2\`
26
+ FROM quill_qt GROUP BY \`merchant\`)
27
+ SELECT * FROM quill_qt_cw qt`;
28
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
29
+ });
30
+ it('should return a 2d date pivot query', async () => {
31
+ const query = generatePivotQuery({
32
+ ...default2DPivot,
33
+ rowFieldType: 'MMM_DD_YYY',
34
+ rowField: 'created_at',
35
+ }, nonComparisonQuery, databaseType, undefined, ['value1', 'value2']);
36
+ const expected = `WITH quill_query_table AS (select * from transactions),
37
+ quill_qt_agg as (SELECT TIMESTAMP_TRUNC(\`created_at\`, month) as \`created_at\`,
38
+ sum(CASE WHEN qt.\`user\` = 'value1' THEN \`amount\` ELSE 0 END) AS \`value1\`,
39
+ sum(CASE WHEN qt.\`user\` = 'value2' THEN \`amount\` ELSE 0 END) AS \`value2\` FROM quill_query_table qt
40
+ GROUP BY TIMESTAMP_TRUNC(\`created_at\`, month))
41
+ SELECT * FROM quill_qt_agg qt ORDER BY qt.\`created_at\``;
42
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
43
+ });
44
+ it('should return a 1d date pivot query', async () => {
45
+ const query = generatePivotQuery({
46
+ ...default2DPivot,
47
+ rowFieldType: 'MMM_DD_YYY',
48
+ rowField: 'created_at',
49
+ columnField: undefined,
50
+ }, nonComparisonQuery, databaseType, undefined);
51
+ const expected = `WITH quill_qt AS (select * from transactions),
52
+ quill_qt_agg AS (SELECT TIMESTAMP_TRUNC(\`created_at\`, month) as \`created_at\`,
53
+ sum(\`amount\`) as \`amount\` FROM quill_qt GROUP BY TIMESTAMP_TRUNC(\`created_at\`, month))
54
+ SELECT * FROM quill_qt_agg qt ORDER BY qt.\`created_at\``;
55
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
56
+ });
57
+ it('should return a 1d string pivot query', async () => {
58
+ const query = generatePivotQuery({ ...default2DPivot, columnField: undefined }, nonComparisonQuery, databaseType, undefined);
59
+ const expected = `WITH quill_qt AS (select * from transactions),
60
+ quill_qt_cw AS (SELECT \`merchant\`, sum(\`amount\`) as \`amount\`
61
+ FROM quill_qt GROUP BY \`merchant\`)
62
+ SELECT * FROM quill_qt_cw qt`;
63
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
64
+ });
65
+ it('should return a value aggregation query', async () => {
66
+ const query = generatePivotQuery(
67
+ // @ts-ignore
68
+ { ...default2DPivot, columnField: undefined, rowField: undefined }, nonComparisonQuery, databaseType, undefined);
69
+ const expected = `WITH quill_qt AS (select * from transactions),
70
+ quill_qt_agg AS (SELECT sum(\`amount\`) as \`amount\` FROM quill_qt) SELECT * FROM quill_qt_agg qt`;
71
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
72
+ });
73
+ it('should return a 2d string pivot query with comparison', async () => {
74
+ const query = generatePivotQuery(default2DPivot, comparisonQueries, databaseType, undefined, ['value1', 'value2']);
75
+ const expected = `WITH quill_qt AS
76
+ (select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'),
77
+ quill_qt_cw AS (SELECT \`merchant\`,
78
+ sum(CASE WHEN \`user\` = 'value1' THEN \`amount\` ELSE 0 END) AS \`value1\`,
79
+ sum(CASE WHEN \`user\` = 'value2' THEN \`amount\` ELSE 0 END) AS \`value2\` FROM quill_qt GROUP BY \`merchant\`) ,
80
+ quill_ct as (select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01') ,
81
+ quill_ct_cw as (SELECT \`merchant\` as \`comparison_merchant\`,
82
+ sum(CASE WHEN \`user\` = 'value1' THEN \`amount\` ELSE 0 END) AS \`comparison_value1\`,
83
+ sum(CASE WHEN \`user\` = 'value2' THEN \`amount\` ELSE 0 END) AS \`comparison_value2\` FROM quill_ct GROUP BY \`merchant\`)
84
+ SELECT * FROM quill_qt_cw qt JOIN quill_ct_cw ct ON ct.\`comparison_merchant\` = qt.\`merchant\``;
85
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
86
+ });
87
+ it('should return a 2d date pivot query with comparison', async () => {
88
+ const query = generatePivotQuery({
89
+ ...default2DPivot,
90
+ rowFieldType: 'MMM_DD_YYY',
91
+ rowField: 'created_at',
92
+ }, comparisonQueries, databaseType, '90', ['value1', 'value2']);
93
+ const expected = `WITH quill_query_table AS (select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'),
94
+ quill_qt_agg as (SELECT TIMESTAMP_TRUNC(\`created_at\`, month) as \`created_at\`,
95
+ sum(CASE WHEN qt.\`user\` = 'value1' THEN \`amount\` ELSE 0 END) AS \`value1\`,
96
+ sum(CASE WHEN qt.\`user\` = 'value2' THEN \`amount\` ELSE 0 END) AS \`value2\`
97
+ FROM quill_query_table qt GROUP BY TIMESTAMP_TRUNC(\`created_at\`, month)) ,
98
+ quill_ct as (select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01') ,
99
+ quill_ct_cw as (SELECT TIMESTAMP_TRUNC(\`created_at\`, month) as \`comparison_created_at\`,
100
+ sum(CASE WHEN \`user\` = 'value1' THEN \`amount\` ELSE 0 END) AS \`comparison_value1\`,
101
+ sum(CASE WHEN \`user\` = 'value2' THEN \`amount\` ELSE 0 END) AS \`comparison_value2\`
102
+ FROM quill_ct GROUP BY TIMESTAMP_TRUNC(\`created_at\`, month))
103
+ SELECT * FROM quill_qt_agg qt
104
+ LEFT JOIN quill_ct_cw \`ct\` ON qt.\`created_at\` = TIMESTAMP_TRUNC(TIMESTAMP_ADD(\`ct\`.\`comparison_created_at\`, INTERVAL 90 ), month)
105
+ ORDER BY qt.\`created_at\``;
106
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
107
+ });
108
+ it('should return a 1d date pivot query with comparison', async () => {
109
+ const query = generatePivotQuery({
110
+ ...default2DPivot,
111
+ rowFieldType: 'MMM_DD_YYY',
112
+ rowField: 'created_at',
113
+ columnField: undefined,
114
+ }, comparisonQueries, databaseType, '3 month');
115
+ const expected = `WITH quill_qt AS (select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'),
116
+ quill_qt_agg AS (SELECT TIMESTAMP_TRUNC(\`created_at\`, month) as \`created_at\`,
117
+ sum(\`amount\`) as \`amount\` FROM quill_qt GROUP BY TIMESTAMP_TRUNC(\`created_at\`, month)) ,
118
+ quill_ct as (select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01') ,
119
+ quill_ct_cw as (SELECT TIMESTAMP_TRUNC(\`created_at\`, month) as \`comparison_created_at\`,
120
+ sum(\`amount\`) as \`comparison_amount\` FROM quill_ct GROUP BY TIMESTAMP_TRUNC(\`created_at\`, month))
121
+ SELECT * FROM quill_qt_agg qt LEFT JOIN quill_ct_cw \`ct\` ON qt.\`created_at\` = TIMESTAMP_TRUNC(TIMESTAMP_ADD(\`ct\`.\`comparison_created_at\`, INTERVAL 3 month ), month)
122
+ ORDER BY qt.\`created_at\``;
123
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
124
+ });
125
+ it('should return a 1d string pivot query with comparison', async () => {
126
+ const query = generatePivotQuery({ ...default2DPivot, columnField: undefined }, comparisonQueries, databaseType, undefined);
127
+ const expected = `WITH quill_qt AS (select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'),
128
+ quill_qt_cw AS (SELECT \`merchant\`, sum(\`amount\`) as \`amount\` FROM quill_qt GROUP BY \`merchant\`) ,
129
+ quill_ct as (select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01') ,
130
+ quill_ct_cw as (SELECT \`merchant\` as \`comparison_merchant\`, sum(\`amount\`) as \`comparison_amount\` FROM quill_ct GROUP BY \`merchant\`)
131
+ SELECT * FROM quill_qt_cw qt JOIN quill_ct_cw ct ON ct.\`comparison_merchant\` = qt.\`merchant\``;
132
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
133
+ });
134
+ it('should return a value aggregation query', async () => {
135
+ const query = generatePivotQuery(
136
+ // @ts-ignore
137
+ { ...default2DPivot, columnField: undefined, rowField: undefined }, comparisonQueries, databaseType, undefined);
138
+ const expected = `WITH quill_qt AS (select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'),
139
+ quill_qt_agg AS (SELECT sum(\`amount\`) as \`amount\` FROM quill_qt) ,
140
+ quill_ct as (select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01') ,
141
+ quill_ct_cw as (SELECT sum(\`amount\`) as \`comparison_amount\` FROM quill_ct)
142
+ SELECT * FROM quill_qt_agg qt CROSS JOIN quill_ct_cw ct`;
143
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
144
+ });
145
+ });
146
+ describe('postgresql - generatePivotQuery', () => {
147
+ const databaseType = 'postgresql';
148
+ it('should return a 2d string pivot query', async () => {
149
+ const query = generatePivotQuery(default2DPivot, ['select * from transactions'], databaseType, undefined, ['value1', 'value2']);
150
+ const expected = `WITH quill_qt AS (select * from transactions),
151
+ quill_qt_cw AS
152
+ (SELECT "merchant", sum(CASE WHEN "user" = 'value1' THEN "amount" ELSE 0 END) AS "value1",
153
+ sum(CASE WHEN "user" = 'value2' THEN "amount" ELSE 0 END) AS "value2" FROM quill_qt GROUP BY "merchant")
154
+ SELECT * FROM quill_qt_cw qt`;
155
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
156
+ });
157
+ it('should return a 2d date pivot query', async () => {
158
+ const query = generatePivotQuery({
159
+ ...default2DPivot,
160
+ rowFieldType: 'MMM_DD_YYY',
161
+ rowField: 'created_at',
162
+ }, ['select * from transactions'], databaseType, undefined, ['value1', 'value2']);
163
+ const expected = `WITH quill_query_table AS (select * from transactions),
164
+ quill_qt_agg as (SELECT date_trunc('month', "created_at") as "created_at",
165
+ sum(CASE WHEN qt."user" = 'value1' THEN "amount" ELSE 0 END) AS "value1",
166
+ sum(CASE WHEN qt."user" = 'value2' THEN "amount" ELSE 0 END) AS "value2"
167
+ FROM quill_query_table qt
168
+ GROUP BY date_trunc('month', "created_at"))
169
+ SELECT * FROM quill_qt_agg qt ORDER BY qt."created_at"`;
170
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
171
+ });
172
+ it('should return a 1d date pivot query', async () => {
173
+ const query = generatePivotQuery({
174
+ ...default2DPivot,
175
+ rowFieldType: 'MMM_DD_YYY',
176
+ rowField: 'created_at',
177
+ columnField: undefined,
178
+ }, ['select * from transactions'], databaseType, undefined);
179
+ const expected = `WITH quill_qt AS (select * from transactions),
180
+ quill_qt_agg AS (SELECT date_trunc('month', "created_at") as "created_at", sum("amount") as "amount"
181
+ FROM quill_qt
182
+ GROUP BY date_trunc('month', "created_at"))
183
+ SELECT * FROM quill_qt_agg qt ORDER BY qt."created_at"`;
184
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
185
+ });
186
+ it('should return a 1d string pivot query', async () => {
187
+ const query = generatePivotQuery({ ...default2DPivot, columnField: undefined }, ['select * from transactions'], databaseType, undefined);
188
+ const expected = `WITH quill_qt AS (select * from transactions),
189
+ quill_qt_cw AS (SELECT "merchant", sum("amount") as "amount"
190
+ FROM quill_qt
191
+ GROUP BY "merchant")
192
+ SELECT * FROM quill_qt_cw qt`;
193
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
194
+ });
195
+ it('should return a value aggregation query', async () => {
196
+ const query = generatePivotQuery(
197
+ // @ts-ignore
198
+ { ...default2DPivot, columnField: undefined, rowField: undefined }, ['select * from transactions'], databaseType, undefined);
199
+ const expected = `WITH quill_qt AS (select * from transactions),
200
+ quill_qt_agg AS (SELECT sum("amount") as "amount" FROM quill_qt) SELECT * FROM quill_qt_agg qt`;
201
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
202
+ });
203
+ it('should return a 2d date pivot query with comparison', async () => {
204
+ const query = generatePivotQuery({
205
+ ...default2DPivot,
206
+ rowFieldType: 'MMM_DD_YYY',
207
+ rowField: 'created_at',
208
+ }, comparisonQueries, databaseType, '90 DAY', ['value1', 'value2']);
209
+ const expected = `WITH quill_query_table AS
210
+ (select * from transactions where created_at BETWEEN '2024-06-01' AND '2024-07-01'),
211
+ quill_qt_agg as (SELECT date_trunc('month', "created_at") as "created_at",
212
+ sum(CASE WHEN qt."user" = 'value1' THEN "amount" ELSE 0 END) AS "value1",
213
+ sum(CASE WHEN qt."user" = 'value2' THEN "amount" ELSE 0 END) AS "value2" FROM quill_query_table qt GROUP BY date_trunc('month', "created_at")) ,
214
+ quill_ct as (select * from transactions where created_at BETWEEN '2024-05-01' AND '2024-06-01') ,
215
+ quill_ct_cw as (SELECT date_trunc('month', "created_at") as "comparison_created_at",
216
+ sum(CASE WHEN "user" = 'value1' THEN "amount" ELSE 0 END) AS "comparison_value1",
217
+ sum(CASE WHEN "user" = 'value2' THEN "amount" ELSE 0 END) AS "comparison_value2" FROM quill_ct GROUP BY date_trunc('month', "created_at"))
218
+ SELECT * FROM quill_qt_agg qt LEFT JOIN quill_ct_cw "ct" ON qt."created_at" = date_trunc('month', ("ct"."comparison_created_at" + INTERVAL '90 DAY'))
219
+ ORDER BY qt."created_at"`;
220
+ expect(removeExtraSpacesAndNewLines(query)).toEqual(removeExtraSpacesAndNewLines(expected));
221
+ });
222
+ });
223
+ });
@@ -0,0 +1,7 @@
1
+ import { AdditionalProcessing } from './tableProcessing';
2
+ export declare function fetchReport(reportId: string, client: any, useReportTask?: boolean, filters?: any[], additionalProcessing?: AdditionalProcessing, dateBucket?: string, customFields?: any): Promise<{
3
+ report: any;
4
+ error?: string;
5
+ }>;
6
+ export declare const formatRowsFromReport: (report: any) => any;
7
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,aAAa,UAAO,EACpB,OAAO,GAAE,GAAG,EAAO,EACnB,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,GAAG,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsF1C;AAED,eAAO,MAAM,oBAAoB,WAAY,GAAG,QAe/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getClient(publicKey: string): Promise<any>;
2
+ //# sourceMappingURL=report.ispec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.ispec.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ispec.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,gBAqBhD"}
@@ -0,0 +1,46 @@
1
+ import { fetchReport } from './report';
2
+ const QUERY_ENDPOINT = 'https://quill-344421.uc.r.appspot.com/cloud';
3
+ export async function getClient(publicKey) {
4
+ const response = await fetch(QUERY_ENDPOINT, {
5
+ method: 'POST',
6
+ headers: {
7
+ 'Content-Type': 'application/json',
8
+ },
9
+ body: JSON.stringify({
10
+ metadata: {
11
+ clientId: publicKey,
12
+ publicKey,
13
+ task: 'client',
14
+ },
15
+ }),
16
+ });
17
+ const result = await response.json();
18
+ return {
19
+ ...result.data.client,
20
+ publicKey: result.data.client._id,
21
+ customerId: result.data.client.adminCustomerId,
22
+ queryEndpoint: QUERY_ENDPOINT,
23
+ };
24
+ }
25
+ describe('report', () => {
26
+ let client = undefined;
27
+ beforeAll(async () => {
28
+ const publicKey = '65d65b57cdd8ae70a5648d9c';
29
+ client = await getClient(publicKey);
30
+ });
31
+ describe('fetchReport', () => {
32
+ it('should fetch report', async () => {
33
+ const reportId = '669167e392533d0c68bfe002';
34
+ const report = await fetchReport(reportId, client);
35
+ expect(report.report).toBeDefined();
36
+ expect(report.report.pivot).toBeDefined();
37
+ expect(report.report.rows).toBeDefined();
38
+ });
39
+ it('should fetch the broken report and return an error', async () => {
40
+ const reportId = '66a3d7ef28ca14000c51f498';
41
+ const report = await fetchReport(reportId, client);
42
+ expect(report.report).toBeDefined();
43
+ expect(report.report.error).toBeDefined();
44
+ });
45
+ });
46
+ });