@quillsql/react 2.13.43 → 2.13.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/Chart.js +2 -2
- package/dist/cjs/ChartBuilder.d.ts +1 -0
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +48 -14
- package/dist/cjs/ChartEditor.d.ts +1 -1
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +2 -2
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +37 -26
- package/dist/cjs/Dashboard.d.ts +8 -2
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +117 -101
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +871 -1574
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +23 -4
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/components/Chart/CustomReferenceLine.js +1 -1
- package/dist/cjs/components/Chart/GaugeChart.js +0 -6
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +3 -3
- package/dist/cjs/components/Dashboard/DashboardSection.d.ts +1 -1
- package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardSection.js +20 -19
- package/dist/cjs/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/MetricComponent.js +1 -0
- package/dist/cjs/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/TableComponent.js +5 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +58 -8
- package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
- package/dist/cjs/components/QuillSelect.js +91 -14
- package/dist/cjs/components/QuillSelectWithCombo.js +6 -6
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts +6 -16
- package/dist/cjs/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnModal.js +172 -75
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -5
- package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddSortPopover.js +2 -9
- package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts +17 -0
- package/dist/cjs/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/DraggableColumns.js +52 -0
- package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts +17 -0
- package/dist/cjs/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
- package/dist/cjs/components/ReportBuilder/DraggableItem.js +17 -0
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts +6 -12
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +29 -20
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +8 -17
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.js +20 -86
- package/dist/cjs/components/ReportBuilder/convert.js +6 -6
- package/dist/cjs/components/ReportBuilder/ui.d.ts +8 -9
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +30 -8
- package/dist/cjs/components/ReportBuilder/util.d.ts +2 -5
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +1 -1
- package/dist/cjs/components/UiComponents.d.ts +3 -2
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +13 -13
- package/dist/cjs/hooks/useAskQuill.d.ts +1 -1
- package/dist/cjs/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/cjs/hooks/useAskQuill.js +14 -12
- package/dist/cjs/hooks/useDashboard.d.ts +5 -3
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +8 -6
- package/dist/cjs/hooks/useOnClickOutside.d.ts +1 -0
- package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/cjs/hooks/useOnClickOutside.js +33 -0
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotForm.js +22 -15
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +7 -5
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +100 -48
- package/dist/cjs/models/Client.d.ts +4 -0
- package/dist/cjs/models/Client.d.ts.map +1 -1
- package/dist/cjs/models/Dashboard.d.ts +1 -0
- package/dist/cjs/models/Dashboard.d.ts.map +1 -1
- package/dist/cjs/models/Report.d.ts +2 -0
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/models/ReportBuilder.d.ts +46 -0
- package/dist/cjs/models/ReportBuilder.d.ts.map +1 -0
- package/dist/cjs/models/ReportBuilder.js +19 -0
- package/dist/cjs/models/Tables.d.ts +5 -5
- package/dist/cjs/models/Tables.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +4 -0
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +301 -97
- package/dist/cjs/utils/astProcessing.d.ts +14 -4
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +38 -4
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +18 -3
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +4 -3
- package/dist/cjs/utils/filterProcessing.d.ts +2 -11
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +4 -16
- package/dist/cjs/utils/pivotConstructor.d.ts +2 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +4 -2
- package/dist/cjs/utils/pivotProcessing.d.ts +17 -7
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +60 -51
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +15 -2
- package/dist/cjs/utils/report.d.ts +12 -9
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +114 -47
- package/dist/cjs/utils/reportBuilder.d.ts +88 -0
- package/dist/cjs/utils/reportBuilder.d.ts.map +1 -0
- package/dist/cjs/utils/reportBuilder.js +395 -0
- package/dist/cjs/utils/schema.d.ts +7 -0
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +36 -2
- package/dist/cjs/utils/tableProcessing.d.ts +59 -29
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +75 -90
- package/dist/cjs/utils/ui.d.ts +2 -0
- package/dist/cjs/utils/ui.d.ts.map +1 -0
- package/dist/cjs/utils/ui.js +18 -0
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +2 -2
- package/dist/esm/ChartBuilder.d.ts +1 -0
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +49 -15
- package/dist/esm/ChartEditor.d.ts +1 -1
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +2 -2
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +37 -26
- package/dist/esm/Dashboard.d.ts +8 -2
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +121 -105
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +878 -1581
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +23 -4
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/components/Chart/CustomReferenceLine.js +1 -1
- package/dist/esm/components/Chart/GaugeChart.js +0 -6
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +3 -3
- package/dist/esm/components/Dashboard/DashboardSection.d.ts +1 -1
- package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardSection.js +21 -20
- package/dist/esm/components/Dashboard/MetricComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/MetricComponent.js +1 -0
- package/dist/esm/components/Dashboard/TableComponent.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/TableComponent.js +5 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +57 -7
- package/dist/esm/components/QuillSelect.d.ts.map +1 -1
- package/dist/esm/components/QuillSelect.js +58 -14
- package/dist/esm/components/QuillSelectWithCombo.js +6 -6
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts +6 -16
- package/dist/esm/components/ReportBuilder/AddColumnModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnModal.js +173 -76
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -5
- package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddSortPopover.js +2 -9
- package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts +17 -0
- package/dist/esm/components/ReportBuilder/DraggableColumns.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/DraggableColumns.js +46 -0
- package/dist/esm/components/ReportBuilder/DraggableItem.d.ts +17 -0
- package/dist/esm/components/ReportBuilder/DraggableItem.d.ts.map +1 -0
- package/dist/esm/components/ReportBuilder/DraggableItem.js +14 -0
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts +6 -12
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +29 -20
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts +8 -17
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterStack.js +21 -87
- package/dist/esm/components/ReportBuilder/convert.js +6 -6
- package/dist/esm/components/ReportBuilder/ui.d.ts +8 -9
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +33 -11
- package/dist/esm/components/ReportBuilder/util.d.ts +2 -5
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +1 -1
- package/dist/esm/components/UiComponents.d.ts +3 -2
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +13 -13
- package/dist/esm/hooks/useAskQuill.d.ts +1 -1
- package/dist/esm/hooks/useAskQuill.d.ts.map +1 -1
- package/dist/esm/hooks/useAskQuill.js +14 -12
- package/dist/esm/hooks/useDashboard.d.ts +5 -3
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +8 -6
- package/dist/esm/hooks/useOnClickOutside.d.ts +1 -0
- package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
- package/dist/esm/hooks/useOnClickOutside.js +31 -0
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotForm.js +23 -16
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +7 -5
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +101 -49
- package/dist/esm/models/Client.d.ts +4 -0
- package/dist/esm/models/Client.d.ts.map +1 -1
- package/dist/esm/models/Dashboard.d.ts +1 -0
- package/dist/esm/models/Dashboard.d.ts.map +1 -1
- package/dist/esm/models/Report.d.ts +2 -0
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/models/ReportBuilder.d.ts +46 -0
- package/dist/esm/models/ReportBuilder.d.ts.map +1 -0
- package/dist/esm/models/ReportBuilder.js +16 -0
- package/dist/esm/models/Tables.d.ts +5 -5
- package/dist/esm/models/Tables.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +4 -0
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +300 -97
- package/dist/esm/utils/astProcessing.d.ts +14 -4
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +38 -5
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +18 -3
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +4 -3
- package/dist/esm/utils/filterProcessing.d.ts +2 -11
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +4 -15
- package/dist/esm/utils/pivotConstructor.d.ts +2 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +4 -2
- package/dist/esm/utils/pivotProcessing.d.ts +17 -7
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +58 -49
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +15 -2
- package/dist/esm/utils/report.d.ts +12 -9
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +116 -46
- package/dist/esm/utils/reportBuilder.d.ts +88 -0
- package/dist/esm/utils/reportBuilder.d.ts.map +1 -0
- package/dist/esm/utils/reportBuilder.js +386 -0
- package/dist/esm/utils/schema.d.ts +7 -0
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +34 -1
- package/dist/esm/utils/tableProcessing.d.ts +59 -29
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +71 -86
- package/dist/esm/utils/ui.d.ts +2 -0
- package/dist/esm/utils/ui.d.ts.map +1 -0
- package/dist/esm/utils/ui.js +14 -0
- package/package.json +1 -1
|
@@ -54,10 +54,20 @@ export declare const createBasicSelectASTFromColumns: (columns: ColumnInternal[]
|
|
|
54
54
|
orderby: null;
|
|
55
55
|
limit: null;
|
|
56
56
|
};
|
|
57
|
-
export declare const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
export declare const createSelectStarFromAst: (ast: any) => any;
|
|
58
|
+
export declare const fetchAndProcessASTFromPrompt: ({ aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName, tenants, }: {
|
|
59
|
+
aiPrompt: string;
|
|
60
|
+
schema: Table[];
|
|
61
|
+
client: QuillProviderClient;
|
|
62
|
+
prevPivot?: Pivot;
|
|
63
|
+
currentQuery?: string;
|
|
64
|
+
prevTable?: string;
|
|
65
|
+
dashboardName: string;
|
|
66
|
+
tenants?: {
|
|
67
|
+
tenantField: string;
|
|
68
|
+
tenantIds: (string | number)[];
|
|
69
|
+
}[] | (string | number)[];
|
|
70
|
+
}) => Promise<{
|
|
61
71
|
ast: any;
|
|
62
72
|
pivot: Pivot | null | undefined;
|
|
63
73
|
whereAST: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"astProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/astProcessing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getTableNames } from '../components/ReportBuilder/ast';
|
|
2
2
|
import { convertBigQuery, convertGroupBy, convertOrderBy, convertRemoveSimpleParentheses, convertStringComparison, convertUnaryToBinary, convertWildcardColumns, } from '../components/ReportBuilder/convert';
|
|
3
3
|
import { deepCopy, removeNonSelectedTableReferences, removeTableNameAlias, } from '../components/ReportBuilder/util';
|
|
4
|
-
import { getFieldFromExpression } from './astFilterProcessing';
|
|
4
|
+
import { astToFilterTree, filterTreeToAst, getFieldFromExpression, } from './astFilterProcessing';
|
|
5
5
|
import { QUILL_SERVER } from './constants';
|
|
6
|
-
import {
|
|
6
|
+
import { getUniqueStringValuesByColumn } from './tableProcessing';
|
|
7
7
|
export function getSelectFromAST(ast) {
|
|
8
8
|
if (Array.isArray(ast)) {
|
|
9
9
|
return ast[0];
|
|
@@ -171,6 +171,9 @@ export function getColumnAndTableInfo(tableAliasMap, column, schemaInfo) {
|
|
|
171
171
|
return { tableName, columnName };
|
|
172
172
|
}
|
|
173
173
|
export function getColumnsByTableFromASTAndSchema(ast, tables, tableAliasMap, skipStar = false) {
|
|
174
|
+
if (!ast || !ast.columns) {
|
|
175
|
+
return {};
|
|
176
|
+
}
|
|
174
177
|
const referencedColumns = {};
|
|
175
178
|
if (!skipStar &&
|
|
176
179
|
(ast?.columns === '*' || ast?.columns?.[0]?.expr?.column === '*')) {
|
|
@@ -345,8 +348,23 @@ export const createBasicSelectASTFromColumns = (columns, tableName) => {
|
|
|
345
348
|
limit: null,
|
|
346
349
|
};
|
|
347
350
|
};
|
|
351
|
+
export const createSelectStarFromAst = (ast) => {
|
|
352
|
+
return {
|
|
353
|
+
...ast,
|
|
354
|
+
columns: [
|
|
355
|
+
{
|
|
356
|
+
expr: {
|
|
357
|
+
type: 'column_ref',
|
|
358
|
+
table: null,
|
|
359
|
+
column: '*',
|
|
360
|
+
},
|
|
361
|
+
as: null,
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
};
|
|
365
|
+
};
|
|
348
366
|
//TODO: Move all fetches to a /sdk route
|
|
349
|
-
export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName, tenants) => {
|
|
367
|
+
export const fetchAndProcessASTFromPrompt = async ({ aiPrompt, schema, client, prevPivot, currentQuery, prevTable, dashboardName, tenants, }) => {
|
|
350
368
|
let res, data, ast, newAst, pivot;
|
|
351
369
|
let numRetries = 0;
|
|
352
370
|
let whereAST;
|
|
@@ -411,13 +429,28 @@ export const fetchAndProcessASTFromPrompt = async (aiPrompt, schema, client, pre
|
|
|
411
429
|
if (!tableInfo) {
|
|
412
430
|
throw new Error('Table info not found');
|
|
413
431
|
}
|
|
414
|
-
const uniqueValues = await
|
|
432
|
+
const uniqueValues = await getUniqueStringValuesByColumn({
|
|
433
|
+
columns: tableInfo.columns,
|
|
434
|
+
tableName: processedName,
|
|
435
|
+
client,
|
|
436
|
+
tenants,
|
|
437
|
+
dashboardName,
|
|
438
|
+
});
|
|
415
439
|
newAst = convertUnaryToBinary(newAst);
|
|
416
440
|
newAst = removeNonSelectedTableReferences(newAst, processedName, tableInfo.columns.map((col) => col.field), uniqueValues);
|
|
417
441
|
if (pivot) {
|
|
418
442
|
newAst = deepCopy({ ...newAst, orderby: null, limit: null });
|
|
419
443
|
}
|
|
420
444
|
whereAST = deepCopy(newAst.where);
|
|
445
|
+
const _columns = schema.find((_table) => {
|
|
446
|
+
return _table.name === table;
|
|
447
|
+
})?.columns;
|
|
448
|
+
// parse the whereAst first
|
|
449
|
+
const filterTree = astToFilterTree(whereAST, client.databaseType?.toLowerCase() || 'postgresql', _columns);
|
|
450
|
+
const cleanAst = filterTree
|
|
451
|
+
? filterTreeToAst(filterTree, client.databaseType?.toLowerCase() || 'postgresql')
|
|
452
|
+
: null;
|
|
453
|
+
whereAST = cleanAst;
|
|
421
454
|
}
|
|
422
455
|
catch (e) {
|
|
423
456
|
console.log(e);
|
|
@@ -437,7 +470,7 @@ export const fetchASTFromQuillReport = async (report, client, schema) => {
|
|
|
437
470
|
let groupByPivot = null;
|
|
438
471
|
let schemaInfo = [];
|
|
439
472
|
try {
|
|
440
|
-
if (!report
|
|
473
|
+
if (!report) {
|
|
441
474
|
throw new Error('Report not found');
|
|
442
475
|
}
|
|
443
476
|
const url = `${QUILL_SERVER}/astify`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAOzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB/C;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,IAAI,EACJ,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACf,EAAE;IACD,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,GAAG,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,YAAY,CAAC,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/utils/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAOzD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB/C;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,IAAI,EACJ,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACf,EAAE;IACD,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,GAAG,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,YAAY,CAAC,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsL/B;AA2ID,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EACJ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,CA6Bd"}
|
|
@@ -69,7 +69,15 @@ export async function cleanDashboardItem({ item, dashboardFilters, client, dateB
|
|
|
69
69
|
return { ...col, label: snakeAndCamelCaseToTitleCase(col.label) };
|
|
70
70
|
});
|
|
71
71
|
const columnInternal = (item.includeCustomFields ? columnsWithCustomFields : item.columns).map((col) => {
|
|
72
|
-
|
|
72
|
+
const field = item.fields?.find((f) => f.name === col.field);
|
|
73
|
+
const converted_field = convertPostgresColumn(field ?? {});
|
|
74
|
+
return {
|
|
75
|
+
fieldType: converted_field.fieldType,
|
|
76
|
+
dataTypeID: converted_field.dataTypeID,
|
|
77
|
+
jsType: converted_field.jsType,
|
|
78
|
+
...col,
|
|
79
|
+
label: snakeAndCamelCaseToTitleCase(col.label),
|
|
80
|
+
};
|
|
73
81
|
});
|
|
74
82
|
let pivotTable;
|
|
75
83
|
let pivotError;
|
|
@@ -113,10 +121,16 @@ export async function cleanDashboardItem({ item, dashboardFilters, client, dateB
|
|
|
113
121
|
if (item.referenceLines) {
|
|
114
122
|
for (const referenceLine of item.referenceLines) {
|
|
115
123
|
if (Array.isArray(referenceLine.query)) {
|
|
116
|
-
referenceLineYValues.push({
|
|
124
|
+
referenceLineYValues.push({
|
|
125
|
+
label: referenceLine.label,
|
|
126
|
+
query: referenceLine.query,
|
|
127
|
+
});
|
|
117
128
|
}
|
|
118
129
|
else if (referenceLine.query === '') {
|
|
119
|
-
referenceLineYValues.push({
|
|
130
|
+
referenceLineYValues.push({
|
|
131
|
+
label: referenceLine.label,
|
|
132
|
+
query: (pivotTable?.rows ? pivotTable.rows : item.rows).map((row) => Number(row[referenceLine.label]) || 0),
|
|
133
|
+
});
|
|
120
134
|
}
|
|
121
135
|
}
|
|
122
136
|
}
|
|
@@ -124,6 +138,7 @@ export async function cleanDashboardItem({ item, dashboardFilters, client, dateB
|
|
|
124
138
|
id: item._id ?? item.id,
|
|
125
139
|
name: item.name,
|
|
126
140
|
dashboardName: item.dashboardName,
|
|
141
|
+
section: item.section,
|
|
127
142
|
rows: item.rows,
|
|
128
143
|
pivotRows: pivotTable ? pivotTable.rows : undefined,
|
|
129
144
|
pivotColumns: pivotTable ? pivotTable.columns : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAgFvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"dataFetcher.d.ts","sourceRoot":"","sources":["../../../src/utils/dataFetcher.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAgFvD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,GAAG,EACtB,gBAAgB,EAAE,GAAG,EACrB,MAAM,SAAS,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,WAAW,gBAgL1B;AAED,wBAAgB,aAAa;+BAGjB,mBAAmB,sBACP,MAAM,oBACR,GAAG,iCAEP,WAAW;EAoC5B;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,GAAG,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}
|
|
@@ -83,11 +83,12 @@ export async function getData(client, cloudQueryEndpoint, noCred, hostedRequestB
|
|
|
83
83
|
signal: abortSignal,
|
|
84
84
|
});
|
|
85
85
|
const responseJson = await resp.json();
|
|
86
|
-
if (responseJson.status === 'error' &&
|
|
87
|
-
['query', 'patterns', 'item'].includes(hostedRequestBody.metadata.task)) {
|
|
86
|
+
if ((responseJson.status === 'error' || responseJson.data.error) &&
|
|
87
|
+
['query', 'patterns', 'item', 'report'].includes(hostedRequestBody.metadata.task)) {
|
|
88
88
|
const brokenReport = { ...responseJson };
|
|
89
89
|
let errorPrefix = 'Error: ';
|
|
90
|
-
let errorMessage = 'Failed to fetch report: ' +
|
|
90
|
+
let errorMessage = 'Failed to fetch report: ' +
|
|
91
|
+
(responseJson.error || responseJson.data.error);
|
|
91
92
|
if (hostedRequestBody.metadata.task === 'query' ||
|
|
92
93
|
hostedRequestBody.metadata.task === 'patterns') {
|
|
93
94
|
errorPrefix = responseJson.error?.includes('Query Parsing Error')
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FieldType, InternalFilter, DashboardDateFilter, Filter, DashboardFilter } from '../models/Filter';
|
|
2
2
|
import { QuillReport } from '../models/Report';
|
|
3
3
|
import { FilterTreeNode } from './astFilterProcessing';
|
|
4
|
+
import { ReportBuilderState } from '../models/ReportBuilder';
|
|
4
5
|
export declare function findAndProcessDateFilter(filters: any[]): any;
|
|
5
6
|
export declare function processFilterFromBackend(filter: any): any;
|
|
6
7
|
export declare function updateFilter(filter: any, value: any | undefined, comparison: any | undefined, dashboardName: string): any;
|
|
@@ -21,7 +22,7 @@ export declare function filterStackToFilterTree(stack: any[]): FilterTreeNode |
|
|
|
21
22
|
/**
|
|
22
23
|
* This function uses the baseAst and forms a SQL query using the a filters array
|
|
23
24
|
*/
|
|
24
|
-
export declare function buildQueryFromFilters(
|
|
25
|
+
export declare function buildQueryFromFilters(reportBuilderState: ReportBuilderState, filters: FilterTreeNode[], endpoint: string, client: any): Promise<{
|
|
25
26
|
success: boolean;
|
|
26
27
|
query?: string;
|
|
27
28
|
error?: string;
|
|
@@ -29,16 +30,6 @@ export declare function buildQueryFromFilters(baseAst: any, filters: FilterTreeN
|
|
|
29
30
|
export declare function applyCustomFilterToDashDateFilter(customDateFilter: Filter, dashboardDateFilter: DashboardDateFilter): DashboardDateFilter;
|
|
30
31
|
export declare function mergeCustomFilters(filters: DashboardFilter[], customFilters: InternalFilter[]): any[];
|
|
31
32
|
export declare function filtersAreEquivalent(filters1?: InternalFilter[], filters2?: InternalFilter[]): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Helper function that converts a UniqueValuesByColumn interface to a string map
|
|
34
|
-
*/
|
|
35
|
-
export declare function uniqueValuesToStringMap(uniqueValues: {
|
|
36
|
-
[column: string]: {
|
|
37
|
-
[value: string]: boolean;
|
|
38
|
-
};
|
|
39
|
-
}): {
|
|
40
|
-
[key: string]: string[];
|
|
41
|
-
};
|
|
42
33
|
export declare const createDefaultDateFilter: (filter: DashboardDateFilter, reports: QuillReport[], dashboardName: string) => (DashboardDateFilter & {
|
|
43
34
|
dateField: string[];
|
|
44
35
|
}) | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"filterProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/filterProcessing.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,SAAS,EACT,cAAc,EAGd,mBAAmB,EACnB,MAAM,EAEN,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAoB5D;AAMD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,OAkBnD;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,YAAO,EACjB,UAAU,EAAE,GAAG,YAAO,EACtB,aAAa,EAAE,MAAM,OAmGtB;AAGD,eAAO,MAAM,OAAO,MAAO,MAAM,cA0DhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwB7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,cAAc,EAAE,CAoCrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,yBAgCnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC/D;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,mBAAmB,GACvC,mBAAmB,CAkKrB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,cAAc,EAAE,GAC9B,GAAG,EAAE,CA+CP;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,EAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,OAAO,CA+BT;AAED,eAAO,MAAM,uBAAuB,WAC1B,mBAAmB,WAClB,WAAW,EAAE,iBACP,MAAM,KACpB,CAAC,mBAAmB,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GAAG,SAqDpD,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { COMPARISON_RANGE, PRIMARY_RANGE, defaultOptionsV2, getRangeFromPresetOp
|
|
|
3
3
|
import { DateOperator, FieldType, InternalFilterType, DashboardFilterType, TimeUnit, FilterType, } from '../models/Filter';
|
|
4
4
|
import { filterTreeToAst } from './astFilterProcessing';
|
|
5
5
|
import { snakeAndCamelCaseToTitleCase } from './textProcessing';
|
|
6
|
+
import { reportBuilderStateToAst } from './reportBuilder';
|
|
6
7
|
export function findAndProcessDateFilter(filters) {
|
|
7
8
|
let dateFilter = filters.find((filter) => filter.filterType === 'date_range');
|
|
8
9
|
if (dateFilter) {
|
|
@@ -306,13 +307,14 @@ export function filterStackToFilterTree(stack) {
|
|
|
306
307
|
/**
|
|
307
308
|
* This function uses the baseAst and forms a SQL query using the a filters array
|
|
308
309
|
*/
|
|
309
|
-
export async function buildQueryFromFilters(
|
|
310
|
+
export async function buildQueryFromFilters(reportBuilderState, filters, endpoint, client) {
|
|
310
311
|
const subTree = filterStackToFilterTree(filters);
|
|
311
312
|
let whereNode = null;
|
|
312
313
|
if (subTree) {
|
|
313
314
|
whereNode = filterTreeToAst(subTree, client.databaseType.toLowerCase());
|
|
314
315
|
}
|
|
315
|
-
const
|
|
316
|
+
const ast = reportBuilderStateToAst({ ...reportBuilderState, filterStack: filters }, client.databaseType.toLowerCase());
|
|
317
|
+
const queryAst = { ...ast, where: whereNode };
|
|
316
318
|
try {
|
|
317
319
|
const response = await fetch(`${endpoint}/sqlify`, {
|
|
318
320
|
method: 'POST',
|
|
@@ -539,19 +541,6 @@ export function filtersAreEquivalent(filters1, filters2) {
|
|
|
539
541
|
}
|
|
540
542
|
return true;
|
|
541
543
|
}
|
|
542
|
-
/**
|
|
543
|
-
* Helper function that converts a UniqueValuesByColumn interface to a string map
|
|
544
|
-
*/
|
|
545
|
-
export function uniqueValuesToStringMap(uniqueValues) {
|
|
546
|
-
const fieldValues = {};
|
|
547
|
-
for (const field of Object.keys(uniqueValues)) {
|
|
548
|
-
fieldValues[field] = [];
|
|
549
|
-
for (const value of Object.keys(uniqueValues[field] ?? {})) {
|
|
550
|
-
fieldValues[field].push(value);
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
return fieldValues;
|
|
554
|
-
}
|
|
555
544
|
export const createDefaultDateFilter = (filter, reports, dashboardName) => {
|
|
556
545
|
const comparisonRangeStart = getComparisonRange(filter, 'startDate');
|
|
557
546
|
const comparisonRangeEnd = getComparisonRange(filter, 'endDate');
|
|
@@ -2,7 +2,7 @@ import { QuillProviderClient } from '../models/Client';
|
|
|
2
2
|
import { Pivot, PivotData } from '../models/Pivot';
|
|
3
3
|
import { QuillReportInternal } from '../models/Report';
|
|
4
4
|
import { AdditionalProcessing } from './tableProcessing';
|
|
5
|
-
export declare function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount, }: {
|
|
5
|
+
export declare function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount, caller, }: {
|
|
6
6
|
pivot: Pivot;
|
|
7
7
|
report?: QuillReportInternal;
|
|
8
8
|
client: QuillProviderClient;
|
|
@@ -18,6 +18,7 @@ export declare function generatePivotWithSQL({ pivot, report, client, dateBucket
|
|
|
18
18
|
pivotQuery?: string;
|
|
19
19
|
comparisonPivotQuery?: string;
|
|
20
20
|
getPivotRowCount?: boolean;
|
|
21
|
+
caller?: string;
|
|
21
22
|
}): Promise<PivotData>;
|
|
22
23
|
export declare function disambiguatedValueField(pivot: Pivot): string | undefined;
|
|
23
24
|
//# sourceMappingURL=pivotConstructor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,
|
|
1
|
+
{"version":3,"file":"pivotConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotConstructor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,gBAAuB,EACvB,MAAM,GACP,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;KAAE,EAAE,GACzD,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyWrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,sBAYnD"}
|
|
@@ -7,7 +7,7 @@ import { getComparisonInterval } from './dates';
|
|
|
7
7
|
import { mergeComparisonPivotColumns, mergeComparisonPivotRows } from './merge';
|
|
8
8
|
import { additionalProcessingOnPivotQuery, generatePivotQuery, generateRowCountQuery, } from './queryConstructor';
|
|
9
9
|
import { matchCasing, snakeCaseToTitleCase } from './textProcessing';
|
|
10
|
-
export async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount = true, }) {
|
|
10
|
+
export async function generatePivotWithSQL({ pivot, report, client, dateBucket, dateFilter, distinctStrings, dashboardName, tenants, additionalProcessing, pivotQuery, comparisonPivotQuery, getPivotRowCount = true, caller, }) {
|
|
11
11
|
let sqlQuery = pivotQuery;
|
|
12
12
|
let comparisonPivotSql = comparisonPivotQuery;
|
|
13
13
|
const databaseType = client.databaseType || 'postgresql';
|
|
@@ -72,7 +72,9 @@ export async function generatePivotWithSQL({ pivot, report, client, dateBucket,
|
|
|
72
72
|
? additionalProcessingOnPivotQuery(pivot, comparisonPivotSql, additionalProcessing, client.databaseType)
|
|
73
73
|
: '';
|
|
74
74
|
const preQueries = [paginatedSqlQuery];
|
|
75
|
-
getPivotRowCount =
|
|
75
|
+
getPivotRowCount =
|
|
76
|
+
getPivotRowCount &&
|
|
77
|
+
(report?.chartType === 'table' || caller === 'ReportBuilder');
|
|
76
78
|
if (getPivotRowCount) {
|
|
77
79
|
const pivotRowCountQuery = generateRowCountQuery(sqlQuery, client.databaseType);
|
|
78
80
|
preQueries.push(pivotRowCountQuery);
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
+
import { AxisFormat } from '../Dashboard';
|
|
1
2
|
import { ColumnInternal } from '../models/Columns';
|
|
2
|
-
import { Pivot } from '../models/Pivot';
|
|
3
|
-
|
|
3
|
+
import { Pivot, PivotData } from '../models/Pivot';
|
|
4
|
+
import { QuillReportInternal } from '../models/Report';
|
|
5
|
+
import { UniqueValuesByColumn } from '../models/Tables';
|
|
4
6
|
export declare function isValidPivot(pivot: Pivot): {
|
|
5
7
|
valid: boolean;
|
|
6
8
|
reason: string;
|
|
7
9
|
};
|
|
8
|
-
export declare function getPossiblePivotFieldOptions(columns: ColumnInternal[], uniqueValues: {
|
|
9
|
-
[column: string]: {
|
|
10
|
-
[value: string]: boolean;
|
|
11
|
-
};
|
|
12
|
-
}): {
|
|
10
|
+
export declare function getPossiblePivotFieldOptions(columns: ColumnInternal[], uniqueValues: UniqueValuesByColumn): {
|
|
13
11
|
rowFields: string[];
|
|
14
12
|
columnFields: string[];
|
|
15
13
|
valueFields: string[];
|
|
@@ -20,4 +18,16 @@ export declare function cleanPivot(pivot: Pivot, possibleColumns: {
|
|
|
20
18
|
valueFields: any;
|
|
21
19
|
}): Pivot;
|
|
22
20
|
export declare const isPivotPossible: (fields: any, pivot: Pivot) => boolean;
|
|
21
|
+
export declare const pivotFormData: (pivot: Pivot, columns: ColumnInternal[], report?: QuillReportInternal, formChartType?: string, pivotData?: PivotData) => {
|
|
22
|
+
pivot: Pivot;
|
|
23
|
+
chartType: string;
|
|
24
|
+
xAxisField: string | undefined;
|
|
25
|
+
xAxisFormat: AxisFormat;
|
|
26
|
+
xAxisLabel: string | undefined;
|
|
27
|
+
yAxisFields: {
|
|
28
|
+
field: string;
|
|
29
|
+
label: string;
|
|
30
|
+
format: AxisFormat;
|
|
31
|
+
}[];
|
|
32
|
+
};
|
|
23
33
|
//# sourceMappingURL=pivotProcessing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMxD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuB7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE,oBAAoB;;;;EAyDnC;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE;IACf,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,WAAW,EAAE,GAAG,CAAC;CAClB,GACA,KAAK,CAsCP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC;AAEF,eAAO,MAAM,aAAa,UACjB,KAAK,WACH,cAAc,EAAE,WAChB,mBAAmB,kBACZ,MAAM,cACV,SAAS;;;;;;;;;;;CAuDtB,CAAC"}
|
|
@@ -1,49 +1,9 @@
|
|
|
1
1
|
import { isIdColumn } from '../components/ReportBuilder/util';
|
|
2
|
+
import { isDateField } from '../internals/ReportBuilder/PivotModal';
|
|
3
|
+
import { isDateType, isNumberType } from './columnProcessing';
|
|
2
4
|
import { MAX_PIVOT_UNIQUE_VALUES } from './constants';
|
|
5
|
+
import { disambiguatedValueField } from './pivotConstructor';
|
|
3
6
|
import { DATE_FORMAT_TYPES, NUMBER_FORMAT_TYPES } from './valueFormatter';
|
|
4
|
-
export function pivotToSql(pivot, query, columns) {
|
|
5
|
-
const processedAggType = pivot.aggregationType?.toLowerCase() === 'average'
|
|
6
|
-
? 'avg'
|
|
7
|
-
: pivot.aggregationType?.toLowerCase();
|
|
8
|
-
if ((!pivot.rowField && pivot.valueField && processedAggType) ||
|
|
9
|
-
(!pivot.valueField && pivot.rowField && processedAggType === 'count')) {
|
|
10
|
-
// table aggregation
|
|
11
|
-
return `with
|
|
12
|
-
original_query as (${query})
|
|
13
|
-
SELECT ${processedAggType}(${pivot.valueField ?? pivot.rowField}) FROM original_query`;
|
|
14
|
-
}
|
|
15
|
-
else if (!pivot.columnField &&
|
|
16
|
-
processedAggType &&
|
|
17
|
-
pivot.rowField &&
|
|
18
|
-
pivot.valueField) {
|
|
19
|
-
// 1-d pivot
|
|
20
|
-
return `with
|
|
21
|
-
original_query as (${query})
|
|
22
|
-
SELECT ${pivot.rowField}, ${processedAggType}(${pivot.valueField}) FROM original_query GROUP BY ${pivot.rowField}`;
|
|
23
|
-
}
|
|
24
|
-
else if (pivot.columnField &&
|
|
25
|
-
pivot.rowField &&
|
|
26
|
-
pivot.valueField &&
|
|
27
|
-
processedAggType) {
|
|
28
|
-
// 2-d pivot
|
|
29
|
-
const sqlQuery = generateTwoDPivotQuery(
|
|
30
|
-
// @ts-ignore
|
|
31
|
-
{ ...pivot, aggregationType: processedAggType }, query, columns);
|
|
32
|
-
return sqlQuery;
|
|
33
|
-
}
|
|
34
|
-
return query;
|
|
35
|
-
}
|
|
36
|
-
function generateTwoDPivotQuery(pivot, query, columns) {
|
|
37
|
-
const caseWhens = columns.map((column) => {
|
|
38
|
-
return `${pivot.aggregationType}(
|
|
39
|
-
CASE WHEN ${pivot.columnField} = '${column.field}' THEN ${pivot.valueField} ELSE 0 END
|
|
40
|
-
) AS "${column.field}"`;
|
|
41
|
-
});
|
|
42
|
-
return `WITH
|
|
43
|
-
original_query as (${query})
|
|
44
|
-
SELECT ${pivot.rowField}, ${caseWhens.join(', ')}
|
|
45
|
-
FROM original_query GROUP BY ${pivot.rowField}`;
|
|
46
|
-
}
|
|
47
7
|
export function isValidPivot(pivot) {
|
|
48
8
|
if (!pivot.rowField && !pivot.aggregations?.[0]?.valueField) {
|
|
49
9
|
return {
|
|
@@ -80,14 +40,14 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
|
|
|
80
40
|
// }
|
|
81
41
|
// column fields can be strings
|
|
82
42
|
if (column.jsType === 'string') {
|
|
83
|
-
const possibleValues = uniqueValues
|
|
43
|
+
const possibleValues = uniqueValues?.[column.field] ?? [];
|
|
84
44
|
const isNullValuesOnly = !possibleValues ||
|
|
85
45
|
(Object.keys(possibleValues).length === 1 &&
|
|
86
46
|
Object.keys(possibleValues)[0] === 'null');
|
|
87
47
|
if (!isNullValuesOnly &&
|
|
88
|
-
|
|
48
|
+
possibleValues.length <= MAX_PIVOT_UNIQUE_VALUES &&
|
|
89
49
|
!(Object.keys(possibleValues).length === 1 &&
|
|
90
|
-
possibleValues['EXCEEDS_LIMIT'
|
|
50
|
+
possibleValues[0] === 'EXCEEDS_LIMIT')) {
|
|
91
51
|
columnFields.push(column.field);
|
|
92
52
|
}
|
|
93
53
|
if (!isNullValuesOnly // Used to limit rowFields with max unique values, no more
|
|
@@ -97,7 +57,8 @@ export function getPossiblePivotFieldOptions(columns, uniqueValues) {
|
|
|
97
57
|
}
|
|
98
58
|
// value fields can be numbers or bools
|
|
99
59
|
// TODO: should "format" be used as the indicator, or fieldType?
|
|
100
|
-
if (NUMBER_FORMAT_TYPES.includes(column.format) ||
|
|
60
|
+
if (NUMBER_FORMAT_TYPES.includes(column.format) ||
|
|
61
|
+
column.jsType === 'bool') {
|
|
101
62
|
if (!isIdColumn(column.field)) {
|
|
102
63
|
valueFields.push(column.field);
|
|
103
64
|
}
|
|
@@ -133,10 +94,12 @@ export function cleanPivot(pivot, possibleColumns) {
|
|
|
133
94
|
pivot.columnField = undefined;
|
|
134
95
|
}
|
|
135
96
|
if (pivot.aggregationType) {
|
|
136
|
-
pivot.aggregations = [
|
|
97
|
+
pivot.aggregations = [
|
|
98
|
+
{
|
|
137
99
|
valueField: pivot.valueField,
|
|
138
100
|
aggregationType: pivot.aggregationType,
|
|
139
|
-
}
|
|
101
|
+
},
|
|
102
|
+
];
|
|
140
103
|
}
|
|
141
104
|
return pivot;
|
|
142
105
|
}
|
|
@@ -156,3 +119,49 @@ export const isPivotPossible = (fields, pivot) => {
|
|
|
156
119
|
}
|
|
157
120
|
return validPivot;
|
|
158
121
|
};
|
|
122
|
+
export const pivotFormData = (pivot, columns, report, formChartType, pivotData) => {
|
|
123
|
+
const yAxisField = pivot.columnField ?? disambiguatedValueField(pivot) ?? '';
|
|
124
|
+
const yAxisLabel = report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
125
|
+
? (report.yAxisFields[0]?.label ?? '')
|
|
126
|
+
: (disambiguatedValueField(pivot) ?? '');
|
|
127
|
+
// date labels for pivots should be treated like strings since they are
|
|
128
|
+
const yAxisIsDate = pivot.columnField
|
|
129
|
+
? isDateField(pivot.columnFieldType ?? '')
|
|
130
|
+
: false;
|
|
131
|
+
const chartType = formChartType ?? (pivot.rowField ? 'column' : 'metric');
|
|
132
|
+
const rowColumn = (pivotData?.columns ?? columns).find((col) => col.field === pivot.rowField);
|
|
133
|
+
const xAxisField = pivot.rowField &&
|
|
134
|
+
!(['metric', 'gauge'].includes(chartType) &&
|
|
135
|
+
!NUMBER_FORMAT_TYPES.includes(rowColumn?.format ?? ''))
|
|
136
|
+
? pivot.rowField
|
|
137
|
+
: disambiguatedValueField(pivot);
|
|
138
|
+
const result = {
|
|
139
|
+
pivot,
|
|
140
|
+
chartType: chartType,
|
|
141
|
+
xAxisField,
|
|
142
|
+
xAxisFormat: chartType === 'gauge'
|
|
143
|
+
? 'percent'
|
|
144
|
+
: chartType === 'metric'
|
|
145
|
+
? 'whole_number'
|
|
146
|
+
: isDateType(pivot.rowFieldType ?? '')
|
|
147
|
+
? 'string'
|
|
148
|
+
: isNumberType(pivot.rowFieldType ?? '')
|
|
149
|
+
? 'whole_number'
|
|
150
|
+
: isNumberType(disambiguatedValueField(pivot) ?? '')
|
|
151
|
+
? 'whole_number'
|
|
152
|
+
: 'string',
|
|
153
|
+
xAxisLabel: report?.xAxisLabel || pivot.rowField,
|
|
154
|
+
yAxisFields: [
|
|
155
|
+
{
|
|
156
|
+
field: yAxisField,
|
|
157
|
+
label: yAxisLabel,
|
|
158
|
+
format: yAxisIsDate
|
|
159
|
+
? 'string'
|
|
160
|
+
: report?.yAxisFields && report?.yAxisFields?.length > 0
|
|
161
|
+
? (report?.yAxisFields[0]?.format ?? 'whole_number')
|
|
162
|
+
: (report?.columns.find((col) => col.field === disambiguatedValueField(pivot))?.format ?? 'whole_number'),
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
return result;
|
|
167
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,kBAAkB,CAAC,EAAE,OAAO,EAC5B,iBAAiB,CAAC,EAAE,OAAO,UAkG5B;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAStE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ,UAGrE;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,kBAAkB,CAAC,EAAE,OAAO,EAC5B,iBAAiB,CAAC,EAAE,OAAO,UAkG5B;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAmBD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,UA8B5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,UAYnB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAsBrB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAiBrB;AAgGD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAkBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAkBpB;AA82BD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,YAAY,SAAe,sBAuE5B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,sBAqB1E"}
|
|
@@ -183,12 +183,15 @@ export function generateDistinctQuery(stringFields, query, databaseType) {
|
|
|
183
183
|
switch (databaseType.toLowerCase()) {
|
|
184
184
|
case 'mysql':
|
|
185
185
|
return generateDistinctQueryMySQL(stringFields, query);
|
|
186
|
+
case 'bigquery':
|
|
187
|
+
return generateDistinctQueryBigQuery(stringFields, query);
|
|
186
188
|
case 'postgresql':
|
|
187
189
|
return generateDistinctQueryPostgres(stringFields, query);
|
|
188
190
|
case 'snowflake':
|
|
189
191
|
return generateDistinctQuerySnowflake(stringFields, query);
|
|
190
192
|
case 'mssql':
|
|
191
193
|
return generateDistinctQueryMSSQL(stringFields, query);
|
|
194
|
+
case 'clickhouse': // works with default for now
|
|
192
195
|
default:
|
|
193
196
|
return generateDistinctQueryDefault(stringFields, query, databaseType);
|
|
194
197
|
}
|
|
@@ -210,6 +213,16 @@ function generateDistinctQueryMySQL(stringFields, query) {
|
|
|
210
213
|
const distinctQuery = distinctQueries.join(' UNION ALL ');
|
|
211
214
|
return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
|
|
212
215
|
}
|
|
216
|
+
function generateDistinctQueryBigQuery(stringFields, query) {
|
|
217
|
+
const distinctQueries = stringFields.map((field) => {
|
|
218
|
+
return `
|
|
219
|
+
SELECT '${field}' AS ${processColumnReference('field', 'bigquery')},
|
|
220
|
+
ARRAY_AGG(\`${field}\`) AS ${processColumnReference('string_values', 'bigquery')}
|
|
221
|
+
FROM (SELECT \`${field}\` FROM querytable WHERE \`${field}\` IS NOT NULL GROUP BY \`${field}\`) AS distinct_${replaceSpacesWithUnderscores(field)}`;
|
|
222
|
+
});
|
|
223
|
+
const distinctQuery = distinctQueries.join(' UNION ALL ');
|
|
224
|
+
return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
|
|
225
|
+
}
|
|
213
226
|
function generateDistinctQueryPostgres(stringFields, query) {
|
|
214
227
|
const distinctQueries = stringFields.map((field) => {
|
|
215
228
|
return `SELECT '${field}' AS ${processColumnReference('field', 'postgresql')}, to_json(ARRAY_AGG(DISTINCT "${field}")) AS ${processColumnReference('string_values', 'postgresql')} FROM querytable`;
|
|
@@ -349,7 +362,7 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
349
362
|
...caseWhens,
|
|
350
363
|
...columnFieldValues.map((column) => {
|
|
351
364
|
return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) / GREATEST(sum(${value2Expr}), 1) AS ${processColumnReference(column + disambiguation, databaseType, '_', true)}`;
|
|
352
|
-
})
|
|
365
|
+
}),
|
|
353
366
|
];
|
|
354
367
|
}
|
|
355
368
|
else {
|
|
@@ -358,7 +371,7 @@ function create2DStringPivotQuery(pivot, itemQuery, columnFieldValues, databaseT
|
|
|
358
371
|
...caseWhens,
|
|
359
372
|
...columnFieldValues.map((column) => {
|
|
360
373
|
return `sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) / GREATEST(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${value2Expr} END), 1) AS ${processColumnReference(column + disambiguation, databaseType, '_', true)}`;
|
|
361
|
-
})
|
|
374
|
+
}),
|
|
362
375
|
];
|
|
363
376
|
}
|
|
364
377
|
}
|