@quillsql/node 0.8.2 → 0.8.4
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/index.d.ts +28 -1
- package/dist/cjs/index.js +69 -10
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/models/Quill.d.ts +3 -1
- package/dist/cjs/utils/pivotTemplate.d.ts +93 -0
- package/dist/cjs/utils/pivotTemplate.js +508 -0
- package/dist/cjs/utils/pivotTemplate.js.map +1 -0
- package/dist/esm/index.d.ts +28 -1
- package/dist/esm/index.js +69 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/Quill.d.ts +3 -1
- package/dist/esm/utils/pivotTemplate.d.ts +93 -0
- package/dist/esm/utils/pivotTemplate.js +494 -0
- package/dist/esm/utils/pivotTemplate.js.map +1 -0
- package/package.json +1 -1
- package/dist/cjs/index.ispec.d.ts +0 -0
- package/dist/cjs/index.ispec.js +0 -36
- package/dist/cjs/index.ispec.js.map +0 -1
- package/dist/cjs/index.uspec.d.ts +0 -0
- package/dist/cjs/index.uspec.js +0 -45
- package/dist/cjs/index.uspec.js.map +0 -1
- package/dist/esm/index.ispec.d.ts +0 -0
- package/dist/esm/index.ispec.js +0 -36
- package/dist/esm/index.ispec.js.map +0 -1
- package/dist/esm/index.uspec.d.ts +0 -0
- package/dist/esm/index.uspec.js +0 -45
- package/dist/esm/index.uspec.js.map +0 -1
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pivot Template System - SDK SIDE
|
|
4
|
+
*
|
|
5
|
+
* This file contains all the logic needed on the SDK to:
|
|
6
|
+
* 1. Hydrate pivot query templates with actual distinct values
|
|
7
|
+
* 2. Parse distinct values from different database result formats
|
|
8
|
+
* 3. Validate templates before hydration
|
|
9
|
+
*
|
|
10
|
+
* This runs on the customer's Node SDK where customer data is accessible.
|
|
11
|
+
* Takes templates from server and populates them with actual data.
|
|
12
|
+
*/
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.PIVOT_COLUMN_ALIAS_MARKER = exports.PIVOT_COLUMN_MARKER = exports.MAX_PIVOT_UNIQUE_VALUES = void 0;
|
|
24
|
+
exports.processSingleQuotes = processSingleQuotes;
|
|
25
|
+
exports.processAggType = processAggType;
|
|
26
|
+
exports.processColumnReference = processColumnReference;
|
|
27
|
+
exports.processValueField = processValueField;
|
|
28
|
+
exports.parseDistinctValues = parseDistinctValues;
|
|
29
|
+
exports.hydratePivotTemplate = hydratePivotTemplate;
|
|
30
|
+
exports.validateTemplate = validateTemplate;
|
|
31
|
+
exports.matchCasing = matchCasing;
|
|
32
|
+
exports.combineBaseQueryWithTemplate = combineBaseQueryWithTemplate;
|
|
33
|
+
exports.extractBaseQueryFromTemplate = extractBaseQueryFromTemplate;
|
|
34
|
+
exports.executePivotTemplate = executePivotTemplate;
|
|
35
|
+
// Utility function for ES2016 compatibility
|
|
36
|
+
function es2016replaceAll(str, search, replace) {
|
|
37
|
+
return str.split(search).join(replace);
|
|
38
|
+
}
|
|
39
|
+
// Constants
|
|
40
|
+
exports.MAX_PIVOT_UNIQUE_VALUES = 250;
|
|
41
|
+
exports.PIVOT_COLUMN_MARKER = "{{QUILL_PIVOT_COLUMNS}}";
|
|
42
|
+
exports.PIVOT_COLUMN_ALIAS_MARKER = "{{QUILL_PIVOT_COLUMN_ALIASES}}";
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// HELPER FUNCTIONS (copied from server for self-containment)
|
|
45
|
+
// ============================================================================
|
|
46
|
+
function processSingleQuotes(value, databaseType) {
|
|
47
|
+
if (["postgresql", "snowflake", "clickhouse"].includes(databaseType.toLowerCase())) {
|
|
48
|
+
return es2016replaceAll(value, "'", "''");
|
|
49
|
+
}
|
|
50
|
+
return es2016replaceAll(value, "'", "\\'");
|
|
51
|
+
}
|
|
52
|
+
function processAggType(aggType, hasColumnField = false) {
|
|
53
|
+
if (aggType === "count" && hasColumnField)
|
|
54
|
+
return "SUM";
|
|
55
|
+
return (aggType === null || aggType === void 0 ? void 0 : aggType.toLowerCase()) === "average" ? "AVG" : aggType === null || aggType === void 0 ? void 0 : aggType.toLowerCase();
|
|
56
|
+
}
|
|
57
|
+
function replaceBigQuerySpecialCharacters(column) {
|
|
58
|
+
return es2016replaceAll(column, "/", "quill_forward_slash");
|
|
59
|
+
}
|
|
60
|
+
function processColumnReference(column, databaseType, fallbackOnNull, isColumnFieldAlias, isValueFieldAlias) {
|
|
61
|
+
switch (databaseType.toLowerCase()) {
|
|
62
|
+
case "postgresql":
|
|
63
|
+
case "clickhouse": {
|
|
64
|
+
if (column === "") {
|
|
65
|
+
return fallbackOnNull ? `"${fallbackOnNull}"` : `"_"`;
|
|
66
|
+
}
|
|
67
|
+
if (isColumnFieldAlias) {
|
|
68
|
+
return `"${es2016replaceAll(column, '"', "")}"`;
|
|
69
|
+
}
|
|
70
|
+
const columnParts = column.split(".");
|
|
71
|
+
if (columnParts.length > 1) {
|
|
72
|
+
return (`"` +
|
|
73
|
+
columnParts
|
|
74
|
+
.map((part) => es2016replaceAll(part, '"', ""))
|
|
75
|
+
.join('"."') +
|
|
76
|
+
`"`);
|
|
77
|
+
}
|
|
78
|
+
return `"${es2016replaceAll(column, '"', "")}"`;
|
|
79
|
+
}
|
|
80
|
+
case "mysql": {
|
|
81
|
+
if (column === "") {
|
|
82
|
+
return fallbackOnNull ? `${fallbackOnNull}` : "_";
|
|
83
|
+
}
|
|
84
|
+
if (isColumnFieldAlias) {
|
|
85
|
+
return `\`${es2016replaceAll(es2016replaceAll(column, `\``, ""), `"`, "")}\``;
|
|
86
|
+
}
|
|
87
|
+
const columnParts = column.split(".");
|
|
88
|
+
if (columnParts.length > 1) {
|
|
89
|
+
return (`\`` +
|
|
90
|
+
columnParts
|
|
91
|
+
.map((part) => es2016replaceAll(part, `\``, ""))
|
|
92
|
+
.join("`.`") +
|
|
93
|
+
`\``);
|
|
94
|
+
}
|
|
95
|
+
return `\`${es2016replaceAll(column, `\``, "")}\``;
|
|
96
|
+
}
|
|
97
|
+
case "snowflake": {
|
|
98
|
+
if (column === "") {
|
|
99
|
+
return fallbackOnNull ? `${fallbackOnNull}` : "_";
|
|
100
|
+
}
|
|
101
|
+
if (isColumnFieldAlias) {
|
|
102
|
+
return `"${es2016replaceAll(column, '"', "")}"`;
|
|
103
|
+
}
|
|
104
|
+
if (isValueFieldAlias) {
|
|
105
|
+
const cleanedColumn = es2016replaceAll(es2016replaceAll(column, ")", ""), "(", "_");
|
|
106
|
+
return `${cleanedColumn}`;
|
|
107
|
+
}
|
|
108
|
+
return column;
|
|
109
|
+
}
|
|
110
|
+
case "bigquery": {
|
|
111
|
+
if (column === "") {
|
|
112
|
+
return fallbackOnNull ? `\`${fallbackOnNull}\`` : "`_`";
|
|
113
|
+
}
|
|
114
|
+
if (isColumnFieldAlias) {
|
|
115
|
+
return `\`${replaceBigQuerySpecialCharacters(es2016replaceAll(column, "`", ""))}\``;
|
|
116
|
+
}
|
|
117
|
+
const columnParts = column.split(".");
|
|
118
|
+
if (columnParts.length > 1) {
|
|
119
|
+
return (`\`` +
|
|
120
|
+
columnParts
|
|
121
|
+
.map((part) => es2016replaceAll(part, `\``, ""))
|
|
122
|
+
.join("`.`") +
|
|
123
|
+
`\``);
|
|
124
|
+
}
|
|
125
|
+
return `\`${replaceBigQuerySpecialCharacters(es2016replaceAll(column, "`", ""))}\``;
|
|
126
|
+
}
|
|
127
|
+
case "mssql": {
|
|
128
|
+
if (column === "") {
|
|
129
|
+
return fallbackOnNull ? `[${fallbackOnNull}]` : `[_]`;
|
|
130
|
+
}
|
|
131
|
+
if (isColumnFieldAlias) {
|
|
132
|
+
return `[${es2016replaceAll(es2016replaceAll(column, "]", ""), "[", "")}]`;
|
|
133
|
+
}
|
|
134
|
+
const columnParts = column.split(".");
|
|
135
|
+
if (columnParts.length > 1) {
|
|
136
|
+
return (`[` +
|
|
137
|
+
columnParts
|
|
138
|
+
.map((part) => es2016replaceAll(es2016replaceAll(part, "]", ""), "[", ""))
|
|
139
|
+
.join("].[`") +
|
|
140
|
+
`]`);
|
|
141
|
+
}
|
|
142
|
+
return `[${es2016replaceAll(es2016replaceAll(column, "]", ""), "[", "")}]`;
|
|
143
|
+
}
|
|
144
|
+
case "databricks": {
|
|
145
|
+
if (column === "") {
|
|
146
|
+
return fallbackOnNull ? `[${fallbackOnNull}]` : `_`;
|
|
147
|
+
}
|
|
148
|
+
if (isColumnFieldAlias) {
|
|
149
|
+
return `\`${es2016replaceAll(es2016replaceAll(column, `\``, ""), `"`, "")}\``;
|
|
150
|
+
}
|
|
151
|
+
const columnParts = column.split(".");
|
|
152
|
+
if (columnParts.length > 1) {
|
|
153
|
+
return (`\`` +
|
|
154
|
+
columnParts
|
|
155
|
+
.map((part) => es2016replaceAll(part, `\``, ""))
|
|
156
|
+
.join("`.`") +
|
|
157
|
+
`\``);
|
|
158
|
+
}
|
|
159
|
+
return `\`${es2016replaceAll(column, `\``, "")}\``;
|
|
160
|
+
}
|
|
161
|
+
default:
|
|
162
|
+
return column;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function processValueField(aggType, databaseType, valueField) {
|
|
166
|
+
if (aggType === "min" ||
|
|
167
|
+
aggType === "max" ||
|
|
168
|
+
(aggType === null || aggType === void 0 ? void 0 : aggType.toLowerCase()) === "average")
|
|
169
|
+
return `${processColumnReference(valueField, databaseType)} ELSE null`;
|
|
170
|
+
if (aggType === "count")
|
|
171
|
+
return `1 ELSE 0`;
|
|
172
|
+
return valueField
|
|
173
|
+
? `${processColumnReference(valueField, databaseType)} ELSE 0`
|
|
174
|
+
: `1 ELSE 0`;
|
|
175
|
+
}
|
|
176
|
+
// ============================================================================
|
|
177
|
+
// DISTINCT VALUES PARSING
|
|
178
|
+
// ============================================================================
|
|
179
|
+
/**
|
|
180
|
+
* Parses distinct values from database query results.
|
|
181
|
+
* Different databases return different formats.
|
|
182
|
+
*/
|
|
183
|
+
function parseDistinctValues(queryResult, databaseType) {
|
|
184
|
+
if (!queryResult || !queryResult.rows || queryResult.rows.length === 0) {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
const row = queryResult.rows[0];
|
|
188
|
+
let distinctValues = [];
|
|
189
|
+
switch (databaseType.toLowerCase()) {
|
|
190
|
+
case "postgresql":
|
|
191
|
+
case "bigquery":
|
|
192
|
+
case "snowflake":
|
|
193
|
+
case "databricks":
|
|
194
|
+
case "clickhouse":
|
|
195
|
+
// These return arrays in string_values field
|
|
196
|
+
if (row.string_values) {
|
|
197
|
+
if (Array.isArray(row.string_values)) {
|
|
198
|
+
distinctValues = row.string_values;
|
|
199
|
+
}
|
|
200
|
+
else if (typeof row.string_values === "string") {
|
|
201
|
+
// Handle JSON string arrays
|
|
202
|
+
try {
|
|
203
|
+
distinctValues = JSON.parse(row.string_values);
|
|
204
|
+
}
|
|
205
|
+
catch (_a) {
|
|
206
|
+
distinctValues = [];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
break;
|
|
211
|
+
case "mysql":
|
|
212
|
+
// MySQL returns JSON_ARRAYAGG which should be an array
|
|
213
|
+
if (row.string_values) {
|
|
214
|
+
if (Array.isArray(row.string_values)) {
|
|
215
|
+
distinctValues = row.string_values;
|
|
216
|
+
}
|
|
217
|
+
else if (typeof row.string_values === "string") {
|
|
218
|
+
try {
|
|
219
|
+
distinctValues = JSON.parse(row.string_values);
|
|
220
|
+
}
|
|
221
|
+
catch (_b) {
|
|
222
|
+
distinctValues = [];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
case "mssql":
|
|
228
|
+
// MS SQL returns comma-separated string
|
|
229
|
+
if (row.string_values && typeof row.string_values === "string") {
|
|
230
|
+
distinctValues = row.string_values
|
|
231
|
+
.split(",")
|
|
232
|
+
.map((v) => v.trim());
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
default:
|
|
236
|
+
console.warn(`Unknown database type: ${databaseType}`);
|
|
237
|
+
distinctValues = [];
|
|
238
|
+
}
|
|
239
|
+
// Filter out null/undefined/empty values
|
|
240
|
+
return distinctValues.filter((value) => value !== null && value !== undefined && value !== "");
|
|
241
|
+
}
|
|
242
|
+
// ============================================================================
|
|
243
|
+
// TEMPLATE HYDRATION
|
|
244
|
+
// ============================================================================
|
|
245
|
+
/**
|
|
246
|
+
* Hydrates a pivot query template with actual distinct values.
|
|
247
|
+
* This function should be called in the Node SDK after fetching distinct values.
|
|
248
|
+
*
|
|
249
|
+
* @param template - The SQL template string containing markers
|
|
250
|
+
* @param distinctValues - Array of distinct values fetched from the database
|
|
251
|
+
* @param config - config about the pivot configuration
|
|
252
|
+
* @returns Hydrated SQL query string ready to execute
|
|
253
|
+
*/
|
|
254
|
+
function hydratePivotTemplate(template, distinctValues, config) {
|
|
255
|
+
const { columnField, rowField, aggregations, databaseType } = config;
|
|
256
|
+
// If this pivot doesn't require distinct values, return as-is
|
|
257
|
+
if (!config.requiresDistinctValues || !columnField || !rowField) {
|
|
258
|
+
return template;
|
|
259
|
+
}
|
|
260
|
+
// Filter and limit distinct values
|
|
261
|
+
const filteredValues = distinctValues
|
|
262
|
+
.filter((value) => value !== null && value !== undefined && value !== "")
|
|
263
|
+
.slice(0, exports.MAX_PIVOT_UNIQUE_VALUES);
|
|
264
|
+
// Get properly quoted column references
|
|
265
|
+
const columnFieldAlias = processColumnReference(columnField, databaseType, undefined, false, true);
|
|
266
|
+
const rowFieldAlias = processColumnReference(rowField, databaseType, undefined, false, true);
|
|
267
|
+
// Generate column aliases for SELECT in quill_alias CTE
|
|
268
|
+
const columnAliases = [];
|
|
269
|
+
columnAliases.push(`${processColumnReference(rowField, databaseType, undefined, true)} AS ${rowFieldAlias}`);
|
|
270
|
+
// Generate CASE WHEN columns for each aggregation
|
|
271
|
+
const caseWhenColumns = [];
|
|
272
|
+
const seenAggs = {};
|
|
273
|
+
aggregations.forEach((currentAgg) => {
|
|
274
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
275
|
+
// Track duplicate aggregation combos for disambiguation
|
|
276
|
+
if ((_b = seenAggs[(_a = currentAgg.aggregationType) !== null && _a !== void 0 ? _a : ""]) === null || _b === void 0 ? void 0 : _b[(_c = currentAgg.valueField) !== null && _c !== void 0 ? _c : ""]) {
|
|
277
|
+
seenAggs[(_d = currentAgg.aggregationType) !== null && _d !== void 0 ? _d : ""][(_e = currentAgg.valueField) !== null && _e !== void 0 ? _e : ""] += 1;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
seenAggs[(_f = currentAgg.aggregationType) !== null && _f !== void 0 ? _f : ""] = Object.assign(Object.assign({}, seenAggs[(_g = currentAgg.aggregationType) !== null && _g !== void 0 ? _g : ""]), { [(_h = currentAgg.valueField) !== null && _h !== void 0 ? _h : ""]: 1 });
|
|
281
|
+
}
|
|
282
|
+
let disambiguationIndex = (_m = (_k = seenAggs[(_j = currentAgg.aggregationType) !== null && _j !== void 0 ? _j : ""]) === null || _k === void 0 ? void 0 : _k[(_l = currentAgg.valueField) !== null && _l !== void 0 ? _l : ""]) === null || _m === void 0 ? void 0 : _m.toString();
|
|
283
|
+
if (disambiguationIndex === "1")
|
|
284
|
+
disambiguationIndex = "";
|
|
285
|
+
const valueFieldAlias = processColumnReference(currentAgg.valueField || rowField || "count", databaseType, undefined, false, true);
|
|
286
|
+
const valueAliasSubstring = currentAgg.valueField
|
|
287
|
+
? `${processColumnReference(currentAgg.valueField, databaseType, undefined, true)} AS ${valueFieldAlias}`
|
|
288
|
+
: "";
|
|
289
|
+
// Handle disambiguation for multiple aggregations - must match original logic
|
|
290
|
+
const disambiguationField = Object.values((_p = seenAggs[(_o = currentAgg.aggregationType) !== null && _o !== void 0 ? _o : ""]) !== null && _p !== void 0 ? _p : {}).reduce((acc, v) => acc + v) > 1
|
|
291
|
+
? `_${currentAgg.valueField}${disambiguationIndex}`
|
|
292
|
+
: "";
|
|
293
|
+
const disambiguation = aggregations.length > 1
|
|
294
|
+
? `${disambiguationField}_${disambiguationField ? matchCasing(currentAgg.aggregationType, currentAgg.valueField) : currentAgg.aggregationType}`
|
|
295
|
+
: "";
|
|
296
|
+
// Wrap boolean fields in CASE WHEN
|
|
297
|
+
const valueExpr = currentAgg.valueFieldType === "bool"
|
|
298
|
+
? `CASE WHEN ${valueFieldAlias} THEN 1 ELSE 0 END`
|
|
299
|
+
: processValueField(currentAgg.aggregationType, databaseType, valueFieldAlias);
|
|
300
|
+
// Handle percentage aggregations specially
|
|
301
|
+
if (currentAgg.aggregationType === "percentage") {
|
|
302
|
+
const valueField2Alias = processColumnReference((_r = (_q = currentAgg.valueField2) !== null && _q !== void 0 ? _q : currentAgg.valueField) !== null && _r !== void 0 ? _r : "count", databaseType, undefined, false, true);
|
|
303
|
+
const value2Expr = ((_s = currentAgg.valueField2Type) !== null && _s !== void 0 ? _s : currentAgg.valueFieldType) === "bool"
|
|
304
|
+
? `CASE WHEN ${valueField2Alias} THEN 1 ELSE 0 END`
|
|
305
|
+
: valueField2Alias;
|
|
306
|
+
const value2AliasSubstring = currentAgg.valueField2 &&
|
|
307
|
+
currentAgg.valueField !== currentAgg.valueField2
|
|
308
|
+
? `${processColumnReference(currentAgg.valueField2, databaseType, undefined, true)} AS ${valueField2Alias}`
|
|
309
|
+
: "";
|
|
310
|
+
// Percentage with same field for numerator and denominator
|
|
311
|
+
if (currentAgg.valueField === currentAgg.valueField2 ||
|
|
312
|
+
!currentAgg.valueField2) {
|
|
313
|
+
filteredValues.forEach((column) => {
|
|
314
|
+
caseWhenColumns.push(`CAST(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) AS FLOAT) / GREATEST(sum(${value2Expr}), 1) AS ${processColumnReference(column + disambiguation, databaseType, "_", true)}`);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
// Percentage with different fields
|
|
319
|
+
filteredValues.forEach((column) => {
|
|
320
|
+
caseWhenColumns.push(`CAST(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) AS FLOAT) / GREATEST(sum(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${value2Expr} END), 1) AS ${processColumnReference(column + disambiguation, databaseType, "_", true)}`);
|
|
321
|
+
});
|
|
322
|
+
if (value2AliasSubstring)
|
|
323
|
+
columnAliases.push(value2AliasSubstring);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
// Standard aggregations (sum, count, avg, min, max)
|
|
328
|
+
filteredValues.forEach((column) => {
|
|
329
|
+
caseWhenColumns.push(`${processAggType(currentAgg.aggregationType, true)}(CASE WHEN ${columnFieldAlias} = '${processSingleQuotes(column, databaseType)}' THEN ${valueExpr} END) AS ${processColumnReference(column + disambiguation, databaseType, "_", true)}`);
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
if (valueAliasSubstring)
|
|
333
|
+
columnAliases.push(valueAliasSubstring);
|
|
334
|
+
});
|
|
335
|
+
// Add the column field to the aliases
|
|
336
|
+
columnAliases.push(`${processColumnReference(columnField, databaseType, undefined, true)} AS ${columnFieldAlias}`);
|
|
337
|
+
// Remove duplicates
|
|
338
|
+
const uniqueColumnAliases = Array.from(new Set(columnAliases));
|
|
339
|
+
// Replace markers with actual SQL
|
|
340
|
+
let hydratedTemplate = template
|
|
341
|
+
.replace(exports.PIVOT_COLUMN_ALIAS_MARKER, uniqueColumnAliases.join(", "))
|
|
342
|
+
.replace(exports.PIVOT_COLUMN_MARKER, caseWhenColumns.join(", "));
|
|
343
|
+
return hydratedTemplate;
|
|
344
|
+
}
|
|
345
|
+
// ============================================================================
|
|
346
|
+
// VALIDATION
|
|
347
|
+
// ============================================================================
|
|
348
|
+
/**
|
|
349
|
+
* Validates that a template can be hydrated with the given config
|
|
350
|
+
*/
|
|
351
|
+
function validateTemplate(template, config) {
|
|
352
|
+
const errors = [];
|
|
353
|
+
if (!template) {
|
|
354
|
+
errors.push("Template is empty");
|
|
355
|
+
}
|
|
356
|
+
if (config.requiresDistinctValues) {
|
|
357
|
+
if (!template.includes(exports.PIVOT_COLUMN_MARKER)) {
|
|
358
|
+
errors.push(`Template is missing ${exports.PIVOT_COLUMN_MARKER} marker`);
|
|
359
|
+
}
|
|
360
|
+
if (!template.includes(exports.PIVOT_COLUMN_ALIAS_MARKER)) {
|
|
361
|
+
errors.push(`Template is missing ${exports.PIVOT_COLUMN_ALIAS_MARKER} marker`);
|
|
362
|
+
}
|
|
363
|
+
if (!config.columnField) {
|
|
364
|
+
errors.push("config is missing columnField");
|
|
365
|
+
}
|
|
366
|
+
if (!config.rowField) {
|
|
367
|
+
errors.push("config is missing rowField");
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (!config.aggregations || config.aggregations.length === 0) {
|
|
371
|
+
errors.push("config is missing aggregations");
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
valid: errors.length === 0,
|
|
375
|
+
errors,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
// ============================================================================
|
|
379
|
+
// MATCH CASING FUNCTION (copied from textProcessing)
|
|
380
|
+
// ============================================================================
|
|
381
|
+
/**
|
|
382
|
+
* Matches the casing of text to template
|
|
383
|
+
*/
|
|
384
|
+
function matchCasing(text, template) {
|
|
385
|
+
if (!text || !template) {
|
|
386
|
+
return text !== null && text !== void 0 ? text : "";
|
|
387
|
+
}
|
|
388
|
+
// Detect TitleCase
|
|
389
|
+
const isTitleCase = (str) => /^[A-Z][a-z]*([A-Z][a-z]*)*$/.test(str);
|
|
390
|
+
// Detect camelCase
|
|
391
|
+
const isCamelCase = (str) => /^[a-z]+([A-Z][a-z]*)*$/.test(str);
|
|
392
|
+
// Detect snake_case
|
|
393
|
+
const isSnakeCase = (str) => /^[a-z0-9]+(_[a-z0-9]+)*$/.test(str);
|
|
394
|
+
// Detect all lowercase
|
|
395
|
+
const isAllLowerCase = (str) => /^[a-z]+$/.test(str);
|
|
396
|
+
// Detect all uppercase
|
|
397
|
+
const isAllUpperCase = (str) => /^[A-Z]+$/.test(str);
|
|
398
|
+
// Detect capitalized (first letter uppercase, rest lowercase)
|
|
399
|
+
const isCapitalized = (str) => /^[A-Z][a-z]*$/.test(str);
|
|
400
|
+
// Detect SCREAMING_SNAKE_CASE (Snowflake)
|
|
401
|
+
const isScreamingSnakeCase = (str) => /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/.test(str);
|
|
402
|
+
// Function to convert to TitleCase
|
|
403
|
+
const toTitleCase = (str) => str.toLowerCase().replace(/\b\w/g, (char) => char.toUpperCase());
|
|
404
|
+
// Function to convert to camelCase
|
|
405
|
+
const toCamelCase = (str) => str.replace(/_./g, (match) => match.charAt(1).toUpperCase()).toLowerCase();
|
|
406
|
+
// Function to convert to snake_case
|
|
407
|
+
const toSnakeCase = (str) => str.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);
|
|
408
|
+
// Function to convert to all lowercase
|
|
409
|
+
const toLowerCase = (str) => str.toLowerCase();
|
|
410
|
+
// Function to convert to all uppercase
|
|
411
|
+
const toUpperCase = (str) => str.toUpperCase();
|
|
412
|
+
// Function to convert to capitalized (first letter uppercase, rest lowercase)
|
|
413
|
+
const toCapitalized = (str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
414
|
+
const toScreamingSnakeCase = (str) => str
|
|
415
|
+
.replace(/([A-Z])/g, "_$1") // Add underscore before capitals
|
|
416
|
+
.replace(/^_/, "") // Remove leading underscore if present
|
|
417
|
+
.toUpperCase(); // Convert everything to uppercase
|
|
418
|
+
// Match casing of the template and apply to the text
|
|
419
|
+
if (isTitleCase(template)) {
|
|
420
|
+
return toTitleCase(text);
|
|
421
|
+
}
|
|
422
|
+
else if (isCamelCase(template)) {
|
|
423
|
+
return toCamelCase(text);
|
|
424
|
+
}
|
|
425
|
+
else if (isSnakeCase(template)) {
|
|
426
|
+
return toSnakeCase(text);
|
|
427
|
+
}
|
|
428
|
+
else if (isAllLowerCase(template)) {
|
|
429
|
+
return toLowerCase(text);
|
|
430
|
+
}
|
|
431
|
+
else if (isAllUpperCase(template)) {
|
|
432
|
+
return toUpperCase(text);
|
|
433
|
+
}
|
|
434
|
+
else if (isCapitalized(template)) {
|
|
435
|
+
return toCapitalized(text);
|
|
436
|
+
}
|
|
437
|
+
else if (isScreamingSnakeCase(template)) {
|
|
438
|
+
return toScreamingSnakeCase(text);
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
return text; // Default case if no specific pattern is detected
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// ============================================================================
|
|
445
|
+
// QUERY COMBINATION FUNCTIONS
|
|
446
|
+
// ============================================================================
|
|
447
|
+
/**
|
|
448
|
+
* Combines a base query with a hydrated pivot template.
|
|
449
|
+
* The hydrated template already includes the WITH quill_base_table CTE (from itemQuery.replace),
|
|
450
|
+
* so we should NOT prepend anything. The template IS the complete query.
|
|
451
|
+
*/
|
|
452
|
+
function combineBaseQueryWithTemplate(baseQuery, hydratedTemplate) {
|
|
453
|
+
// The hydrated template already has everything needed from the itemQuery.replace operation
|
|
454
|
+
// Just return it as-is
|
|
455
|
+
return hydratedTemplate;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Extracts the base query from a template by removing the pivot-specific parts.
|
|
459
|
+
* This is useful when you need to get the original base query back.
|
|
460
|
+
*/
|
|
461
|
+
function extractBaseQueryFromTemplate(template) {
|
|
462
|
+
// Find the base query part before the first comma
|
|
463
|
+
const commaIndex = template.indexOf(",");
|
|
464
|
+
if (commaIndex === -1) {
|
|
465
|
+
return template; // No comma found, return as-is
|
|
466
|
+
}
|
|
467
|
+
return template.substring(0, commaIndex).trim();
|
|
468
|
+
}
|
|
469
|
+
// ============================================================================
|
|
470
|
+
// CONVENIENCE FUNCTIONS
|
|
471
|
+
// ============================================================================
|
|
472
|
+
/**
|
|
473
|
+
* Complete workflow: fetch distinct values and hydrate template
|
|
474
|
+
* This is a convenience function that combines the common SDK workflow
|
|
475
|
+
*/
|
|
476
|
+
function executePivotTemplate(template, baseQuery, executeQuery) {
|
|
477
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
478
|
+
var _a, _b;
|
|
479
|
+
const { template: sqlTemplate, config, distinctValuesQuery, rowCountQuery, } = template;
|
|
480
|
+
// 1. Get distinct values if needed
|
|
481
|
+
let distinctValues = [];
|
|
482
|
+
let distinctValuesCount;
|
|
483
|
+
if (config.requiresDistinctValues && distinctValuesQuery) {
|
|
484
|
+
const distinctResult = yield executeQuery(distinctValuesQuery);
|
|
485
|
+
distinctValues = parseDistinctValues(distinctResult, config.databaseType);
|
|
486
|
+
distinctValuesCount = distinctValues.length;
|
|
487
|
+
}
|
|
488
|
+
// 2. Hydrate template
|
|
489
|
+
const hydratedTemplate = hydratePivotTemplate(sqlTemplate, distinctValues, config);
|
|
490
|
+
// 3. Combine base query with hydrated template
|
|
491
|
+
const finalSQL = combineBaseQueryWithTemplate(baseQuery, hydratedTemplate);
|
|
492
|
+
// 4. Execute pivot query
|
|
493
|
+
const pivotResults = yield executeQuery(finalSQL);
|
|
494
|
+
// 5. Get row count if requested
|
|
495
|
+
let rowCount;
|
|
496
|
+
if (rowCountQuery) {
|
|
497
|
+
const countResult = yield executeQuery(rowCountQuery);
|
|
498
|
+
rowCount = ((_b = (_a = countResult.rows) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.row_count) || 0;
|
|
499
|
+
}
|
|
500
|
+
return {
|
|
501
|
+
pivotResults,
|
|
502
|
+
rowCount,
|
|
503
|
+
distinctValuesCount,
|
|
504
|
+
finalSQL,
|
|
505
|
+
};
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
//# sourceMappingURL=pivotTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivotTemplate.js","sourceRoot":"","sources":["../../../src/utils/pivotTemplate.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -2,6 +2,9 @@ import { CacheCredentials } from "./models/Cache";
|
|
|
2
2
|
import { QuillQueryParams } from "./models/Quill";
|
|
3
3
|
import "dotenv/config";
|
|
4
4
|
import { DatabaseConnectionConfig, DatabaseConnectionType } from "./db/DatabaseHelper";
|
|
5
|
+
import { SnowflakeConnectionConfig } from "./db/Snowflake";
|
|
6
|
+
import { MysqlConnectionConfig } from "./db/Mysql";
|
|
7
|
+
import { PostgresConnectionConfig } from "./db/Postgres";
|
|
5
8
|
export declare const SINGLE_TENANT = "QUILL_SINGLE_TENANT";
|
|
6
9
|
export declare const ALL_TENANTS = "QUILL_ALL_TENANTS";
|
|
7
10
|
/**
|
|
@@ -29,6 +32,30 @@ export declare class Quill implements AsyncDisposable {
|
|
|
29
32
|
private targetConnection;
|
|
30
33
|
private baseUrl;
|
|
31
34
|
private config;
|
|
35
|
+
constructor(data: {
|
|
36
|
+
privateKey: string;
|
|
37
|
+
databaseType: "snowflake";
|
|
38
|
+
databaseConnectionString?: string;
|
|
39
|
+
databaseConfig?: SnowflakeConnectionConfig;
|
|
40
|
+
cache?: Partial<CacheCredentials>;
|
|
41
|
+
metadataServerURL?: string;
|
|
42
|
+
});
|
|
43
|
+
constructor(data: {
|
|
44
|
+
privateKey: string;
|
|
45
|
+
databaseType: "mysql";
|
|
46
|
+
databaseConnectionString?: string;
|
|
47
|
+
databaseConfig?: MysqlConnectionConfig;
|
|
48
|
+
cache?: Partial<CacheCredentials>;
|
|
49
|
+
metadataServerURL?: string;
|
|
50
|
+
});
|
|
51
|
+
constructor(data: {
|
|
52
|
+
privateKey: string;
|
|
53
|
+
databaseType: "postgresql";
|
|
54
|
+
databaseConnectionString?: string;
|
|
55
|
+
databaseConfig?: PostgresConnectionConfig;
|
|
56
|
+
cache?: Partial<CacheCredentials>;
|
|
57
|
+
metadataServerURL?: string;
|
|
58
|
+
});
|
|
32
59
|
constructor(data: {
|
|
33
60
|
privateKey: string;
|
|
34
61
|
databaseType: DatabaseConnectionType;
|
|
@@ -37,7 +64,7 @@ export declare class Quill implements AsyncDisposable {
|
|
|
37
64
|
cache?: Partial<CacheCredentials>;
|
|
38
65
|
metadataServerURL?: string;
|
|
39
66
|
});
|
|
40
|
-
query({ tenants, flags, metadata, filters, }: QuillQueryParams): Promise<QuillQueryResult>;
|
|
67
|
+
query({ tenants, flags, metadata, filters, adminEnabled, }: QuillQueryParams): Promise<QuillQueryResult>;
|
|
41
68
|
private applyLimit;
|
|
42
69
|
private runQueries;
|
|
43
70
|
private postQuill;
|