@quillsql/node 0.8.2 → 0.8.3

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.
@@ -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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"}
@@ -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;