@quillsql/react 2.13.26 → 2.13.28
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 +20 -2
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +130 -36
- package/dist/cjs/ChartEditor.d.ts +5 -3
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +4 -5
- package/dist/cjs/Context.d.ts +15 -4
- package/dist/cjs/Context.d.ts.map +1 -1
- package/dist/cjs/Context.js +37 -60
- package/dist/cjs/Dashboard.d.ts +4 -0
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +78 -23
- package/dist/cjs/QuillProvider.d.ts +12 -9
- package/dist/cjs/QuillProvider.d.ts.map +1 -1
- package/dist/cjs/QuillProvider.js +2 -2
- package/dist/cjs/ReportBuilder.d.ts +9 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +198 -80
- package/dist/cjs/SQLEditor.d.ts +5 -1
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +81 -18
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/Table.js +5 -4
- package/dist/cjs/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/InternalChart.js +106 -27
- package/dist/cjs/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/cjs/components/Chart/PieChart.js +10 -7
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts +3 -2
- package/dist/cjs/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DashboardFilter.js +65 -65
- package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/DataLoader.js +81 -34
- package/dist/cjs/components/Dashboard/MetricComponent.js +3 -3
- package/dist/cjs/components/Dashboard/util.d.ts.map +1 -1
- package/dist/cjs/components/Dashboard/util.js +6 -2
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/cjs/components/QuillMultiSelectWithCombo.js +17 -18
- package/dist/cjs/components/QuillTable.d.ts.map +1 -1
- package/dist/cjs/components/QuillTable.js +9 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterModal.js +25 -3
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/FilterStack.js +2 -2
- package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +54 -4
- package/dist/cjs/components/ReportBuilder/ui.d.ts +2 -1
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +3 -2
- package/dist/cjs/components/UiComponents.d.ts +1 -0
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- 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 +6 -5
- package/dist/cjs/hooks/useAstToFilterTree.d.ts +2 -1
- package/dist/cjs/hooks/useAstToFilterTree.d.ts.map +1 -1
- package/dist/cjs/hooks/useAstToFilterTree.js +3 -3
- package/dist/cjs/hooks/useDashboard.d.ts +5 -2
- package/dist/cjs/hooks/useDashboard.d.ts.map +1 -1
- package/dist/cjs/hooks/useDashboard.js +21 -7
- package/dist/cjs/hooks/useExport.d.ts.map +1 -1
- package/dist/cjs/hooks/useExport.js +6 -4
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +8 -2
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +59 -30
- package/dist/cjs/models/Client.d.ts +22 -3
- 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 +4 -0
- package/dist/cjs/models/Report.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.d.ts +3 -2
- package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astFilterProcessing.js +3323 -977
- package/dist/cjs/utils/astProcessing.d.ts +1 -1
- package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/astProcessing.js +3 -2
- package/dist/cjs/utils/client.d.ts +4 -2
- package/dist/cjs/utils/client.d.ts.map +1 -1
- package/dist/cjs/utils/client.js +47 -1
- package/dist/cjs/utils/columnProcessing.d.ts +3 -0
- package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/columnProcessing.js +34 -1
- package/dist/cjs/utils/dashboard.d.ts +4 -3
- package/dist/cjs/utils/dashboard.d.ts.map +1 -1
- package/dist/cjs/utils/dashboard.js +10 -91
- package/dist/cjs/utils/dataFetcher.d.ts +3 -1
- package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
- package/dist/cjs/utils/dataFetcher.js +66 -30
- package/dist/cjs/utils/filterProcessing.d.ts +1 -1
- package/dist/cjs/utils/filterProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/filterProcessing.js +2 -0
- package/dist/cjs/utils/pivotConstructor.d.ts +4 -1
- package/dist/cjs/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/pivotConstructor.js +7 -7
- package/dist/cjs/utils/pivotProcessing.d.ts +4 -1
- package/dist/cjs/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/pivotProcessing.js +27 -20
- package/dist/cjs/utils/queryConstructor.d.ts.map +1 -1
- package/dist/cjs/utils/queryConstructor.js +101 -85
- package/dist/cjs/utils/report.d.ts +17 -5
- package/dist/cjs/utils/report.d.ts.map +1 -1
- package/dist/cjs/utils/report.js +23 -23
- package/dist/cjs/utils/schema.d.ts.map +1 -1
- package/dist/cjs/utils/schema.js +21 -21
- package/dist/cjs/utils/tableProcessing.d.ts +37 -10
- package/dist/cjs/utils/tableProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/tableProcessing.js +45 -38
- package/dist/cjs/utils/tenants.d.ts +11 -0
- package/dist/cjs/utils/tenants.d.ts.map +1 -0
- package/dist/cjs/utils/tenants.js +13 -0
- package/dist/cjs/utils/textProcessing.d.ts +1 -0
- package/dist/cjs/utils/textProcessing.d.ts.map +1 -1
- package/dist/cjs/utils/textProcessing.js +49 -0
- package/dist/cjs/utils/validation.js +1 -1
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/Chart.js +2 -2
- package/dist/esm/ChartBuilder.d.ts +20 -2
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +131 -40
- package/dist/esm/ChartEditor.d.ts +5 -3
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +5 -6
- package/dist/esm/Context.d.ts +15 -4
- package/dist/esm/Context.d.ts.map +1 -1
- package/dist/esm/Context.js +36 -59
- package/dist/esm/Dashboard.d.ts +4 -0
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +79 -24
- package/dist/esm/QuillProvider.d.ts +12 -9
- package/dist/esm/QuillProvider.d.ts.map +1 -1
- package/dist/esm/QuillProvider.js +2 -2
- package/dist/esm/ReportBuilder.d.ts +9 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +200 -84
- package/dist/esm/SQLEditor.d.ts +5 -1
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +80 -17
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/Table.js +6 -5
- package/dist/esm/components/Chart/InternalChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/InternalChart.js +107 -28
- package/dist/esm/components/Chart/PieChart.d.ts.map +1 -1
- package/dist/esm/components/Chart/PieChart.js +10 -7
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts +3 -2
- package/dist/esm/components/Dashboard/DashboardFilter.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DashboardFilter.js +65 -65
- package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/DataLoader.js +82 -35
- package/dist/esm/components/Dashboard/MetricComponent.js +3 -3
- package/dist/esm/components/Dashboard/util.d.ts.map +1 -1
- package/dist/esm/components/Dashboard/util.js +6 -2
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -1
- package/dist/esm/components/QuillMultiSelectWithCombo.js +17 -18
- package/dist/esm/components/QuillTable.d.ts.map +1 -1
- package/dist/esm/components/QuillTable.js +9 -1
- package/dist/esm/components/ReportBuilder/FilterModal.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterModal.js +26 -4
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/FilterStack.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/FilterStack.js +2 -2
- package/dist/esm/components/ReportBuilder/convert.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +54 -5
- package/dist/esm/components/ReportBuilder/ui.d.ts +2 -1
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +4 -3
- package/dist/esm/components/UiComponents.d.ts +1 -0
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- 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 +7 -6
- package/dist/esm/hooks/useAstToFilterTree.d.ts +2 -1
- package/dist/esm/hooks/useAstToFilterTree.d.ts.map +1 -1
- package/dist/esm/hooks/useAstToFilterTree.js +3 -3
- package/dist/esm/hooks/useDashboard.d.ts +5 -2
- package/dist/esm/hooks/useDashboard.d.ts.map +1 -1
- package/dist/esm/hooks/useDashboard.js +21 -7
- package/dist/esm/hooks/useExport.d.ts.map +1 -1
- package/dist/esm/hooks/useExport.js +7 -5
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +8 -2
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +59 -30
- package/dist/esm/models/Client.d.ts +22 -3
- 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 +4 -0
- package/dist/esm/models/Report.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.d.ts +3 -2
- package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astFilterProcessing.js +3323 -977
- package/dist/esm/utils/astProcessing.d.ts +1 -1
- package/dist/esm/utils/astProcessing.d.ts.map +1 -1
- package/dist/esm/utils/astProcessing.js +4 -3
- package/dist/esm/utils/client.d.ts +4 -2
- package/dist/esm/utils/client.d.ts.map +1 -1
- package/dist/esm/utils/client.js +47 -1
- package/dist/esm/utils/columnProcessing.d.ts +3 -0
- package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
- package/dist/esm/utils/columnProcessing.js +31 -1
- package/dist/esm/utils/dashboard.d.ts +4 -3
- package/dist/esm/utils/dashboard.d.ts.map +1 -1
- package/dist/esm/utils/dashboard.js +10 -90
- package/dist/esm/utils/dataFetcher.d.ts +3 -1
- package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
- package/dist/esm/utils/dataFetcher.js +65 -29
- package/dist/esm/utils/filterProcessing.d.ts +1 -1
- package/dist/esm/utils/filterProcessing.d.ts.map +1 -1
- package/dist/esm/utils/filterProcessing.js +2 -0
- package/dist/esm/utils/pivotConstructor.d.ts +4 -1
- package/dist/esm/utils/pivotConstructor.d.ts.map +1 -1
- package/dist/esm/utils/pivotConstructor.js +8 -8
- package/dist/esm/utils/pivotProcessing.d.ts +4 -1
- package/dist/esm/utils/pivotProcessing.d.ts.map +1 -1
- package/dist/esm/utils/pivotProcessing.js +27 -20
- package/dist/esm/utils/queryConstructor.d.ts.map +1 -1
- package/dist/esm/utils/queryConstructor.js +101 -85
- package/dist/esm/utils/report.d.ts +17 -5
- package/dist/esm/utils/report.d.ts.map +1 -1
- package/dist/esm/utils/report.js +20 -23
- package/dist/esm/utils/schema.d.ts.map +1 -1
- package/dist/esm/utils/schema.js +21 -21
- package/dist/esm/utils/tableProcessing.d.ts +37 -10
- package/dist/esm/utils/tableProcessing.d.ts.map +1 -1
- package/dist/esm/utils/tableProcessing.js +46 -39
- package/dist/esm/utils/tenants.d.ts +11 -0
- package/dist/esm/utils/tenants.d.ts.map +1 -0
- package/dist/esm/utils/tenants.js +9 -0
- package/dist/esm/utils/textProcessing.d.ts +1 -0
- package/dist/esm/utils/textProcessing.d.ts.map +1 -1
- package/dist/esm/utils/textProcessing.js +48 -0
- package/dist/esm/utils/validation.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { ColumnInternal } from '../models/Columns';
|
|
2
2
|
import { Pivot } from '../models/Pivot';
|
|
3
3
|
export declare function pivotToSql(pivot: Pivot, query: string, columns: ColumnInternal[]): string;
|
|
4
|
-
export declare function isValidPivot(pivot: Pivot):
|
|
4
|
+
export declare function isValidPivot(pivot: Pivot): {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
reason: string;
|
|
7
|
+
};
|
|
5
8
|
export declare function getPossiblePivotFieldOptions(columns: ColumnInternal[], uniqueValues: {
|
|
6
9
|
[column: string]: {
|
|
7
10
|
[value: string]: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"pivotProcessing.d.ts","sourceRoot":"","sources":["../../../src/utils/pivotProcessing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAuCR;AAkBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6B7E;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,cAAc,EAAE,EACzB,YAAY,EAAE;IAAE,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAAE;;;;EAsDjE;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,CA8BP;AAED,eAAO,MAAM,eAAe,WAAY,GAAG,SAAS,KAAK,YA8BxD,CAAC"}
|
|
@@ -45,28 +45,35 @@ function generateTwoDPivotQuery(pivot, query, columns) {
|
|
|
45
45
|
FROM original_query GROUP BY ${pivot.rowField}`;
|
|
46
46
|
}
|
|
47
47
|
export function isValidPivot(pivot) {
|
|
48
|
-
if (pivot.rowField && pivot.
|
|
49
|
-
return
|
|
48
|
+
if (!pivot.rowField && !pivot.valueField) {
|
|
49
|
+
return {
|
|
50
|
+
valid: false,
|
|
51
|
+
reason: 'Row field cannot be empty without a value field',
|
|
52
|
+
};
|
|
50
53
|
}
|
|
51
|
-
else if (pivot.rowField &&
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
else if (pivot.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
54
|
+
else if (!pivot.rowField && pivot.columnField) {
|
|
55
|
+
return {
|
|
56
|
+
valid: false,
|
|
57
|
+
reason: 'Row field cannot be empty when column field is present',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
else if (!pivot.aggregationType) {
|
|
61
|
+
return { valid: false, reason: 'Aggregation type cannot be empty' };
|
|
62
|
+
}
|
|
63
|
+
else if (pivot.aggregationType === 'percentage' &&
|
|
64
|
+
(!pivot.valueField2 || !pivot.valueField)) {
|
|
65
|
+
return {
|
|
66
|
+
valid: false,
|
|
67
|
+
reason: 'Percentage aggregation requires two value fields',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
else if (!pivot.valueField && pivot.aggregationType !== 'count') {
|
|
71
|
+
return {
|
|
72
|
+
valid: false,
|
|
73
|
+
reason: 'Value field cannot be empty when aggregation is not "count"',
|
|
74
|
+
};
|
|
68
75
|
}
|
|
69
|
-
return
|
|
76
|
+
return { valid: true, reason: '' };
|
|
70
77
|
}
|
|
71
78
|
export function getPossiblePivotFieldOptions(columns, uniqueValues) {
|
|
72
79
|
const rowFields = [];
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"queryConstructor.d.ts","sourceRoot":"","sources":["../../../src/utils/queryConstructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA0BxC,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EAEvB,uBAAuB,CAAC,EAAE,OAAO,EACjC,sBAAsB,CAAC,EAAE,OAAO,UA+EjC;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAE1D;AAkED,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,UAYrB;AAiDD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,UAgBrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAgCpB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { isStringType } from './columnProcessing';
|
|
1
2
|
import { MAX_PIVOT_UNIQUE_VALUES } from './constants';
|
|
2
3
|
import { isValidPivot } from './pivotProcessing';
|
|
4
|
+
import { matchCasing } from './textProcessing';
|
|
3
5
|
function processSingleQuotes(value, databaseType) {
|
|
4
|
-
if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
|
|
6
|
+
if (['postgresql', 'snowflake', 'clickhouse'].includes(databaseType.toLowerCase())) {
|
|
5
7
|
return value.replaceAll("'", "''");
|
|
6
8
|
}
|
|
7
9
|
return value.replaceAll("'", "\\'");
|
|
@@ -17,70 +19,80 @@ function replaceBigQuerySpecialCharacters(column) {
|
|
|
17
19
|
export function processColumnReference(column, databaseType, fallbackOnNull,
|
|
18
20
|
// for mysql, we only want to use double quotes for pivot column field aliases
|
|
19
21
|
isPivotColumnFieldAlias, isPivotValueFieldAlias) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
switch (databaseType.toLowerCase()) {
|
|
23
|
+
case 'postgresql':
|
|
24
|
+
case 'clickhouse': {
|
|
25
|
+
if (column === '') {
|
|
26
|
+
return fallbackOnNull ? `"${fallbackOnNull}"` : `"_"`;
|
|
27
|
+
}
|
|
28
|
+
if (isPivotColumnFieldAlias) {
|
|
29
|
+
return `"${column.replaceAll('"', '')}"`;
|
|
30
|
+
}
|
|
31
|
+
const columnParts = column.split('.');
|
|
32
|
+
if (columnParts.length > 1) {
|
|
33
|
+
return (`"` +
|
|
34
|
+
columnParts.map((part) => part.replaceAll('"', '')).join('"."') +
|
|
35
|
+
`"`);
|
|
36
|
+
}
|
|
22
37
|
return `"${column.replaceAll('"', '')}"`;
|
|
23
38
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
39
|
+
case 'mysql': {
|
|
40
|
+
if (column === '') {
|
|
41
|
+
return fallbackOnNull ? `${fallbackOnNull}` : '_';
|
|
42
|
+
}
|
|
43
|
+
if (isPivotColumnFieldAlias) {
|
|
44
|
+
return `\`${column.replaceAll(`\``, '').replaceAll(`"`, '')}\``;
|
|
45
|
+
}
|
|
46
|
+
const columnParts = column.split('.');
|
|
47
|
+
if (columnParts.length > 1) {
|
|
48
|
+
return (`\`` +
|
|
49
|
+
columnParts.map((part) => part.replaceAll(`\``, '')).join('`.`') +
|
|
50
|
+
`\``);
|
|
51
|
+
}
|
|
52
|
+
// Wrap MySQL columns in backticks to handle whitespace
|
|
53
|
+
return `\`${column.replaceAll(`\``, '')}\``;
|
|
29
54
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return `${fallbackOnNull}`;
|
|
47
|
-
}
|
|
48
|
-
// Wrap MySQL columns in backticks to handle whitespace
|
|
49
|
-
return `\`${column.replaceAll(`\``, '')}\``;
|
|
50
|
-
}
|
|
51
|
-
if (['snowflake'].includes(databaseType.toLowerCase())) {
|
|
52
|
-
if (isPivotColumnFieldAlias) {
|
|
53
|
-
return `"${column.replaceAll('"', '')}"`;
|
|
55
|
+
case 'snowflake': {
|
|
56
|
+
if (column === '') {
|
|
57
|
+
return fallbackOnNull ? `${fallbackOnNull}` : '_';
|
|
58
|
+
}
|
|
59
|
+
if (isPivotColumnFieldAlias) {
|
|
60
|
+
return `"${column.replaceAll('"', '')}"`;
|
|
61
|
+
}
|
|
62
|
+
if (isPivotValueFieldAlias) {
|
|
63
|
+
const cleanedColumn = column.replaceAll(')', '').replaceAll('(', '_');
|
|
64
|
+
return `${cleanedColumn}`;
|
|
65
|
+
}
|
|
66
|
+
// const columnParts = column.split('.');
|
|
67
|
+
// if (columnParts.length > 1) {
|
|
68
|
+
// return '"' + columnParts.join('"."') + '"';
|
|
69
|
+
// }
|
|
70
|
+
return column;
|
|
54
71
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
72
|
+
case 'bigquery': {
|
|
73
|
+
if (column === '') {
|
|
74
|
+
return fallbackOnNull ? `\`${fallbackOnNull}\`` : '`_`';
|
|
75
|
+
}
|
|
76
|
+
if (isPivotColumnFieldAlias) {
|
|
77
|
+
return `\`${replaceBigQuerySpecialCharacters(column.replaceAll('`', ''))}\``;
|
|
78
|
+
}
|
|
79
|
+
const columnParts = column.split('.');
|
|
80
|
+
if (columnParts.length > 1) {
|
|
81
|
+
return (`\`` +
|
|
82
|
+
columnParts.map((part) => part.replaceAll(`\``, '')).join('`.`') +
|
|
83
|
+
`\``);
|
|
84
|
+
}
|
|
85
|
+
return `\`${replaceBigQuerySpecialCharacters(column.replaceAll('`', ''))}\``;
|
|
58
86
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// return '"' + columnParts.join('"."') + '"';
|
|
62
|
-
// }
|
|
63
|
-
if (column === '' && fallbackOnNull) {
|
|
64
|
-
return `${fallbackOnNull}`;
|
|
65
|
-
}
|
|
66
|
-
return column;
|
|
67
|
-
}
|
|
68
|
-
if (isPivotColumnFieldAlias) {
|
|
69
|
-
return `\`${column.replaceAll('`', '')}\``;
|
|
70
|
-
}
|
|
71
|
-
const columnParts = column.split('.');
|
|
72
|
-
if (columnParts.length > 1) {
|
|
73
|
-
return (`\`` +
|
|
74
|
-
columnParts.map((part) => part.replaceAll(`\``, '')).join('`.`') +
|
|
75
|
-
`\``);
|
|
87
|
+
default:
|
|
88
|
+
return column;
|
|
76
89
|
}
|
|
77
|
-
return `\`${replaceBigQuerySpecialCharacters(column.replaceAll('`', ''))}\``;
|
|
78
90
|
}
|
|
79
91
|
export function replaceSpacesWithUnderscores(column) {
|
|
80
92
|
return column.replaceAll(' ', '_');
|
|
81
93
|
}
|
|
82
94
|
function processInterval(interval, rowField, databaseType) {
|
|
83
|
-
if (['postgresql', 'snowflake'].includes(databaseType.toLowerCase())) {
|
|
95
|
+
if (['postgresql', 'snowflake', 'clickhouse'].includes(databaseType.toLowerCase())) {
|
|
84
96
|
return `(${processColumnReference(rowField, databaseType)} + INTERVAL '${interval}')`;
|
|
85
97
|
}
|
|
86
98
|
else if (databaseType.toLowerCase() === 'mysql') {
|
|
@@ -95,6 +107,12 @@ function processDateTrunc(dateBucket, rowField, databaseType, comparisonInterval
|
|
|
95
107
|
: processColumnReference(rowField, databaseType);
|
|
96
108
|
return `date_trunc('${dateBucket}', ${dateField})`;
|
|
97
109
|
}
|
|
110
|
+
if (['clickhouse'].includes(databaseType.toLowerCase())) {
|
|
111
|
+
const dateField = comparisonInterval
|
|
112
|
+
? processInterval(comparisonInterval, rowField, databaseType)
|
|
113
|
+
: processColumnReference(rowField, databaseType);
|
|
114
|
+
return `dateTrunc('${dateBucket}', ${dateField})`;
|
|
115
|
+
}
|
|
98
116
|
if (['mysql'].includes(databaseType.toLowerCase())) {
|
|
99
117
|
const dateField = comparisonInterval
|
|
100
118
|
? processInterval(comparisonInterval, rowField, databaseType)
|
|
@@ -185,7 +203,7 @@ export function generateMinMaxDateRangeQueries(columnFields, query, databaseType
|
|
|
185
203
|
const max = 'MAX';
|
|
186
204
|
const min = 'MIN';
|
|
187
205
|
const distinctQueries = columnFields.map((field) => {
|
|
188
|
-
const wrappedField = ['postgresql'].includes(databaseType.toLowerCase())
|
|
206
|
+
const wrappedField = ['postgresql', 'clickhouse'].includes(databaseType.toLowerCase())
|
|
189
207
|
? `"${field}"`
|
|
190
208
|
: field;
|
|
191
209
|
return `SELECT '${field}' AS field, ${min}(${wrappedField}) AS min_range, ${max}(${wrappedField}) AS max_range FROM querytable`;
|
|
@@ -194,7 +212,7 @@ export function generateMinMaxDateRangeQueries(columnFields, query, databaseType
|
|
|
194
212
|
return `WITH querytable AS (${query.replace(';', '')}) ` + distinctQuery;
|
|
195
213
|
}
|
|
196
214
|
export function generatePivotQuery(pivot, itemQueries, databaseType, comparisonInterval, distinctStrings, dateBucket, rowLimit) {
|
|
197
|
-
if (!isValidPivot(pivot)) {
|
|
215
|
+
if (!isValidPivot(pivot).valid) {
|
|
198
216
|
return undefined;
|
|
199
217
|
}
|
|
200
218
|
if (pivot.columnField) {
|
|
@@ -212,8 +230,7 @@ function create2DPivotQuery(pivot, itemQueries, databaseType, dateBucket, compar
|
|
|
212
230
|
if (!columnFieldValues) {
|
|
213
231
|
return undefined;
|
|
214
232
|
}
|
|
215
|
-
if (
|
|
216
|
-
!pivot.rowFieldType) {
|
|
233
|
+
if (isStringType(pivot.rowFieldType || '') || !pivot.rowFieldType) {
|
|
217
234
|
return create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databaseType, rowLimit);
|
|
218
235
|
}
|
|
219
236
|
return create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseType, dateBucket, comparisonInterval, rowLimit);
|
|
@@ -226,9 +243,9 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
226
243
|
const valueField = pivot.valueField;
|
|
227
244
|
const columnField = pivot.columnField;
|
|
228
245
|
const rowFieldAlias = processColumnReference(rowField, databaseType, undefined, false, true);
|
|
229
|
-
const valueFieldAlias = processColumnReference(valueField, databaseType, undefined, false, true);
|
|
246
|
+
const valueFieldAlias = processColumnReference(valueField ?? rowField, databaseType, undefined, false, true);
|
|
230
247
|
const columnFieldAlias = processColumnReference(columnField, databaseType, undefined, false, true);
|
|
231
|
-
const max =
|
|
248
|
+
const max = 'GREATEST';
|
|
232
249
|
const valueAliasSubstring = valueField
|
|
233
250
|
? `${processColumnReference(valueField, databaseType, undefined, true)} AS ${valueFieldAlias},`
|
|
234
251
|
: '';
|
|
@@ -250,7 +267,7 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
250
267
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
|
|
251
268
|
: '';
|
|
252
269
|
const compareCaseWhenCTE = itemQueries[1]
|
|
253
|
-
? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}
|
|
270
|
+
? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}${caseWhensCompare.length > 0 ? `, ${caseWhensCompare.join(', ')}` : ''} FROM quill_c_alias GROUP BY ${rowFieldAlias})`
|
|
254
271
|
: '';
|
|
255
272
|
const joinQuery = itemQueries[1]
|
|
256
273
|
? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)} = qt.${rowFieldAlias}`
|
|
@@ -258,7 +275,7 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
258
275
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
259
276
|
quill_alias AS (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
|
|
260
277
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_qt),
|
|
261
|
-
quill_qt_cw AS (SELECT ${rowFieldAlias}
|
|
278
|
+
quill_qt_cw AS (SELECT ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${rowFieldAlias})
|
|
262
279
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
263
280
|
SELECT * FROM quill_qt_cw qt
|
|
264
281
|
${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -277,7 +294,7 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
277
294
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
|
|
278
295
|
: '';
|
|
279
296
|
const compareCaseWhenCTE = itemQueries[1]
|
|
280
|
-
? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}
|
|
297
|
+
? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}${caseWhensCompare.length > 0 ? `, ${caseWhensCompare.join(', ')}` : ''} FROM quill_c_alias GROUP BY ${rowFieldAlias})`
|
|
281
298
|
: '';
|
|
282
299
|
const joinQuery = itemQueries[1]
|
|
283
300
|
? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)} = qt.${rowFieldAlias}`
|
|
@@ -285,7 +302,7 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
285
302
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
286
303
|
quill_alias AS (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring} ${value2AliasSubstring}
|
|
287
304
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_qt),
|
|
288
|
-
quill_qt_cw AS (SELECT ${rowFieldAlias}
|
|
305
|
+
quill_qt_cw AS (SELECT ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${rowFieldAlias})
|
|
289
306
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
290
307
|
SELECT * FROM quill_qt_cw qt
|
|
291
308
|
${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -304,7 +321,7 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
304
321
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
|
|
305
322
|
: '';
|
|
306
323
|
const compareCaseWhenCTE = itemQueries[1]
|
|
307
|
-
? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}
|
|
324
|
+
? `, quill_ct_cw as (SELECT ${rowFieldAlias} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}${caseWhensCompare.length > 0 ? `, ${caseWhensCompare.join(', ')}` : ''} FROM quill_c_alias GROUP BY ${rowFieldAlias})`
|
|
308
325
|
: '';
|
|
309
326
|
const joinQuery = itemQueries[1]
|
|
310
327
|
? `JOIN quill_ct_cw ct ON ct.${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)} = qt.${rowFieldAlias}`
|
|
@@ -312,7 +329,7 @@ function create2DStringPivotQuery(pivot, itemQueries, columnFieldValues, databas
|
|
|
312
329
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
313
330
|
quill_alias AS (SELECT ${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
|
|
314
331
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_qt),
|
|
315
|
-
quill_qt_cw AS (SELECT ${rowFieldAlias}
|
|
332
|
+
quill_qt_cw AS (SELECT ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${rowFieldAlias})
|
|
316
333
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
317
334
|
SELECT * FROM quill_qt_cw qt
|
|
318
335
|
${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -329,7 +346,7 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
329
346
|
const valueAliasSubstring = pivot.valueField
|
|
330
347
|
? `${processColumnReference(pivot.valueField, databaseType, undefined, true)} AS ${valueFieldAlias},`
|
|
331
348
|
: '';
|
|
332
|
-
const max =
|
|
349
|
+
const max = 'GREATEST';
|
|
333
350
|
if (pivot.aggregationType === 'percentage' && pivot.valueField2) {
|
|
334
351
|
const valueField2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
|
|
335
352
|
const value2AliasSubstring = `${processColumnReference(pivot.valueField2, databaseType, undefined, true)} AS ${valueField2Alias},`;
|
|
@@ -349,7 +366,7 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
349
366
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
|
|
350
367
|
: '';
|
|
351
368
|
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
352
|
-
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}
|
|
369
|
+
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}${caseWhensCompare.length > 0 ? `, ${caseWhensCompare.join(', ')}` : ''} FROM quill_c_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
|
|
353
370
|
: '';
|
|
354
371
|
const joinQuery = itemQueries[1] && comparisonInterval
|
|
355
372
|
? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${rowFieldAlias} = ${processDateTrunc(dateBucket, `ct.comparison_${rowFieldAlias}`, databaseType, comparisonInterval)}`
|
|
@@ -357,7 +374,7 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
357
374
|
return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
358
375
|
quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
|
|
359
376
|
${processColumnReference(columnField, databaseType, undefined, true, true)} AS ${columnFieldAlias} FROM quill_query_table),
|
|
360
|
-
quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}
|
|
377
|
+
quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
|
|
361
378
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
362
379
|
SELECT * FROM quill_qt_agg qt
|
|
363
380
|
${joinQuery} ORDER BY qt.${rowFieldAlias}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -376,7 +393,7 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
376
393
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
|
|
377
394
|
: '';
|
|
378
395
|
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
379
|
-
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}
|
|
396
|
+
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}${caseWhensCompare.length > 0 ? `, ${caseWhensCompare.join(', ')}` : ''} FROM quill_c_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
|
|
380
397
|
: '';
|
|
381
398
|
const joinQuery = itemQueries[1] && comparisonInterval
|
|
382
399
|
? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${rowFieldAlias} = ${processDateTrunc(dateBucket, `ct.comparison_${rowFieldAlias}`, databaseType, comparisonInterval)}`
|
|
@@ -384,7 +401,7 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
384
401
|
return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
385
402
|
quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring} ${value2AliasSubstring}
|
|
386
403
|
${processColumnReference(columnField, databaseType, undefined, true, true)} AS ${columnFieldAlias} FROM quill_query_table),
|
|
387
|
-
quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}
|
|
404
|
+
quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
|
|
388
405
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
389
406
|
SELECT * FROM quill_qt_agg qt
|
|
390
407
|
${joinQuery} ORDER BY qt.${rowFieldAlias}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -403,7 +420,7 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
403
420
|
${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias} FROM quill_ct)`
|
|
404
421
|
: '';
|
|
405
422
|
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
406
|
-
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}
|
|
423
|
+
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowField, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)}${caseWhensCompare.length > 0 ? `, ${caseWhensCompare.join(', ')}` : ''} FROM quill_c_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
|
|
407
424
|
: '';
|
|
408
425
|
const joinQuery = itemQueries[1] && comparisonInterval
|
|
409
426
|
? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${rowFieldAlias} = ${processDateTrunc(dateBucket, `ct.comparison_${rowFieldAlias}`, databaseType, comparisonInterval)}`
|
|
@@ -411,14 +428,13 @@ function create2DDatePivotQuery(pivot, itemQueries, columnFieldValues, databaseT
|
|
|
411
428
|
return `WITH quill_query_table AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
412
429
|
quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}, ${valueAliasSubstring}
|
|
413
430
|
${processColumnReference(columnField, databaseType, undefined, true, true)} AS ${columnFieldAlias} FROM quill_query_table),
|
|
414
|
-
quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}
|
|
431
|
+
quill_qt_agg as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${rowFieldAlias}${caseWhens.length > 0 ? `, ${caseWhens.join(', ')}` : ''} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
|
|
415
432
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
416
433
|
SELECT * FROM quill_qt_agg qt
|
|
417
434
|
${joinQuery} ORDER BY qt.${rowFieldAlias}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
418
435
|
}
|
|
419
436
|
function create1DPivotQuery(pivot, itemQueries, dateBucket = 'month', databaseType, comparisonInterval, rowLimit) {
|
|
420
|
-
if (
|
|
421
|
-
!pivot.rowFieldType) {
|
|
437
|
+
if (isStringType(pivot.rowFieldType || '') || !pivot.rowFieldType) {
|
|
422
438
|
return create1DStringPivotQuery(pivot, itemQueries, databaseType, rowLimit);
|
|
423
439
|
}
|
|
424
440
|
return create1DDatePivotQuery(pivot, itemQueries, dateBucket, databaseType, comparisonInterval, rowLimit);
|
|
@@ -429,7 +445,7 @@ function create1DStringPivotQuery(pivot, itemQueries, databaseType, rowLimit) {
|
|
|
429
445
|
const rowAlias = processColumnReference(rowField, databaseType, undefined, false, true);
|
|
430
446
|
const valueAlias = processColumnReference(valueField ?? rowField, databaseType, undefined, false, true);
|
|
431
447
|
const countAlias = processColumnReference('count', databaseType);
|
|
432
|
-
const max =
|
|
448
|
+
const max = 'GREATEST';
|
|
433
449
|
const valueAliasSubstring = valueField
|
|
434
450
|
? `, ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueAlias}`
|
|
435
451
|
: ``;
|
|
@@ -452,7 +468,7 @@ function create1DStringPivotQuery(pivot, itemQueries, databaseType, rowLimit) {
|
|
|
452
468
|
: '';
|
|
453
469
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
454
470
|
quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowAlias}${valueAliasSubstring}${value2AliasSubstring} FROM quill_qt),
|
|
455
|
-
quill_qt_cw AS (SELECT ${rowAlias}, sum(${valueAlias}) / ${max}(sum(${value2Alias}), 1) as ${valueField
|
|
471
|
+
quill_qt_cw AS (SELECT ${rowAlias}, sum(${valueAlias}) / ${max}(sum(${value2Alias}), 1) as ${processColumnReference(`${valueField ?? ''}_${matchCasing('percentage', valueField)}`, databaseType, undefined, false, true)} FROM quill_alias GROUP BY ${rowAlias})
|
|
456
472
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
457
473
|
SELECT * FROM quill_qt_cw qt
|
|
458
474
|
${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -485,7 +501,7 @@ function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', databa
|
|
|
485
501
|
const valueAliasSubstring = valueField
|
|
486
502
|
? `, ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
487
503
|
: ``;
|
|
488
|
-
const max =
|
|
504
|
+
const max = 'GREATEST';
|
|
489
505
|
// this "and" is for typescript. in reality, pivot.valueField2 must exist if pivot.aggregationType === 'percentage'
|
|
490
506
|
if (pivot.aggregationType === 'percentage' && pivot.valueField2) {
|
|
491
507
|
const valueField2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
|
|
@@ -500,14 +516,14 @@ function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', databa
|
|
|
500
516
|
: '';
|
|
501
517
|
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
502
518
|
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)},
|
|
503
|
-
sum(${processColumnReference(`${valueFieldAlias}`, databaseType, undefined, true)}) / ${max}(sum(${processColumnReference(`${valueField2Alias}`, databaseType, undefined, true)}), 1) as ${processColumnReference(`comparison_${valueField ? valueFieldAlias : 'count'}`, databaseType)}
|
|
519
|
+
sum(${processColumnReference(`${valueFieldAlias}`, databaseType, undefined, true)}) / ${max}(sum(${processColumnReference(`${valueField2Alias}`, databaseType, undefined, true)}), 1) as ${processColumnReference(`comparison_${valueField ? valueFieldAlias : 'count'}_${matchCasing('percentage', valueField)}`, databaseType, undefined, false, true)} FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
|
|
504
520
|
: '';
|
|
505
521
|
const joinQuery = itemQueries[1] && comparisonInterval
|
|
506
522
|
? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(rowField, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
|
|
507
523
|
: '';
|
|
508
524
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
509
525
|
quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}${valueAliasSubstring}${value2AliasSubstring} FROM quill_qt),
|
|
510
|
-
quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, sum(${valueFieldAlias}) / ${max}(sum(${valueField2Alias}), 1) as ${valueField
|
|
526
|
+
quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, sum(${valueFieldAlias}) / ${max}(sum(${valueField2Alias}), 1) as ${processColumnReference(`${valueField ?? ''}_${matchCasing('percentage', valueField)}`, databaseType, undefined, false, true)} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
|
|
511
527
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
512
528
|
SELECT * FROM quill_qt_agg qt
|
|
513
529
|
${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -520,14 +536,14 @@ function create1DDatePivotQuery(pivot, itemQueries, dateBucket = 'month', databa
|
|
|
520
536
|
: '';
|
|
521
537
|
const compareCaseWhenCTE = itemQueries[1] && comparisonInterval
|
|
522
538
|
? `, quill_ct_cw as (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`comparison_${rowFieldAlias}`, databaseType)},
|
|
523
|
-
${processAggType(pivot.aggregationType)}(${valueFieldAlias}) as ${processColumnReference(`comparison_${valueField ? valueFieldAlias : 'count'}`, databaseType)} FROM quill_c_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
|
|
539
|
+
${processAggType(pivot.aggregationType)}(${valueFieldAlias}) as ${processColumnReference(`comparison_${valueField ? valueFieldAlias : 'count'}`, databaseType)} FROM quill_c_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})`
|
|
524
540
|
: '';
|
|
525
541
|
const joinQuery = itemQueries[1] && comparisonInterval
|
|
526
542
|
? `LEFT JOIN quill_ct_cw ${processColumnReference(`ct`, databaseType)} ON qt.${processColumnReference(rowField, databaseType)} = ${processDateTrunc(dateBucket, `ct.comparison_${rowField}`, databaseType, comparisonInterval)}`
|
|
527
543
|
: '';
|
|
528
544
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}),
|
|
529
545
|
quill_alias AS (SELECT ${processColumnReference(`${rowField}`, databaseType, undefined, true)} AS ${rowFieldAlias}${valueAliasSubstring} FROM quill_qt),
|
|
530
|
-
quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${valueField ? valueFieldAlias : rowFieldAlias}) as ${valueField ? valueFieldAlias : countAlias} FROM quill_alias GROUP BY ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
|
|
546
|
+
quill_qt_agg AS (SELECT ${processDateTrunc(dateBucket, rowFieldAlias, databaseType)} as ${processColumnReference(`${rowField}`, databaseType)}, ${processAggType(pivot.aggregationType)}(${valueField ? valueFieldAlias : rowFieldAlias}) as ${valueField ? valueFieldAlias : countAlias} FROM quill_alias GROUP BY ${databaseType.toLowerCase() === 'clickhouse' ? processColumnReference(`${rowField}`, databaseType) : processDateTrunc(dateBucket, rowFieldAlias, databaseType)})
|
|
531
547
|
${compareCTE} ${aliasCTE} ${compareCaseWhenCTE}
|
|
532
548
|
SELECT * FROM quill_qt_agg qt
|
|
533
549
|
${joinQuery} ORDER BY qt.${processColumnReference(`${rowField}`, databaseType)}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -540,7 +556,7 @@ function createAggregationValuePivot(pivot, itemQueries, databaseType, rowLimit)
|
|
|
540
556
|
const valueAlias = processColumnReference(valueField, databaseType, undefined, false, true);
|
|
541
557
|
if (aggregationType === 'percentage' && pivot.valueField2) {
|
|
542
558
|
const value2Alias = processColumnReference(pivot.valueField2, databaseType, undefined, false, true);
|
|
543
|
-
const max =
|
|
559
|
+
const max = 'GREATEST';
|
|
544
560
|
const compareCTE = itemQueries[1]
|
|
545
561
|
? `, quill_ct as (${itemQueries[1]?.replaceAll(';', '')})`
|
|
546
562
|
: '';
|
|
@@ -548,11 +564,11 @@ function createAggregationValuePivot(pivot, itemQueries, databaseType, rowLimit)
|
|
|
548
564
|
? `, quill_c_alias as (SELECT ${processColumnReference(valueField, databaseType, undefined, true)} AS ${valueAlias}, ${processColumnReference(pivot.valueField2, databaseType, undefined, true)} AS ${value2Alias} FROM quill_ct)`
|
|
549
565
|
: '';
|
|
550
566
|
const compareAggregation = itemQueries[1]
|
|
551
|
-
? `, quill_ct_cw as (SELECT sum(${processColumnReference(`${valueField}`, databaseType)}) / ${max}(sum(${processColumnReference(`${pivot.valueField2}`, databaseType)}), 1) as ${processColumnReference(`comparison_${valueField}
|
|
567
|
+
? `, quill_ct_cw as (SELECT sum(${processColumnReference(`${valueField}`, databaseType)}) / ${max}(sum(${processColumnReference(`${pivot.valueField2}`, databaseType)}), 1) as ${processColumnReference(`comparison_${valueField}_${matchCasing('percentage', valueField)}`, databaseType, undefined, false, true)} FROM quill_c_alias)`
|
|
552
568
|
: '';
|
|
553
569
|
const joinQuery = itemQueries[1] ? `CROSS JOIN quill_ct_cw ct` : '';
|
|
554
570
|
return `WITH quill_qt AS (${itemQueries[0]?.replaceAll(';', '')}), quill_alias AS (SELECT ${processColumnReference(`${valueField}`, databaseType, undefined, true)} AS ${valueAlias}, ${processColumnReference(`${pivot.valueField2}`, databaseType, undefined, true)} AS ${value2Alias} FROM quill_qt),
|
|
555
|
-
quill_qt_agg AS (SELECT sum(${valueAlias}) / ${max}(sum(${value2Alias}), 1) as ${processColumnReference(`${valueField}`, databaseType)}
|
|
571
|
+
quill_qt_agg AS (SELECT sum(${valueAlias}) / ${max}(sum(${value2Alias}), 1) as ${processColumnReference(`${valueField}_${matchCasing('percentage', valueField)}`, databaseType)} FROM quill_alias)
|
|
556
572
|
${compareCTE} ${aliasCTE} ${compareAggregation}
|
|
557
573
|
SELECT * FROM quill_qt_agg qt
|
|
558
574
|
${joinQuery}${rowLimit ? ` LIMIT ${rowLimit}` : ''}`;
|
|
@@ -25,7 +25,10 @@ export type ReportBuilderInfo = {
|
|
|
25
25
|
};
|
|
26
26
|
export declare const EMPTY_REPORT: QuillReport;
|
|
27
27
|
export declare const EMPTY_INTERNAL_REPORT: QuillReportInternal;
|
|
28
|
-
export declare function fetchReport(reportId: string, client: QuillProviderClient,
|
|
28
|
+
export declare function fetchReport(reportId: string, client: QuillProviderClient, tenants?: {
|
|
29
|
+
tenantField: string;
|
|
30
|
+
tenantIds: (string | number)[];
|
|
31
|
+
}[] | (string | number)[], flags?: string[], useReportTask?: boolean, filters?: any[], additionalProcessing?: AdditionalProcessing, dateBucket?: string, customFields?: any, rowsOnly?: boolean, rowCountOnly?: boolean, abortSignal?: AbortSignal, getDefaultDashboardFilters?: boolean): Promise<{
|
|
29
32
|
report: QuillReportInternal;
|
|
30
33
|
error?: string;
|
|
31
34
|
}>;
|
|
@@ -36,11 +39,17 @@ export declare function processReportResponse({ resp, client, filters, dateBucke
|
|
|
36
39
|
dateBucket?: string;
|
|
37
40
|
additionalProcessing?: AdditionalProcessing;
|
|
38
41
|
}): Promise<QuillReportInternal>;
|
|
39
|
-
export declare function fetchReportInfo(reportId: string, client: QuillProviderClient
|
|
42
|
+
export declare function fetchReportInfo(reportId: string, client: QuillProviderClient, tenants?: {
|
|
43
|
+
tenantField: string;
|
|
44
|
+
tenantIds: (string | number)[];
|
|
45
|
+
}[] | (string | number)[]): Promise<{
|
|
40
46
|
report: any;
|
|
41
47
|
filters: any;
|
|
42
48
|
}>;
|
|
43
|
-
export declare function fetchReportRowCount(reportId: string, client: QuillProviderClient,
|
|
49
|
+
export declare function fetchReportRowCount(reportId: string, client: QuillProviderClient, tenants?: {
|
|
50
|
+
tenantField: string;
|
|
51
|
+
tenantIds: (string | number)[];
|
|
52
|
+
}[] | (string | number)[], flags?: string[], useReportTask?: boolean, filters?: any[], additionalProcessing?: AdditionalProcessing, customFields?: any, abortSignal?: AbortSignal): Promise<number | undefined>;
|
|
44
53
|
export declare function saveReport({ report, dashboardItemId, client, }: {
|
|
45
54
|
report: any;
|
|
46
55
|
dashboardItemId?: string;
|
|
@@ -48,8 +57,11 @@ export declare function saveReport({ report, dashboardItemId, client, }: {
|
|
|
48
57
|
}): Promise<any>;
|
|
49
58
|
export declare const formatRowsFromReport: (report: any, xAxisField?: string, xAxisFormat?: string) => any;
|
|
50
59
|
export declare function convertInternalReportToReport(report: QuillReportInternal, dashboardFilters: DashboardFilter[], initiator?: string): QuillReport;
|
|
51
|
-
export declare const fetchReportBuilderDataFromAST: (baseAst: any, formData: any, schema: Table[], client: QuillProviderClient,
|
|
60
|
+
export declare const fetchReportBuilderDataFromAST: (baseAst: any, formData: any, schema: Table[], client: QuillProviderClient, tenants?: {
|
|
61
|
+
tenantField: string;
|
|
62
|
+
tenantIds: (string | number)[];
|
|
63
|
+
}[] | (string | number)[], pivot?: Pivot, previousFormData?: any, currentTable?: string, previousRelevant?: {
|
|
52
64
|
uniqueStrings: UniqueValuesByTable;
|
|
53
65
|
dateRanges: DateRangesByColumn;
|
|
54
|
-
}, report?: QuillReportInternal, customFields?: any, skipUniqueValues?: boolean, skipRowCount?: boolean, processing?: AdditionalProcessing) => Promise<ReportBuilderInfo>;
|
|
66
|
+
}, report?: QuillReportInternal, customFields?: any, skipUniqueValues?: boolean, skipRowCount?: boolean, processing?: AdditionalProcessing, dashboardName?: string) => Promise<ReportBuilderInfo>;
|
|
55
67
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/utils/report.ts"],"names":[],"mappings":"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"}
|