@quillsql/react 2.12.28 → 2.12.29

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 (105) hide show
  1. package/dist/cjs/Chart.d.ts.map +1 -1
  2. package/dist/cjs/Chart.js +10 -8
  3. package/dist/cjs/ChartBuilder.d.ts +35 -1
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +38 -4
  6. package/dist/cjs/Context.d.ts +1 -19
  7. package/dist/cjs/Context.d.ts.map +1 -1
  8. package/dist/cjs/Context.js +32 -83
  9. package/dist/cjs/Dashboard.d.ts.map +1 -1
  10. package/dist/cjs/Dashboard.js +76 -49
  11. package/dist/cjs/ReportBuilder.d.ts +9 -0
  12. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  13. package/dist/cjs/ReportBuilder.js +330 -100
  14. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  15. package/dist/cjs/SQLEditor.js +98 -29
  16. package/dist/cjs/Table.d.ts.map +1 -1
  17. package/dist/cjs/Table.js +8 -8
  18. package/dist/cjs/components/Chart/ChartTooltip.d.ts.map +1 -1
  19. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  20. package/dist/cjs/components/Dashboard/DataLoader.js +20 -16
  21. package/dist/cjs/hooks/useDashboard.d.ts +1 -1
  22. package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
  23. package/dist/cjs/hooks/useDashboard.js +18 -4
  24. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  25. package/dist/cjs/internals/ReportBuilder/PivotModal.js +56 -57
  26. package/dist/cjs/utils/columnProcessing.d.ts +1 -0
  27. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  28. package/dist/cjs/utils/columnProcessing.js +8 -1
  29. package/dist/cjs/utils/dashboard.js +1 -1
  30. package/dist/cjs/utils/dataFetcher.d.ts +1 -1
  31. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  32. package/dist/cjs/utils/dataFetcher.js +9 -4
  33. package/dist/cjs/utils/dates.d.ts +1 -0
  34. package/dist/cjs/utils/dates.d.ts.map +1 -1
  35. package/dist/cjs/utils/dates.js +12 -3
  36. package/dist/cjs/utils/monacoAutocomplete.d.ts +20 -0
  37. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
  38. package/dist/cjs/utils/monacoAutocomplete.js +145 -0
  39. package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
  40. package/dist/cjs/utils/pivotConstructor.js +58 -5
  41. package/dist/cjs/utils/queryConstructor.d.ts +4 -2
  42. package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
  43. package/dist/cjs/utils/queryConstructor.js +118 -57
  44. package/dist/cjs/utils/queryConstructor.uspec.d.ts +2 -0
  45. package/dist/cjs/utils/queryConstructor.uspec.d.ts.map +1 -0
  46. package/dist/cjs/utils/queryConstructor.uspec.js +225 -0
  47. package/dist/cjs/utils/tableProcessing.d.ts +1 -0
  48. package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
  49. package/dist/cjs/utils/tableProcessing.js +42 -5
  50. package/dist/esm/Chart.d.ts.map +1 -1
  51. package/dist/esm/Chart.js +10 -8
  52. package/dist/esm/ChartBuilder.d.ts +35 -1
  53. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  54. package/dist/esm/ChartBuilder.js +36 -3
  55. package/dist/esm/Context.d.ts +1 -19
  56. package/dist/esm/Context.d.ts.map +1 -1
  57. package/dist/esm/Context.js +32 -82
  58. package/dist/esm/Dashboard.d.ts.map +1 -1
  59. package/dist/esm/Dashboard.js +77 -50
  60. package/dist/esm/ReportBuilder.d.ts +9 -0
  61. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  62. package/dist/esm/ReportBuilder.js +333 -103
  63. package/dist/esm/SQLEditor.d.ts.map +1 -1
  64. package/dist/esm/SQLEditor.js +99 -30
  65. package/dist/esm/Table.d.ts.map +1 -1
  66. package/dist/esm/Table.js +8 -8
  67. package/dist/esm/components/Chart/ChartTooltip.d.ts.map +1 -1
  68. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  69. package/dist/esm/components/Dashboard/DataLoader.js +20 -16
  70. package/dist/esm/hooks/useDashboard.d.ts +1 -1
  71. package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
  72. package/dist/esm/hooks/useDashboard.js +19 -5
  73. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  74. package/dist/esm/internals/ReportBuilder/PivotModal.js +57 -58
  75. package/dist/esm/utils/columnProcessing.d.ts +1 -0
  76. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  77. package/dist/esm/utils/columnProcessing.js +6 -0
  78. package/dist/esm/utils/dashboard.js +1 -1
  79. package/dist/esm/utils/dataFetcher.d.ts +1 -1
  80. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  81. package/dist/esm/utils/dataFetcher.js +9 -4
  82. package/dist/esm/utils/dates.d.ts +1 -0
  83. package/dist/esm/utils/dates.d.ts.map +1 -1
  84. package/dist/esm/utils/dates.js +10 -2
  85. package/dist/esm/utils/monacoAutocomplete.d.ts +20 -0
  86. package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
  87. package/dist/esm/utils/monacoAutocomplete.js +140 -0
  88. package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
  89. package/dist/esm/utils/pivotConstructor.js +58 -5
  90. package/dist/esm/utils/queryConstructor.d.ts +4 -2
  91. package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
  92. package/dist/esm/utils/queryConstructor.js +115 -56
  93. package/dist/esm/utils/queryConstructor.uspec.d.ts +2 -0
  94. package/dist/esm/utils/queryConstructor.uspec.d.ts.map +1 -0
  95. package/dist/esm/utils/queryConstructor.uspec.js +223 -0
  96. package/dist/esm/utils/tableProcessing.d.ts +1 -0
  97. package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
  98. package/dist/esm/utils/tableProcessing.js +41 -5
  99. package/package.json +1 -1
  100. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  101. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  102. package/dist/cjs/internals/ReportBuilder/PivotModal.spec.js +0 -213
  103. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts +0 -2
  104. package/dist/esm/internals/ReportBuilder/PivotModal.spec.d.ts.map +0 -1
  105. package/dist/esm/internals/ReportBuilder/PivotModal.spec.js +0 -211
@@ -57,9 +57,10 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
57
57
  setAllowedRowFields(possibleColumns.rowFields);
58
58
  setAllowedColumnFields(possibleColumns.columnFields);
59
59
  setAllowedValueFields(possibleColumns.valueFields);
60
- return possibleColumns;
60
+ return { possibleColumns, uniqueValues: {} };
61
61
  }
62
- const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(stringColumns, query || '', data.rows || [], client, customFields);
62
+ const smallStringColumns = await (0, tableProcessing_1.getCountsByColumns)(stringColumns, query || '', client, customFields);
63
+ const newUniqueValues = await (0, tableProcessing_1.getUniqueValuesByColumns)(smallStringColumns, query || '', data.rows || [], client, customFields);
63
64
  if (!uniqueValues ||
64
65
  (0, crypto_1.hashCode)(uniqueValues) !== (0, crypto_1.hashCode)(newUniqueValues)) {
65
66
  const possibleColumns = (0, pivotProcessing_1.getPossiblePivotFieldOptions)(columns, newUniqueValues || {});
@@ -67,17 +68,16 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
67
68
  setAllowedColumnFields(possibleColumns.columnFields);
68
69
  setAllowedValueFields(possibleColumns.valueFields);
69
70
  setUniqueValues(newUniqueValues);
70
- return possibleColumns;
71
+ return { possibleColumns, uniqueValues: newUniqueValues };
71
72
  }
72
73
  }
73
- return { rowFields: [], columnFields: [], valueFields: [] };
74
+ return {
75
+ possibleColumns: { rowFields: [], columnFields: [], valueFields: [] },
76
+ uniqueValues: {},
77
+ };
74
78
  };
75
79
  const getAllDateRangesByColumn = async () => {
76
80
  // Don't reprocess dateRanges if they are already gathered
77
- if (Object.keys(dateRanges).length > 0 ||
78
- (client && client.databaseType !== 'postgresql')) {
79
- return;
80
- }
81
81
  if (columns) {
82
82
  const dateColumns = columns.filter((column) => {
83
83
  return column.jsType === 'date';
@@ -154,7 +154,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
154
154
  });
155
155
  }
156
156
  else {
157
- const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
157
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, undefined, report, client, uniqueValues);
158
158
  setSamplePivotTable({ pivot: pivot, rows, columns });
159
159
  }
160
160
  }
@@ -170,30 +170,6 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
170
170
  getDistinctValues();
171
171
  }
172
172
  }, [initialSelectedPivotTable, columns, data, pivotRowField]);
173
- (0, react_1.useEffect)(() => {
174
- const fetchPivotTables = async () => {
175
- const pivot = {
176
- rowField: pivotRowField || '',
177
- rowFieldType: columnsToShow[pivotRowField || ''],
178
- columnField: pivotColumnField,
179
- columnFieldType: columnsToShow[pivotColumnField || ''],
180
- valueField: pivotValueField || '',
181
- aggregationType: pivotAggregation || '',
182
- };
183
- if ((0, pivotProcessing_1.isValidPivot)(pivot) && data && columns) {
184
- const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
185
- setSamplePivotTable({ pivot: pivot, rows, columns });
186
- }
187
- };
188
- fetchPivotTables();
189
- }, [
190
- data,
191
- columns,
192
- pivotRowField,
193
- pivotColumnField,
194
- pivotValueField,
195
- pivotAggregation,
196
- ]);
197
173
  (0, react_1.useEffect)(() => {
198
174
  if (!initialUniqueValues) {
199
175
  return;
@@ -221,7 +197,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
221
197
  return null;
222
198
  }
223
199
  const pivot = createdPivots[selectedPivotIndex];
224
- const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false);
200
+ const { rows, columns } = await generatePivotTable(pivot, data, dateRange, false, -1, undefined, undefined, report, client, uniqueValues);
225
201
  setSelectedPivotTable({
226
202
  pivot: pivot,
227
203
  rows: rows,
@@ -232,7 +208,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
232
208
  }, [selectedPivotIndex, data, dateRange, createdPivots]);
233
209
  const onSelectRecommendedPivot = (pivot, index) => {
234
210
  if (showEditOnPivotClick) {
235
- onEditPivot(pivot, index);
211
+ onEditPivot(pivot, index, 'recommended');
236
212
  return;
237
213
  }
238
214
  if (index === selectedPivotIndex && selectedPivotType === 'recommended') {
@@ -245,18 +221,24 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
245
221
  setIsOpen(false);
246
222
  };
247
223
  const onSelectCreatedPivot = (pivot, index) => {
248
- selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField]?.dateRange);
224
+ selectPivot(pivot, pivot.columnField ? uniqueValues : undefined, dateRanges[pivot.rowField]?.dateRange, samplePivotTable);
249
225
  setSelectedPivotType('created');
250
226
  setIsOpen(false);
251
227
  setPopUpTitle('Add pivot');
252
228
  };
253
- const onEditPivot = async (pivot, index) => {
229
+ const onEditPivot = async (pivot, index, pivotType) => {
254
230
  setIsLoading(false);
255
231
  setPivotRowField(pivot.rowField);
256
232
  setPivotColumnField(pivot.columnField);
257
233
  setPivotValueField(pivot.valueField);
258
234
  setPivotAggregation(pivot.aggregationType);
259
235
  setShowUpdatePivot(true);
236
+ if (pivotType === 'recommended' &&
237
+ index !== null &&
238
+ recommendedPivotTables[index]) {
239
+ setSamplePivotTable(recommendedPivotTables[index]);
240
+ return;
241
+ }
260
242
  if ((0, pivotProcessing_1.isValidPivot)(pivot)) {
261
243
  let dateBucket = undefined;
262
244
  if (pivotRowField && dateRanges[pivotRowField]) {
@@ -278,6 +260,7 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
278
260
  return;
279
261
  }
280
262
  setIsLoading(true);
263
+ let tempUniqueValues = uniqueValues;
281
264
  let possibleColumns = {
282
265
  rowFields: allowedRowFields,
283
266
  columnFields: allowedColumnFields,
@@ -287,7 +270,9 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
287
270
  allowedColumnFields.length === 0 &&
288
271
  allowedValueFields.length === 0) ||
289
272
  !uniqueValues) {
290
- possibleColumns = await getDistinctValues();
273
+ const distinctValues = await getDistinctValues();
274
+ possibleColumns = distinctValues.possibleColumns;
275
+ tempUniqueValues = distinctValues.uniqueValues;
291
276
  }
292
277
  const cloudBody = {
293
278
  pivotCountRequest,
@@ -307,9 +292,8 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
307
292
  try {
308
293
  const resp = await (0, dataFetcher_1.getDataFromCloud)(client, 'pivotai', cloudBody);
309
294
  const recommendedPivots = resp?.data?.pivotTables.map((pivot) => (0, pivotProcessing_1.cleanPivot)(pivot, possibleColumns)) || [];
310
- setRecommendedPivots(recommendedPivots.map((pivot) => {
311
- if (pivot.columnField &&
312
- columnsToShow[pivot.columnField] === 'date') {
295
+ const cleanedPivots = recommendedPivots.map((pivot) => {
296
+ if (pivot.columnField && columnsToShow[pivot.columnField] === 'date') {
313
297
  const columnField = pivot.columnField;
314
298
  pivot.columnField = pivot.rowField;
315
299
  pivot.rowField = columnField;
@@ -322,7 +306,13 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
322
306
  : undefined,
323
307
  title: generatePivotTitle(pivot),
324
308
  };
309
+ });
310
+ setRecommendedPivots(cleanedPivots);
311
+ const pts = await Promise.all(cleanedPivots.map(async (p) => {
312
+ const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6, undefined, undefined, report, client, tempUniqueValues);
313
+ return { pivot: p, rows, columns };
325
314
  }));
315
+ setRecommendedPivotTables(pts);
326
316
  setSelectedPivotIndex(-1);
327
317
  }
328
318
  catch (e) {
@@ -375,21 +365,34 @@ const PivotModal = ({ pivotRowField, setPivotRowField, pivotColumnField, setPivo
375
365
  }, 500);
376
366
  };
377
367
  const [recommendedPivotTables, setRecommendedPivotTables] = (0, react_1.useState)([]);
378
- (0, react_1.useEffect)(() => {
379
- const fetchPivotTables = async () => {
380
- const pts = await Promise.all(recommendedPivots.map(async (p) => {
381
- const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6);
382
- return { pivot: p, rows, columns };
383
- }));
384
- setRecommendedPivotTables(pts);
385
- };
386
- fetchPivotTables();
387
- }, [recommendedPivots, dateRange]);
368
+ // useEffect(() => {
369
+ // const fetchPivotTables = async () => {
370
+ // const pts = await Promise.all(
371
+ // recommendedPivots.map(async (p: Pivot) => {
372
+ // const { rows, columns } = await generatePivotTable(
373
+ // p,
374
+ // data,
375
+ // dateRange,
376
+ // false,
377
+ // 6,
378
+ // undefined,
379
+ // undefined,
380
+ // report,
381
+ // client,
382
+ // uniqueValues,
383
+ // );
384
+ // return { pivot: p, rows, columns };
385
+ // }),
386
+ // );
387
+ // setRecommendedPivotTables(pts);
388
+ // };
389
+ // fetchPivotTables();
390
+ // }, [recommendedPivots, dateRange]);
388
391
  const [createdPivotTables, setCreatedPivotTables] = (0, react_1.useState)([]);
389
392
  (0, react_1.useEffect)(() => {
390
393
  const fetchPivotTables = async () => {
391
394
  const pts = await Promise.all(createdPivots.map(async (p) => {
392
- const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6);
395
+ const { rows, columns } = await generatePivotTable(p, data, dateRange, false, 6, undefined, undefined, report, client, uniqueValues);
393
396
  return { pivot: p, rows, columns };
394
397
  }));
395
398
  setCreatedPivotTables(pts);
@@ -798,11 +801,7 @@ const fixBigQueryData = (data = []) => {
798
801
  };
799
802
  async function generatePivotTable(pivot, data, dateRange, isComparison, rowLimit = -1, compRange = undefined, dateBucket, report, client, uniqueValues) {
800
803
  try {
801
- if (report &&
802
- report.rowCount &&
803
- report.rowCount !== data.length &&
804
- client &&
805
- client.databaseType.toLowerCase() === 'postgresql') {
804
+ if (report && report.rowCount && report.rowCount !== data.length) {
806
805
  let dateFilter = report
807
806
  ? report.filtersApplied.find((f) => f.filterType === 'date_range')
808
807
  : undefined;
@@ -7,4 +7,5 @@ export declare function convertPostgresColumn(field: {
7
7
  export declare function convertColumnInfoToColumnInternal(columnInfo: ColumnInfo): ColumnInternal;
8
8
  export declare function convertFieldTypeToJSType(fieldType: string): string;
9
9
  export declare function convertFormatToJsType(column: Column): string;
10
+ export declare function processColumnName(columnName: string): string;
10
11
  //# sourceMappingURL=columnProcessing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D"}
1
+ {"version":3,"file":"columnProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/columnProcessing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,cAAc,CAyGjB;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,UAAU,GACrB,cAAc,CAShB;AA0DD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsBlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
3
+ exports.processColumnName = exports.convertFormatToJsType = exports.convertFieldTypeToJSType = exports.convertColumnInfoToColumnInternal = exports.convertPostgresColumn = void 0;
4
+ function removeBigQuerySpecialChars(columnName) {
5
+ return columnName.replaceAll('quill_forward_slash', '/');
6
+ }
4
7
  function convertPostgresColumn(field) {
5
8
  let format;
6
9
  let fieldType;
@@ -207,3 +210,7 @@ function convertFormatToJsType(column) {
207
210
  }
208
211
  }
209
212
  exports.convertFormatToJsType = convertFormatToJsType;
213
+ function processColumnName(columnName) {
214
+ return removeBigQuerySpecialChars(columnName);
215
+ }
216
+ exports.processColumnName = processColumnName;
@@ -124,7 +124,7 @@ async function getPivotTable(report, dashboardFilters, client, dateBucketInitial
124
124
  }
125
125
  const pivot = report?.pivot;
126
126
  const data = report || {};
127
- if (pivot && client && client.databaseType.toLowerCase() === 'postgresql') {
127
+ if (pivot && client) {
128
128
  if (report.rowCount === 0) {
129
129
  return { rows: [], columns: [] };
130
130
  }
@@ -1,3 +1,3 @@
1
- export declare function getData(client: any, cloudQueryEndpoint: string, noCred: RequestCredentials, hostedRequestBody: any, cloudRequestBody: any, method?: string): Promise<any>;
1
+ export declare function getData(client: any, cloudQueryEndpoint: string, noCred: RequestCredentials, hostedRequestBody: any, cloudRequestBody: any, method?: string, queryParam?: string): Promise<any>;
2
2
  export declare function getDataFromCloud(client: any, cloudQueryEndpoint: string, cloudRequestBody: any, method?: string): Promise<any>;
3
3
  //# sourceMappingURL=dataFetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAqBA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAmGhB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgChB"}
1
+ {"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AAqBA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,gBAwGpB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,gBAgChB"}
@@ -11,7 +11,7 @@ function parseData(rows, queryType) {
11
11
  end: new Date(rows[0]?.max_date),
12
12
  };
13
13
  case 'rowCount':
14
- return parseInt(rows[0]?.count);
14
+ return parseInt(rows[0]?.row_count);
15
15
  case 'distinctStrings':
16
16
  return rows.map((row) => {
17
17
  return row['column_field'];
@@ -22,11 +22,15 @@ function parseData(rows, queryType) {
22
22
  }
23
23
  // this function gets the data either from the self hosted endpoint or
24
24
  // our cloud server
25
- async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST') {
25
+ async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cloudRequestBody, method = 'POST', queryParam) {
26
+ if (!client) {
27
+ return null;
28
+ }
26
29
  try {
27
30
  if (client.queryEndpoint) {
28
31
  // self hosted
29
- const resp = await fetch(client.queryEndpoint, {
32
+ const processedParam = queryParam ? `?${queryParam}` : '';
33
+ const resp = await fetch(`${client.queryEndpoint}${processedParam}`, {
30
34
  method: 'POST',
31
35
  headers: {
32
36
  ...client.queryHeaders,
@@ -42,7 +46,8 @@ async function getData(client, cloudQueryEndpoint, noCred, hostedRequestBody, cl
42
46
  let result;
43
47
  if (hostedRequestBody &&
44
48
  hostedRequestBody.metadata &&
45
- hostedRequestBody.metadata.task === 'report') {
49
+ (hostedRequestBody.metadata.task === 'report' ||
50
+ hostedRequestBody.metadata.useUpdatedDataGathering)) {
46
51
  if (responseJson.data?.data) {
47
52
  result = {
48
53
  fields: responseJson?.data.queries?.queryResults[0]?.fields,
@@ -15,4 +15,5 @@ export declare function getDateBucketFromRange(dateRange: {
15
15
  start: Date;
16
16
  end: Date;
17
17
  }): "month" | "week" | "day" | "year";
18
+ export declare function parseDateByDatabaseType(date: any, databaseType: string): Date;
18
19
  //# sourceMappingURL=dates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E"}
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,UAYxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,WAa/C;AAED,wBAAgB,qBAAqB,CACnC,eAAe,EAAE;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;CACf,EACD,UAAU,CAAC,EAAE,MAAM,sBAepB;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,qCAW3E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,QAMtE"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDateBucketFromRange = exports.getComparisonInterval = exports.isDateFormat = exports.convertComparisonRange = void 0;
3
+ exports.parseDateByDatabaseType = exports.getDateBucketFromRange = exports.getComparisonInterval = exports.isDateFormat = exports.convertComparisonRange = void 0;
4
4
  const date_fns_1 = require("date-fns");
5
5
  const dateRangePickerUtils_1 = require("../DateRangePicker/dateRangePickerUtils");
6
6
  /**
@@ -44,10 +44,10 @@ function getComparisonInterval(comparisonRange, dateBucket) {
44
44
  const dayCount = (0, date_fns_1.differenceInDays)(comparisonRange.endDate, comparisonRange.startDate);
45
45
  if (!isNaN(dayCount)) {
46
46
  if (dateBucket === 'month') {
47
- return dayCount / 30 + ' month';
47
+ return Math.floor(dayCount / 30) + ' month';
48
48
  }
49
49
  else if (dateBucket === 'year') {
50
- return dayCount / 365 + ' year';
50
+ return Math.floor(dayCount / 365) + ' year';
51
51
  }
52
52
  else {
53
53
  return dayCount + ' day';
@@ -71,3 +71,12 @@ function getDateBucketFromRange(dateRange) {
71
71
  }
72
72
  }
73
73
  exports.getDateBucketFromRange = getDateBucketFromRange;
74
+ function parseDateByDatabaseType(date, databaseType) {
75
+ if (databaseType.toLowerCase() === 'bigquery') {
76
+ return new Date(date.value);
77
+ }
78
+ else {
79
+ return new Date(date);
80
+ }
81
+ }
82
+ exports.parseDateByDatabaseType = parseDateByDatabaseType;
@@ -0,0 +1,20 @@
1
+ import { Monaco } from '@monaco-editor/react';
2
+ import { Range } from 'monaco-editor';
3
+ interface CompletionItem {
4
+ label: string;
5
+ kind: number;
6
+ insertText: string;
7
+ insertTextRules: number;
8
+ range: any;
9
+ detail?: string;
10
+ }
11
+ export declare function generateSuggestionsBySchema(schema: any[], monaco: Monaco, range: Range, databaseType: string): CompletionItem[];
12
+ export declare function generateSuggestionsByDatasource(monaco: Monaco, range: Range, databaseType: string): {
13
+ label: string;
14
+ kind: import("monaco-editor").languages.CompletionItemKind;
15
+ insertText: string;
16
+ insertTextRules: import("monaco-editor").languages.CompletionItemInsertTextRule;
17
+ range: Range;
18
+ }[];
19
+ export {};
20
+ //# sourceMappingURL=monacoAutocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monacoAutocomplete.d.ts","sourceRoot":"","sources":["../../../src/utils/monacoAutocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAY,KAAK,EAAE,MAAM,eAAe,CAAC;AAGhD,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA4HD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,GAAG,EAAE,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,MAAM,GACnB,cAAc,EAAE,CA4BlB;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,MAAM;;;;;;IAMrB"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSuggestionsByDatasource = exports.generateSuggestionsBySchema = void 0;
4
+ const queryConstructor_1 = require("./queryConstructor");
5
+ const GENERIC_DATASOURCE_SUGGESTIONS = (monaco, range) => {
6
+ return [
7
+ {
8
+ label: 'SELECT',
9
+ kind: monaco.languages.CompletionItemKind.Keyword,
10
+ insertText: 'SELECT',
11
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
12
+ range,
13
+ },
14
+ {
15
+ label: 'FROM',
16
+ kind: monaco.languages.CompletionItemKind.Keyword,
17
+ insertText: 'FROM',
18
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
19
+ range,
20
+ },
21
+ {
22
+ label: 'JOIN',
23
+ kind: monaco.languages.CompletionItemKind.Keyword,
24
+ insertText: 'JOIN',
25
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
26
+ range,
27
+ },
28
+ {
29
+ label: 'LEFT JOIN',
30
+ kind: monaco.languages.CompletionItemKind.Keyword,
31
+ insertText: 'LEFT JOIN',
32
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
33
+ range,
34
+ },
35
+ {
36
+ label: 'INNER JOIN',
37
+ kind: monaco.languages.CompletionItemKind.Keyword,
38
+ insertText: 'INNER JOIN',
39
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
40
+ range,
41
+ },
42
+ {
43
+ label: 'MAX',
44
+ kind: monaco.languages.CompletionItemKind.Keyword,
45
+ insertText: 'MAX',
46
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
47
+ range,
48
+ },
49
+ {
50
+ label: 'MIN',
51
+ kind: monaco.languages.CompletionItemKind.Keyword,
52
+ insertText: 'MIN',
53
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
54
+ range,
55
+ },
56
+ {
57
+ label: 'ON',
58
+ kind: monaco.languages.CompletionItemKind.Keyword,
59
+ insertText: 'ON',
60
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
61
+ range,
62
+ },
63
+ {
64
+ label: 'WHERE',
65
+ kind: monaco.languages.CompletionItemKind.Keyword,
66
+ insertText: 'WHERE',
67
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
68
+ range,
69
+ },
70
+ {
71
+ label: 'LIMIT',
72
+ kind: monaco.languages.CompletionItemKind.Keyword,
73
+ insertText: 'LIMIT',
74
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
75
+ range,
76
+ },
77
+ {
78
+ label: 'GROUP BY',
79
+ kind: monaco.languages.CompletionItemKind.Keyword,
80
+ insertText: 'GROUP BY',
81
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
82
+ range,
83
+ },
84
+ {
85
+ label: 'ORDER BY',
86
+ kind: monaco.languages.CompletionItemKind.Keyword,
87
+ insertText: 'ORDER BY',
88
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
89
+ range,
90
+ },
91
+ ];
92
+ };
93
+ const POSTGRES_DATASOURCE_SUGGESTIONS = (monaco, range) => {
94
+ return [
95
+ {
96
+ label: 'SELECT',
97
+ kind: monaco.languages.CompletionItemKind.Keyword,
98
+ insertText: 'SELECT',
99
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
100
+ range,
101
+ },
102
+ {
103
+ label: 'FROM',
104
+ kind: monaco.languages.CompletionItemKind.Keyword,
105
+ insertText: 'FROM',
106
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
107
+ range,
108
+ },
109
+ ];
110
+ };
111
+ function generateSuggestionsBySchema(schema, monaco, range, databaseType) {
112
+ console.log(databaseType);
113
+ const suggestions = [];
114
+ schema.forEach((table) => {
115
+ const curSuggestion = {
116
+ label: table.name,
117
+ kind: monaco.languages.CompletionItemKind.Field,
118
+ insertText: `${(0, queryConstructor_1.processColumnReference)(table.name, databaseType).replaceAll('`', '')}`,
119
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
120
+ range,
121
+ };
122
+ suggestions.push(curSuggestion);
123
+ table.columns.forEach((column) => {
124
+ const insertText = `${(0, queryConstructor_1.processColumnReference)(column.name, databaseType).replaceAll('`', '')}`;
125
+ const curSuggestion = {
126
+ label: column.name,
127
+ kind: monaco.languages.CompletionItemKind.Field,
128
+ insertText,
129
+ detail: table.name,
130
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
131
+ range,
132
+ };
133
+ suggestions.push(curSuggestion);
134
+ });
135
+ }, []);
136
+ return suggestions;
137
+ }
138
+ exports.generateSuggestionsBySchema = generateSuggestionsBySchema;
139
+ function generateSuggestionsByDatasource(monaco, range, databaseType) {
140
+ return [
141
+ ...POSTGRES_DATASOURCE_SUGGESTIONS(monaco, range),
142
+ ...GENERIC_DATASOURCE_SUGGESTIONS(monaco, range),
143
+ ];
144
+ }
145
+ exports.generateSuggestionsByDatasource = generateSuggestionsByDatasource;
@@ -1 +1 @@
1
- {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,MAAM,uCAAuC,CAAC;AAK7E,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG;;;eAkHtB"}
1
+ {"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAiB,MAAM,uCAAuC,CAAC;AAO7E,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,GAAG,EAChB,eAAe,CAAC,EAAE,GAAG;;;eAsKtB"}
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generatePivotWithSQL = void 0;
4
+ const ChartBuilder_1 = require("../ChartBuilder");
5
+ const ast_1 = require("../components/ReportBuilder/ast");
4
6
  const PivotModal_1 = require("../internals/ReportBuilder/PivotModal");
7
+ const columnProcessing_1 = require("./columnProcessing");
5
8
  const dataFetcher_1 = require("./dataFetcher");
6
9
  const dates_1 = require("./dates");
7
10
  const queryConstructor_1 = require("./queryConstructor");
11
+ const textProcessing_1 = require("./textProcessing");
8
12
  async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilter, distinctStrings) {
9
13
  if (dateFilter && dateFilter.startDate) {
10
14
  dateFilter.start = dateFilter.startDate;
@@ -25,7 +29,12 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
25
29
  const rowColumn = report.columns.find((column) => column.field === pivot.rowField);
26
30
  pivot.rowFieldType = rowColumn.format;
27
31
  }
28
- const sqlQuery = (0, queryConstructor_1.generatePivotQuery)(pivot, report.itemQuery, report.rows, dateBucket, comparisonInterval, distinctStrings);
32
+ let distinctStringValues = undefined;
33
+ if (!distinctStrings && report.rows && pivot.columnField) {
34
+ const distinctValues = Array.from(new Set(report.rows.map((row) => row[pivot.columnField])));
35
+ distinctStringValues = distinctValues.map((value) => value.toString());
36
+ }
37
+ const sqlQuery = (0, queryConstructor_1.generatePivotQuery)(pivot, report.itemQuery, client.databaseType, comparisonInterval, distinctStrings ? distinctStrings : distinctStringValues, dateBucket);
29
38
  if (sqlQuery && report.rows.length > 0) {
30
39
  const hostedBody = {
31
40
  metadata: {
@@ -42,15 +51,35 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
42
51
  },
43
52
  };
44
53
  const cloudBody = { ...hostedBody };
45
- const resp = await (0, dataFetcher_1.getData)(client, 'query', 'same-origin', hostedBody, cloudBody);
54
+ const resp = await (0, dataFetcher_1.getData)(client, 'query', 'same-origin', hostedBody, cloudBody, 'POST', 'fetch-pivot');
46
55
  // With our current design we have to remove the second row field but leave the first for comparison purposes.
47
56
  const rows = resp.queryResults[0].rows;
57
+ if (pivot.columnField && client.databaseType.toLowerCase() === 'bigquery') {
58
+ rows.forEach((row) => {
59
+ Object.keys(row).forEach((key) => {
60
+ const processedKey = (0, columnProcessing_1.processColumnName)(key);
61
+ if (processedKey !== key) {
62
+ row[processedKey] = row[key];
63
+ delete row[key];
64
+ }
65
+ });
66
+ });
67
+ }
48
68
  const columns = resp.queryResults[0].fields
49
69
  .map((field) => ({
50
- field: field.name,
51
- label: field.name.replace('comparison_', 'comparison '),
70
+ field: (0, columnProcessing_1.processColumnName)(field.name),
71
+ label: (0, textProcessing_1.snakeCaseToTitleCase)((0, columnProcessing_1.processColumnName)(field.name.replace('comparison_', 'comparison '))),
52
72
  }))
53
- .filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0);
73
+ .filter((field, index) => field.field !== 'comparison_' + pivot.rowField || index === 0)
74
+ .sort((a, b) => {
75
+ if (a.field === pivot.rowField) {
76
+ return -1;
77
+ }
78
+ if (b.field === pivot.rowField) {
79
+ return 1;
80
+ }
81
+ return 0;
82
+ });
54
83
  if (pivot.rowField && !['string', 'varchar'].includes(pivot.rowFieldType)) {
55
84
  rows.forEach((row) => {
56
85
  row[pivot.rowField] = (0, PivotModal_1.getDateString)(row[pivot.rowField], undefined, dateBucket);
@@ -78,6 +107,30 @@ async function generatePivotWithSQL(pivot, report, client, dateBucket, dateFilte
78
107
  }
79
108
  }
80
109
  }
110
+ if (pivot.sort) {
111
+ rows.sort((a, b) => {
112
+ if (pivot.sortDirection === 'ASC') {
113
+ if (ChartBuilder_1.dateFormatOptions.includes(pivot.sortFieldType ?? '')) {
114
+ // @ts-ignore
115
+ return new Date(a[pivot.sortField]) - new Date(b[pivot.sortField]);
116
+ }
117
+ else if ((0, ast_1.isNumericColumnType)(pivot.sortFieldType)) {
118
+ return a[pivot.sortField] - b[pivot.sortField];
119
+ }
120
+ return a[pivot.sortField].localeCompare(b[pivot.sortField]);
121
+ }
122
+ else {
123
+ if (ChartBuilder_1.dateFormatOptions.includes(pivot.sortFieldType ?? '')) {
124
+ // @ts-ignore
125
+ return new Date(b[pivot.sortField]) - new Date(a[pivot.sortField]);
126
+ }
127
+ else if ((0, ast_1.isNumericColumnType)(pivot.sortFieldType)) {
128
+ return b[pivot.sortField] - a[pivot.sortField];
129
+ }
130
+ return b[pivot.sortField].localeCompare(a[pivot.sortField]);
131
+ }
132
+ });
133
+ }
81
134
  return {
82
135
  rows: rows,
83
136
  columns: columns,
@@ -1,5 +1,7 @@
1
1
  import { Pivot } from '../internals/ReportBuilder/PivotModal';
2
- export declare function generateDistinctQuery(stringFields: string[], query: string): string;
2
+ export declare function processColumnReference(column: string, databaseType: string): string;
3
+ export declare function generateCountQuery(fields: string[], query: string, databaseType: string): string;
4
+ export declare function generateDistinctQuery(stringFields: string[], query: string, databaseType: string): string;
3
5
  export declare function generateMinMaxRangeQueries(columnFields: string[], query: string, databaseType: string): string;
4
- export declare function generatePivotQuery(pivot: Pivot, itemQueries: string[], rows: any[], dateBucket?: string, comparisonInterval?: string, distinctStrings?: string[]): string | undefined;
6
+ export declare function generatePivotQuery(pivot: Pivot, itemQueries: string[], databaseType: string, comparisonInterval?: string, distinctStrings?: string[], dateBucket?: string): string | undefined;
5
7
  //# sourceMappingURL=queryConstructor.d.ts.map