drizzle-cube 0.1.21 → 0.1.24
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/adapters/{compiler-CPsEzFP2.js → compiler-CSr2Ti96.js} +553 -505
- package/dist/adapters/express/index.js +1 -1
- package/dist/adapters/fastify/index.js +1 -1
- package/dist/adapters/hono/index.js +1 -1
- package/dist/adapters/nextjs/index.js +50 -50
- package/dist/client/charts/chartConfigs.d.ts +31 -1
- package/dist/client/charts.d.ts +1 -0
- package/dist/client/charts.js +1 -1
- package/dist/client/chunks/charts-Dx3asDBi.js +2269 -0
- package/dist/client/chunks/charts-Dx3asDBi.js.map +1 -0
- package/dist/client/chunks/{icons-B5RVM-7b.js → icons-BMGOKdZb.js} +279 -239
- package/dist/client/chunks/icons-BMGOKdZb.js.map +1 -0
- package/dist/client/chunks/{providers-DI5zeeEU.js → providers-B7MVnAAt.js} +50 -50
- package/dist/client/chunks/providers-B7MVnAAt.js.map +1 -0
- package/dist/client/components/ChartConfigPanel.d.ts +3 -2
- package/dist/client/components/ColorPaletteSelector.d.ts +11 -0
- package/dist/client/components/DashboardGrid.d.ts +3 -1
- package/dist/client/components/DataHistogram.d.ts +23 -0
- package/dist/client/components/PortletEditModal.d.ts +3 -2
- package/dist/client/components/charts/ActivityGridChart.config.d.ts +5 -0
- package/dist/client/components/charts/ActivityGridChart.d.ts +2 -0
- package/dist/client/components/charts/AreaChart.d.ts +1 -1
- package/dist/client/components/charts/BarChart.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.d.ts +1 -1
- package/dist/client/components/charts/KpiNumber.config.d.ts +5 -0
- package/dist/client/components/charts/KpiNumber.d.ts +2 -0
- package/dist/client/components/charts/KpiText.config.d.ts +5 -0
- package/dist/client/components/charts/KpiText.d.ts +2 -0
- package/dist/client/components/charts/LineChart.d.ts +1 -1
- package/dist/client/components/charts/PieChart.d.ts +1 -1
- package/dist/client/components/charts/RadarChart.d.ts +1 -1
- package/dist/client/components/charts/RadialBarChart.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.d.ts +1 -1
- package/dist/client/components/charts/index.d.ts +3 -0
- package/dist/client/components.js +5134 -2607
- package/dist/client/components.js.map +1 -1
- package/dist/client/hooks/useCubeMeta.d.ts +1 -0
- package/dist/client/hooks.js +62 -60
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +2 -2
- package/dist/client/providers.js +1 -1
- package/dist/client/types.d.ts +17 -5
- package/dist/client/utils/colorPalettes.d.ts +35 -0
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.d.ts +3 -8
- package/dist/server/index.js +748 -700
- package/package.json +22 -1
- package/dist/client/chunks/charts-BadAUMmd.js +0 -2285
- package/dist/client/chunks/charts-BadAUMmd.js.map +0 -1
- package/dist/client/chunks/icons-B5RVM-7b.js.map +0 -1
- package/dist/client/chunks/providers-DI5zeeEU.js.map +0 -1
package/dist/server/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { sql as
|
|
5
|
-
class
|
|
1
|
+
var gT = Object.defineProperty;
|
|
2
|
+
var JT = (T, E, R) => E in T ? gT(T, E, { enumerable: !0, configurable: !0, writable: !0, value: R }) : T[E] = R;
|
|
3
|
+
var W = (T, E, R) => JT(T, typeof E != "symbol" ? E + "" : E, R);
|
|
4
|
+
import { sql as _, count as IE, sum as y, max as dE, min as VE, and as d, countDistinct as wT, SQL as xT, or as OE, isNotNull as KE, ne as yE, isNull as $E, eq as EE, notInArray as gE, inArray as NE, lt as eE, gt as CE, gte as J, lte as w, desc as vT, asc as JE } from "drizzle-orm";
|
|
5
|
+
class WE {
|
|
6
6
|
/**
|
|
7
7
|
* Helper method to build pattern for string matching
|
|
8
8
|
* Can be overridden by specific adapters if needed
|
|
@@ -21,7 +21,7 @@ class pE {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
class QT extends
|
|
24
|
+
class QT extends WE {
|
|
25
25
|
getEngineType() {
|
|
26
26
|
return "postgres";
|
|
27
27
|
}
|
|
@@ -32,21 +32,21 @@ class QT extends pE {
|
|
|
32
32
|
buildTimeDimension(E, R) {
|
|
33
33
|
switch (E) {
|
|
34
34
|
case "year":
|
|
35
|
-
return
|
|
35
|
+
return _`DATE_TRUNC('year', ${R}::timestamp)`;
|
|
36
36
|
case "quarter":
|
|
37
|
-
return
|
|
37
|
+
return _`DATE_TRUNC('quarter', ${R}::timestamp)`;
|
|
38
38
|
case "month":
|
|
39
|
-
return
|
|
39
|
+
return _`DATE_TRUNC('month', ${R}::timestamp)`;
|
|
40
40
|
case "week":
|
|
41
|
-
return
|
|
41
|
+
return _`DATE_TRUNC('week', ${R}::timestamp)`;
|
|
42
42
|
case "day":
|
|
43
|
-
return
|
|
43
|
+
return _`DATE_TRUNC('day', ${R}::timestamp)::timestamp`;
|
|
44
44
|
case "hour":
|
|
45
|
-
return
|
|
45
|
+
return _`DATE_TRUNC('hour', ${R}::timestamp)`;
|
|
46
46
|
case "minute":
|
|
47
|
-
return
|
|
47
|
+
return _`DATE_TRUNC('minute', ${R}::timestamp)`;
|
|
48
48
|
case "second":
|
|
49
|
-
return
|
|
49
|
+
return _`DATE_TRUNC('second', ${R}::timestamp)`;
|
|
50
50
|
default:
|
|
51
51
|
return R;
|
|
52
52
|
}
|
|
@@ -56,16 +56,25 @@ class QT extends pE {
|
|
|
56
56
|
* Extracted from executor.ts:807-813 and multi-cube-builder.ts:468-474
|
|
57
57
|
*/
|
|
58
58
|
buildStringCondition(E, R, A) {
|
|
59
|
-
const S = this.buildPattern(R, A);
|
|
60
59
|
switch (R) {
|
|
61
60
|
case "contains":
|
|
62
|
-
return
|
|
61
|
+
return _`${E} ILIKE ${`%${A}%`}`;
|
|
63
62
|
case "notContains":
|
|
64
|
-
return
|
|
63
|
+
return _`${E} NOT ILIKE ${`%${A}%`}`;
|
|
65
64
|
case "startsWith":
|
|
66
|
-
return
|
|
65
|
+
return _`${E} ILIKE ${`${A}%`}`;
|
|
67
66
|
case "endsWith":
|
|
68
|
-
return
|
|
67
|
+
return _`${E} ILIKE ${`%${A}`}`;
|
|
68
|
+
case "like":
|
|
69
|
+
return _`${E} LIKE ${A}`;
|
|
70
|
+
case "notLike":
|
|
71
|
+
return _`${E} NOT LIKE ${A}`;
|
|
72
|
+
case "ilike":
|
|
73
|
+
return _`${E} ILIKE ${A}`;
|
|
74
|
+
case "regex":
|
|
75
|
+
return _`${E} ~* ${A}`;
|
|
76
|
+
case "notRegex":
|
|
77
|
+
return _`${E} !~* ${A}`;
|
|
69
78
|
default:
|
|
70
79
|
throw new Error(`Unsupported string operator: ${R}`);
|
|
71
80
|
}
|
|
@@ -77,11 +86,11 @@ class QT extends pE {
|
|
|
77
86
|
castToType(E, R) {
|
|
78
87
|
switch (R) {
|
|
79
88
|
case "timestamp":
|
|
80
|
-
return
|
|
89
|
+
return _`${E}::timestamp`;
|
|
81
90
|
case "decimal":
|
|
82
|
-
return
|
|
91
|
+
return _`${E}::decimal`;
|
|
83
92
|
case "integer":
|
|
84
|
-
return
|
|
93
|
+
return _`${E}::integer`;
|
|
85
94
|
default:
|
|
86
95
|
throw new Error(`Unsupported cast type: ${R}`);
|
|
87
96
|
}
|
|
@@ -92,21 +101,21 @@ class QT extends pE {
|
|
|
92
101
|
* Extracted from multi-cube-builder.ts:284
|
|
93
102
|
*/
|
|
94
103
|
buildAvg(E) {
|
|
95
|
-
return
|
|
104
|
+
return _`COALESCE(AVG(${E}), 0)`;
|
|
96
105
|
}
|
|
97
106
|
/**
|
|
98
107
|
* Build PostgreSQL CASE WHEN conditional expression
|
|
99
108
|
*/
|
|
100
109
|
buildCaseWhen(E, R) {
|
|
101
|
-
const A = E.map((S) =>
|
|
102
|
-
return R !== void 0 ?
|
|
110
|
+
const A = E.map((S) => _`WHEN ${S.when} THEN ${S.then}`).reduce((S, I) => _`${S} ${I}`);
|
|
111
|
+
return R !== void 0 ? _`CASE ${A} ELSE ${R} END` : _`CASE ${A} END`;
|
|
103
112
|
}
|
|
104
113
|
/**
|
|
105
114
|
* Build PostgreSQL boolean literal
|
|
106
115
|
* PostgreSQL uses TRUE/FALSE keywords
|
|
107
116
|
*/
|
|
108
117
|
buildBooleanLiteral(E) {
|
|
109
|
-
return E ?
|
|
118
|
+
return E ? _`TRUE` : _`FALSE`;
|
|
110
119
|
}
|
|
111
120
|
/**
|
|
112
121
|
* Convert filter values - PostgreSQL uses native types
|
|
@@ -136,7 +145,7 @@ class QT extends pE {
|
|
|
136
145
|
return E;
|
|
137
146
|
}
|
|
138
147
|
}
|
|
139
|
-
class ZT extends
|
|
148
|
+
class ZT extends WE {
|
|
140
149
|
getEngineType() {
|
|
141
150
|
return "mysql";
|
|
142
151
|
}
|
|
@@ -159,12 +168,12 @@ class ZT extends pE {
|
|
|
159
168
|
};
|
|
160
169
|
switch (E) {
|
|
161
170
|
case "quarter":
|
|
162
|
-
return
|
|
171
|
+
return _`DATE_ADD(MAKEDATE(YEAR(${R}), 1), INTERVAL (QUARTER(${R}) - 1) * 3 MONTH)`;
|
|
163
172
|
case "week":
|
|
164
|
-
return
|
|
173
|
+
return _`DATE_SUB(${R}, INTERVAL WEEKDAY(${R}) DAY)`;
|
|
165
174
|
default:
|
|
166
175
|
const S = A[E];
|
|
167
|
-
return S ?
|
|
176
|
+
return S ? _`STR_TO_DATE(DATE_FORMAT(${R}, ${S}), '%Y-%m-%d %H:%i:%s')` : R;
|
|
168
177
|
}
|
|
169
178
|
}
|
|
170
179
|
/**
|
|
@@ -173,16 +182,25 @@ class ZT extends pE {
|
|
|
173
182
|
* For guaranteed case-insensitive matching, we use LOWER() functions
|
|
174
183
|
*/
|
|
175
184
|
buildStringCondition(E, R, A) {
|
|
176
|
-
const S = this.buildPattern(R, A.toLowerCase());
|
|
177
185
|
switch (R) {
|
|
178
186
|
case "contains":
|
|
179
|
-
return
|
|
187
|
+
return _`LOWER(${E}) LIKE ${`%${A.toLowerCase()}%`}`;
|
|
180
188
|
case "notContains":
|
|
181
|
-
return
|
|
189
|
+
return _`LOWER(${E}) NOT LIKE ${`%${A.toLowerCase()}%`}`;
|
|
182
190
|
case "startsWith":
|
|
183
|
-
return
|
|
191
|
+
return _`LOWER(${E}) LIKE ${`${A.toLowerCase()}%`}`;
|
|
184
192
|
case "endsWith":
|
|
185
|
-
return
|
|
193
|
+
return _`LOWER(${E}) LIKE ${`%${A.toLowerCase()}`}`;
|
|
194
|
+
case "like":
|
|
195
|
+
return _`${E} LIKE ${A}`;
|
|
196
|
+
case "notLike":
|
|
197
|
+
return _`${E} NOT LIKE ${A}`;
|
|
198
|
+
case "ilike":
|
|
199
|
+
return _`LOWER(${E}) LIKE ${A.toLowerCase()}`;
|
|
200
|
+
case "regex":
|
|
201
|
+
return _`${E} REGEXP ${A}`;
|
|
202
|
+
case "notRegex":
|
|
203
|
+
return _`${E} NOT REGEXP ${A}`;
|
|
186
204
|
default:
|
|
187
205
|
throw new Error(`Unsupported string operator: ${R}`);
|
|
188
206
|
}
|
|
@@ -194,11 +212,11 @@ class ZT extends pE {
|
|
|
194
212
|
castToType(E, R) {
|
|
195
213
|
switch (R) {
|
|
196
214
|
case "timestamp":
|
|
197
|
-
return
|
|
215
|
+
return _`CAST(${E} AS DATETIME)`;
|
|
198
216
|
case "decimal":
|
|
199
|
-
return
|
|
217
|
+
return _`CAST(${E} AS DECIMAL(10,2))`;
|
|
200
218
|
case "integer":
|
|
201
|
-
return
|
|
219
|
+
return _`CAST(${E} AS SIGNED INTEGER)`;
|
|
202
220
|
default:
|
|
203
221
|
throw new Error(`Unsupported cast type: ${R}`);
|
|
204
222
|
}
|
|
@@ -208,21 +226,21 @@ class ZT extends pE {
|
|
|
208
226
|
* MySQL AVG returns NULL for empty sets, using IFNULL for consistency
|
|
209
227
|
*/
|
|
210
228
|
buildAvg(E) {
|
|
211
|
-
return
|
|
229
|
+
return _`IFNULL(AVG(${E}), 0)`;
|
|
212
230
|
}
|
|
213
231
|
/**
|
|
214
232
|
* Build MySQL CASE WHEN conditional expression
|
|
215
233
|
*/
|
|
216
234
|
buildCaseWhen(E, R) {
|
|
217
|
-
const A = E.map((S) =>
|
|
218
|
-
return R !== void 0 ?
|
|
235
|
+
const A = E.map((S) => _`WHEN ${S.when} THEN ${S.then}`).reduce((S, I) => _`${S} ${I}`);
|
|
236
|
+
return R !== void 0 ? _`CASE ${A} ELSE ${R} END` : _`CASE ${A} END`;
|
|
219
237
|
}
|
|
220
238
|
/**
|
|
221
239
|
* Build MySQL boolean literal
|
|
222
240
|
* MySQL uses TRUE/FALSE keywords (equivalent to 1/0)
|
|
223
241
|
*/
|
|
224
242
|
buildBooleanLiteral(E) {
|
|
225
|
-
return E ?
|
|
243
|
+
return E ? _`TRUE` : _`FALSE`;
|
|
226
244
|
}
|
|
227
245
|
/**
|
|
228
246
|
* Convert filter values - MySQL uses native types
|
|
@@ -252,7 +270,7 @@ class ZT extends pE {
|
|
|
252
270
|
return E;
|
|
253
271
|
}
|
|
254
272
|
}
|
|
255
|
-
class
|
|
273
|
+
class kT extends WE {
|
|
256
274
|
getEngineType() {
|
|
257
275
|
return "sqlite";
|
|
258
276
|
}
|
|
@@ -265,28 +283,28 @@ class qT extends pE {
|
|
|
265
283
|
buildTimeDimension(E, R) {
|
|
266
284
|
switch (E) {
|
|
267
285
|
case "year":
|
|
268
|
-
return
|
|
286
|
+
return _`datetime(${R}, 'unixepoch', 'start of year')`;
|
|
269
287
|
case "quarter":
|
|
270
|
-
const A =
|
|
271
|
-
return
|
|
288
|
+
const A = _`datetime(${R}, 'unixepoch')`;
|
|
289
|
+
return _`datetime(${A}, 'start of year',
|
|
272
290
|
'+' || (((CAST(strftime('%m', ${A}) AS INTEGER) - 1) / 3) * 3) || ' months')`;
|
|
273
291
|
case "month":
|
|
274
|
-
return
|
|
292
|
+
return _`datetime(${R}, 'unixepoch', 'start of month')`;
|
|
275
293
|
case "week":
|
|
276
|
-
return
|
|
294
|
+
return _`date(datetime(${R}, 'unixepoch'), 'weekday 1', '-6 days')`;
|
|
277
295
|
case "day":
|
|
278
|
-
return
|
|
296
|
+
return _`datetime(${R}, 'unixepoch', 'start of day')`;
|
|
279
297
|
case "hour":
|
|
280
|
-
const S =
|
|
281
|
-
return
|
|
298
|
+
const S = _`datetime(${R}, 'unixepoch')`;
|
|
299
|
+
return _`datetime(strftime('%Y-%m-%d %H:00:00', ${S}))`;
|
|
282
300
|
case "minute":
|
|
283
|
-
const I =
|
|
284
|
-
return
|
|
301
|
+
const I = _`datetime(${R}, 'unixepoch')`;
|
|
302
|
+
return _`datetime(strftime('%Y-%m-%d %H:%M:00', ${I}))`;
|
|
285
303
|
case "second":
|
|
286
|
-
const N =
|
|
287
|
-
return
|
|
304
|
+
const N = _`datetime(${R}, 'unixepoch')`;
|
|
305
|
+
return _`datetime(strftime('%Y-%m-%d %H:%M:%S', ${N}))`;
|
|
288
306
|
default:
|
|
289
|
-
return
|
|
307
|
+
return _`datetime(${R}, 'unixepoch')`;
|
|
290
308
|
}
|
|
291
309
|
}
|
|
292
310
|
/**
|
|
@@ -294,16 +312,25 @@ class qT extends pE {
|
|
|
294
312
|
* SQLite LIKE is case-insensitive by default, but LOWER() ensures consistency
|
|
295
313
|
*/
|
|
296
314
|
buildStringCondition(E, R, A) {
|
|
297
|
-
const S = this.buildPattern(R, A.toLowerCase());
|
|
298
315
|
switch (R) {
|
|
299
316
|
case "contains":
|
|
300
|
-
return
|
|
317
|
+
return _`LOWER(${E}) LIKE ${`%${A.toLowerCase()}%`}`;
|
|
301
318
|
case "notContains":
|
|
302
|
-
return
|
|
319
|
+
return _`LOWER(${E}) NOT LIKE ${`%${A.toLowerCase()}%`}`;
|
|
303
320
|
case "startsWith":
|
|
304
|
-
return
|
|
321
|
+
return _`LOWER(${E}) LIKE ${`${A.toLowerCase()}%`}`;
|
|
305
322
|
case "endsWith":
|
|
306
|
-
return
|
|
323
|
+
return _`LOWER(${E}) LIKE ${`%${A.toLowerCase()}`}`;
|
|
324
|
+
case "like":
|
|
325
|
+
return _`${E} LIKE ${A}`;
|
|
326
|
+
case "notLike":
|
|
327
|
+
return _`${E} NOT LIKE ${A}`;
|
|
328
|
+
case "ilike":
|
|
329
|
+
return _`LOWER(${E}) LIKE ${A.toLowerCase()}`;
|
|
330
|
+
case "regex":
|
|
331
|
+
return _`${E} GLOB ${A}`;
|
|
332
|
+
case "notRegex":
|
|
333
|
+
return _`${E} NOT GLOB ${A}`;
|
|
307
334
|
default:
|
|
308
335
|
throw new Error(`Unsupported string operator: ${R}`);
|
|
309
336
|
}
|
|
@@ -315,11 +342,11 @@ class qT extends pE {
|
|
|
315
342
|
castToType(E, R) {
|
|
316
343
|
switch (R) {
|
|
317
344
|
case "timestamp":
|
|
318
|
-
return
|
|
345
|
+
return _`datetime(${E} / 1000, 'unixepoch')`;
|
|
319
346
|
case "decimal":
|
|
320
|
-
return
|
|
347
|
+
return _`CAST(${E} AS REAL)`;
|
|
321
348
|
case "integer":
|
|
322
|
-
return
|
|
349
|
+
return _`CAST(${E} AS INTEGER)`;
|
|
323
350
|
default:
|
|
324
351
|
throw new Error(`Unsupported cast type: ${R}`);
|
|
325
352
|
}
|
|
@@ -329,21 +356,21 @@ class qT extends pE {
|
|
|
329
356
|
* SQLite AVG returns NULL for empty sets, using IFNULL for consistency
|
|
330
357
|
*/
|
|
331
358
|
buildAvg(E) {
|
|
332
|
-
return
|
|
359
|
+
return _`IFNULL(AVG(${E}), 0)`;
|
|
333
360
|
}
|
|
334
361
|
/**
|
|
335
362
|
* Build SQLite CASE WHEN conditional expression
|
|
336
363
|
*/
|
|
337
364
|
buildCaseWhen(E, R) {
|
|
338
|
-
const A = E.map((S) => S.then && typeof S.then == "object" && (S.then.queryChunks || S.then._ || S.then.sql) ?
|
|
339
|
-
return R !== void 0 ? R && typeof R == "object" && (R.queryChunks || R._ || R.sql) ?
|
|
365
|
+
const A = E.map((S) => S.then && typeof S.then == "object" && (S.then.queryChunks || S.then._ || S.then.sql) ? _`WHEN ${S.when} THEN ${_.raw("(")}${S.then}${_.raw(")")}` : _`WHEN ${S.when} THEN ${S.then}`).reduce((S, I) => _`${S} ${I}`);
|
|
366
|
+
return R !== void 0 ? R && typeof R == "object" && (R.queryChunks || R._ || R.sql) ? _`CASE ${A} ELSE ${_.raw("(")}${R}${_.raw(")")} END` : _`CASE ${A} ELSE ${R} END` : _`CASE ${A} END`;
|
|
340
367
|
}
|
|
341
368
|
/**
|
|
342
369
|
* Build SQLite boolean literal
|
|
343
370
|
* SQLite uses 1/0 for true/false
|
|
344
371
|
*/
|
|
345
372
|
buildBooleanLiteral(E) {
|
|
346
|
-
return E ?
|
|
373
|
+
return E ? _`1` : _`0`;
|
|
347
374
|
}
|
|
348
375
|
/**
|
|
349
376
|
* Convert filter values to SQLite-compatible types
|
|
@@ -379,44 +406,31 @@ class qT extends pE {
|
|
|
379
406
|
return E;
|
|
380
407
|
}
|
|
381
408
|
}
|
|
382
|
-
function
|
|
409
|
+
function qT(T) {
|
|
383
410
|
switch (T) {
|
|
384
411
|
case "postgres":
|
|
385
412
|
return new QT();
|
|
386
413
|
case "mysql":
|
|
387
414
|
return new ZT();
|
|
388
415
|
case "sqlite":
|
|
389
|
-
return new
|
|
416
|
+
return new kT();
|
|
390
417
|
default:
|
|
391
418
|
throw new Error(`Unsupported database engine: ${T}`);
|
|
392
419
|
}
|
|
393
420
|
}
|
|
394
|
-
class
|
|
421
|
+
class fE {
|
|
395
422
|
constructor(E, R, A) {
|
|
396
|
-
|
|
423
|
+
W(this, "databaseAdapter");
|
|
397
424
|
this.db = E, this.schema = R;
|
|
398
425
|
const S = A || this.getEngineType();
|
|
399
|
-
this.databaseAdapter =
|
|
426
|
+
this.databaseAdapter = qT(S);
|
|
400
427
|
}
|
|
401
428
|
}
|
|
402
|
-
class jT extends
|
|
429
|
+
class jT extends fE {
|
|
403
430
|
async execute(E, R) {
|
|
404
|
-
if (E && typeof E == "object") {
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
return Array.isArray(S) ? S.map((I) => this.convertNumericFields(I, R)) : S;
|
|
408
|
-
}
|
|
409
|
-
if (this.db && typeof this.db.execute == "function")
|
|
410
|
-
try {
|
|
411
|
-
const S = await this.db.execute(E);
|
|
412
|
-
return Array.isArray(S) ? S.map((I) => this.convertNumericFields(I, R)) : S;
|
|
413
|
-
} catch (S) {
|
|
414
|
-
if (typeof E.getSQL == "function") {
|
|
415
|
-
const I = E.getSQL(), N = await this.db.execute(I);
|
|
416
|
-
return Array.isArray(N) ? N.map((e) => this.convertNumericFields(e, R)) : N;
|
|
417
|
-
}
|
|
418
|
-
throw S;
|
|
419
|
-
}
|
|
431
|
+
if (E && typeof E == "object" && typeof E.execute == "function") {
|
|
432
|
+
const S = await E.execute();
|
|
433
|
+
return Array.isArray(S) ? S.map((I) => this.convertNumericFields(I, R)) : S;
|
|
420
434
|
}
|
|
421
435
|
if (!this.db.execute)
|
|
422
436
|
throw new Error("PostgreSQL database instance must have an execute method");
|
|
@@ -464,10 +478,10 @@ class jT extends dE {
|
|
|
464
478
|
return "postgres";
|
|
465
479
|
}
|
|
466
480
|
}
|
|
467
|
-
function
|
|
481
|
+
function wE(T, E) {
|
|
468
482
|
return new jT(T, E, "postgres");
|
|
469
483
|
}
|
|
470
|
-
class zT extends
|
|
484
|
+
class zT extends fE {
|
|
471
485
|
async execute(E, R) {
|
|
472
486
|
if (E && typeof E == "object" && typeof E.execute == "function") {
|
|
473
487
|
const S = await E.execute();
|
|
@@ -508,7 +522,7 @@ class zT extends dE {
|
|
|
508
522
|
function ER(T, E) {
|
|
509
523
|
return new zT(T, E, "mysql");
|
|
510
524
|
}
|
|
511
|
-
class TR extends
|
|
525
|
+
class TR extends fE {
|
|
512
526
|
async execute(E, R) {
|
|
513
527
|
if (E && typeof E == "object" && typeof E.execute == "function") {
|
|
514
528
|
const A = await E.execute();
|
|
@@ -554,26 +568,26 @@ class TR extends dE {
|
|
|
554
568
|
return "sqlite";
|
|
555
569
|
}
|
|
556
570
|
}
|
|
557
|
-
function
|
|
571
|
+
function xE(T, E) {
|
|
558
572
|
return new TR(T, E, "sqlite");
|
|
559
573
|
}
|
|
560
|
-
function
|
|
574
|
+
function vE(T, E, R) {
|
|
561
575
|
if (R)
|
|
562
576
|
switch (R) {
|
|
563
577
|
case "postgres":
|
|
564
|
-
return
|
|
578
|
+
return wE(T, E);
|
|
565
579
|
case "mysql":
|
|
566
580
|
return ER(T, E);
|
|
567
581
|
case "sqlite":
|
|
568
|
-
return
|
|
582
|
+
return xE(T, E);
|
|
569
583
|
}
|
|
570
584
|
if (T.all && T.run)
|
|
571
|
-
return
|
|
585
|
+
return xE(T, E);
|
|
572
586
|
if (T.execute)
|
|
573
|
-
return
|
|
587
|
+
return wE(T, E);
|
|
574
588
|
throw new Error("Unable to determine database engine type. Please specify engineType parameter.");
|
|
575
589
|
}
|
|
576
|
-
function
|
|
590
|
+
function QE(T) {
|
|
577
591
|
return typeof T == "function" ? T() : T;
|
|
578
592
|
}
|
|
579
593
|
function RR(T, E) {
|
|
@@ -619,31 +633,31 @@ class AR {
|
|
|
619
633
|
for (const N of R.dimensions) {
|
|
620
634
|
const [e, n] = N.split("."), O = I.get(e);
|
|
621
635
|
if (O && O.dimensions && O.dimensions[n]) {
|
|
622
|
-
const
|
|
623
|
-
S[N] =
|
|
636
|
+
const t = O.dimensions[n], C = K(t.sql, A);
|
|
637
|
+
S[N] = _`${C}`.as(N);
|
|
624
638
|
}
|
|
625
639
|
}
|
|
626
640
|
if (R.measures)
|
|
627
641
|
for (const N of R.measures) {
|
|
628
642
|
const [e, n] = N.split("."), O = I.get(e);
|
|
629
643
|
if (O && O.measures && O.measures[n]) {
|
|
630
|
-
const
|
|
631
|
-
S[N] =
|
|
644
|
+
const t = O.measures[n], C = this.buildMeasureExpression(t, A);
|
|
645
|
+
S[N] = _`${C}`.as(N);
|
|
632
646
|
}
|
|
633
647
|
}
|
|
634
648
|
if (R.timeDimensions)
|
|
635
649
|
for (const N of R.timeDimensions) {
|
|
636
650
|
const [e, n] = N.dimension.split("."), O = I.get(e);
|
|
637
651
|
if (O && O.dimensions && O.dimensions[n]) {
|
|
638
|
-
const
|
|
639
|
-
|
|
652
|
+
const t = O.dimensions[n], C = this.buildTimeDimensionExpression(
|
|
653
|
+
t.sql,
|
|
640
654
|
N.granularity,
|
|
641
655
|
A
|
|
642
656
|
);
|
|
643
|
-
S[N.dimension] =
|
|
657
|
+
S[N.dimension] = _`${C}`.as(N.dimension);
|
|
644
658
|
}
|
|
645
659
|
}
|
|
646
|
-
return Object.keys(S).length === 0 && (S.count =
|
|
660
|
+
return Object.keys(S).length === 0 && (S.count = IE()), S;
|
|
647
661
|
}
|
|
648
662
|
/**
|
|
649
663
|
* Build measure expression for HAVING clause, handling CTE references correctly
|
|
@@ -652,7 +666,7 @@ class AR {
|
|
|
652
666
|
if (I && I.preAggregationCTEs) {
|
|
653
667
|
const N = I.preAggregationCTEs.find((e) => e.cube.name === E);
|
|
654
668
|
if (N && N.measures.includes(`${E}.${R}`)) {
|
|
655
|
-
const e =
|
|
669
|
+
const e = _`${_.identifier(N.cteAlias)}.${_.identifier(R)}`;
|
|
656
670
|
switch (A.type) {
|
|
657
671
|
case "count":
|
|
658
672
|
case "countDistinct":
|
|
@@ -661,9 +675,9 @@ class AR {
|
|
|
661
675
|
case "avg":
|
|
662
676
|
return this.databaseAdapter.buildAvg(e);
|
|
663
677
|
case "min":
|
|
664
|
-
return
|
|
678
|
+
return VE(e);
|
|
665
679
|
case "max":
|
|
666
|
-
return
|
|
680
|
+
return dE(e);
|
|
667
681
|
case "number":
|
|
668
682
|
return y(e);
|
|
669
683
|
default:
|
|
@@ -689,21 +703,21 @@ class AR {
|
|
|
689
703
|
}
|
|
690
704
|
switch (E.type) {
|
|
691
705
|
case "count":
|
|
692
|
-
return
|
|
706
|
+
return IE(A);
|
|
693
707
|
case "countDistinct":
|
|
694
|
-
return
|
|
708
|
+
return wT(A);
|
|
695
709
|
case "sum":
|
|
696
710
|
return y(A);
|
|
697
711
|
case "avg":
|
|
698
712
|
return this.databaseAdapter.buildAvg(A);
|
|
699
713
|
case "min":
|
|
700
|
-
return
|
|
714
|
+
return VE(A);
|
|
701
715
|
case "max":
|
|
702
|
-
return
|
|
716
|
+
return dE(A);
|
|
703
717
|
case "number":
|
|
704
718
|
return A;
|
|
705
719
|
default:
|
|
706
|
-
return
|
|
720
|
+
return IE(A);
|
|
707
721
|
}
|
|
708
722
|
}
|
|
709
723
|
/**
|
|
@@ -711,7 +725,7 @@ class AR {
|
|
|
711
725
|
*/
|
|
712
726
|
buildTimeDimensionExpression(E, R, A) {
|
|
713
727
|
const S = K(E, A);
|
|
714
|
-
return R ? this.databaseAdapter.buildTimeDimension(R, S) : S instanceof
|
|
728
|
+
return R ? this.databaseAdapter.buildTimeDimension(R, S) : S instanceof xT ? S : _`${S}`;
|
|
715
729
|
}
|
|
716
730
|
/**
|
|
717
731
|
* Build WHERE conditions from semantic query filters (dimensions only)
|
|
@@ -726,11 +740,11 @@ class AR {
|
|
|
726
740
|
}
|
|
727
741
|
if (R.timeDimensions)
|
|
728
742
|
for (const e of R.timeDimensions) {
|
|
729
|
-
const [n, O] = e.dimension.split("."),
|
|
730
|
-
if (
|
|
743
|
+
const [n, O] = e.dimension.split("."), t = N.get(n);
|
|
744
|
+
if (t && t.dimensions[O] && e.dateRange) {
|
|
731
745
|
if (S != null && S.preAggregationCTEs && S.preAggregationCTEs.some((U) => U.cube.name === n))
|
|
732
746
|
continue;
|
|
733
|
-
const C =
|
|
747
|
+
const C = t.dimensions[O], s = K(C.sql, A), i = this.buildDateRangeCondition(s, e.dateRange);
|
|
734
748
|
i && I.push(i);
|
|
735
749
|
}
|
|
736
750
|
}
|
|
@@ -762,24 +776,24 @@ class AR {
|
|
|
762
776
|
}
|
|
763
777
|
if (i.or) {
|
|
764
778
|
const a = i.or.map((U) => this.processFilter(U, R, A, S, I)).filter((U) => U !== null);
|
|
765
|
-
return a.length > 0 ?
|
|
779
|
+
return a.length > 0 ? OE(...a) : null;
|
|
766
780
|
}
|
|
767
781
|
}
|
|
768
782
|
const N = E, [e, n] = N.member.split("."), O = R.get(e);
|
|
769
783
|
if (!O) return null;
|
|
770
|
-
const
|
|
771
|
-
if (!
|
|
772
|
-
if (S === "where" &&
|
|
784
|
+
const t = O.dimensions[n], C = O.measures[n], s = t || C;
|
|
785
|
+
if (!s) return null;
|
|
786
|
+
if (S === "where" && t) {
|
|
773
787
|
if (I != null && I.preAggregationCTEs && I.preAggregationCTEs.some((U) => U.cube.name === e))
|
|
774
788
|
return null;
|
|
775
|
-
const i = K(
|
|
776
|
-
return this.buildFilterCondition(i, N.operator, N.values,
|
|
789
|
+
const i = K(t.sql, A);
|
|
790
|
+
return this.buildFilterCondition(i, N.operator, N.values, s);
|
|
777
791
|
} else {
|
|
778
792
|
if (S === "where" && C)
|
|
779
793
|
return null;
|
|
780
794
|
if (S === "having" && C) {
|
|
781
795
|
const i = this.buildHavingMeasureExpression(e, n, C, A, I);
|
|
782
|
-
return this.buildFilterCondition(i, N.operator, N.values,
|
|
796
|
+
return this.buildFilterCondition(i, N.operator, N.values, s);
|
|
783
797
|
}
|
|
784
798
|
}
|
|
785
799
|
return null;
|
|
@@ -799,16 +813,16 @@ class AR {
|
|
|
799
813
|
if (I.length > 1) {
|
|
800
814
|
if ((S == null ? void 0 : S.type) === "time") {
|
|
801
815
|
const e = I.map((n) => this.normalizeDate(n) || n);
|
|
802
|
-
return
|
|
816
|
+
return NE(E, e);
|
|
803
817
|
}
|
|
804
|
-
return
|
|
818
|
+
return NE(E, I);
|
|
805
819
|
} else if (I.length === 1) {
|
|
806
820
|
const e = (S == null ? void 0 : S.type) === "time" && this.normalizeDate(N) || N;
|
|
807
|
-
return
|
|
821
|
+
return EE(E, e);
|
|
808
822
|
}
|
|
809
823
|
return this.databaseAdapter.buildBooleanLiteral(!1);
|
|
810
824
|
case "notEquals":
|
|
811
|
-
return I.length > 1 ?
|
|
825
|
+
return I.length > 1 ? gE(E, I) : I.length === 1 ? yE(E, N) : null;
|
|
812
826
|
case "contains":
|
|
813
827
|
return this.databaseAdapter.buildStringCondition(E, "contains", N);
|
|
814
828
|
case "notContains":
|
|
@@ -818,35 +832,69 @@ class AR {
|
|
|
818
832
|
case "endsWith":
|
|
819
833
|
return this.databaseAdapter.buildStringCondition(E, "endsWith", N);
|
|
820
834
|
case "gt":
|
|
821
|
-
return
|
|
835
|
+
return CE(E, N);
|
|
822
836
|
case "gte":
|
|
823
|
-
return
|
|
837
|
+
return J(E, N);
|
|
824
838
|
case "lt":
|
|
825
|
-
return
|
|
839
|
+
return eE(E, N);
|
|
826
840
|
case "lte":
|
|
827
|
-
return
|
|
841
|
+
return w(E, N);
|
|
828
842
|
case "set":
|
|
829
|
-
return
|
|
843
|
+
return KE(E);
|
|
830
844
|
case "notSet":
|
|
831
|
-
return
|
|
845
|
+
return $E(E);
|
|
832
846
|
case "inDateRange":
|
|
833
847
|
if (I.length >= 2) {
|
|
834
848
|
const e = this.normalizeDate(I[0]), n = this.normalizeDate(I[1]);
|
|
835
849
|
if (e && n)
|
|
836
850
|
return d(
|
|
837
|
-
|
|
838
|
-
|
|
851
|
+
J(E, e),
|
|
852
|
+
w(E, n)
|
|
839
853
|
);
|
|
840
854
|
}
|
|
841
855
|
return null;
|
|
842
856
|
case "beforeDate": {
|
|
843
857
|
const e = this.normalizeDate(N);
|
|
844
|
-
return e ?
|
|
858
|
+
return e ? eE(E, e) : null;
|
|
845
859
|
}
|
|
846
860
|
case "afterDate": {
|
|
847
861
|
const e = this.normalizeDate(N);
|
|
848
|
-
return e ?
|
|
862
|
+
return e ? CE(E, e) : null;
|
|
849
863
|
}
|
|
864
|
+
case "between":
|
|
865
|
+
return I.length >= 2 ? d(
|
|
866
|
+
J(E, I[0]),
|
|
867
|
+
w(E, I[1])
|
|
868
|
+
) : null;
|
|
869
|
+
case "notBetween":
|
|
870
|
+
return I.length >= 2 ? OE(
|
|
871
|
+
eE(E, I[0]),
|
|
872
|
+
CE(E, I[1])
|
|
873
|
+
) : null;
|
|
874
|
+
case "in":
|
|
875
|
+
return I.length > 0 ? NE(E, I) : null;
|
|
876
|
+
case "notIn":
|
|
877
|
+
return I.length > 0 ? gE(E, I) : null;
|
|
878
|
+
case "like":
|
|
879
|
+
return this.databaseAdapter.buildStringCondition(E, "like", N);
|
|
880
|
+
case "notLike":
|
|
881
|
+
return this.databaseAdapter.buildStringCondition(E, "notLike", N);
|
|
882
|
+
case "ilike":
|
|
883
|
+
return this.databaseAdapter.buildStringCondition(E, "ilike", N);
|
|
884
|
+
case "regex":
|
|
885
|
+
return this.databaseAdapter.buildStringCondition(E, "regex", N);
|
|
886
|
+
case "notRegex":
|
|
887
|
+
return this.databaseAdapter.buildStringCondition(E, "notRegex", N);
|
|
888
|
+
case "isEmpty":
|
|
889
|
+
return OE(
|
|
890
|
+
$E(E),
|
|
891
|
+
EE(E, "")
|
|
892
|
+
);
|
|
893
|
+
case "isNotEmpty":
|
|
894
|
+
return d(
|
|
895
|
+
KE(E),
|
|
896
|
+
yE(E, "")
|
|
897
|
+
);
|
|
850
898
|
default:
|
|
851
899
|
return null;
|
|
852
900
|
}
|
|
@@ -859,16 +907,16 @@ class AR {
|
|
|
859
907
|
if (Array.isArray(R) && R.length >= 2) {
|
|
860
908
|
const A = this.normalizeDate(R[0]), S = this.normalizeDate(R[1]);
|
|
861
909
|
return !A || !S ? null : d(
|
|
862
|
-
|
|
863
|
-
|
|
910
|
+
J(E, A),
|
|
911
|
+
w(E, S)
|
|
864
912
|
);
|
|
865
913
|
}
|
|
866
914
|
if (typeof R == "string") {
|
|
867
915
|
const A = this.parseRelativeDateRange(R);
|
|
868
916
|
if (A)
|
|
869
917
|
return d(
|
|
870
|
-
|
|
871
|
-
|
|
918
|
+
J(E, A.start),
|
|
919
|
+
w(E, A.end)
|
|
872
920
|
);
|
|
873
921
|
const S = this.normalizeDate(R);
|
|
874
922
|
if (!S) return null;
|
|
@@ -876,8 +924,8 @@ class AR {
|
|
|
876
924
|
I.setUTCHours(0, 0, 0, 0);
|
|
877
925
|
const N = new Date(S);
|
|
878
926
|
return N.setUTCHours(23, 59, 59, 999), d(
|
|
879
|
-
|
|
880
|
-
|
|
927
|
+
J(E, I),
|
|
928
|
+
w(E, N)
|
|
881
929
|
);
|
|
882
930
|
}
|
|
883
931
|
return null;
|
|
@@ -891,71 +939,71 @@ class AR {
|
|
|
891
939
|
if (A === "today") {
|
|
892
940
|
const C = new Date(R);
|
|
893
941
|
C.setUTCHours(0, 0, 0, 0);
|
|
894
|
-
const
|
|
895
|
-
return
|
|
942
|
+
const s = new Date(R);
|
|
943
|
+
return s.setUTCHours(23, 59, 59, 999), { start: C, end: s };
|
|
896
944
|
}
|
|
897
945
|
if (A === "yesterday") {
|
|
898
946
|
const C = new Date(R);
|
|
899
947
|
C.setUTCDate(N - 1), C.setUTCHours(0, 0, 0, 0);
|
|
900
|
-
const
|
|
901
|
-
return
|
|
948
|
+
const s = new Date(R);
|
|
949
|
+
return s.setUTCDate(N - 1), s.setUTCHours(23, 59, 59, 999), { start: C, end: s };
|
|
902
950
|
}
|
|
903
951
|
if (A === "this week") {
|
|
904
|
-
const C = e === 0 ? -6 : 1 - e,
|
|
905
|
-
|
|
906
|
-
const i = new Date(
|
|
907
|
-
return i.setUTCDate(
|
|
952
|
+
const C = e === 0 ? -6 : 1 - e, s = new Date(R);
|
|
953
|
+
s.setUTCDate(N + C), s.setUTCHours(0, 0, 0, 0);
|
|
954
|
+
const i = new Date(s);
|
|
955
|
+
return i.setUTCDate(s.getUTCDate() + 6), i.setUTCHours(23, 59, 59, 999), { start: s, end: i };
|
|
908
956
|
}
|
|
909
957
|
if (A === "this month") {
|
|
910
|
-
const C = new Date(Date.UTC(S, I, 1, 0, 0, 0, 0)),
|
|
911
|
-
return { start: C, end:
|
|
958
|
+
const C = new Date(Date.UTC(S, I, 1, 0, 0, 0, 0)), s = new Date(Date.UTC(S, I + 1, 0, 23, 59, 59, 999));
|
|
959
|
+
return { start: C, end: s };
|
|
912
960
|
}
|
|
913
961
|
if (A === "this quarter") {
|
|
914
|
-
const C = Math.floor(I / 3),
|
|
915
|
-
return { start:
|
|
962
|
+
const C = Math.floor(I / 3), s = new Date(Date.UTC(S, C * 3, 1, 0, 0, 0, 0)), i = new Date(Date.UTC(S, C * 3 + 3, 0, 23, 59, 59, 999));
|
|
963
|
+
return { start: s, end: i };
|
|
916
964
|
}
|
|
917
965
|
if (A === "this year") {
|
|
918
|
-
const C = new Date(Date.UTC(S, 0, 1, 0, 0, 0, 0)),
|
|
919
|
-
return { start: C, end:
|
|
966
|
+
const C = new Date(Date.UTC(S, 0, 1, 0, 0, 0, 0)), s = new Date(Date.UTC(S, 11, 31, 23, 59, 59, 999));
|
|
967
|
+
return { start: C, end: s };
|
|
920
968
|
}
|
|
921
969
|
const n = A.match(/^last\s+(\d+)\s+days?$/);
|
|
922
970
|
if (n) {
|
|
923
|
-
const C = parseInt(n[1], 10),
|
|
924
|
-
|
|
971
|
+
const C = parseInt(n[1], 10), s = new Date(R);
|
|
972
|
+
s.setUTCDate(N - C + 1), s.setUTCHours(0, 0, 0, 0);
|
|
925
973
|
const i = new Date(R);
|
|
926
|
-
return i.setUTCHours(23, 59, 59, 999), { start:
|
|
974
|
+
return i.setUTCHours(23, 59, 59, 999), { start: s, end: i };
|
|
927
975
|
}
|
|
928
976
|
if (A === "last week") {
|
|
929
|
-
const C = e === 0 ? -13 : -6 - e,
|
|
930
|
-
|
|
931
|
-
const i = new Date(
|
|
932
|
-
return i.setUTCDate(
|
|
977
|
+
const C = e === 0 ? -13 : -6 - e, s = new Date(R);
|
|
978
|
+
s.setUTCDate(N + C), s.setUTCHours(0, 0, 0, 0);
|
|
979
|
+
const i = new Date(s);
|
|
980
|
+
return i.setUTCDate(s.getUTCDate() + 6), i.setUTCHours(23, 59, 59, 999), { start: s, end: i };
|
|
933
981
|
}
|
|
934
982
|
if (A === "last month") {
|
|
935
|
-
const C = new Date(Date.UTC(S, I - 1, 1, 0, 0, 0, 0)),
|
|
936
|
-
return { start: C, end:
|
|
983
|
+
const C = new Date(Date.UTC(S, I - 1, 1, 0, 0, 0, 0)), s = new Date(Date.UTC(S, I, 0, 23, 59, 59, 999));
|
|
984
|
+
return { start: C, end: s };
|
|
937
985
|
}
|
|
938
986
|
if (A === "last quarter") {
|
|
939
|
-
const C = Math.floor(I / 3),
|
|
987
|
+
const C = Math.floor(I / 3), s = C === 0 ? 3 : C - 1, i = C === 0 ? S - 1 : S, a = new Date(Date.UTC(i, s * 3, 1, 0, 0, 0, 0)), U = new Date(Date.UTC(i, s * 3 + 3, 0, 23, 59, 59, 999));
|
|
940
988
|
return { start: a, end: U };
|
|
941
989
|
}
|
|
942
990
|
if (A === "last year") {
|
|
943
|
-
const C = new Date(Date.UTC(S - 1, 0, 1, 0, 0, 0, 0)),
|
|
944
|
-
return { start: C, end:
|
|
991
|
+
const C = new Date(Date.UTC(S - 1, 0, 1, 0, 0, 0, 0)), s = new Date(Date.UTC(S - 1, 11, 31, 23, 59, 59, 999));
|
|
992
|
+
return { start: C, end: s };
|
|
945
993
|
}
|
|
946
994
|
if (A === "last 12 months") {
|
|
947
|
-
const C = new Date(Date.UTC(S, I - 11, 1, 0, 0, 0, 0)),
|
|
948
|
-
return
|
|
995
|
+
const C = new Date(Date.UTC(S, I - 11, 1, 0, 0, 0, 0)), s = new Date(R);
|
|
996
|
+
return s.setUTCHours(23, 59, 59, 999), { start: C, end: s };
|
|
949
997
|
}
|
|
950
998
|
const O = A.match(/^last\s+(\d+)\s+months?$/);
|
|
951
999
|
if (O) {
|
|
952
|
-
const C = parseInt(O[1], 10),
|
|
953
|
-
return i.setUTCHours(23, 59, 59, 999), { start:
|
|
1000
|
+
const C = parseInt(O[1], 10), s = new Date(Date.UTC(S, I - C + 1, 1, 0, 0, 0, 0)), i = new Date(R);
|
|
1001
|
+
return i.setUTCHours(23, 59, 59, 999), { start: s, end: i };
|
|
954
1002
|
}
|
|
955
|
-
const
|
|
956
|
-
if (
|
|
957
|
-
const C = parseInt(
|
|
958
|
-
return i.setUTCHours(23, 59, 59, 999), { start:
|
|
1003
|
+
const t = A.match(/^last\s+(\d+)\s+years?$/);
|
|
1004
|
+
if (t) {
|
|
1005
|
+
const C = parseInt(t[1], 10), s = new Date(Date.UTC(S - C, 0, 1, 0, 0, 0, 0)), i = new Date(R);
|
|
1006
|
+
return i.setUTCHours(23, 59, 59, 999), { start: s, end: i };
|
|
959
1007
|
}
|
|
960
1008
|
return null;
|
|
961
1009
|
}
|
|
@@ -990,43 +1038,43 @@ class AR {
|
|
|
990
1038
|
return [];
|
|
991
1039
|
const e = E instanceof Map ? E : /* @__PURE__ */ new Map([[E.name, E]]);
|
|
992
1040
|
if (R.dimensions)
|
|
993
|
-
for (const
|
|
994
|
-
const [C,
|
|
995
|
-
if (i && i.dimensions && i.dimensions[
|
|
1041
|
+
for (const t of R.dimensions) {
|
|
1042
|
+
const [C, s] = t.split("."), i = e.get(C);
|
|
1043
|
+
if (i && i.dimensions && i.dimensions[s])
|
|
996
1044
|
if ((n = S == null ? void 0 : S.preAggregationCTEs) == null ? void 0 : n.some((U) => U.cube.name === C)) {
|
|
997
|
-
const U = S.preAggregationCTEs.find((G) => G.cube.name === C), o = U.joinKeys.find((G) => G.targetColumn ===
|
|
1045
|
+
const U = S.preAggregationCTEs.find((G) => G.cube.name === C), o = U.joinKeys.find((G) => G.targetColumn === s);
|
|
998
1046
|
if (o && o.sourceColumnObj)
|
|
999
1047
|
I.push(o.sourceColumnObj);
|
|
1000
1048
|
else {
|
|
1001
|
-
const G =
|
|
1049
|
+
const G = _`${_.identifier(U.cteAlias)}.${_.identifier(s)}`;
|
|
1002
1050
|
I.push(G);
|
|
1003
1051
|
}
|
|
1004
1052
|
} else {
|
|
1005
|
-
const U = i.dimensions[
|
|
1053
|
+
const U = i.dimensions[s], o = K(U.sql, A);
|
|
1006
1054
|
I.push(o);
|
|
1007
1055
|
}
|
|
1008
1056
|
}
|
|
1009
1057
|
if (R.timeDimensions)
|
|
1010
|
-
for (const
|
|
1011
|
-
const [C,
|
|
1012
|
-
if (i && i.dimensions && i.dimensions[
|
|
1058
|
+
for (const t of R.timeDimensions) {
|
|
1059
|
+
const [C, s] = t.dimension.split("."), i = e.get(C);
|
|
1060
|
+
if (i && i.dimensions && i.dimensions[s])
|
|
1013
1061
|
if ((O = S == null ? void 0 : S.preAggregationCTEs) == null ? void 0 : O.some((U) => U.cube.name === C)) {
|
|
1014
|
-
const U = S.preAggregationCTEs.find((G) => G.cube.name === C), o = U.joinKeys.find((G) => G.targetColumn ===
|
|
1062
|
+
const U = S.preAggregationCTEs.find((G) => G.cube.name === C), o = U.joinKeys.find((G) => G.targetColumn === s);
|
|
1015
1063
|
if (o && o.sourceColumnObj) {
|
|
1016
1064
|
const G = this.buildTimeDimensionExpression(
|
|
1017
1065
|
o.sourceColumnObj,
|
|
1018
|
-
|
|
1066
|
+
t.granularity,
|
|
1019
1067
|
A
|
|
1020
1068
|
);
|
|
1021
1069
|
I.push(G);
|
|
1022
1070
|
} else {
|
|
1023
|
-
const G =
|
|
1071
|
+
const G = _`${_.identifier(U.cteAlias)}.${_.identifier(s)}`;
|
|
1024
1072
|
I.push(G);
|
|
1025
1073
|
}
|
|
1026
1074
|
} else {
|
|
1027
|
-
const U = i.dimensions[
|
|
1075
|
+
const U = i.dimensions[s], o = this.buildTimeDimensionExpression(
|
|
1028
1076
|
U.sql,
|
|
1029
|
-
|
|
1077
|
+
t.granularity,
|
|
1030
1078
|
A
|
|
1031
1079
|
);
|
|
1032
1080
|
I.push(o);
|
|
@@ -1048,7 +1096,7 @@ class AR {
|
|
|
1048
1096
|
for (const [N, e] of Object.entries(E.order)) {
|
|
1049
1097
|
if (!S.includes(N))
|
|
1050
1098
|
throw new Error(`Cannot order by '${N}': field is not selected in the query`);
|
|
1051
|
-
const n = e === "desc" ? vT(
|
|
1099
|
+
const n = e === "desc" ? vT(_.identifier(N)) : JE(_.identifier(N));
|
|
1052
1100
|
A.push(n);
|
|
1053
1101
|
}
|
|
1054
1102
|
if (E.timeDimensions && E.timeDimensions.length > 0) {
|
|
@@ -1056,7 +1104,7 @@ class AR {
|
|
|
1056
1104
|
(n, O) => n.dimension.localeCompare(O.dimension)
|
|
1057
1105
|
);
|
|
1058
1106
|
for (const n of e)
|
|
1059
|
-
N.has(n.dimension) || A.push(
|
|
1107
|
+
N.has(n.dimension) || A.push(JE(_.identifier(n.dimension)));
|
|
1060
1108
|
}
|
|
1061
1109
|
return A;
|
|
1062
1110
|
}
|
|
@@ -1253,24 +1301,24 @@ class SR {
|
|
|
1253
1301
|
const n = this.findJoinPath(E, R.name, e, I);
|
|
1254
1302
|
if (!n || n.length === 0)
|
|
1255
1303
|
throw new Error(`No join path found from '${R.name}' to '${e}'`);
|
|
1256
|
-
for (const { toCube: O, joinDef:
|
|
1304
|
+
for (const { toCube: O, joinDef: t } of n) {
|
|
1257
1305
|
if (I.has(O))
|
|
1258
1306
|
continue;
|
|
1259
1307
|
const C = E.get(O);
|
|
1260
1308
|
if (!C)
|
|
1261
1309
|
throw new Error(`Cube '${O}' not found`);
|
|
1262
|
-
const
|
|
1263
|
-
|
|
1310
|
+
const s = this.buildJoinCondition(
|
|
1311
|
+
t,
|
|
1264
1312
|
null,
|
|
1265
1313
|
// No source alias needed - use the actual column
|
|
1266
1314
|
null
|
|
1267
1315
|
// No target alias needed - use the actual column
|
|
1268
|
-
), i = RR(
|
|
1316
|
+
), i = RR(t.relationship, t.sqlJoinType);
|
|
1269
1317
|
S.push({
|
|
1270
1318
|
cube: C,
|
|
1271
1319
|
alias: `${O.toLowerCase()}_cube`,
|
|
1272
1320
|
joinType: i,
|
|
1273
|
-
joinCondition:
|
|
1321
|
+
joinCondition: s
|
|
1274
1322
|
}), I.add(O);
|
|
1275
1323
|
}
|
|
1276
1324
|
}
|
|
@@ -1282,7 +1330,7 @@ class SR {
|
|
|
1282
1330
|
buildJoinCondition(E, R, A) {
|
|
1283
1331
|
const S = [];
|
|
1284
1332
|
for (const I of E.on) {
|
|
1285
|
-
const N = R ?
|
|
1333
|
+
const N = R ? _`${_.identifier(R)}.${_.identifier(I.source.name)}` : I.source, e = A ? _`${_.identifier(A)}.${_.identifier(I.target.name)}` : I.target, n = I.as || EE;
|
|
1286
1334
|
S.push(n(N, e));
|
|
1287
1335
|
}
|
|
1288
1336
|
return d(...S);
|
|
@@ -1300,18 +1348,18 @@ class SR {
|
|
|
1300
1348
|
for (; I.length > 0; ) {
|
|
1301
1349
|
const { cube: e, path: n } = I.shift(), O = E.get(e);
|
|
1302
1350
|
if (O != null && O.joins)
|
|
1303
|
-
for (const [,
|
|
1304
|
-
const
|
|
1305
|
-
if (N.has(
|
|
1351
|
+
for (const [, t] of Object.entries(O.joins)) {
|
|
1352
|
+
const s = QE(t.targetCube).name;
|
|
1353
|
+
if (N.has(s))
|
|
1306
1354
|
continue;
|
|
1307
1355
|
const i = [...n, {
|
|
1308
1356
|
fromCube: e,
|
|
1309
|
-
toCube:
|
|
1310
|
-
joinDef:
|
|
1357
|
+
toCube: s,
|
|
1358
|
+
joinDef: t
|
|
1311
1359
|
}];
|
|
1312
|
-
if (
|
|
1360
|
+
if (s === A)
|
|
1313
1361
|
return i;
|
|
1314
|
-
N.add(
|
|
1362
|
+
N.add(s), I.push({ cube: s, path: i });
|
|
1315
1363
|
}
|
|
1316
1364
|
}
|
|
1317
1365
|
return null;
|
|
@@ -1328,22 +1376,22 @@ class SR {
|
|
|
1328
1376
|
if (!e)
|
|
1329
1377
|
continue;
|
|
1330
1378
|
const n = S.measures ? S.measures.filter(
|
|
1331
|
-
(
|
|
1332
|
-
) : [], O = this.extractMeasuresFromFilters(S, N.cube.name),
|
|
1333
|
-
if (
|
|
1379
|
+
(s) => s.startsWith(N.cube.name + ".")
|
|
1380
|
+
) : [], O = this.extractMeasuresFromFilters(S, N.cube.name), t = [.../* @__PURE__ */ new Set([...n, ...O])];
|
|
1381
|
+
if (t.length === 0)
|
|
1334
1382
|
continue;
|
|
1335
|
-
const C = e.on.map((
|
|
1336
|
-
sourceColumn:
|
|
1337
|
-
targetColumn:
|
|
1338
|
-
sourceColumnObj:
|
|
1339
|
-
targetColumnObj:
|
|
1383
|
+
const C = e.on.map((s) => ({
|
|
1384
|
+
sourceColumn: s.source.name,
|
|
1385
|
+
targetColumn: s.target.name,
|
|
1386
|
+
sourceColumnObj: s.source,
|
|
1387
|
+
targetColumnObj: s.target
|
|
1340
1388
|
}));
|
|
1341
1389
|
I.push({
|
|
1342
1390
|
cube: N.cube,
|
|
1343
1391
|
alias: N.alias,
|
|
1344
1392
|
cteAlias: `${N.cube.name.toLowerCase()}_agg`,
|
|
1345
1393
|
joinKeys: C,
|
|
1346
|
-
measures:
|
|
1394
|
+
measures: t
|
|
1347
1395
|
});
|
|
1348
1396
|
}
|
|
1349
1397
|
return I;
|
|
@@ -1355,16 +1403,16 @@ class SR {
|
|
|
1355
1403
|
if (!E.joins)
|
|
1356
1404
|
return null;
|
|
1357
1405
|
for (const [, A] of Object.entries(E.joins))
|
|
1358
|
-
if (
|
|
1406
|
+
if (QE(A.targetCube).name === R && A.relationship === "hasMany")
|
|
1359
1407
|
return A;
|
|
1360
1408
|
return null;
|
|
1361
1409
|
}
|
|
1362
1410
|
}
|
|
1363
|
-
class
|
|
1411
|
+
class tE {
|
|
1364
1412
|
constructor(E) {
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1413
|
+
W(this, "queryBuilder");
|
|
1414
|
+
W(this, "queryPlanner");
|
|
1415
|
+
W(this, "databaseAdapter");
|
|
1368
1416
|
if (this.dbExecutor = E, this.databaseAdapter = E.databaseAdapter, !this.databaseAdapter)
|
|
1369
1417
|
throw new Error("DatabaseExecutor must have a databaseAdapter property");
|
|
1370
1418
|
this.queryBuilder = new AR(this.databaseAdapter), this.queryPlanner = new SR();
|
|
@@ -1374,15 +1422,15 @@ class IE {
|
|
|
1374
1422
|
*/
|
|
1375
1423
|
async execute(E, R, A) {
|
|
1376
1424
|
try {
|
|
1377
|
-
const S =
|
|
1425
|
+
const S = KT(E, R);
|
|
1378
1426
|
if (!S.isValid)
|
|
1379
1427
|
throw new Error(`Query validation failed: ${S.errors.join(", ")}`);
|
|
1380
1428
|
const I = {
|
|
1381
1429
|
db: this.dbExecutor.db,
|
|
1382
1430
|
schema: this.dbExecutor.schema,
|
|
1383
1431
|
securityContext: A
|
|
1384
|
-
}, N = this.queryPlanner.createQueryPlan(E, R, I), e = this.buildUnifiedQuery(N, R, I), n = this.queryBuilder.collectNumericFields(E, R), O = await this.dbExecutor.execute(e, n),
|
|
1385
|
-
const i = { ...
|
|
1432
|
+
}, N = this.queryPlanner.createQueryPlan(E, R, I), e = this.buildUnifiedQuery(N, R, I), n = this.queryBuilder.collectNumericFields(E, R), O = await this.dbExecutor.execute(e, n), t = Array.isArray(O) ? O.map((s) => {
|
|
1433
|
+
const i = { ...s };
|
|
1386
1434
|
if (R.timeDimensions) {
|
|
1387
1435
|
for (const a of R.timeDimensions)
|
|
1388
1436
|
if (a.dimension in i) {
|
|
@@ -1397,7 +1445,7 @@ class IE {
|
|
|
1397
1445
|
return i;
|
|
1398
1446
|
}) : [O], C = this.generateAnnotations(N, R);
|
|
1399
1447
|
return {
|
|
1400
|
-
data:
|
|
1448
|
+
data: t,
|
|
1401
1449
|
annotation: C
|
|
1402
1450
|
};
|
|
1403
1451
|
} catch (S) {
|
|
@@ -1421,13 +1469,13 @@ class IE {
|
|
|
1421
1469
|
if (o.targetColumnObj) {
|
|
1422
1470
|
e[o.targetColumn] = o.targetColumnObj;
|
|
1423
1471
|
for (const [G, P] of Object.entries(I.dimensions || {}))
|
|
1424
|
-
P.sql === o.targetColumnObj && G !== o.targetColumn && (e[G] =
|
|
1472
|
+
P.sql === o.targetColumnObj && G !== o.targetColumn && (e[G] = _`${o.targetColumnObj}`.as(G));
|
|
1425
1473
|
}
|
|
1426
1474
|
for (const o of E.measures) {
|
|
1427
1475
|
const [, G] = o.split(".");
|
|
1428
1476
|
if (I.measures && I.measures[G]) {
|
|
1429
1477
|
const P = I.measures[G], H = this.queryBuilder.buildMeasureExpression(P, A);
|
|
1430
|
-
e[G] =
|
|
1478
|
+
e[G] = _`${H}`.as(G);
|
|
1431
1479
|
}
|
|
1432
1480
|
}
|
|
1433
1481
|
const n = I.name;
|
|
@@ -1436,7 +1484,7 @@ class IE {
|
|
|
1436
1484
|
const [G, P] = o.split(".");
|
|
1437
1485
|
if (G === n && I.dimensions && I.dimensions[P]) {
|
|
1438
1486
|
const H = I.dimensions[P], l = this.queryBuilder.buildMeasureExpression({ sql: H.sql, type: "number" }, A);
|
|
1439
|
-
e[P] =
|
|
1487
|
+
e[P] = _`${l}`.as(P);
|
|
1440
1488
|
}
|
|
1441
1489
|
}
|
|
1442
1490
|
if (R.timeDimensions)
|
|
@@ -1444,22 +1492,22 @@ class IE {
|
|
|
1444
1492
|
const [G, P] = o.dimension.split(".");
|
|
1445
1493
|
if (G === n && I.dimensions && I.dimensions[P]) {
|
|
1446
1494
|
const H = I.dimensions[P], l = this.queryBuilder.buildTimeDimensionExpression(H.sql, o.granularity, A);
|
|
1447
|
-
e[P] =
|
|
1495
|
+
e[P] = _`${l}`.as(P);
|
|
1448
1496
|
}
|
|
1449
1497
|
}
|
|
1450
1498
|
if (Object.keys(e).length === 0)
|
|
1451
1499
|
return null;
|
|
1452
1500
|
let O = A.db.select(e).from(N.from);
|
|
1453
|
-
const
|
|
1501
|
+
const t = S ? {
|
|
1454
1502
|
...S,
|
|
1455
1503
|
preAggregationCTEs: (U = S.preAggregationCTEs) == null ? void 0 : U.filter((o) => o.cube.name !== I.name)
|
|
1456
|
-
} : void 0, C = this.queryBuilder.buildWhereConditions(I, R, A,
|
|
1504
|
+
} : void 0, C = this.queryBuilder.buildWhereConditions(I, R, A, t), s = [];
|
|
1457
1505
|
if (R.timeDimensions)
|
|
1458
1506
|
for (const o of R.timeDimensions) {
|
|
1459
1507
|
const [G, P] = o.dimension.split(".");
|
|
1460
1508
|
if (G === n && I.dimensions && I.dimensions[P] && o.dateRange) {
|
|
1461
1509
|
const H = I.dimensions[P], l = this.queryBuilder.buildMeasureExpression({ sql: H.sql, type: "number" }, A), B = this.queryBuilder.buildDateRangeCondition(l, o.dateRange);
|
|
1462
|
-
B &&
|
|
1510
|
+
B && s.push(B);
|
|
1463
1511
|
}
|
|
1464
1512
|
}
|
|
1465
1513
|
if (R.filters) {
|
|
@@ -1470,13 +1518,13 @@ class IE {
|
|
|
1470
1518
|
const l = I.dimensions[H];
|
|
1471
1519
|
if (G.operator === "inDateRange") {
|
|
1472
1520
|
const B = this.queryBuilder.buildMeasureExpression({ sql: l.sql, type: "number" }, A), u = this.queryBuilder.buildDateRangeCondition(B, G.values);
|
|
1473
|
-
u &&
|
|
1521
|
+
u && s.push(u);
|
|
1474
1522
|
}
|
|
1475
1523
|
}
|
|
1476
1524
|
}
|
|
1477
1525
|
}
|
|
1478
1526
|
const i = [];
|
|
1479
|
-
if (N.where && i.push(N.where), i.push(...C, ...
|
|
1527
|
+
if (N.where && i.push(N.where), i.push(...C, ...s), i.length > 0) {
|
|
1480
1528
|
const o = i.length === 1 ? i[0] : d(...i);
|
|
1481
1529
|
O = O.where(o);
|
|
1482
1530
|
}
|
|
@@ -1512,8 +1560,8 @@ class IE {
|
|
|
1512
1560
|
throw new Error(`CTE info not found for cube ${E.cube.name}`);
|
|
1513
1561
|
const I = [];
|
|
1514
1562
|
for (const e of S.joinKeys) {
|
|
1515
|
-
const n = e.sourceColumnObj ||
|
|
1516
|
-
I.push(
|
|
1563
|
+
const n = e.sourceColumnObj || _.identifier(e.sourceColumn), O = _`${_.identifier(R)}.${_.identifier(e.targetColumn)}`;
|
|
1564
|
+
I.push(EE(n, O));
|
|
1517
1565
|
}
|
|
1518
1566
|
return I.length === 1 ? I[0] : d(...I);
|
|
1519
1567
|
}
|
|
@@ -1541,43 +1589,43 @@ class IE {
|
|
|
1541
1589
|
if (n[l]) {
|
|
1542
1590
|
const [, B] = l.split("."), u = this.getCubesFromPlan(E).get(H);
|
|
1543
1591
|
if (u && u.measures && u.measures[B]) {
|
|
1544
|
-
const p = u.measures[B],
|
|
1592
|
+
const p = u.measures[B], f = _`${_.identifier(P.cteAlias)}.${_.identifier(B)}`;
|
|
1545
1593
|
let h;
|
|
1546
1594
|
switch (p.type) {
|
|
1547
1595
|
case "count":
|
|
1548
1596
|
case "countDistinct":
|
|
1549
1597
|
case "sum":
|
|
1550
|
-
h = y(
|
|
1598
|
+
h = y(f);
|
|
1551
1599
|
break;
|
|
1552
1600
|
case "avg":
|
|
1553
|
-
h = this.databaseAdapter.buildAvg(
|
|
1601
|
+
h = this.databaseAdapter.buildAvg(f);
|
|
1554
1602
|
break;
|
|
1555
1603
|
case "min":
|
|
1556
|
-
h =
|
|
1604
|
+
h = VE(f);
|
|
1557
1605
|
break;
|
|
1558
1606
|
case "max":
|
|
1559
|
-
h =
|
|
1607
|
+
h = dE(f);
|
|
1560
1608
|
break;
|
|
1561
1609
|
case "number":
|
|
1562
|
-
h = y(
|
|
1610
|
+
h = y(f);
|
|
1563
1611
|
break;
|
|
1564
1612
|
default:
|
|
1565
|
-
h = y(
|
|
1613
|
+
h = y(f);
|
|
1566
1614
|
}
|
|
1567
|
-
n[l] =
|
|
1615
|
+
n[l] = _`${h}`.as(l);
|
|
1568
1616
|
}
|
|
1569
1617
|
}
|
|
1570
1618
|
for (const l in n) {
|
|
1571
1619
|
const [B, u] = l.split(".");
|
|
1572
1620
|
if (B === H) {
|
|
1573
|
-
const p = this.getCubesFromPlan(E).get(H),
|
|
1574
|
-
if (
|
|
1575
|
-
let
|
|
1576
|
-
if (!
|
|
1577
|
-
const
|
|
1578
|
-
|
|
1621
|
+
const p = this.getCubesFromPlan(E).get(H), f = p && ((U = p.dimensions) == null ? void 0 : U[u]), h = l.startsWith(H + ".");
|
|
1622
|
+
if (f || h) {
|
|
1623
|
+
let AE = P.joinKeys.find((SE) => SE.targetColumn === u);
|
|
1624
|
+
if (!AE && ((o = p == null ? void 0 : p.dimensions) != null && o[u])) {
|
|
1625
|
+
const SE = p.dimensions[u].sql;
|
|
1626
|
+
AE = P.joinKeys.find(($T) => $T.targetColumnObj === SE);
|
|
1579
1627
|
}
|
|
1580
|
-
|
|
1628
|
+
AE ? n[l] = _`${_.identifier(P.cteAlias)}.${_.identifier(u)}`.as(l) : h && ((G = p == null ? void 0 : p.dimensions) != null && G[u]) && (n[l] = _`${_.identifier(P.cteAlias)}.${_.identifier(u)}`.as(l));
|
|
1581
1629
|
}
|
|
1582
1630
|
}
|
|
1583
1631
|
}
|
|
@@ -1603,7 +1651,7 @@ class IE {
|
|
|
1603
1651
|
for (const P of E.joinCubes) {
|
|
1604
1652
|
const H = I.get(P.cube.name);
|
|
1605
1653
|
let l, B;
|
|
1606
|
-
H ? (l =
|
|
1654
|
+
H ? (l = _`${_.identifier(H)}`, B = this.buildCTEJoinCondition(P, H, E)) : (l = P.cube.sql(A).from, B = P.joinCondition);
|
|
1607
1655
|
try {
|
|
1608
1656
|
switch (P.joinType || "left") {
|
|
1609
1657
|
case "left":
|
|
@@ -1622,13 +1670,13 @@ class IE {
|
|
|
1622
1670
|
} catch {
|
|
1623
1671
|
}
|
|
1624
1672
|
}
|
|
1625
|
-
const
|
|
1626
|
-
if (N.where &&
|
|
1673
|
+
const t = [];
|
|
1674
|
+
if (N.where && t.push(N.where), E.joinCubes && E.joinCubes.length > 0)
|
|
1627
1675
|
for (const P of E.joinCubes) {
|
|
1628
1676
|
if (I.get(P.cube.name))
|
|
1629
1677
|
continue;
|
|
1630
1678
|
const l = P.cube.sql(A);
|
|
1631
|
-
l.where &&
|
|
1679
|
+
l.where && t.push(l.where);
|
|
1632
1680
|
}
|
|
1633
1681
|
const C = this.queryBuilder.buildWhereConditions(
|
|
1634
1682
|
E.joinCubes.length > 0 ? this.getCubesFromPlan(E) : E.primaryCube,
|
|
@@ -1638,11 +1686,11 @@ class IE {
|
|
|
1638
1686
|
E
|
|
1639
1687
|
// Pass the queryPlan to handle CTE scenarios
|
|
1640
1688
|
);
|
|
1641
|
-
if (C.length > 0 &&
|
|
1642
|
-
const P =
|
|
1689
|
+
if (C.length > 0 && t.push(...C), t.length > 0) {
|
|
1690
|
+
const P = t.length === 1 ? t[0] : d(...t);
|
|
1643
1691
|
O = O.where(P);
|
|
1644
1692
|
}
|
|
1645
|
-
const
|
|
1693
|
+
const s = this.queryBuilder.buildGroupByFields(
|
|
1646
1694
|
E.joinCubes.length > 0 ? this.getCubesFromPlan(E) : E.primaryCube,
|
|
1647
1695
|
// Single cube
|
|
1648
1696
|
R,
|
|
@@ -1650,7 +1698,7 @@ class IE {
|
|
|
1650
1698
|
E
|
|
1651
1699
|
// Pass the queryPlan to handle CTE scenarios
|
|
1652
1700
|
);
|
|
1653
|
-
|
|
1701
|
+
s.length > 0 && (O = O.groupBy(...s));
|
|
1654
1702
|
const i = this.queryBuilder.buildHavingConditions(
|
|
1655
1703
|
E.joinCubes.length > 0 ? this.getCubesFromPlan(E) : E.primaryCube,
|
|
1656
1704
|
// Single cube
|
|
@@ -1710,9 +1758,9 @@ class IE {
|
|
|
1710
1758
|
const A = {}, S = {}, I = {}, N = [E.primaryCube];
|
|
1711
1759
|
if (E.joinCubes && E.joinCubes.length > 0 && N.push(...E.joinCubes.map((e) => e.cube)), R.measures)
|
|
1712
1760
|
for (const e of R.measures) {
|
|
1713
|
-
const [n, O] = e.split("."),
|
|
1714
|
-
if (
|
|
1715
|
-
const C =
|
|
1761
|
+
const [n, O] = e.split("."), t = N.find((C) => C.name === n);
|
|
1762
|
+
if (t && t.measures[O]) {
|
|
1763
|
+
const C = t.measures[O];
|
|
1716
1764
|
A[e] = {
|
|
1717
1765
|
title: C.title || O,
|
|
1718
1766
|
shortTitle: C.title || O,
|
|
@@ -1722,9 +1770,9 @@ class IE {
|
|
|
1722
1770
|
}
|
|
1723
1771
|
if (R.dimensions)
|
|
1724
1772
|
for (const e of R.dimensions) {
|
|
1725
|
-
const [n, O] = e.split("."),
|
|
1726
|
-
if (
|
|
1727
|
-
const C =
|
|
1773
|
+
const [n, O] = e.split("."), t = N.find((C) => C.name === n);
|
|
1774
|
+
if (t && t.dimensions[O]) {
|
|
1775
|
+
const C = t.dimensions[O];
|
|
1728
1776
|
S[e] = {
|
|
1729
1777
|
title: C.title || O,
|
|
1730
1778
|
shortTitle: C.title || O,
|
|
@@ -1734,9 +1782,9 @@ class IE {
|
|
|
1734
1782
|
}
|
|
1735
1783
|
if (R.timeDimensions)
|
|
1736
1784
|
for (const e of R.timeDimensions) {
|
|
1737
|
-
const [n, O] = e.dimension.split("."),
|
|
1738
|
-
if (
|
|
1739
|
-
const C =
|
|
1785
|
+
const [n, O] = e.dimension.split("."), t = N.find((C) => C.name === n);
|
|
1786
|
+
if (t && t.dimensions && t.dimensions[O]) {
|
|
1787
|
+
const C = t.dimensions[O];
|
|
1740
1788
|
I[e.dimension] = {
|
|
1741
1789
|
title: C.title || O,
|
|
1742
1790
|
shortTitle: C.title || O,
|
|
@@ -1753,10 +1801,10 @@ class IE {
|
|
|
1753
1801
|
};
|
|
1754
1802
|
}
|
|
1755
1803
|
}
|
|
1756
|
-
const L = (T) => T.flatMap(IR), IR = (T) =>
|
|
1804
|
+
const L = (T) => T.flatMap(IR), IR = (T) => q(eR(T)).map(NR), NR = (T) => T.replace(/ +/g, " ").trim(), eR = (T) => ({
|
|
1757
1805
|
type: "mandatory_block",
|
|
1758
|
-
items:
|
|
1759
|
-
}),
|
|
1806
|
+
items: XE(T, 0)[0]
|
|
1807
|
+
}), XE = (T, E, R) => {
|
|
1760
1808
|
const A = [];
|
|
1761
1809
|
for (; T[E]; ) {
|
|
1762
1810
|
const [S, I] = CR(T, E);
|
|
@@ -1777,16 +1825,16 @@ const L = (T) => T.flatMap(IR), IR = (T) => k(eR(T)).map(NR), NR = (T) => T.repl
|
|
|
1777
1825
|
}, CR = (T, E) => {
|
|
1778
1826
|
const R = [];
|
|
1779
1827
|
for (; ; ) {
|
|
1780
|
-
const [A, S] =
|
|
1828
|
+
const [A, S] = tR(T, E);
|
|
1781
1829
|
if (A)
|
|
1782
1830
|
R.push(A), E = S;
|
|
1783
1831
|
else
|
|
1784
1832
|
break;
|
|
1785
1833
|
}
|
|
1786
1834
|
return R.length === 1 ? [R[0], E] : [{ type: "concatenation", items: R }, E];
|
|
1787
|
-
},
|
|
1835
|
+
}, tR = (T, E) => {
|
|
1788
1836
|
if (T[E] === "{")
|
|
1789
|
-
return
|
|
1837
|
+
return sR(T, E + 1);
|
|
1790
1838
|
if (T[E] === "[")
|
|
1791
1839
|
return LR(T, E + 1);
|
|
1792
1840
|
{
|
|
@@ -1795,21 +1843,21 @@ const L = (T) => T.flatMap(IR), IR = (T) => k(eR(T)).map(NR), NR = (T) => T.repl
|
|
|
1795
1843
|
R += T[E], E++;
|
|
1796
1844
|
return [R, E];
|
|
1797
1845
|
}
|
|
1798
|
-
},
|
|
1799
|
-
const [R, A] =
|
|
1846
|
+
}, sR = (T, E) => {
|
|
1847
|
+
const [R, A] = XE(T, E, "}");
|
|
1800
1848
|
return [{ type: "mandatory_block", items: R }, A];
|
|
1801
1849
|
}, LR = (T, E) => {
|
|
1802
|
-
const [R, A] =
|
|
1850
|
+
const [R, A] = XE(T, E, "]");
|
|
1803
1851
|
return [{ type: "optional_block", items: R }, A];
|
|
1804
|
-
},
|
|
1852
|
+
}, q = (T) => {
|
|
1805
1853
|
if (typeof T == "string")
|
|
1806
1854
|
return [T];
|
|
1807
1855
|
if (T.type === "concatenation")
|
|
1808
|
-
return T.items.map(
|
|
1856
|
+
return T.items.map(q).reduce(_R, [""]);
|
|
1809
1857
|
if (T.type === "mandatory_block")
|
|
1810
|
-
return T.items.flatMap(
|
|
1858
|
+
return T.items.flatMap(q);
|
|
1811
1859
|
if (T.type === "optional_block")
|
|
1812
|
-
return ["", ...T.items.flatMap(
|
|
1860
|
+
return ["", ...T.items.flatMap(q)];
|
|
1813
1861
|
throw new Error(`Unknown node type: ${T}`);
|
|
1814
1862
|
}, _R = (T, E) => {
|
|
1815
1863
|
const R = [];
|
|
@@ -1822,19 +1870,19 @@ var D;
|
|
|
1822
1870
|
(function(T) {
|
|
1823
1871
|
T.QUOTED_IDENTIFIER = "QUOTED_IDENTIFIER", T.IDENTIFIER = "IDENTIFIER", T.STRING = "STRING", T.VARIABLE = "VARIABLE", T.RESERVED_DATA_TYPE = "RESERVED_DATA_TYPE", T.RESERVED_PARAMETERIZED_DATA_TYPE = "RESERVED_PARAMETERIZED_DATA_TYPE", T.RESERVED_KEYWORD = "RESERVED_KEYWORD", T.RESERVED_FUNCTION_NAME = "RESERVED_FUNCTION_NAME", T.RESERVED_PHRASE = "RESERVED_PHRASE", T.RESERVED_SET_OPERATION = "RESERVED_SET_OPERATION", T.RESERVED_CLAUSE = "RESERVED_CLAUSE", T.RESERVED_SELECT = "RESERVED_SELECT", T.RESERVED_JOIN = "RESERVED_JOIN", T.ARRAY_IDENTIFIER = "ARRAY_IDENTIFIER", T.ARRAY_KEYWORD = "ARRAY_KEYWORD", T.CASE = "CASE", T.END = "END", T.WHEN = "WHEN", T.ELSE = "ELSE", T.THEN = "THEN", T.LIMIT = "LIMIT", T.BETWEEN = "BETWEEN", T.AND = "AND", T.OR = "OR", T.XOR = "XOR", T.OPERATOR = "OPERATOR", T.COMMA = "COMMA", T.ASTERISK = "ASTERISK", T.PROPERTY_ACCESS_OPERATOR = "PROPERTY_ACCESS_OPERATOR", T.OPEN_PAREN = "OPEN_PAREN", T.CLOSE_PAREN = "CLOSE_PAREN", T.LINE_COMMENT = "LINE_COMMENT", T.BLOCK_COMMENT = "BLOCK_COMMENT", T.DISABLE_COMMENT = "DISABLE_COMMENT", T.NUMBER = "NUMBER", T.NAMED_PARAMETER = "NAMED_PARAMETER", T.QUOTED_PARAMETER = "QUOTED_PARAMETER", T.NUMBERED_PARAMETER = "NUMBERED_PARAMETER", T.POSITIONAL_PARAMETER = "POSITIONAL_PARAMETER", T.CUSTOM_PARAMETER = "CUSTOM_PARAMETER", T.DELIMITER = "DELIMITER", T.EOF = "EOF";
|
|
1824
1872
|
})(D = D || (D = {}));
|
|
1825
|
-
const
|
|
1873
|
+
const HT = (T) => ({
|
|
1826
1874
|
type: D.EOF,
|
|
1827
1875
|
raw: "«EOF»",
|
|
1828
1876
|
text: "«EOF»",
|
|
1829
1877
|
start: T
|
|
1830
|
-
}),
|
|
1831
|
-
ARRAY:
|
|
1832
|
-
BY:
|
|
1833
|
-
SET:
|
|
1834
|
-
STRUCT:
|
|
1835
|
-
WINDOW:
|
|
1836
|
-
VALUES:
|
|
1837
|
-
},
|
|
1878
|
+
}), Q = HT(1 / 0), x = (T) => (E) => E.type === T.type && E.text === T.text, $ = {
|
|
1879
|
+
ARRAY: x({ text: "ARRAY", type: D.RESERVED_DATA_TYPE }),
|
|
1880
|
+
BY: x({ text: "BY", type: D.RESERVED_KEYWORD }),
|
|
1881
|
+
SET: x({ text: "SET", type: D.RESERVED_CLAUSE }),
|
|
1882
|
+
STRUCT: x({ text: "STRUCT", type: D.RESERVED_DATA_TYPE }),
|
|
1883
|
+
WINDOW: x({ text: "WINDOW", type: D.RESERVED_CLAUSE }),
|
|
1884
|
+
VALUES: x({ text: "VALUES", type: D.RESERVED_CLAUSE })
|
|
1885
|
+
}, BT = (T) => T === D.RESERVED_DATA_TYPE || T === D.RESERVED_KEYWORD || T === D.RESERVED_FUNCTION_NAME || T === D.RESERVED_PHRASE || T === D.RESERVED_CLAUSE || T === D.RESERVED_SELECT || T === D.RESERVED_SET_OPERATION || T === D.RESERVED_JOIN || T === D.ARRAY_KEYWORD || T === D.CASE || T === D.END || T === D.WHEN || T === D.ELSE || T === D.THEN || T === D.LIMIT || T === D.BETWEEN || T === D.AND || T === D.OR || T === D.XOR, rR = (T) => T === D.AND || T === D.OR || T === D.XOR, nR = [
|
|
1838
1886
|
// https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions
|
|
1839
1887
|
"KEYS.NEW_KEYSET",
|
|
1840
1888
|
"KEYS.ADD_KEY_FROM_RAW_BYTES",
|
|
@@ -2540,9 +2588,9 @@ const MT = (T) => ({
|
|
|
2540
2588
|
"WITH CONNECTION",
|
|
2541
2589
|
"WITH PARTITION COLUMNS",
|
|
2542
2590
|
"REMOTE WITH CONNECTION"
|
|
2543
|
-
]),
|
|
2591
|
+
]), ZE = L([
|
|
2544
2592
|
"CREATE [OR REPLACE] [TEMP|TEMPORARY|SNAPSHOT|EXTERNAL] TABLE [IF NOT EXISTS]"
|
|
2545
|
-
]),
|
|
2593
|
+
]), sE = L([
|
|
2546
2594
|
// - create:
|
|
2547
2595
|
// https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language
|
|
2548
2596
|
"CREATE [OR REPLACE] [MATERIALIZED] VIEW [IF NOT EXISTS]",
|
|
@@ -2653,7 +2701,7 @@ const MT = (T) => ({
|
|
|
2653
2701
|
name: "bigquery",
|
|
2654
2702
|
tokenizerOptions: {
|
|
2655
2703
|
reservedSelect: PR,
|
|
2656
|
-
reservedClauses: [...oR, ...
|
|
2704
|
+
reservedClauses: [...oR, ...sE, ...ZE],
|
|
2657
2705
|
reservedSetOperations: aR,
|
|
2658
2706
|
reservedJoins: MR,
|
|
2659
2707
|
reservedPhrases: UR,
|
|
@@ -2680,15 +2728,15 @@ const MT = (T) => ({
|
|
|
2680
2728
|
postProcess: cR
|
|
2681
2729
|
},
|
|
2682
2730
|
formatOptions: {
|
|
2683
|
-
onelineClauses: [...
|
|
2684
|
-
tabularOnelineClauses:
|
|
2731
|
+
onelineClauses: [...ZE, ...sE],
|
|
2732
|
+
tabularOnelineClauses: sE
|
|
2685
2733
|
}
|
|
2686
2734
|
};
|
|
2687
2735
|
function cR(T) {
|
|
2688
2736
|
return lR(HR(T));
|
|
2689
2737
|
}
|
|
2690
2738
|
function lR(T) {
|
|
2691
|
-
let E =
|
|
2739
|
+
let E = Q;
|
|
2692
2740
|
return T.map((R) => R.text === "OFFSET" && E.text === "[" ? (E = R, Object.assign(Object.assign({}, R), { type: D.RESERVED_FUNCTION_NAME })) : (E = R, R));
|
|
2693
2741
|
}
|
|
2694
2742
|
function HR(T) {
|
|
@@ -2700,8 +2748,8 @@ function HR(T) {
|
|
|
2700
2748
|
const I = BR(T, A + 1), N = T.slice(A, I + 1);
|
|
2701
2749
|
R.push({
|
|
2702
2750
|
type: D.IDENTIFIER,
|
|
2703
|
-
raw: N.map(
|
|
2704
|
-
text: N.map(
|
|
2751
|
+
raw: N.map(kE("raw")).join(""),
|
|
2752
|
+
text: N.map(kE("text")).join(""),
|
|
2705
2753
|
start: S.start
|
|
2706
2754
|
}), A = I;
|
|
2707
2755
|
} else
|
|
@@ -2709,7 +2757,7 @@ function HR(T) {
|
|
|
2709
2757
|
}
|
|
2710
2758
|
return R;
|
|
2711
2759
|
}
|
|
2712
|
-
const
|
|
2760
|
+
const kE = (T) => (E) => E.type === D.IDENTIFIER || E.type === D.COMMA ? E[T] + " " : E[T];
|
|
2713
2761
|
function BR(T, E) {
|
|
2714
2762
|
let R = 0;
|
|
2715
2763
|
for (let A = E; A < T.length; A++) {
|
|
@@ -3511,9 +3559,9 @@ const uR = [
|
|
|
3511
3559
|
"WHEN [NOT] MATCHED [THEN]",
|
|
3512
3560
|
"UPDATE SET",
|
|
3513
3561
|
"INSERT"
|
|
3514
|
-
]),
|
|
3562
|
+
]), qE = L([
|
|
3515
3563
|
"CREATE [GLOBAL TEMPORARY | EXTERNAL] TABLE [IF NOT EXISTS]"
|
|
3516
|
-
]),
|
|
3564
|
+
]), LE = L([
|
|
3517
3565
|
// - create:
|
|
3518
3566
|
"CREATE [OR REPLACE] VIEW",
|
|
3519
3567
|
// - update:
|
|
@@ -3725,11 +3773,11 @@ const uR = [
|
|
|
3725
3773
|
"ON UPDATE",
|
|
3726
3774
|
"SET NULL",
|
|
3727
3775
|
"{ROWS | RANGE} BETWEEN"
|
|
3728
|
-
]),
|
|
3776
|
+
]), WR = {
|
|
3729
3777
|
name: "db2",
|
|
3730
3778
|
tokenizerOptions: {
|
|
3731
3779
|
reservedSelect: mR,
|
|
3732
|
-
reservedClauses: [...pR, ...
|
|
3780
|
+
reservedClauses: [...pR, ...qE, ...LE],
|
|
3733
3781
|
reservedSetOperations: dR,
|
|
3734
3782
|
reservedJoins: VR,
|
|
3735
3783
|
reservedPhrases: hR,
|
|
@@ -3766,10 +3814,10 @@ const uR = [
|
|
|
3766
3814
|
]
|
|
3767
3815
|
},
|
|
3768
3816
|
formatOptions: {
|
|
3769
|
-
onelineClauses: [...
|
|
3770
|
-
tabularOnelineClauses:
|
|
3817
|
+
onelineClauses: [...qE, ...LE],
|
|
3818
|
+
tabularOnelineClauses: LE
|
|
3771
3819
|
}
|
|
3772
|
-
},
|
|
3820
|
+
}, fR = [
|
|
3773
3821
|
// https://www.ibm.com/docs/en/i/7.5?topic=functions-aggregate
|
|
3774
3822
|
// TODO: 'ANY', - conflicts with test for ANY predicate in 'operators.ys'!!
|
|
3775
3823
|
"ARRAY_AGG",
|
|
@@ -4665,7 +4713,7 @@ const uR = [
|
|
|
4665
4713
|
"INSERT",
|
|
4666
4714
|
// Data definition - table
|
|
4667
4715
|
"FOR SYSTEM NAME"
|
|
4668
|
-
]),
|
|
4716
|
+
]), jE = L(["CREATE [OR REPLACE] TABLE"]), _E = L([
|
|
4669
4717
|
// - create:
|
|
4670
4718
|
"CREATE [OR REPLACE] [RECURSIVE] VIEW",
|
|
4671
4719
|
// - update:
|
|
@@ -4771,17 +4819,17 @@ const uR = [
|
|
|
4771
4819
|
"ON UPDATE",
|
|
4772
4820
|
"SET NULL",
|
|
4773
4821
|
"{ROWS | RANGE} BETWEEN"
|
|
4774
|
-
]),
|
|
4822
|
+
]), wR = {
|
|
4775
4823
|
name: "db2i",
|
|
4776
4824
|
tokenizerOptions: {
|
|
4777
4825
|
reservedSelect: KR,
|
|
4778
|
-
reservedClauses: [...yR, ...
|
|
4826
|
+
reservedClauses: [...yR, ...jE, ..._E],
|
|
4779
4827
|
reservedSetOperations: $R,
|
|
4780
4828
|
reservedJoins: gR,
|
|
4781
4829
|
reservedPhrases: JR,
|
|
4782
4830
|
reservedKeywords: XR,
|
|
4783
4831
|
reservedDataTypes: bR,
|
|
4784
|
-
reservedFunctionNames:
|
|
4832
|
+
reservedFunctionNames: fR,
|
|
4785
4833
|
nestedBlockComments: !0,
|
|
4786
4834
|
extraParens: ["[]"],
|
|
4787
4835
|
stringTypes: [
|
|
@@ -4795,10 +4843,10 @@ const uR = [
|
|
|
4795
4843
|
operators: ["**", "¬=", "¬>", "¬<", "!>", "!<", "||", "=>"]
|
|
4796
4844
|
},
|
|
4797
4845
|
formatOptions: {
|
|
4798
|
-
onelineClauses: [...
|
|
4799
|
-
tabularOnelineClauses:
|
|
4846
|
+
onelineClauses: [...jE, ..._E],
|
|
4847
|
+
tabularOnelineClauses: _E
|
|
4800
4848
|
}
|
|
4801
|
-
},
|
|
4849
|
+
}, xR = [
|
|
4802
4850
|
// Functions from DuckDB (excluding those that start with an underscore):
|
|
4803
4851
|
// SELECT DISTINCT upper(function_name) AS function_name
|
|
4804
4852
|
// FROM duckdb_functions()
|
|
@@ -5623,7 +5671,7 @@ const uR = [
|
|
|
5623
5671
|
"UUID",
|
|
5624
5672
|
"VARBINARY",
|
|
5625
5673
|
"VARCHAR"
|
|
5626
|
-
], ZR = L(["SELECT [ALL | DISTINCT]"]),
|
|
5674
|
+
], ZR = L(["SELECT [ALL | DISTINCT]"]), kR = L([
|
|
5627
5675
|
// queries
|
|
5628
5676
|
"WITH [RECURSIVE]",
|
|
5629
5677
|
"FROM",
|
|
@@ -5647,9 +5695,9 @@ const uR = [
|
|
|
5647
5695
|
"SET",
|
|
5648
5696
|
// other:
|
|
5649
5697
|
"RETURNING"
|
|
5650
|
-
]),
|
|
5698
|
+
]), zE = L([
|
|
5651
5699
|
"CREATE [OR REPLACE] [TEMPORARY | TEMP] TABLE [IF NOT EXISTS]"
|
|
5652
|
-
]),
|
|
5700
|
+
]), rE = L([
|
|
5653
5701
|
// TABLE
|
|
5654
5702
|
// - update:
|
|
5655
5703
|
"UPDATE",
|
|
@@ -5727,7 +5775,7 @@ const uR = [
|
|
|
5727
5775
|
"PREPARE",
|
|
5728
5776
|
"EXECUTE",
|
|
5729
5777
|
"DEALLOCATE [PREPARE]"
|
|
5730
|
-
]),
|
|
5778
|
+
]), qR = L([
|
|
5731
5779
|
"UNION [ALL | BY NAME]",
|
|
5732
5780
|
"EXCEPT [ALL]",
|
|
5733
5781
|
"INTERSECT [ALL]"
|
|
@@ -5749,14 +5797,14 @@ const uR = [
|
|
|
5749
5797
|
name: "duckdb",
|
|
5750
5798
|
tokenizerOptions: {
|
|
5751
5799
|
reservedSelect: ZR,
|
|
5752
|
-
reservedClauses: [...
|
|
5753
|
-
reservedSetOperations:
|
|
5800
|
+
reservedClauses: [...kR, ...zE, ...rE],
|
|
5801
|
+
reservedSetOperations: qR,
|
|
5754
5802
|
reservedJoins: jR,
|
|
5755
5803
|
reservedPhrases: zR,
|
|
5756
5804
|
supportsXor: !0,
|
|
5757
5805
|
reservedKeywords: vR,
|
|
5758
5806
|
reservedDataTypes: QR,
|
|
5759
|
-
reservedFunctionNames:
|
|
5807
|
+
reservedFunctionNames: xR,
|
|
5760
5808
|
nestedBlockComments: !0,
|
|
5761
5809
|
extraParens: ["[]", "{}"],
|
|
5762
5810
|
stringTypes: [
|
|
@@ -5816,8 +5864,8 @@ const uR = [
|
|
|
5816
5864
|
},
|
|
5817
5865
|
formatOptions: {
|
|
5818
5866
|
alwaysDenseOperators: ["::"],
|
|
5819
|
-
onelineClauses: [...
|
|
5820
|
-
tabularOnelineClauses:
|
|
5867
|
+
onelineClauses: [...zE, ...rE],
|
|
5868
|
+
tabularOnelineClauses: rE
|
|
5821
5869
|
}
|
|
5822
5870
|
}, TA = [
|
|
5823
5871
|
// https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
|
|
@@ -6397,9 +6445,9 @@ const uR = [
|
|
|
6397
6445
|
// https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Loadingfilesintotables
|
|
6398
6446
|
"LOAD DATA [LOCAL] INPATH",
|
|
6399
6447
|
"[OVERWRITE] INTO TABLE"
|
|
6400
|
-
]),
|
|
6448
|
+
]), ET = L([
|
|
6401
6449
|
"CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]"
|
|
6402
|
-
]),
|
|
6450
|
+
]), nE = L([
|
|
6403
6451
|
// - create:
|
|
6404
6452
|
"CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]",
|
|
6405
6453
|
// - update:
|
|
@@ -6434,7 +6482,7 @@ const uR = [
|
|
|
6434
6482
|
name: "hive",
|
|
6435
6483
|
tokenizerOptions: {
|
|
6436
6484
|
reservedSelect: SA,
|
|
6437
|
-
reservedClauses: [...IA, ...
|
|
6485
|
+
reservedClauses: [...IA, ...ET, ...nE],
|
|
6438
6486
|
reservedSetOperations: OA,
|
|
6439
6487
|
reservedJoins: NA,
|
|
6440
6488
|
reservedPhrases: eA,
|
|
@@ -6448,20 +6496,20 @@ const uR = [
|
|
|
6448
6496
|
operators: ["%", "~", "^", "|", "&", "<=>", "==", "!", "||"]
|
|
6449
6497
|
},
|
|
6450
6498
|
formatOptions: {
|
|
6451
|
-
onelineClauses: [...
|
|
6452
|
-
tabularOnelineClauses:
|
|
6499
|
+
onelineClauses: [...ET, ...nE],
|
|
6500
|
+
tabularOnelineClauses: nE
|
|
6453
6501
|
}
|
|
6454
6502
|
};
|
|
6455
|
-
function
|
|
6503
|
+
function RE(T) {
|
|
6456
6504
|
return T.map((E, R) => {
|
|
6457
|
-
const A = T[R + 1] ||
|
|
6505
|
+
const A = T[R + 1] || Q;
|
|
6458
6506
|
if ($.SET(E) && A.text === "(")
|
|
6459
6507
|
return Object.assign(Object.assign({}, E), { type: D.RESERVED_FUNCTION_NAME });
|
|
6460
|
-
const S = T[R - 1] ||
|
|
6508
|
+
const S = T[R - 1] || Q;
|
|
6461
6509
|
return $.VALUES(E) && S.text === "=" ? Object.assign(Object.assign({}, E), { type: D.RESERVED_FUNCTION_NAME }) : E;
|
|
6462
6510
|
});
|
|
6463
6511
|
}
|
|
6464
|
-
const
|
|
6512
|
+
const tA = [
|
|
6465
6513
|
// https://mariadb.com/kb/en/reserved-words/
|
|
6466
6514
|
"ACCESSIBLE",
|
|
6467
6515
|
"ADD",
|
|
@@ -6678,7 +6726,7 @@ const sA = [
|
|
|
6678
6726
|
"XOR",
|
|
6679
6727
|
"YEAR_MONTH",
|
|
6680
6728
|
"ZEROFILL"
|
|
6681
|
-
],
|
|
6729
|
+
], sA = [
|
|
6682
6730
|
// https://mariadb.com/kb/en/data-types/
|
|
6683
6731
|
"BIGINT",
|
|
6684
6732
|
"BINARY",
|
|
@@ -6989,9 +7037,9 @@ const sA = [
|
|
|
6989
7037
|
"SET",
|
|
6990
7038
|
// other
|
|
6991
7039
|
"RETURNING"
|
|
6992
|
-
]),
|
|
7040
|
+
]), TT = L([
|
|
6993
7041
|
"CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS]"
|
|
6994
|
-
]),
|
|
7042
|
+
]), DE = L([
|
|
6995
7043
|
// - create:
|
|
6996
7044
|
"CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]",
|
|
6997
7045
|
// - update:
|
|
@@ -7220,13 +7268,13 @@ const sA = [
|
|
|
7220
7268
|
name: "mariadb",
|
|
7221
7269
|
tokenizerOptions: {
|
|
7222
7270
|
reservedSelect: _A,
|
|
7223
|
-
reservedClauses: [...rA, ...
|
|
7271
|
+
reservedClauses: [...rA, ...TT, ...DE],
|
|
7224
7272
|
reservedSetOperations: nA,
|
|
7225
7273
|
reservedJoins: DA,
|
|
7226
7274
|
reservedPhrases: iA,
|
|
7227
7275
|
supportsXor: !0,
|
|
7228
|
-
reservedKeywords:
|
|
7229
|
-
reservedDataTypes:
|
|
7276
|
+
reservedKeywords: tA,
|
|
7277
|
+
reservedDataTypes: sA,
|
|
7230
7278
|
reservedFunctionNames: LA,
|
|
7231
7279
|
// TODO: support _ char set prefixes such as _utf8, _latin1, _binary, _utf8mb4, etc.
|
|
7232
7280
|
stringTypes: [
|
|
@@ -7260,11 +7308,11 @@ const sA = [
|
|
|
7260
7308
|
"*.*"
|
|
7261
7309
|
// Not actually an operator
|
|
7262
7310
|
],
|
|
7263
|
-
postProcess:
|
|
7311
|
+
postProcess: RE
|
|
7264
7312
|
},
|
|
7265
7313
|
formatOptions: {
|
|
7266
|
-
onelineClauses: [...
|
|
7267
|
-
tabularOnelineClauses:
|
|
7314
|
+
onelineClauses: [...TT, ...DE],
|
|
7315
|
+
tabularOnelineClauses: DE
|
|
7268
7316
|
}
|
|
7269
7317
|
}, oA = [
|
|
7270
7318
|
// https://dev.mysql.com/doc/refman/8.0/en/keywords.html
|
|
@@ -7992,7 +8040,7 @@ const sA = [
|
|
|
7992
8040
|
"ON DUPLICATE KEY UPDATE",
|
|
7993
8041
|
// - update:
|
|
7994
8042
|
"SET"
|
|
7995
|
-
]),
|
|
8043
|
+
]), RT = L(["CREATE [TEMPORARY] TABLE [IF NOT EXISTS]"]), iE = L([
|
|
7996
8044
|
// - create:
|
|
7997
8045
|
"CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]",
|
|
7998
8046
|
// - update:
|
|
@@ -8190,7 +8238,7 @@ const sA = [
|
|
|
8190
8238
|
name: "mysql",
|
|
8191
8239
|
tokenizerOptions: {
|
|
8192
8240
|
reservedSelect: UA,
|
|
8193
|
-
reservedClauses: [...GA, ...
|
|
8241
|
+
reservedClauses: [...GA, ...RT, ...iE],
|
|
8194
8242
|
reservedSetOperations: cA,
|
|
8195
8243
|
reservedJoins: lA,
|
|
8196
8244
|
reservedPhrases: HA,
|
|
@@ -8232,11 +8280,11 @@ const sA = [
|
|
|
8232
8280
|
"*.*"
|
|
8233
8281
|
// Not actually an operator
|
|
8234
8282
|
],
|
|
8235
|
-
postProcess:
|
|
8283
|
+
postProcess: RE
|
|
8236
8284
|
},
|
|
8237
8285
|
formatOptions: {
|
|
8238
|
-
onelineClauses: [...
|
|
8239
|
-
tabularOnelineClauses:
|
|
8286
|
+
onelineClauses: [...RT, ...iE],
|
|
8287
|
+
tabularOnelineClauses: iE
|
|
8240
8288
|
}
|
|
8241
8289
|
}, uA = [
|
|
8242
8290
|
// https://docs.pingcap.com/tidb/stable/keywords
|
|
@@ -8823,7 +8871,7 @@ const sA = [
|
|
|
8823
8871
|
"ON DUPLICATE KEY UPDATE",
|
|
8824
8872
|
// - update:
|
|
8825
8873
|
"SET"
|
|
8826
|
-
]),
|
|
8874
|
+
]), AT = L(["CREATE [TEMPORARY] TABLE [IF NOT EXISTS]"]), PE = L([
|
|
8827
8875
|
// https://docs.pingcap.com/tidb/stable/sql-statement-create-view
|
|
8828
8876
|
"CREATE [OR REPLACE] [SQL SECURITY DEFINER | SQL SECURITY INVOKER] VIEW [IF NOT EXISTS]",
|
|
8829
8877
|
// https://docs.pingcap.com/tidb/stable/sql-statement-update
|
|
@@ -8951,11 +8999,11 @@ const sA = [
|
|
|
8951
8999
|
"CHARACTER SET",
|
|
8952
9000
|
"{ROWS | RANGE} BETWEEN",
|
|
8953
9001
|
"IDENTIFIED BY"
|
|
8954
|
-
]),
|
|
9002
|
+
]), WA = {
|
|
8955
9003
|
name: "tidb",
|
|
8956
9004
|
tokenizerOptions: {
|
|
8957
9005
|
reservedSelect: mA,
|
|
8958
|
-
reservedClauses: [...pA, ...
|
|
9006
|
+
reservedClauses: [...pA, ...AT, ...PE],
|
|
8959
9007
|
reservedSetOperations: dA,
|
|
8960
9008
|
reservedJoins: VA,
|
|
8961
9009
|
reservedPhrases: hA,
|
|
@@ -8997,13 +9045,13 @@ const sA = [
|
|
|
8997
9045
|
"*.*"
|
|
8998
9046
|
// Not actually an operator
|
|
8999
9047
|
],
|
|
9000
|
-
postProcess:
|
|
9048
|
+
postProcess: RE
|
|
9001
9049
|
},
|
|
9002
9050
|
formatOptions: {
|
|
9003
|
-
onelineClauses: [...
|
|
9004
|
-
tabularOnelineClauses:
|
|
9051
|
+
onelineClauses: [...AT, ...PE],
|
|
9052
|
+
tabularOnelineClauses: PE
|
|
9005
9053
|
}
|
|
9006
|
-
},
|
|
9054
|
+
}, fA = [
|
|
9007
9055
|
// https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html
|
|
9008
9056
|
"ABORT",
|
|
9009
9057
|
"ABS",
|
|
@@ -9475,7 +9523,7 @@ const sA = [
|
|
|
9475
9523
|
"NEST",
|
|
9476
9524
|
"UNNEST",
|
|
9477
9525
|
"RETURNING"
|
|
9478
|
-
]),
|
|
9526
|
+
]), ST = L([
|
|
9479
9527
|
// - update:
|
|
9480
9528
|
"UPDATE",
|
|
9481
9529
|
// - delete:
|
|
@@ -9515,18 +9563,18 @@ const sA = [
|
|
|
9515
9563
|
"SET CURRENT SCHEMA",
|
|
9516
9564
|
"SHOW",
|
|
9517
9565
|
"USE [PRIMARY] KEYS"
|
|
9518
|
-
]), $A = L(["UNION [ALL]", "EXCEPT [ALL]", "INTERSECT [ALL]"]), gA = L(["JOIN", "{LEFT | RIGHT} [OUTER] JOIN", "INNER JOIN"]), JA = L(["{ROWS | RANGE | GROUPS} BETWEEN"]),
|
|
9566
|
+
]), $A = L(["UNION [ALL]", "EXCEPT [ALL]", "INTERSECT [ALL]"]), gA = L(["JOIN", "{LEFT | RIGHT} [OUTER] JOIN", "INNER JOIN"]), JA = L(["{ROWS | RANGE | GROUPS} BETWEEN"]), wA = {
|
|
9519
9567
|
name: "n1ql",
|
|
9520
9568
|
tokenizerOptions: {
|
|
9521
9569
|
reservedSelect: KA,
|
|
9522
|
-
reservedClauses: [...yA, ...
|
|
9570
|
+
reservedClauses: [...yA, ...ST],
|
|
9523
9571
|
reservedSetOperations: $A,
|
|
9524
9572
|
reservedJoins: gA,
|
|
9525
9573
|
reservedPhrases: JA,
|
|
9526
9574
|
supportsXor: !0,
|
|
9527
9575
|
reservedKeywords: XA,
|
|
9528
9576
|
reservedDataTypes: bA,
|
|
9529
|
-
reservedFunctionNames:
|
|
9577
|
+
reservedFunctionNames: fA,
|
|
9530
9578
|
// NOTE: single quotes are actually not supported in N1QL,
|
|
9531
9579
|
// but we support them anyway as all other SQL dialects do,
|
|
9532
9580
|
// which simplifies writing tests that are shared between all dialects.
|
|
@@ -9538,9 +9586,9 @@ const sA = [
|
|
|
9538
9586
|
operators: ["%", "==", ":", "||"]
|
|
9539
9587
|
},
|
|
9540
9588
|
formatOptions: {
|
|
9541
|
-
onelineClauses:
|
|
9589
|
+
onelineClauses: ST
|
|
9542
9590
|
}
|
|
9543
|
-
},
|
|
9591
|
+
}, xA = [
|
|
9544
9592
|
// https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/reservewords.htm
|
|
9545
9593
|
// 'A',
|
|
9546
9594
|
"ADD",
|
|
@@ -10148,7 +10196,7 @@ const sA = [
|
|
|
10148
10196
|
"PRESENTNNV",
|
|
10149
10197
|
"PRESENTV",
|
|
10150
10198
|
"PREVIOUS"
|
|
10151
|
-
], ZA = L(["SELECT [ALL | DISTINCT | UNIQUE]"]),
|
|
10199
|
+
], ZA = L(["SELECT [ALL | DISTINCT | UNIQUE]"]), kA = L([
|
|
10152
10200
|
// queries
|
|
10153
10201
|
"WITH",
|
|
10154
10202
|
"FROM",
|
|
@@ -10172,9 +10220,9 @@ const sA = [
|
|
|
10172
10220
|
"UPDATE SET",
|
|
10173
10221
|
// other
|
|
10174
10222
|
"RETURNING"
|
|
10175
|
-
]),
|
|
10223
|
+
]), IT = L([
|
|
10176
10224
|
"CREATE [GLOBAL TEMPORARY | PRIVATE TEMPORARY | SHARDED | DUPLICATED | IMMUTABLE BLOCKCHAIN | BLOCKCHAIN | IMMUTABLE] TABLE"
|
|
10177
|
-
]),
|
|
10225
|
+
]), oE = L([
|
|
10178
10226
|
// - create:
|
|
10179
10227
|
"CREATE [OR REPLACE] [NO FORCE | FORCE] [EDITIONING | EDITIONABLE | EDITIONABLE EDITIONING | NONEDITIONABLE] VIEW",
|
|
10180
10228
|
"CREATE MATERIALIZED VIEW",
|
|
@@ -10202,7 +10250,7 @@ const sA = [
|
|
|
10202
10250
|
"EXCEPTION",
|
|
10203
10251
|
"LOOP",
|
|
10204
10252
|
"START WITH"
|
|
10205
|
-
]),
|
|
10253
|
+
]), qA = L(["UNION [ALL]", "MINUS", "INTERSECT"]), jA = L([
|
|
10206
10254
|
"JOIN",
|
|
10207
10255
|
"{LEFT | RIGHT | FULL} [OUTER] JOIN",
|
|
10208
10256
|
"{INNER | CROSS} JOIN",
|
|
@@ -10218,12 +10266,12 @@ const sA = [
|
|
|
10218
10266
|
name: "plsql",
|
|
10219
10267
|
tokenizerOptions: {
|
|
10220
10268
|
reservedSelect: ZA,
|
|
10221
|
-
reservedClauses: [...
|
|
10222
|
-
reservedSetOperations:
|
|
10269
|
+
reservedClauses: [...kA, ...IT, ...oE],
|
|
10270
|
+
reservedSetOperations: qA,
|
|
10223
10271
|
reservedJoins: jA,
|
|
10224
10272
|
reservedPhrases: zA,
|
|
10225
10273
|
supportsXor: !0,
|
|
10226
|
-
reservedKeywords:
|
|
10274
|
+
reservedKeywords: xA,
|
|
10227
10275
|
reservedDataTypes: vA,
|
|
10228
10276
|
reservedFunctionNames: QA,
|
|
10229
10277
|
stringTypes: [
|
|
@@ -10254,13 +10302,13 @@ const sA = [
|
|
|
10254
10302
|
},
|
|
10255
10303
|
formatOptions: {
|
|
10256
10304
|
alwaysDenseOperators: ["@"],
|
|
10257
|
-
onelineClauses: [...
|
|
10258
|
-
tabularOnelineClauses:
|
|
10305
|
+
onelineClauses: [...IT, ...oE],
|
|
10306
|
+
tabularOnelineClauses: oE
|
|
10259
10307
|
}
|
|
10260
10308
|
};
|
|
10261
10309
|
function TS(T) {
|
|
10262
|
-
let E =
|
|
10263
|
-
return T.map((R) => $.SET(R) && $.BY(E) ? Object.assign(Object.assign({}, R), { type: D.RESERVED_KEYWORD }) : (
|
|
10310
|
+
let E = Q;
|
|
10311
|
+
return T.map((R) => $.SET(R) && $.BY(E) ? Object.assign(Object.assign({}, R), { type: D.RESERVED_KEYWORD }) : (BT(R.type) && (E = R), R));
|
|
10264
10312
|
}
|
|
10265
10313
|
const RS = [
|
|
10266
10314
|
// https://www.postgresql.org/docs/14/functions.html
|
|
@@ -11122,9 +11170,9 @@ const RS = [
|
|
|
11122
11170
|
"SET",
|
|
11123
11171
|
// other
|
|
11124
11172
|
"RETURNING"
|
|
11125
|
-
]),
|
|
11173
|
+
]), OT = L([
|
|
11126
11174
|
"CREATE [GLOBAL | LOCAL] [TEMPORARY | TEMP | UNLOGGED] TABLE [IF NOT EXISTS]"
|
|
11127
|
-
]),
|
|
11175
|
+
]), aE = L([
|
|
11128
11176
|
// - create
|
|
11129
11177
|
"CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW",
|
|
11130
11178
|
"CREATE [MATERIALIZED] VIEW [IF NOT EXISTS]",
|
|
@@ -11345,11 +11393,11 @@ const RS = [
|
|
|
11345
11393
|
"IS [NOT] DISTINCT FROM",
|
|
11346
11394
|
"NULLS {FIRST | LAST}",
|
|
11347
11395
|
"WITH ORDINALITY"
|
|
11348
|
-
]),
|
|
11396
|
+
]), tS = {
|
|
11349
11397
|
name: "postgresql",
|
|
11350
11398
|
tokenizerOptions: {
|
|
11351
11399
|
reservedSelect: IS,
|
|
11352
|
-
reservedClauses: [...OS, ...
|
|
11400
|
+
reservedClauses: [...OS, ...OT, ...aE],
|
|
11353
11401
|
reservedSetOperations: NS,
|
|
11354
11402
|
reservedJoins: eS,
|
|
11355
11403
|
reservedPhrases: CS,
|
|
@@ -11466,10 +11514,10 @@ const RS = [
|
|
|
11466
11514
|
},
|
|
11467
11515
|
formatOptions: {
|
|
11468
11516
|
alwaysDenseOperators: ["::", ":"],
|
|
11469
|
-
onelineClauses: [...
|
|
11470
|
-
tabularOnelineClauses:
|
|
11517
|
+
onelineClauses: [...OT, ...aE],
|
|
11518
|
+
tabularOnelineClauses: aE
|
|
11471
11519
|
}
|
|
11472
|
-
},
|
|
11520
|
+
}, sS = [
|
|
11473
11521
|
// https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html
|
|
11474
11522
|
"ANY_VALUE",
|
|
11475
11523
|
"APPROXIMATE PERCENTILE_DISC",
|
|
@@ -12043,9 +12091,9 @@ const RS = [
|
|
|
12043
12091
|
"VALUES",
|
|
12044
12092
|
// - update:
|
|
12045
12093
|
"SET"
|
|
12046
|
-
]),
|
|
12094
|
+
]), NT = L([
|
|
12047
12095
|
"CREATE [TEMPORARY | TEMP | LOCAL TEMPORARY | LOCAL TEMP] TABLE [IF NOT EXISTS]"
|
|
12048
|
-
]),
|
|
12096
|
+
]), ME = L([
|
|
12049
12097
|
// - create:
|
|
12050
12098
|
"CREATE [OR REPLACE | MATERIALIZED] VIEW",
|
|
12051
12099
|
// - update:
|
|
@@ -12154,13 +12202,13 @@ const RS = [
|
|
|
12154
12202
|
name: "redshift",
|
|
12155
12203
|
tokenizerOptions: {
|
|
12156
12204
|
reservedSelect: rS,
|
|
12157
|
-
reservedClauses: [...nS, ...
|
|
12205
|
+
reservedClauses: [...nS, ...NT, ...ME],
|
|
12158
12206
|
reservedSetOperations: DS,
|
|
12159
12207
|
reservedJoins: iS,
|
|
12160
12208
|
reservedPhrases: PS,
|
|
12161
12209
|
reservedKeywords: LS,
|
|
12162
12210
|
reservedDataTypes: _S,
|
|
12163
|
-
reservedFunctionNames:
|
|
12211
|
+
reservedFunctionNames: sS,
|
|
12164
12212
|
stringTypes: ["''-qq"],
|
|
12165
12213
|
identTypes: ['""-qq'],
|
|
12166
12214
|
identChars: { first: "#" },
|
|
@@ -12183,8 +12231,8 @@ const RS = [
|
|
|
12183
12231
|
},
|
|
12184
12232
|
formatOptions: {
|
|
12185
12233
|
alwaysDenseOperators: ["::"],
|
|
12186
|
-
onelineClauses: [...
|
|
12187
|
-
tabularOnelineClauses:
|
|
12234
|
+
onelineClauses: [...NT, ...ME],
|
|
12235
|
+
tabularOnelineClauses: ME
|
|
12188
12236
|
}
|
|
12189
12237
|
}, aS = [
|
|
12190
12238
|
// https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords
|
|
@@ -12829,7 +12877,7 @@ const RS = [
|
|
|
12829
12877
|
// https://spark.apache.org/docs/latest/sql-ref-syntax-dml-load.html
|
|
12830
12878
|
"LOAD DATA [LOCAL] INPATH",
|
|
12831
12879
|
"[OVERWRITE] INTO TABLE"
|
|
12832
|
-
]),
|
|
12880
|
+
]), eT = L(["CREATE [EXTERNAL] TABLE [IF NOT EXISTS]"]), UE = L([
|
|
12833
12881
|
// - create:
|
|
12834
12882
|
"CREATE [OR REPLACE] [GLOBAL TEMPORARY | TEMPORARY] VIEW [IF NOT EXISTS]",
|
|
12835
12883
|
// - drop table:
|
|
@@ -12907,7 +12955,7 @@ const RS = [
|
|
|
12907
12955
|
name: "spark",
|
|
12908
12956
|
tokenizerOptions: {
|
|
12909
12957
|
reservedSelect: GS,
|
|
12910
|
-
reservedClauses: [...cS, ...
|
|
12958
|
+
reservedClauses: [...cS, ...eT, ...UE],
|
|
12911
12959
|
reservedSetOperations: lS,
|
|
12912
12960
|
reservedJoins: HS,
|
|
12913
12961
|
reservedPhrases: BS,
|
|
@@ -12929,13 +12977,13 @@ const RS = [
|
|
|
12929
12977
|
postProcess: FS
|
|
12930
12978
|
},
|
|
12931
12979
|
formatOptions: {
|
|
12932
|
-
onelineClauses: [...
|
|
12933
|
-
tabularOnelineClauses:
|
|
12980
|
+
onelineClauses: [...eT, ...UE],
|
|
12981
|
+
tabularOnelineClauses: UE
|
|
12934
12982
|
}
|
|
12935
12983
|
};
|
|
12936
12984
|
function FS(T) {
|
|
12937
12985
|
return T.map((E, R) => {
|
|
12938
|
-
const A = T[R - 1] ||
|
|
12986
|
+
const A = T[R - 1] || Q, S = T[R + 1] || Q;
|
|
12939
12987
|
return $.WINDOW(E) && S.type === D.OPEN_PAREN ? Object.assign(Object.assign({}, E), { type: D.RESERVED_FUNCTION_NAME }) : E.text === "ITEMS" && E.type === D.RESERVED_KEYWORD && !(A.text === "COLLECTION" && S.text === "TERMINATED") ? Object.assign(Object.assign({}, E), { type: D.IDENTIFIER, text: E.raw }) : E;
|
|
12940
12988
|
});
|
|
12941
12989
|
}
|
|
@@ -13256,7 +13304,7 @@ const YS = [
|
|
|
13256
13304
|
"VALUES",
|
|
13257
13305
|
// - update:
|
|
13258
13306
|
"SET"
|
|
13259
|
-
]),
|
|
13307
|
+
]), CT = L(["CREATE [TEMPORARY | TEMP] TABLE [IF NOT EXISTS]"]), GE = L([
|
|
13260
13308
|
// - create:
|
|
13261
13309
|
"CREATE [TEMPORARY | TEMP] VIEW [IF NOT EXISTS]",
|
|
13262
13310
|
// - update:
|
|
@@ -13275,13 +13323,13 @@ const YS = [
|
|
|
13275
13323
|
"RENAME TO",
|
|
13276
13324
|
// - set schema
|
|
13277
13325
|
"SET SCHEMA"
|
|
13278
|
-
]), hS = L(["UNION [ALL]", "EXCEPT", "INTERSECT"]),
|
|
13326
|
+
]), hS = L(["UNION [ALL]", "EXCEPT", "INTERSECT"]), WS = L([
|
|
13279
13327
|
"JOIN",
|
|
13280
13328
|
"{LEFT | RIGHT | FULL} [OUTER] JOIN",
|
|
13281
13329
|
"{INNER | CROSS} JOIN",
|
|
13282
13330
|
"NATURAL [INNER] JOIN",
|
|
13283
13331
|
"NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN"
|
|
13284
|
-
]),
|
|
13332
|
+
]), fS = L([
|
|
13285
13333
|
"ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]",
|
|
13286
13334
|
"{ROWS | RANGE | GROUPS} BETWEEN",
|
|
13287
13335
|
"DO UPDATE"
|
|
@@ -13289,10 +13337,10 @@ const YS = [
|
|
|
13289
13337
|
name: "sqlite",
|
|
13290
13338
|
tokenizerOptions: {
|
|
13291
13339
|
reservedSelect: dS,
|
|
13292
|
-
reservedClauses: [...VS, ...
|
|
13340
|
+
reservedClauses: [...VS, ...CT, ...GE],
|
|
13293
13341
|
reservedSetOperations: hS,
|
|
13294
|
-
reservedJoins:
|
|
13295
|
-
reservedPhrases:
|
|
13342
|
+
reservedJoins: WS,
|
|
13343
|
+
reservedPhrases: fS,
|
|
13296
13344
|
reservedKeywords: mS,
|
|
13297
13345
|
reservedDataTypes: pS,
|
|
13298
13346
|
reservedFunctionNames: YS,
|
|
@@ -13308,8 +13356,8 @@ const YS = [
|
|
|
13308
13356
|
operators: ["%", "~", "&", "|", "<<", ">>", "==", "->", "->>", "||"]
|
|
13309
13357
|
},
|
|
13310
13358
|
formatOptions: {
|
|
13311
|
-
onelineClauses: [...
|
|
13312
|
-
tabularOnelineClauses:
|
|
13359
|
+
onelineClauses: [...CT, ...GE],
|
|
13360
|
+
tabularOnelineClauses: GE
|
|
13313
13361
|
}
|
|
13314
13362
|
}, bS = [
|
|
13315
13363
|
// https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#_6_9_set_function_specification
|
|
@@ -13665,7 +13713,7 @@ const YS = [
|
|
|
13665
13713
|
"VALUES",
|
|
13666
13714
|
// - update:
|
|
13667
13715
|
"SET"
|
|
13668
|
-
]),
|
|
13716
|
+
]), tT = L(["CREATE [GLOBAL TEMPORARY | LOCAL TEMPORARY] TABLE"]), cE = L([
|
|
13669
13717
|
// - create:
|
|
13670
13718
|
"CREATE [RECURSIVE] VIEW",
|
|
13671
13719
|
// - update:
|
|
@@ -13694,23 +13742,23 @@ const YS = [
|
|
|
13694
13742
|
"UNION [ALL | DISTINCT]",
|
|
13695
13743
|
"EXCEPT [ALL | DISTINCT]",
|
|
13696
13744
|
"INTERSECT [ALL | DISTINCT]"
|
|
13697
|
-
]),
|
|
13745
|
+
]), wS = L([
|
|
13698
13746
|
"JOIN",
|
|
13699
13747
|
"{LEFT | RIGHT | FULL} [OUTER] JOIN",
|
|
13700
13748
|
"{INNER | CROSS} JOIN",
|
|
13701
13749
|
"NATURAL [INNER] JOIN",
|
|
13702
13750
|
"NATURAL {LEFT | RIGHT | FULL} [OUTER] JOIN"
|
|
13703
|
-
]),
|
|
13751
|
+
]), xS = L([
|
|
13704
13752
|
"ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]",
|
|
13705
13753
|
"{ROWS | RANGE} BETWEEN"
|
|
13706
13754
|
]), vS = {
|
|
13707
13755
|
name: "sql",
|
|
13708
13756
|
tokenizerOptions: {
|
|
13709
13757
|
reservedSelect: $S,
|
|
13710
|
-
reservedClauses: [...gS, ...
|
|
13758
|
+
reservedClauses: [...gS, ...tT, ...cE],
|
|
13711
13759
|
reservedSetOperations: JS,
|
|
13712
|
-
reservedJoins:
|
|
13713
|
-
reservedPhrases:
|
|
13760
|
+
reservedJoins: wS,
|
|
13761
|
+
reservedPhrases: xS,
|
|
13714
13762
|
reservedKeywords: KS,
|
|
13715
13763
|
reservedDataTypes: yS,
|
|
13716
13764
|
reservedFunctionNames: bS,
|
|
@@ -13723,8 +13771,8 @@ const YS = [
|
|
|
13723
13771
|
operators: ["||"]
|
|
13724
13772
|
},
|
|
13725
13773
|
formatOptions: {
|
|
13726
|
-
onelineClauses: [...
|
|
13727
|
-
tabularOnelineClauses:
|
|
13774
|
+
onelineClauses: [...tT, ...cE],
|
|
13775
|
+
tabularOnelineClauses: cE
|
|
13728
13776
|
}
|
|
13729
13777
|
}, QS = [
|
|
13730
13778
|
// https://github.com/trinodb/trino/tree/432d2897bdef99388c1a47188743a061c4ac1f34/docs/src/main/sphinx/functions
|
|
@@ -14397,7 +14445,7 @@ const YS = [
|
|
|
14397
14445
|
"WRAPPER",
|
|
14398
14446
|
"WRITE",
|
|
14399
14447
|
"ZONE"
|
|
14400
|
-
],
|
|
14448
|
+
], kS = [
|
|
14401
14449
|
// https://github.com/trinodb/trino/blob/432d2897bdef99388c1a47188743a061c4ac1f34/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168
|
|
14402
14450
|
// or https://trino.io/docs/current/language/types.html
|
|
14403
14451
|
"BIGINT",
|
|
@@ -14436,7 +14484,7 @@ const YS = [
|
|
|
14436
14484
|
"CODEPOINTS",
|
|
14437
14485
|
"FUNCTION",
|
|
14438
14486
|
"JSONPATH"
|
|
14439
|
-
],
|
|
14487
|
+
], qS = L(["SELECT [ALL | DISTINCT]"]), jS = L([
|
|
14440
14488
|
// queries
|
|
14441
14489
|
"WITH [RECURSIVE]",
|
|
14442
14490
|
"FROM",
|
|
@@ -14464,7 +14512,7 @@ const YS = [
|
|
|
14464
14512
|
"PATTERN",
|
|
14465
14513
|
"SUBSET",
|
|
14466
14514
|
"DEFINE"
|
|
14467
|
-
]),
|
|
14515
|
+
]), sT = L(["CREATE TABLE [IF NOT EXISTS]"]), lE = L([
|
|
14468
14516
|
// - create:
|
|
14469
14517
|
"CREATE [OR REPLACE] [MATERIALIZED] VIEW",
|
|
14470
14518
|
// - update:
|
|
@@ -14539,13 +14587,13 @@ const YS = [
|
|
|
14539
14587
|
]), RI = {
|
|
14540
14588
|
name: "trino",
|
|
14541
14589
|
tokenizerOptions: {
|
|
14542
|
-
reservedSelect:
|
|
14543
|
-
reservedClauses: [...jS, ...
|
|
14590
|
+
reservedSelect: qS,
|
|
14591
|
+
reservedClauses: [...jS, ...sT, ...lE],
|
|
14544
14592
|
reservedSetOperations: zS,
|
|
14545
14593
|
reservedJoins: EI,
|
|
14546
14594
|
reservedPhrases: TI,
|
|
14547
14595
|
reservedKeywords: ZS,
|
|
14548
|
-
reservedDataTypes:
|
|
14596
|
+
reservedDataTypes: kS,
|
|
14549
14597
|
reservedFunctionNames: QS,
|
|
14550
14598
|
// Trino also supports {- ... -} parenthesis.
|
|
14551
14599
|
// The formatting of these currently works out as a result of { and -
|
|
@@ -14575,8 +14623,8 @@ const YS = [
|
|
|
14575
14623
|
]
|
|
14576
14624
|
},
|
|
14577
14625
|
formatOptions: {
|
|
14578
|
-
onelineClauses: [...
|
|
14579
|
-
tabularOnelineClauses:
|
|
14626
|
+
onelineClauses: [...sT, ...lE],
|
|
14627
|
+
tabularOnelineClauses: lE
|
|
14580
14628
|
}
|
|
14581
14629
|
}, AI = [
|
|
14582
14630
|
// https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15
|
|
@@ -15118,7 +15166,7 @@ const YS = [
|
|
|
15118
15166
|
"UPDATE SET",
|
|
15119
15167
|
// Data definition
|
|
15120
15168
|
"CREATE [OR ALTER] {PROC | PROCEDURE}"
|
|
15121
|
-
]),
|
|
15169
|
+
]), LT = L(["CREATE TABLE"]), HE = L([
|
|
15122
15170
|
// - create:
|
|
15123
15171
|
"CREATE [OR ALTER] [MATERIALIZED] VIEW",
|
|
15124
15172
|
// - update:
|
|
@@ -15304,17 +15352,17 @@ const YS = [
|
|
|
15304
15352
|
"{INNER | CROSS} JOIN",
|
|
15305
15353
|
// non-standard joins
|
|
15306
15354
|
"{CROSS | OUTER} APPLY"
|
|
15307
|
-
]),
|
|
15355
|
+
]), tI = L([
|
|
15308
15356
|
"ON {UPDATE | DELETE} [SET NULL | SET DEFAULT]",
|
|
15309
15357
|
"{ROWS | RANGE} BETWEEN"
|
|
15310
|
-
]),
|
|
15358
|
+
]), sI = {
|
|
15311
15359
|
name: "transactsql",
|
|
15312
15360
|
tokenizerOptions: {
|
|
15313
15361
|
reservedSelect: OI,
|
|
15314
|
-
reservedClauses: [...NI, ...
|
|
15362
|
+
reservedClauses: [...NI, ...LT, ...HE],
|
|
15315
15363
|
reservedSetOperations: eI,
|
|
15316
15364
|
reservedJoins: CI,
|
|
15317
|
-
reservedPhrases:
|
|
15365
|
+
reservedPhrases: tI,
|
|
15318
15366
|
reservedKeywords: SI,
|
|
15319
15367
|
reservedDataTypes: II,
|
|
15320
15368
|
reservedFunctionNames: AI,
|
|
@@ -15347,8 +15395,8 @@ const YS = [
|
|
|
15347
15395
|
},
|
|
15348
15396
|
formatOptions: {
|
|
15349
15397
|
alwaysDenseOperators: ["::"],
|
|
15350
|
-
onelineClauses: [...
|
|
15351
|
-
tabularOnelineClauses:
|
|
15398
|
+
onelineClauses: [...LT, ...HE],
|
|
15399
|
+
tabularOnelineClauses: HE
|
|
15352
15400
|
}
|
|
15353
15401
|
}, LI = [
|
|
15354
15402
|
// List of all keywords taken from:
|
|
@@ -15914,9 +15962,9 @@ const YS = [
|
|
|
15914
15962
|
// Data definition
|
|
15915
15963
|
"CREATE [OR REPLACE] [TEMPORARY] PROCEDURE [IF NOT EXISTS]",
|
|
15916
15964
|
"CREATE [OR REPLACE] [EXTERNAL] FUNCTION"
|
|
15917
|
-
]),
|
|
15965
|
+
]), _T = L([
|
|
15918
15966
|
"CREATE [ROWSTORE] [REFERENCE | TEMPORARY | GLOBAL TEMPORARY] TABLE [IF NOT EXISTS]"
|
|
15919
|
-
]),
|
|
15967
|
+
]), BE = L([
|
|
15920
15968
|
// - create:
|
|
15921
15969
|
"CREATE VIEW",
|
|
15922
15970
|
// - update:
|
|
@@ -16115,7 +16163,7 @@ const YS = [
|
|
|
16115
16163
|
name: "singlestoredb",
|
|
16116
16164
|
tokenizerOptions: {
|
|
16117
16165
|
reservedSelect: nI,
|
|
16118
|
-
reservedClauses: [...DI, ...
|
|
16166
|
+
reservedClauses: [...DI, ..._T, ...BE],
|
|
16119
16167
|
reservedSetOperations: iI,
|
|
16120
16168
|
reservedJoins: PI,
|
|
16121
16169
|
reservedPhrases: oI,
|
|
@@ -16154,12 +16202,12 @@ const YS = [
|
|
|
16154
16202
|
"*.*"
|
|
16155
16203
|
// Not actually an operator
|
|
16156
16204
|
],
|
|
16157
|
-
postProcess:
|
|
16205
|
+
postProcess: RE
|
|
16158
16206
|
},
|
|
16159
16207
|
formatOptions: {
|
|
16160
16208
|
alwaysDenseOperators: ["::", "::$", "::%"],
|
|
16161
|
-
onelineClauses: [...
|
|
16162
|
-
tabularOnelineClauses:
|
|
16209
|
+
onelineClauses: [..._T, ...BE],
|
|
16210
|
+
tabularOnelineClauses: BE
|
|
16163
16211
|
}
|
|
16164
16212
|
}, MI = [
|
|
16165
16213
|
// https://docs.snowflake.com/en/sql-reference-functions.html
|
|
@@ -16930,10 +16978,10 @@ const YS = [
|
|
|
16930
16978
|
"WHEN MATCHED [AND]",
|
|
16931
16979
|
"THEN {UPDATE SET | DELETE}",
|
|
16932
16980
|
"WHEN NOT MATCHED THEN INSERT"
|
|
16933
|
-
]),
|
|
16981
|
+
]), rT = L([
|
|
16934
16982
|
"CREATE [OR REPLACE] [VOLATILE] TABLE [IF NOT EXISTS]",
|
|
16935
16983
|
"CREATE [OR REPLACE] [LOCAL | GLOBAL] {TEMP|TEMPORARY} TABLE [IF NOT EXISTS]"
|
|
16936
|
-
]),
|
|
16984
|
+
]), uE = L([
|
|
16937
16985
|
// - create:
|
|
16938
16986
|
"CREATE [OR REPLACE] [SECURE] [RECURSIVE] VIEW [IF NOT EXISTS]",
|
|
16939
16987
|
// - update:
|
|
@@ -17185,7 +17233,7 @@ const YS = [
|
|
|
17185
17233
|
name: "snowflake",
|
|
17186
17234
|
tokenizerOptions: {
|
|
17187
17235
|
reservedSelect: cI,
|
|
17188
|
-
reservedClauses: [...lI, ...
|
|
17236
|
+
reservedClauses: [...lI, ...rT, ...uE],
|
|
17189
17237
|
reservedSetOperations: HI,
|
|
17190
17238
|
reservedJoins: BI,
|
|
17191
17239
|
reservedPhrases: uI,
|
|
@@ -17221,46 +17269,46 @@ const YS = [
|
|
|
17221
17269
|
},
|
|
17222
17270
|
formatOptions: {
|
|
17223
17271
|
alwaysDenseOperators: ["::"],
|
|
17224
|
-
onelineClauses: [...
|
|
17225
|
-
tabularOnelineClauses:
|
|
17272
|
+
onelineClauses: [...rT, ...uE],
|
|
17273
|
+
tabularOnelineClauses: uE
|
|
17226
17274
|
}
|
|
17227
17275
|
}, YI = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
17228
17276
|
__proto__: null,
|
|
17229
17277
|
bigquery: GR,
|
|
17230
|
-
db2:
|
|
17231
|
-
db2i:
|
|
17278
|
+
db2: WR,
|
|
17279
|
+
db2i: wR,
|
|
17232
17280
|
duckdb: EA,
|
|
17233
17281
|
hive: CA,
|
|
17234
17282
|
mariadb: PA,
|
|
17235
17283
|
mysql: BA,
|
|
17236
|
-
n1ql:
|
|
17284
|
+
n1ql: wA,
|
|
17237
17285
|
plsql: ES,
|
|
17238
|
-
postgresql:
|
|
17286
|
+
postgresql: tS,
|
|
17239
17287
|
redshift: oS,
|
|
17240
17288
|
singlestoredb: aI,
|
|
17241
17289
|
snowflake: FI,
|
|
17242
17290
|
spark: uS,
|
|
17243
17291
|
sql: vS,
|
|
17244
17292
|
sqlite: XS,
|
|
17245
|
-
tidb:
|
|
17246
|
-
transactsql:
|
|
17293
|
+
tidb: WA,
|
|
17294
|
+
transactsql: sI,
|
|
17247
17295
|
trino: RI
|
|
17248
|
-
}, Symbol.toStringTag, { value: "Module" })),
|
|
17296
|
+
}, Symbol.toStringTag, { value: "Module" })), k = (T) => T[T.length - 1], uT = (T) => T.sort((E, R) => R.length - E.length || E.localeCompare(R)), j = (T) => T.replace(/\s+/gu, " "), FE = (T) => /\n/.test(T), V = (T) => T.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"), nT = /\s+/uy, g = (T) => new RegExp(`(?:${T})`, "uy"), mI = (T) => T.split("").map((E) => / /gu.test(E) ? "\\s+" : `[${E.toUpperCase()}${E.toLowerCase()}]`).join(""), pI = (T) => T + "(?:-" + T + ")*", dI = ({ prefixes: T, requirePrefix: E }) => `(?:${T.map(mI).join("|")}${E ? "" : "|"})`, VI = (T) => new RegExp(`(?:${T.map(V).join("|")}).*?(?=\r
|
|
17249
17297
|
|\r|
|
|
17250
|
-
|$)`, "uy"),
|
|
17298
|
+
|$)`, "uy"), DT = (T, E = []) => {
|
|
17251
17299
|
const R = T === "open" ? 0 : 1, A = ["()", ...E].map((S) => S[R]);
|
|
17252
17300
|
return g(A.map(V).join("|"));
|
|
17253
|
-
},
|
|
17301
|
+
}, iT = (T) => g(`${uT(T).map(V).join("|")}`), hI = ({ rest: T, dashes: E }) => T || E ? `(?![${T || ""}${E ? "-" : ""}])` : "", X = (T, E = {}) => {
|
|
17254
17302
|
if (T.length === 0)
|
|
17255
17303
|
return /^\b$/u;
|
|
17256
|
-
const R = hI(E), A =
|
|
17304
|
+
const R = hI(E), A = uT(T).map(V).join("|").replace(/ /gu, "\\s+");
|
|
17257
17305
|
return new RegExp(`(?:${A})${R}\\b`, "iuy");
|
|
17258
|
-
},
|
|
17306
|
+
}, YE = (T, E) => {
|
|
17259
17307
|
if (!T.length)
|
|
17260
17308
|
return;
|
|
17261
17309
|
const R = T.map(V).join("|");
|
|
17262
17310
|
return g(`(?:${R})(?:${E})`);
|
|
17263
|
-
},
|
|
17311
|
+
}, WI = () => {
|
|
17264
17312
|
const T = {
|
|
17265
17313
|
"<": ">",
|
|
17266
17314
|
"[": "]",
|
|
@@ -17268,7 +17316,7 @@ const YS = [
|
|
|
17268
17316
|
"{": "}"
|
|
17269
17317
|
}, E = "{left}(?:(?!{right}').)*?{right}", R = Object.entries(T).map(([N, e]) => E.replace(/{left}/g, V(N)).replace(/{right}/g, V(e))), A = V(Object.keys(T).join(""));
|
|
17270
17318
|
return `[Qq]'(?:${String.raw`(?<tag>[^\s${A}])(?:(?!\k<tag>').)*?\k<tag>`}|${R.join("|")})'`;
|
|
17271
|
-
},
|
|
17319
|
+
}, PT = {
|
|
17272
17320
|
// - backtick quoted (using `` to escape)
|
|
17273
17321
|
"``": "(?:`[^`]*`)+",
|
|
17274
17322
|
// - Transact-SQL square bracket quoted (using ]] to escape)
|
|
@@ -17292,12 +17340,12 @@ const YS = [
|
|
|
17292
17340
|
// Hive and Spark variables: ${name}
|
|
17293
17341
|
"{}": String.raw`(?:\{[^\}]*\})`,
|
|
17294
17342
|
// Oracle q'' strings: q'<text>' q'|text|' ...
|
|
17295
|
-
"q''":
|
|
17296
|
-
},
|
|
17343
|
+
"q''": WI()
|
|
17344
|
+
}, FT = (T) => typeof T == "string" ? PT[T] : "regex" in T ? T.regex : dI(T) + PT[T.quote], fI = (T) => g(T.map((E) => "regex" in E ? E.regex : FT(E)).join("|")), YT = (T) => T.map(FT).join("|"), oT = (T) => g(YT(T)), XI = (T = {}) => g(mT(T)), mT = ({ first: T, rest: E, dashes: R, allowFirstCharNumber: A } = {}) => {
|
|
17297
17345
|
const S = "\\p{Alphabetic}\\p{Mark}_", I = "\\p{Decimal_Number}", N = V(T ?? ""), e = V(E ?? ""), n = A ? `[${S}${I}${N}][${S}${I}${e}]*` : `[${S}${N}][${S}${I}${e}]*`;
|
|
17298
17346
|
return R ? pI(n) : n;
|
|
17299
17347
|
};
|
|
17300
|
-
function
|
|
17348
|
+
function pT(T, E) {
|
|
17301
17349
|
const R = T.slice(0, E).split(/\n/);
|
|
17302
17350
|
return { line: R.length, col: R[R.length - 1].length + 1 };
|
|
17303
17351
|
}
|
|
@@ -17327,7 +17375,7 @@ class bI {
|
|
|
17327
17375
|
return R;
|
|
17328
17376
|
}
|
|
17329
17377
|
createParseError() {
|
|
17330
|
-
const E = this.input.slice(this.index, this.index + 10), { line: R, col: A } =
|
|
17378
|
+
const E = this.input.slice(this.index, this.index + 10), { line: R, col: A } = pT(this.input, this.index);
|
|
17331
17379
|
return new Error(`Parse error: Unexpected "${E}" at line ${R} column ${A}.
|
|
17332
17380
|
${this.dialectInfo()}`);
|
|
17333
17381
|
}
|
|
@@ -17336,8 +17384,8 @@ ${this.dialectInfo()}`);
|
|
|
17336
17384
|
If possible, please select a more specific dialect (like sqlite, postgresql, etc).` : `SQL dialect used: "${this.dialectName}".`;
|
|
17337
17385
|
}
|
|
17338
17386
|
getWhitespace() {
|
|
17339
|
-
|
|
17340
|
-
const E =
|
|
17387
|
+
nT.lastIndex = this.index;
|
|
17388
|
+
const E = nT.exec(this.input);
|
|
17341
17389
|
if (E)
|
|
17342
17390
|
return this.index += E[0].length, E[0];
|
|
17343
17391
|
}
|
|
@@ -17363,19 +17411,19 @@ If possible, please select a more specific dialect (like sqlite, postgresql, etc
|
|
|
17363
17411
|
}
|
|
17364
17412
|
}
|
|
17365
17413
|
}
|
|
17366
|
-
const
|
|
17414
|
+
const aT = /\/\*/uy, KI = /[\s\S]/uy, yI = /\*\//uy;
|
|
17367
17415
|
class $I {
|
|
17368
17416
|
constructor() {
|
|
17369
17417
|
this.lastIndex = 0;
|
|
17370
17418
|
}
|
|
17371
17419
|
exec(E) {
|
|
17372
17420
|
let R = "", A, S = 0;
|
|
17373
|
-
if (A = this.matchSection(
|
|
17421
|
+
if (A = this.matchSection(aT, E))
|
|
17374
17422
|
R += A, S++;
|
|
17375
17423
|
else
|
|
17376
17424
|
return null;
|
|
17377
17425
|
for (; S > 0; )
|
|
17378
|
-
if (A = this.matchSection(
|
|
17426
|
+
if (A = this.matchSection(aT, E))
|
|
17379
17427
|
R += A, S++;
|
|
17380
17428
|
else if (A = this.matchSection(yI, E))
|
|
17381
17429
|
R += A, S--;
|
|
@@ -17422,7 +17470,7 @@ class gI {
|
|
|
17422
17470
|
},
|
|
17423
17471
|
{
|
|
17424
17472
|
type: D.QUOTED_IDENTIFIER,
|
|
17425
|
-
regex:
|
|
17473
|
+
regex: oT(E.identTypes)
|
|
17426
17474
|
},
|
|
17427
17475
|
{
|
|
17428
17476
|
type: D.NUMBER,
|
|
@@ -17535,9 +17583,9 @@ class gI {
|
|
|
17535
17583
|
return this.validRules([
|
|
17536
17584
|
{
|
|
17537
17585
|
type: D.VARIABLE,
|
|
17538
|
-
regex: E.variableTypes ?
|
|
17586
|
+
regex: E.variableTypes ? fI(E.variableTypes) : void 0
|
|
17539
17587
|
},
|
|
17540
|
-
{ type: D.STRING, regex:
|
|
17588
|
+
{ type: D.STRING, regex: oT(E.stringTypes) },
|
|
17541
17589
|
{
|
|
17542
17590
|
type: D.IDENTIFIER,
|
|
17543
17591
|
regex: XI(E.identChars)
|
|
@@ -17546,15 +17594,15 @@ class gI {
|
|
|
17546
17594
|
{ type: D.COMMA, regex: /[,]/y },
|
|
17547
17595
|
{
|
|
17548
17596
|
type: D.OPEN_PAREN,
|
|
17549
|
-
regex:
|
|
17597
|
+
regex: DT("open", E.extraParens)
|
|
17550
17598
|
},
|
|
17551
17599
|
{
|
|
17552
17600
|
type: D.CLOSE_PAREN,
|
|
17553
|
-
regex:
|
|
17601
|
+
regex: DT("close", E.extraParens)
|
|
17554
17602
|
},
|
|
17555
17603
|
{
|
|
17556
17604
|
type: D.OPERATOR,
|
|
17557
|
-
regex:
|
|
17605
|
+
regex: iT([
|
|
17558
17606
|
// standard operators
|
|
17559
17607
|
"+",
|
|
17560
17608
|
"-",
|
|
@@ -17572,7 +17620,7 @@ class gI {
|
|
|
17572
17620
|
{ type: D.ASTERISK, regex: /[*]/uy },
|
|
17573
17621
|
{
|
|
17574
17622
|
type: D.PROPERTY_ACCESS_OPERATOR,
|
|
17575
|
-
regex:
|
|
17623
|
+
regex: iT([".", ...(A = E.propertyAccessOperators) !== null && A !== void 0 ? A : []])
|
|
17576
17624
|
}
|
|
17577
17625
|
]);
|
|
17578
17626
|
}
|
|
@@ -17590,20 +17638,20 @@ class gI {
|
|
|
17590
17638
|
return this.validRules([
|
|
17591
17639
|
{
|
|
17592
17640
|
type: D.NAMED_PARAMETER,
|
|
17593
|
-
regex:
|
|
17641
|
+
regex: YE(n.named, mT(E.paramChars || E.identChars)),
|
|
17594
17642
|
key: (O) => O.slice(1)
|
|
17595
17643
|
},
|
|
17596
17644
|
{
|
|
17597
17645
|
type: D.QUOTED_PARAMETER,
|
|
17598
|
-
regex:
|
|
17599
|
-
key: (O) => (({ tokenKey:
|
|
17646
|
+
regex: YE(n.quoted, YT(E.identTypes)),
|
|
17647
|
+
key: (O) => (({ tokenKey: t, quoteChar: C }) => t.replace(new RegExp(V("\\" + C), "gu"), C))({
|
|
17600
17648
|
tokenKey: O.slice(2, -1),
|
|
17601
17649
|
quoteChar: O.slice(-1)
|
|
17602
17650
|
})
|
|
17603
17651
|
},
|
|
17604
17652
|
{
|
|
17605
17653
|
type: D.NUMBERED_PARAMETER,
|
|
17606
|
-
regex:
|
|
17654
|
+
regex: YE(n.numbered, "[0-9]+"),
|
|
17607
17655
|
key: (O) => O.slice(1)
|
|
17608
17656
|
},
|
|
17609
17657
|
{
|
|
@@ -17611,11 +17659,11 @@ class gI {
|
|
|
17611
17659
|
regex: n.positional ? /[?]/y : void 0
|
|
17612
17660
|
},
|
|
17613
17661
|
...n.custom.map((O) => {
|
|
17614
|
-
var
|
|
17662
|
+
var t;
|
|
17615
17663
|
return {
|
|
17616
17664
|
type: D.CUSTOM_PARAMETER,
|
|
17617
17665
|
regex: g(O.regex),
|
|
17618
|
-
key: (
|
|
17666
|
+
key: (t = O.key) !== null && t !== void 0 ? t : (C) => C
|
|
17619
17667
|
};
|
|
17620
17668
|
})
|
|
17621
17669
|
]);
|
|
@@ -17625,13 +17673,13 @@ class gI {
|
|
|
17625
17673
|
return E.filter((R) => !!R.regex);
|
|
17626
17674
|
}
|
|
17627
17675
|
}
|
|
17628
|
-
const F = (T) => j(T.toUpperCase()),
|
|
17629
|
-
let E =
|
|
17630
|
-
return E || (E =
|
|
17631
|
-
},
|
|
17676
|
+
const F = (T) => j(T.toUpperCase()), MT = /* @__PURE__ */ new Map(), JI = (T) => {
|
|
17677
|
+
let E = MT.get(T);
|
|
17678
|
+
return E || (E = wI(T), MT.set(T, E)), E;
|
|
17679
|
+
}, wI = (T) => ({
|
|
17632
17680
|
tokenizer: new gI(T.tokenizerOptions, T.name),
|
|
17633
|
-
formatOptions:
|
|
17634
|
-
}),
|
|
17681
|
+
formatOptions: xI(T.formatOptions)
|
|
17682
|
+
}), xI = (T) => {
|
|
17635
17683
|
var E;
|
|
17636
17684
|
return {
|
|
17637
17685
|
alwaysDenseOperators: T.alwaysDenseOperators || [],
|
|
@@ -17642,7 +17690,7 @@ const F = (T) => j(T.toUpperCase()), DT = /* @__PURE__ */ new Map(), JI = (T) =>
|
|
|
17642
17690
|
function vI(T) {
|
|
17643
17691
|
return T.indentStyle === "tabularLeft" || T.indentStyle === "tabularRight" ? " ".repeat(10) : T.useTabs ? " " : " ".repeat(T.tabWidth);
|
|
17644
17692
|
}
|
|
17645
|
-
function
|
|
17693
|
+
function v(T) {
|
|
17646
17694
|
return T.indentStyle === "tabularLeft" || T.indentStyle === "tabularRight";
|
|
17647
17695
|
}
|
|
17648
17696
|
class QI {
|
|
@@ -17669,44 +17717,44 @@ class QI {
|
|
|
17669
17717
|
}
|
|
17670
17718
|
}
|
|
17671
17719
|
var ZI = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
17672
|
-
function
|
|
17720
|
+
function kI(T) {
|
|
17673
17721
|
return T && T.__esModule && Object.prototype.hasOwnProperty.call(T, "default") ? T.default : T;
|
|
17674
17722
|
}
|
|
17675
|
-
var
|
|
17723
|
+
var dT = { exports: {} };
|
|
17676
17724
|
(function(T) {
|
|
17677
17725
|
(function(E, R) {
|
|
17678
17726
|
T.exports ? T.exports = R() : E.nearley = R();
|
|
17679
17727
|
})(ZI, function() {
|
|
17680
|
-
function E(O,
|
|
17681
|
-
return this.id = ++E.highestId, this.name = O, this.symbols =
|
|
17728
|
+
function E(O, t, C) {
|
|
17729
|
+
return this.id = ++E.highestId, this.name = O, this.symbols = t, this.postprocess = C, this;
|
|
17682
17730
|
}
|
|
17683
17731
|
E.highestId = 0, E.prototype.toString = function(O) {
|
|
17684
|
-
var
|
|
17685
|
-
return this.name + " → " +
|
|
17732
|
+
var t = typeof O > "u" ? this.symbols.map(n).join(" ") : this.symbols.slice(0, O).map(n).join(" ") + " ● " + this.symbols.slice(O).map(n).join(" ");
|
|
17733
|
+
return this.name + " → " + t;
|
|
17686
17734
|
};
|
|
17687
|
-
function R(O,
|
|
17688
|
-
this.rule = O, this.dot =
|
|
17735
|
+
function R(O, t, C, s) {
|
|
17736
|
+
this.rule = O, this.dot = t, this.reference = C, this.data = [], this.wantedBy = s, this.isComplete = this.dot === O.symbols.length;
|
|
17689
17737
|
}
|
|
17690
17738
|
R.prototype.toString = function() {
|
|
17691
17739
|
return "{" + this.rule.toString(this.dot) + "}, from: " + (this.reference || 0);
|
|
17692
17740
|
}, R.prototype.nextState = function(O) {
|
|
17693
|
-
var
|
|
17694
|
-
return
|
|
17741
|
+
var t = new R(this.rule, this.dot + 1, this.reference, this.wantedBy);
|
|
17742
|
+
return t.left = this, t.right = O, t.isComplete && (t.data = t.build(), t.right = void 0), t;
|
|
17695
17743
|
}, R.prototype.build = function() {
|
|
17696
|
-
var O = [],
|
|
17744
|
+
var O = [], t = this;
|
|
17697
17745
|
do
|
|
17698
|
-
O.push(
|
|
17699
|
-
while (
|
|
17746
|
+
O.push(t.right.data), t = t.left;
|
|
17747
|
+
while (t.left);
|
|
17700
17748
|
return O.reverse(), O;
|
|
17701
17749
|
}, R.prototype.finish = function() {
|
|
17702
17750
|
this.rule.postprocess && (this.data = this.rule.postprocess(this.data, this.reference, N.fail));
|
|
17703
17751
|
};
|
|
17704
|
-
function A(O,
|
|
17705
|
-
this.grammar = O, this.index =
|
|
17752
|
+
function A(O, t) {
|
|
17753
|
+
this.grammar = O, this.index = t, this.states = [], this.wants = {}, this.scannable = [], this.completed = {};
|
|
17706
17754
|
}
|
|
17707
17755
|
A.prototype.process = function(O) {
|
|
17708
|
-
for (var
|
|
17709
|
-
var a =
|
|
17756
|
+
for (var t = this.states, C = this.wants, s = this.completed, i = 0; i < t.length; i++) {
|
|
17757
|
+
var a = t[i];
|
|
17710
17758
|
if (a.isComplete) {
|
|
17711
17759
|
if (a.finish(), a.data !== N.fail) {
|
|
17712
17760
|
for (var U = a.wantedBy, o = U.length; o--; ) {
|
|
@@ -17725,8 +17773,8 @@ var uT = { exports: {} };
|
|
|
17725
17773
|
continue;
|
|
17726
17774
|
}
|
|
17727
17775
|
if (C[P]) {
|
|
17728
|
-
if (C[P].push(a),
|
|
17729
|
-
for (var H =
|
|
17776
|
+
if (C[P].push(a), s.hasOwnProperty(P))
|
|
17777
|
+
for (var H = s[P], o = 0; o < H.length; o++) {
|
|
17730
17778
|
var l = H[o];
|
|
17731
17779
|
this.complete(a, l);
|
|
17732
17780
|
}
|
|
@@ -17735,34 +17783,34 @@ var uT = { exports: {} };
|
|
|
17735
17783
|
}
|
|
17736
17784
|
}
|
|
17737
17785
|
}, A.prototype.predict = function(O) {
|
|
17738
|
-
for (var
|
|
17739
|
-
var
|
|
17786
|
+
for (var t = this.grammar.byName[O] || [], C = 0; C < t.length; C++) {
|
|
17787
|
+
var s = t[C], i = this.wants[O], a = new R(s, 0, this.index, i);
|
|
17740
17788
|
this.states.push(a);
|
|
17741
17789
|
}
|
|
17742
|
-
}, A.prototype.complete = function(O,
|
|
17743
|
-
var C = O.nextState(
|
|
17790
|
+
}, A.prototype.complete = function(O, t) {
|
|
17791
|
+
var C = O.nextState(t);
|
|
17744
17792
|
this.states.push(C);
|
|
17745
17793
|
};
|
|
17746
|
-
function S(O,
|
|
17747
|
-
this.rules = O, this.start =
|
|
17794
|
+
function S(O, t) {
|
|
17795
|
+
this.rules = O, this.start = t || this.rules[0].name;
|
|
17748
17796
|
var C = this.byName = {};
|
|
17749
|
-
this.rules.forEach(function(
|
|
17750
|
-
C.hasOwnProperty(
|
|
17797
|
+
this.rules.forEach(function(s) {
|
|
17798
|
+
C.hasOwnProperty(s.name) || (C[s.name] = []), C[s.name].push(s);
|
|
17751
17799
|
});
|
|
17752
17800
|
}
|
|
17753
|
-
S.fromCompiled = function(
|
|
17754
|
-
var C =
|
|
17755
|
-
|
|
17756
|
-
var
|
|
17801
|
+
S.fromCompiled = function(s, t) {
|
|
17802
|
+
var C = s.Lexer;
|
|
17803
|
+
s.ParserStart && (t = s.ParserStart, s = s.ParserRules);
|
|
17804
|
+
var s = s.map(function(a) {
|
|
17757
17805
|
return new E(a.name, a.symbols, a.postprocess);
|
|
17758
|
-
}), i = new S(
|
|
17806
|
+
}), i = new S(s, t);
|
|
17759
17807
|
return i.lexer = C, i;
|
|
17760
17808
|
};
|
|
17761
17809
|
function I() {
|
|
17762
17810
|
this.reset("");
|
|
17763
17811
|
}
|
|
17764
|
-
I.prototype.reset = function(O,
|
|
17765
|
-
this.buffer = O, this.index = 0, this.line =
|
|
17812
|
+
I.prototype.reset = function(O, t) {
|
|
17813
|
+
this.buffer = O, this.index = 0, this.line = t ? t.line : 1, this.lastLineBreak = t ? -t.col : 0;
|
|
17766
17814
|
}, I.prototype.next = function() {
|
|
17767
17815
|
if (this.index < this.buffer.length) {
|
|
17768
17816
|
var O = this.buffer[this.index++];
|
|
@@ -17774,10 +17822,10 @@ var uT = { exports: {} };
|
|
|
17774
17822
|
line: this.line,
|
|
17775
17823
|
col: this.index - this.lastLineBreak
|
|
17776
17824
|
};
|
|
17777
|
-
}, I.prototype.formatError = function(O,
|
|
17825
|
+
}, I.prototype.formatError = function(O, t) {
|
|
17778
17826
|
var C = this.buffer;
|
|
17779
17827
|
if (typeof C == "string") {
|
|
17780
|
-
var
|
|
17828
|
+
var s = C.split(`
|
|
17781
17829
|
`).slice(
|
|
17782
17830
|
Math.max(0, this.line - 5),
|
|
17783
17831
|
this.line
|
|
@@ -17785,54 +17833,54 @@ var uT = { exports: {} };
|
|
|
17785
17833
|
`, this.index);
|
|
17786
17834
|
i === -1 && (i = C.length);
|
|
17787
17835
|
var a = this.index - this.lastLineBreak, U = String(this.line).length;
|
|
17788
|
-
return
|
|
17836
|
+
return t += " at line " + this.line + " col " + a + `:
|
|
17789
17837
|
|
|
17790
|
-
`,
|
|
17791
|
-
return o(this.line -
|
|
17838
|
+
`, t += s.map(function(G, P) {
|
|
17839
|
+
return o(this.line - s.length + P + 1, U) + " " + G;
|
|
17792
17840
|
}, this).join(`
|
|
17793
|
-
`),
|
|
17841
|
+
`), t += `
|
|
17794
17842
|
` + o("", U + a) + `^
|
|
17795
|
-
`,
|
|
17843
|
+
`, t;
|
|
17796
17844
|
} else
|
|
17797
|
-
return
|
|
17845
|
+
return t + " at index " + (this.index - 1);
|
|
17798
17846
|
function o(G, P) {
|
|
17799
17847
|
var H = String(G);
|
|
17800
17848
|
return Array(P - H.length + 1).join(" ") + H;
|
|
17801
17849
|
}
|
|
17802
17850
|
};
|
|
17803
|
-
function N(O,
|
|
17851
|
+
function N(O, t, C) {
|
|
17804
17852
|
if (O instanceof S)
|
|
17805
|
-
var
|
|
17853
|
+
var s = O, C = t;
|
|
17806
17854
|
else
|
|
17807
|
-
var
|
|
17808
|
-
this.grammar =
|
|
17855
|
+
var s = S.fromCompiled(O, t);
|
|
17856
|
+
this.grammar = s, this.options = {
|
|
17809
17857
|
keepHistory: !1,
|
|
17810
|
-
lexer:
|
|
17858
|
+
lexer: s.lexer || new I()
|
|
17811
17859
|
};
|
|
17812
17860
|
for (var i in C || {})
|
|
17813
17861
|
this.options[i] = C[i];
|
|
17814
17862
|
this.lexer = this.options.lexer, this.lexerState = void 0;
|
|
17815
|
-
var a = new A(
|
|
17816
|
-
this.table = [a], a.wants[
|
|
17863
|
+
var a = new A(s, 0);
|
|
17864
|
+
this.table = [a], a.wants[s.start] = [], a.predict(s.start), a.process(), this.current = 0;
|
|
17817
17865
|
}
|
|
17818
17866
|
N.fail = {}, N.prototype.feed = function(O) {
|
|
17819
|
-
var
|
|
17820
|
-
|
|
17867
|
+
var t = this.lexer;
|
|
17868
|
+
t.reset(O, this.lexerState);
|
|
17821
17869
|
for (var C; ; ) {
|
|
17822
17870
|
try {
|
|
17823
|
-
if (C =
|
|
17871
|
+
if (C = t.next(), !C)
|
|
17824
17872
|
break;
|
|
17825
17873
|
} catch (p) {
|
|
17826
17874
|
var U = new A(this.grammar, this.current + 1);
|
|
17827
17875
|
this.table.push(U);
|
|
17828
|
-
var
|
|
17829
|
-
throw
|
|
17876
|
+
var s = new Error(this.reportLexerError(p));
|
|
17877
|
+
throw s.offset = this.current, s.token = p.token, s;
|
|
17830
17878
|
}
|
|
17831
17879
|
var i = this.table[this.current];
|
|
17832
17880
|
this.options.keepHistory || delete this.table[this.current - 1];
|
|
17833
17881
|
var a = this.current + 1, U = new A(this.grammar, a);
|
|
17834
17882
|
this.table.push(U);
|
|
17835
|
-
for (var o = C.text !== void 0 ? C.text : C.value, G =
|
|
17883
|
+
for (var o = C.text !== void 0 ? C.text : C.value, G = t.constructor === I ? C.value : C, P = i.scannable, H = P.length; H--; ) {
|
|
17836
17884
|
var l = P[H], B = l.rule.symbols[l.dot];
|
|
17837
17885
|
if (B.test ? B.test(G) : B.type ? B.type === C.type : B.literal === o) {
|
|
17838
17886
|
var u = l.nextState({ data: G, token: C, isToken: !0, reference: a - 1 });
|
|
@@ -17840,30 +17888,30 @@ var uT = { exports: {} };
|
|
|
17840
17888
|
}
|
|
17841
17889
|
}
|
|
17842
17890
|
if (U.process(), U.states.length === 0) {
|
|
17843
|
-
var
|
|
17844
|
-
throw
|
|
17891
|
+
var s = new Error(this.reportError(C));
|
|
17892
|
+
throw s.offset = this.current, s.token = C, s;
|
|
17845
17893
|
}
|
|
17846
|
-
this.options.keepHistory && (i.lexerState =
|
|
17894
|
+
this.options.keepHistory && (i.lexerState = t.save()), this.current++;
|
|
17847
17895
|
}
|
|
17848
|
-
return i && (this.lexerState =
|
|
17896
|
+
return i && (this.lexerState = t.save()), this.results = this.finish(), this;
|
|
17849
17897
|
}, N.prototype.reportLexerError = function(O) {
|
|
17850
|
-
var
|
|
17851
|
-
return
|
|
17898
|
+
var t, C, s = O.token;
|
|
17899
|
+
return s ? (t = "input " + JSON.stringify(s.text[0]) + " (lexer error)", C = this.lexer.formatError(s, "Syntax error")) : (t = "input (lexer error)", C = O.message), this.reportErrorCommon(C, t);
|
|
17852
17900
|
}, N.prototype.reportError = function(O) {
|
|
17853
|
-
var
|
|
17854
|
-
return this.reportErrorCommon(C,
|
|
17855
|
-
}, N.prototype.reportErrorCommon = function(O,
|
|
17901
|
+
var t = (O.type ? O.type + " token: " : "") + JSON.stringify(O.value !== void 0 ? O.value : O), C = this.lexer.formatError(O, "Syntax error");
|
|
17902
|
+
return this.reportErrorCommon(C, t);
|
|
17903
|
+
}, N.prototype.reportErrorCommon = function(O, t) {
|
|
17856
17904
|
var C = [];
|
|
17857
17905
|
C.push(O);
|
|
17858
|
-
var
|
|
17906
|
+
var s = this.table.length - 2, i = this.table[s], a = i.states.filter(function(o) {
|
|
17859
17907
|
var G = o.rule.symbols[o.dot];
|
|
17860
17908
|
return G && typeof G != "string";
|
|
17861
17909
|
});
|
|
17862
17910
|
if (a.length === 0)
|
|
17863
|
-
C.push("Unexpected " +
|
|
17911
|
+
C.push("Unexpected " + t + `. I did not expect any more input. Here is the state of my parse table:
|
|
17864
17912
|
`), this.displayStateStack(i.states, C);
|
|
17865
17913
|
else {
|
|
17866
|
-
C.push("Unexpected " +
|
|
17914
|
+
C.push("Unexpected " + t + `. Instead, I was expecting to see one of the following:
|
|
17867
17915
|
`);
|
|
17868
17916
|
var U = a.map(function(o) {
|
|
17869
17917
|
return this.buildFirstStateStack(o, []) || [o];
|
|
@@ -17875,43 +17923,43 @@ var uT = { exports: {} };
|
|
|
17875
17923
|
}
|
|
17876
17924
|
return C.push(""), C.join(`
|
|
17877
17925
|
`);
|
|
17878
|
-
}, N.prototype.displayStateStack = function(O,
|
|
17879
|
-
for (var C,
|
|
17926
|
+
}, N.prototype.displayStateStack = function(O, t) {
|
|
17927
|
+
for (var C, s = 0, i = 0; i < O.length; i++) {
|
|
17880
17928
|
var a = O[i], U = a.rule.toString(a.dot);
|
|
17881
|
-
U === C ?
|
|
17929
|
+
U === C ? s++ : (s > 0 && t.push(" ^ " + s + " more lines identical to this"), s = 0, t.push(" " + U)), C = U;
|
|
17882
17930
|
}
|
|
17883
17931
|
}, N.prototype.getSymbolDisplay = function(O) {
|
|
17884
17932
|
return e(O);
|
|
17885
|
-
}, N.prototype.buildFirstStateStack = function(O,
|
|
17886
|
-
if (
|
|
17933
|
+
}, N.prototype.buildFirstStateStack = function(O, t) {
|
|
17934
|
+
if (t.indexOf(O) !== -1)
|
|
17887
17935
|
return null;
|
|
17888
17936
|
if (O.wantedBy.length === 0)
|
|
17889
17937
|
return [O];
|
|
17890
|
-
var C = O.wantedBy[0],
|
|
17938
|
+
var C = O.wantedBy[0], s = [O].concat(t), i = this.buildFirstStateStack(C, s);
|
|
17891
17939
|
return i === null ? null : [O].concat(i);
|
|
17892
17940
|
}, N.prototype.save = function() {
|
|
17893
17941
|
var O = this.table[this.current];
|
|
17894
17942
|
return O.lexerState = this.lexerState, O;
|
|
17895
17943
|
}, N.prototype.restore = function(O) {
|
|
17896
|
-
var
|
|
17897
|
-
this.current =
|
|
17944
|
+
var t = O.index;
|
|
17945
|
+
this.current = t, this.table[t] = O, this.table.splice(t + 1), this.lexerState = O.lexerState, this.results = this.finish();
|
|
17898
17946
|
}, N.prototype.rewind = function(O) {
|
|
17899
17947
|
if (!this.options.keepHistory)
|
|
17900
17948
|
throw new Error("set option `keepHistory` to enable rewinding");
|
|
17901
17949
|
this.restore(this.table[O]);
|
|
17902
17950
|
}, N.prototype.finish = function() {
|
|
17903
|
-
var O = [],
|
|
17904
|
-
return C.states.forEach(function(
|
|
17905
|
-
|
|
17906
|
-
}), O.map(function(
|
|
17907
|
-
return
|
|
17951
|
+
var O = [], t = this.grammar.start, C = this.table[this.table.length - 1];
|
|
17952
|
+
return C.states.forEach(function(s) {
|
|
17953
|
+
s.rule.name === t && s.dot === s.rule.symbols.length && s.reference === 0 && s.data !== N.fail && O.push(s);
|
|
17954
|
+
}), O.map(function(s) {
|
|
17955
|
+
return s.data;
|
|
17908
17956
|
});
|
|
17909
17957
|
};
|
|
17910
17958
|
function e(O) {
|
|
17911
|
-
var
|
|
17912
|
-
if (
|
|
17959
|
+
var t = typeof O;
|
|
17960
|
+
if (t === "string")
|
|
17913
17961
|
return O;
|
|
17914
|
-
if (
|
|
17962
|
+
if (t === "object") {
|
|
17915
17963
|
if (O.literal)
|
|
17916
17964
|
return JSON.stringify(O.literal);
|
|
17917
17965
|
if (O instanceof RegExp)
|
|
@@ -17924,10 +17972,10 @@ var uT = { exports: {} };
|
|
|
17924
17972
|
}
|
|
17925
17973
|
}
|
|
17926
17974
|
function n(O) {
|
|
17927
|
-
var
|
|
17928
|
-
if (
|
|
17975
|
+
var t = typeof O;
|
|
17976
|
+
if (t === "string")
|
|
17929
17977
|
return O;
|
|
17930
|
-
if (
|
|
17978
|
+
if (t === "object") {
|
|
17931
17979
|
if (O.literal)
|
|
17932
17980
|
return JSON.stringify(O.literal);
|
|
17933
17981
|
if (O instanceof RegExp)
|
|
@@ -17945,57 +17993,57 @@ var uT = { exports: {} };
|
|
|
17945
17993
|
Rule: E
|
|
17946
17994
|
};
|
|
17947
17995
|
});
|
|
17948
|
-
})(
|
|
17949
|
-
var
|
|
17950
|
-
const jI = /* @__PURE__ */ qI
|
|
17996
|
+
})(dT);
|
|
17997
|
+
var qI = dT.exports;
|
|
17998
|
+
const jI = /* @__PURE__ */ kI(qI);
|
|
17951
17999
|
function zI(T) {
|
|
17952
18000
|
return T.map(EO).map(TO).map(RO).map(AO).map(SO);
|
|
17953
18001
|
}
|
|
17954
18002
|
const EO = (T, E, R) => {
|
|
17955
|
-
if (
|
|
18003
|
+
if (BT(T.type)) {
|
|
17956
18004
|
const A = IO(R, E);
|
|
17957
18005
|
if (A && A.type === D.PROPERTY_ACCESS_OPERATOR)
|
|
17958
18006
|
return Object.assign(Object.assign({}, T), { type: D.IDENTIFIER, text: T.raw });
|
|
17959
|
-
const S =
|
|
18007
|
+
const S = Z(R, E);
|
|
17960
18008
|
if (S && S.type === D.PROPERTY_ACCESS_OPERATOR)
|
|
17961
18009
|
return Object.assign(Object.assign({}, T), { type: D.IDENTIFIER, text: T.raw });
|
|
17962
18010
|
}
|
|
17963
18011
|
return T;
|
|
17964
18012
|
}, TO = (T, E, R) => {
|
|
17965
18013
|
if (T.type === D.RESERVED_FUNCTION_NAME) {
|
|
17966
|
-
const A =
|
|
17967
|
-
if (!A || !
|
|
18014
|
+
const A = Z(R, E);
|
|
18015
|
+
if (!A || !VT(A))
|
|
17968
18016
|
return Object.assign(Object.assign({}, T), { type: D.IDENTIFIER, text: T.raw });
|
|
17969
18017
|
}
|
|
17970
18018
|
return T;
|
|
17971
18019
|
}, RO = (T, E, R) => {
|
|
17972
18020
|
if (T.type === D.RESERVED_DATA_TYPE) {
|
|
17973
|
-
const A =
|
|
17974
|
-
if (A &&
|
|
18021
|
+
const A = Z(R, E);
|
|
18022
|
+
if (A && VT(A))
|
|
17975
18023
|
return Object.assign(Object.assign({}, T), { type: D.RESERVED_PARAMETERIZED_DATA_TYPE });
|
|
17976
18024
|
}
|
|
17977
18025
|
return T;
|
|
17978
18026
|
}, AO = (T, E, R) => {
|
|
17979
18027
|
if (T.type === D.IDENTIFIER) {
|
|
17980
|
-
const A =
|
|
17981
|
-
if (A &&
|
|
18028
|
+
const A = Z(R, E);
|
|
18029
|
+
if (A && hT(A))
|
|
17982
18030
|
return Object.assign(Object.assign({}, T), { type: D.ARRAY_IDENTIFIER });
|
|
17983
18031
|
}
|
|
17984
18032
|
return T;
|
|
17985
18033
|
}, SO = (T, E, R) => {
|
|
17986
18034
|
if (T.type === D.RESERVED_DATA_TYPE) {
|
|
17987
|
-
const A =
|
|
17988
|
-
if (A &&
|
|
18035
|
+
const A = Z(R, E);
|
|
18036
|
+
if (A && hT(A))
|
|
17989
18037
|
return Object.assign(Object.assign({}, T), { type: D.ARRAY_KEYWORD });
|
|
17990
18038
|
}
|
|
17991
18039
|
return T;
|
|
17992
|
-
}, IO = (T, E) =>
|
|
18040
|
+
}, IO = (T, E) => Z(T, E, -1), Z = (T, E, R = 1) => {
|
|
17993
18041
|
let A = 1;
|
|
17994
18042
|
for (; T[E + A * R] && OO(T[E + A * R]); )
|
|
17995
18043
|
A++;
|
|
17996
18044
|
return T[E + A * R];
|
|
17997
|
-
},
|
|
17998
|
-
class
|
|
18045
|
+
}, VT = (T) => T.type === D.OPEN_PAREN && T.text === "(", hT = (T) => T.type === D.OPEN_PAREN && T.text === "[", OO = (T) => T.type === D.BLOCK_COMMENT || T.type === D.LINE_COMMENT;
|
|
18046
|
+
class WT {
|
|
17999
18047
|
constructor(E) {
|
|
18000
18048
|
this.tokenize = E, this.index = 0, this.tokens = [], this.input = "";
|
|
18001
18049
|
}
|
|
@@ -18008,7 +18056,7 @@ class mT {
|
|
|
18008
18056
|
save() {
|
|
18009
18057
|
}
|
|
18010
18058
|
formatError(E) {
|
|
18011
|
-
const { line: R, col: A } =
|
|
18059
|
+
const { line: R, col: A } = pT(this.input, E.start);
|
|
18012
18060
|
return `Parse error at token: ${E.text} at line ${R} column ${A}`;
|
|
18013
18061
|
}
|
|
18014
18062
|
has(E) {
|
|
@@ -18019,15 +18067,15 @@ var M;
|
|
|
18019
18067
|
(function(T) {
|
|
18020
18068
|
T.statement = "statement", T.clause = "clause", T.set_operation = "set_operation", T.function_call = "function_call", T.parameterized_data_type = "parameterized_data_type", T.array_subscript = "array_subscript", T.property_access = "property_access", T.parenthesis = "parenthesis", T.between_predicate = "between_predicate", T.case_expression = "case_expression", T.case_when = "case_when", T.case_else = "case_else", T.limit_clause = "limit_clause", T.all_columns_asterisk = "all_columns_asterisk", T.literal = "literal", T.identifier = "identifier", T.keyword = "keyword", T.data_type = "data_type", T.parameter = "parameter", T.operator = "operator", T.comma = "comma", T.line_comment = "line_comment", T.block_comment = "block_comment", T.disable_comment = "disable_comment";
|
|
18021
18069
|
})(M = M || (M = {}));
|
|
18022
|
-
function
|
|
18070
|
+
function mE(T) {
|
|
18023
18071
|
return T[0];
|
|
18024
18072
|
}
|
|
18025
|
-
const c = new
|
|
18073
|
+
const c = new WT((T) => []), b = ([[T]]) => T, Y = (T) => ({
|
|
18026
18074
|
type: M.keyword,
|
|
18027
18075
|
tokenType: T.type,
|
|
18028
18076
|
text: T.text,
|
|
18029
18077
|
raw: T.raw
|
|
18030
|
-
}),
|
|
18078
|
+
}), UT = (T) => ({
|
|
18031
18079
|
type: M.data_type,
|
|
18032
18080
|
text: T.text,
|
|
18033
18081
|
raw: T.raw
|
|
@@ -18082,7 +18130,7 @@ const c = new mT((T) => []), b = ([[T]]) => T, Y = (T) => ({
|
|
|
18082
18130
|
{ name: "limit_clause$ebnf$1$subexpression$1$ebnf$1", symbols: ["free_form_sql"] },
|
|
18083
18131
|
{ name: "limit_clause$ebnf$1$subexpression$1$ebnf$1", symbols: ["limit_clause$ebnf$1$subexpression$1$ebnf$1", "free_form_sql"], postprocess: (T) => T[0].concat([T[1]]) },
|
|
18084
18132
|
{ name: "limit_clause$ebnf$1$subexpression$1", symbols: [c.has("COMMA") ? { type: "COMMA" } : COMMA, "limit_clause$ebnf$1$subexpression$1$ebnf$1"] },
|
|
18085
|
-
{ name: "limit_clause$ebnf$1", symbols: ["limit_clause$ebnf$1$subexpression$1"], postprocess:
|
|
18133
|
+
{ name: "limit_clause$ebnf$1", symbols: ["limit_clause$ebnf$1$subexpression$1"], postprocess: mE },
|
|
18086
18134
|
{ name: "limit_clause$ebnf$1", symbols: [], postprocess: () => null },
|
|
18087
18135
|
{
|
|
18088
18136
|
name: "limit_clause",
|
|
@@ -18157,7 +18205,7 @@ const c = new mT((T) => []), b = ([[T]]) => T, Y = (T) => ({
|
|
|
18157
18205
|
},
|
|
18158
18206
|
{ name: "expression_chain_$ebnf$1", symbols: ["expression_with_comments_"] },
|
|
18159
18207
|
{ name: "expression_chain_$ebnf$1", symbols: ["expression_chain_$ebnf$1", "expression_with_comments_"], postprocess: (T) => T[0].concat([T[1]]) },
|
|
18160
|
-
{ name: "expression_chain_", symbols: ["expression_chain_$ebnf$1"], postprocess:
|
|
18208
|
+
{ name: "expression_chain_", symbols: ["expression_chain_$ebnf$1"], postprocess: mE },
|
|
18161
18209
|
{ name: "expression_chain$ebnf$1", symbols: [] },
|
|
18162
18210
|
{ name: "expression_chain$ebnf$1", symbols: ["expression_chain$ebnf$1", "_expression_with_comments"], postprocess: (T) => T[0].concat([T[1]]) },
|
|
18163
18211
|
{
|
|
@@ -18311,7 +18359,7 @@ const c = new mT((T) => []), b = ([[T]]) => T, Y = (T) => ({
|
|
|
18311
18359
|
expr2: [m(N, { leading: I })]
|
|
18312
18360
|
})
|
|
18313
18361
|
},
|
|
18314
|
-
{ name: "case_expression$ebnf$1", symbols: ["expression_chain_"], postprocess:
|
|
18362
|
+
{ name: "case_expression$ebnf$1", symbols: ["expression_chain_"], postprocess: mE },
|
|
18315
18363
|
{ name: "case_expression$ebnf$1", symbols: [], postprocess: () => null },
|
|
18316
18364
|
{ name: "case_expression$ebnf$2", symbols: [] },
|
|
18317
18365
|
{ name: "case_expression$ebnf$2", symbols: ["case_expression$ebnf$2", "case_clause"], postprocess: (T) => T[0].concat([T[1]]) },
|
|
@@ -18377,14 +18425,14 @@ const c = new mT((T) => []), b = ([[T]]) => T, Y = (T) => ({
|
|
|
18377
18425
|
{
|
|
18378
18426
|
name: "data_type",
|
|
18379
18427
|
symbols: ["data_type$subexpression$1"],
|
|
18380
|
-
postprocess: ([[T]]) =>
|
|
18428
|
+
postprocess: ([[T]]) => UT(T)
|
|
18381
18429
|
},
|
|
18382
18430
|
{
|
|
18383
18431
|
name: "data_type",
|
|
18384
18432
|
symbols: [c.has("RESERVED_PARAMETERIZED_DATA_TYPE") ? { type: "RESERVED_PARAMETERIZED_DATA_TYPE" } : RESERVED_PARAMETERIZED_DATA_TYPE, "_", "parenthesis"],
|
|
18385
18433
|
postprocess: ([T, E, R]) => ({
|
|
18386
18434
|
type: M.parameterized_data_type,
|
|
18387
|
-
dataType: m(
|
|
18435
|
+
dataType: m(UT(T), { trailing: E }),
|
|
18388
18436
|
parenthesis: R
|
|
18389
18437
|
})
|
|
18390
18438
|
},
|
|
@@ -18437,13 +18485,13 @@ const c = new mT((T) => []), b = ([[T]]) => T, Y = (T) => ({
|
|
|
18437
18485
|
}
|
|
18438
18486
|
],
|
|
18439
18487
|
ParserStart: "main"
|
|
18440
|
-
}, { Parser: CO, Grammar:
|
|
18441
|
-
function
|
|
18488
|
+
}, { Parser: CO, Grammar: tO } = jI;
|
|
18489
|
+
function sO(T) {
|
|
18442
18490
|
let E = {};
|
|
18443
|
-
const R = new
|
|
18491
|
+
const R = new WT((S) => [
|
|
18444
18492
|
...zI(T.tokenize(S, E)),
|
|
18445
|
-
|
|
18446
|
-
]), A = new CO(
|
|
18493
|
+
HT(S.length)
|
|
18494
|
+
]), A = new CO(tO.fromCompiled(eO), { lexer: R });
|
|
18447
18495
|
return {
|
|
18448
18496
|
parse: (S, I) => {
|
|
18449
18497
|
E = I;
|
|
@@ -18455,11 +18503,11 @@ ${JSON.stringify(N, void 0, 2)}`);
|
|
|
18455
18503
|
}
|
|
18456
18504
|
};
|
|
18457
18505
|
}
|
|
18458
|
-
var
|
|
18506
|
+
var r;
|
|
18459
18507
|
(function(T) {
|
|
18460
18508
|
T[T.SPACE = 0] = "SPACE", T[T.NO_SPACE = 1] = "NO_SPACE", T[T.NO_NEWLINE = 2] = "NO_NEWLINE", T[T.NEWLINE = 3] = "NEWLINE", T[T.MANDATORY_NEWLINE = 4] = "MANDATORY_NEWLINE", T[T.INDENT = 5] = "INDENT", T[T.SINGLE_INDENT = 6] = "SINGLE_INDENT";
|
|
18461
|
-
})(
|
|
18462
|
-
class
|
|
18509
|
+
})(r = r || (r = {}));
|
|
18510
|
+
class fT {
|
|
18463
18511
|
constructor(E) {
|
|
18464
18512
|
this.indentation = E, this.items = [];
|
|
18465
18513
|
}
|
|
@@ -18469,46 +18517,46 @@ class pT {
|
|
|
18469
18517
|
add(...E) {
|
|
18470
18518
|
for (const R of E)
|
|
18471
18519
|
switch (R) {
|
|
18472
|
-
case
|
|
18473
|
-
this.items.push(
|
|
18520
|
+
case r.SPACE:
|
|
18521
|
+
this.items.push(r.SPACE);
|
|
18474
18522
|
break;
|
|
18475
|
-
case
|
|
18523
|
+
case r.NO_SPACE:
|
|
18476
18524
|
this.trimHorizontalWhitespace();
|
|
18477
18525
|
break;
|
|
18478
|
-
case
|
|
18526
|
+
case r.NO_NEWLINE:
|
|
18479
18527
|
this.trimWhitespace();
|
|
18480
18528
|
break;
|
|
18481
|
-
case
|
|
18482
|
-
this.trimHorizontalWhitespace(), this.addNewline(
|
|
18529
|
+
case r.NEWLINE:
|
|
18530
|
+
this.trimHorizontalWhitespace(), this.addNewline(r.NEWLINE);
|
|
18483
18531
|
break;
|
|
18484
|
-
case
|
|
18485
|
-
this.trimHorizontalWhitespace(), this.addNewline(
|
|
18532
|
+
case r.MANDATORY_NEWLINE:
|
|
18533
|
+
this.trimHorizontalWhitespace(), this.addNewline(r.MANDATORY_NEWLINE);
|
|
18486
18534
|
break;
|
|
18487
|
-
case
|
|
18535
|
+
case r.INDENT:
|
|
18488
18536
|
this.addIndentation();
|
|
18489
18537
|
break;
|
|
18490
|
-
case
|
|
18491
|
-
this.items.push(
|
|
18538
|
+
case r.SINGLE_INDENT:
|
|
18539
|
+
this.items.push(r.SINGLE_INDENT);
|
|
18492
18540
|
break;
|
|
18493
18541
|
default:
|
|
18494
18542
|
this.items.push(R);
|
|
18495
18543
|
}
|
|
18496
18544
|
}
|
|
18497
18545
|
trimHorizontalWhitespace() {
|
|
18498
|
-
for (; LO(
|
|
18546
|
+
for (; LO(k(this.items)); )
|
|
18499
18547
|
this.items.pop();
|
|
18500
18548
|
}
|
|
18501
18549
|
trimWhitespace() {
|
|
18502
|
-
for (; _O(
|
|
18550
|
+
for (; _O(k(this.items)); )
|
|
18503
18551
|
this.items.pop();
|
|
18504
18552
|
}
|
|
18505
18553
|
addNewline(E) {
|
|
18506
18554
|
if (this.items.length > 0)
|
|
18507
|
-
switch (
|
|
18508
|
-
case
|
|
18555
|
+
switch (k(this.items)) {
|
|
18556
|
+
case r.NEWLINE:
|
|
18509
18557
|
this.items.pop(), this.items.push(E);
|
|
18510
18558
|
break;
|
|
18511
|
-
case
|
|
18559
|
+
case r.MANDATORY_NEWLINE:
|
|
18512
18560
|
break;
|
|
18513
18561
|
default:
|
|
18514
18562
|
this.items.push(E);
|
|
@@ -18517,7 +18565,7 @@ class pT {
|
|
|
18517
18565
|
}
|
|
18518
18566
|
addIndentation() {
|
|
18519
18567
|
for (let E = 0; E < this.indentation.getLevel(); E++)
|
|
18520
|
-
this.items.push(
|
|
18568
|
+
this.items.push(r.SINGLE_INDENT);
|
|
18521
18569
|
}
|
|
18522
18570
|
/**
|
|
18523
18571
|
* Returns the final SQL string.
|
|
@@ -18533,31 +18581,31 @@ class pT {
|
|
|
18533
18581
|
}
|
|
18534
18582
|
itemToString(E) {
|
|
18535
18583
|
switch (E) {
|
|
18536
|
-
case
|
|
18584
|
+
case r.SPACE:
|
|
18537
18585
|
return " ";
|
|
18538
|
-
case
|
|
18539
|
-
case
|
|
18586
|
+
case r.NEWLINE:
|
|
18587
|
+
case r.MANDATORY_NEWLINE:
|
|
18540
18588
|
return `
|
|
18541
18589
|
`;
|
|
18542
|
-
case
|
|
18590
|
+
case r.SINGLE_INDENT:
|
|
18543
18591
|
return this.indentation.getSingleIndent();
|
|
18544
18592
|
default:
|
|
18545
18593
|
return E;
|
|
18546
18594
|
}
|
|
18547
18595
|
}
|
|
18548
18596
|
}
|
|
18549
|
-
const LO = (T) => T ===
|
|
18550
|
-
function
|
|
18597
|
+
const LO = (T) => T === r.SPACE || T === r.SINGLE_INDENT, _O = (T) => T === r.SPACE || T === r.SINGLE_INDENT || T === r.NEWLINE;
|
|
18598
|
+
function GT(T, E) {
|
|
18551
18599
|
if (E === "standard")
|
|
18552
18600
|
return T;
|
|
18553
18601
|
let R = [];
|
|
18554
18602
|
return T.length >= 10 && T.includes(" ") && ([T, ...R] = T.split(" ")), E === "tabularLeft" ? T = T.padEnd(9, " ") : T = T.padStart(9, " "), T + ["", ...R].join(" ");
|
|
18555
18603
|
}
|
|
18556
|
-
function
|
|
18604
|
+
function cT(T) {
|
|
18557
18605
|
return rR(T) || T === D.RESERVED_CLAUSE || T === D.RESERVED_SELECT || T === D.RESERVED_SET_OPERATION || T === D.RESERVED_JOIN || T === D.LIMIT;
|
|
18558
18606
|
}
|
|
18559
|
-
const
|
|
18560
|
-
class
|
|
18607
|
+
const pE = "top-level", rO = "block-level";
|
|
18608
|
+
class XT {
|
|
18561
18609
|
/**
|
|
18562
18610
|
* @param {string} indent A string to indent with
|
|
18563
18611
|
*/
|
|
@@ -18580,7 +18628,7 @@ class dT {
|
|
|
18580
18628
|
* Increases indentation by one top-level indent.
|
|
18581
18629
|
*/
|
|
18582
18630
|
increaseTopLevel() {
|
|
18583
|
-
this.indentTypes.push(
|
|
18631
|
+
this.indentTypes.push(pE);
|
|
18584
18632
|
}
|
|
18585
18633
|
/**
|
|
18586
18634
|
* Increases indentation by one block-level indent.
|
|
@@ -18593,7 +18641,7 @@ class dT {
|
|
|
18593
18641
|
* Does nothing when the previous indent is not top-level.
|
|
18594
18642
|
*/
|
|
18595
18643
|
decreaseTopLevel() {
|
|
18596
|
-
this.indentTypes.length > 0 &&
|
|
18644
|
+
this.indentTypes.length > 0 && k(this.indentTypes) === pE && this.indentTypes.pop();
|
|
18597
18645
|
}
|
|
18598
18646
|
/**
|
|
18599
18647
|
* Decreases indentation by one block-level indent.
|
|
@@ -18601,32 +18649,32 @@ class dT {
|
|
|
18601
18649
|
* throws away these as well.
|
|
18602
18650
|
*/
|
|
18603
18651
|
decreaseBlockLevel() {
|
|
18604
|
-
for (; this.indentTypes.length > 0 && this.indentTypes.pop() ===
|
|
18652
|
+
for (; this.indentTypes.length > 0 && this.indentTypes.pop() === pE; )
|
|
18605
18653
|
;
|
|
18606
18654
|
}
|
|
18607
18655
|
}
|
|
18608
|
-
class nO extends
|
|
18656
|
+
class nO extends fT {
|
|
18609
18657
|
constructor(E) {
|
|
18610
|
-
super(new
|
|
18658
|
+
super(new XT("")), this.expressionWidth = E, this.length = 0, this.trailingSpace = !1;
|
|
18611
18659
|
}
|
|
18612
18660
|
add(...E) {
|
|
18613
18661
|
if (E.forEach((R) => this.addToLength(R)), this.length > this.expressionWidth)
|
|
18614
|
-
throw new
|
|
18662
|
+
throw new hE();
|
|
18615
18663
|
super.add(...E);
|
|
18616
18664
|
}
|
|
18617
18665
|
addToLength(E) {
|
|
18618
18666
|
if (typeof E == "string")
|
|
18619
18667
|
this.length += E.length, this.trailingSpace = !1;
|
|
18620
18668
|
else {
|
|
18621
|
-
if (E ===
|
|
18622
|
-
throw new
|
|
18623
|
-
E ===
|
|
18669
|
+
if (E === r.MANDATORY_NEWLINE || E === r.NEWLINE)
|
|
18670
|
+
throw new hE();
|
|
18671
|
+
E === r.INDENT || E === r.SINGLE_INDENT || E === r.SPACE ? this.trailingSpace || (this.length++, this.trailingSpace = !0) : (E === r.NO_NEWLINE || E === r.NO_SPACE) && this.trailingSpace && (this.trailingSpace = !1, this.length--);
|
|
18624
18672
|
}
|
|
18625
18673
|
}
|
|
18626
18674
|
}
|
|
18627
|
-
class
|
|
18675
|
+
class hE extends Error {
|
|
18628
18676
|
}
|
|
18629
|
-
class
|
|
18677
|
+
class TE {
|
|
18630
18678
|
constructor({ cfg: E, dialectCfg: R, params: A, layout: S, inline: I = !1 }) {
|
|
18631
18679
|
this.inline = !1, this.nodes = [], this.index = -1, this.cfg = E, this.dialectCfg = R, this.inline = I, this.params = A, this.layout = S;
|
|
18632
18680
|
}
|
|
@@ -18716,64 +18764,64 @@ class EE {
|
|
|
18716
18764
|
}), this.formatNode(E.parenthesis);
|
|
18717
18765
|
}
|
|
18718
18766
|
formatPropertyAccess(E) {
|
|
18719
|
-
this.formatNode(E.object), this.layout.add(
|
|
18767
|
+
this.formatNode(E.object), this.layout.add(r.NO_SPACE, E.operator), this.formatNode(E.property);
|
|
18720
18768
|
}
|
|
18721
18769
|
formatParenthesis(E) {
|
|
18722
18770
|
const R = this.formatInlineExpression(E.children);
|
|
18723
|
-
R ? (this.layout.add(E.openParen), this.layout.add(...R.getLayoutItems()), this.layout.add(
|
|
18771
|
+
R ? (this.layout.add(E.openParen), this.layout.add(...R.getLayoutItems()), this.layout.add(r.NO_SPACE, E.closeParen, r.SPACE)) : (this.layout.add(E.openParen, r.NEWLINE), v(this.cfg) ? (this.layout.add(r.INDENT), this.layout = this.formatSubExpression(E.children)) : (this.layout.indentation.increaseBlockLevel(), this.layout.add(r.INDENT), this.layout = this.formatSubExpression(E.children), this.layout.indentation.decreaseBlockLevel()), this.layout.add(r.NEWLINE, r.INDENT, E.closeParen, r.SPACE));
|
|
18724
18772
|
}
|
|
18725
18773
|
formatBetweenPredicate(E) {
|
|
18726
|
-
this.layout.add(this.showKw(E.betweenKw),
|
|
18774
|
+
this.layout.add(this.showKw(E.betweenKw), r.SPACE), this.layout = this.formatSubExpression(E.expr1), this.layout.add(r.NO_SPACE, r.SPACE, this.showNonTabularKw(E.andKw), r.SPACE), this.layout = this.formatSubExpression(E.expr2), this.layout.add(r.SPACE);
|
|
18727
18775
|
}
|
|
18728
18776
|
formatCaseExpression(E) {
|
|
18729
|
-
this.formatNode(E.caseKw), this.layout.indentation.increaseBlockLevel(), this.layout = this.formatSubExpression(E.expr), this.layout = this.formatSubExpression(E.clauses), this.layout.indentation.decreaseBlockLevel(), this.layout.add(
|
|
18777
|
+
this.formatNode(E.caseKw), this.layout.indentation.increaseBlockLevel(), this.layout = this.formatSubExpression(E.expr), this.layout = this.formatSubExpression(E.clauses), this.layout.indentation.decreaseBlockLevel(), this.layout.add(r.NEWLINE, r.INDENT), this.formatNode(E.endKw);
|
|
18730
18778
|
}
|
|
18731
18779
|
formatCaseWhen(E) {
|
|
18732
|
-
this.layout.add(
|
|
18780
|
+
this.layout.add(r.NEWLINE, r.INDENT), this.formatNode(E.whenKw), this.layout = this.formatSubExpression(E.condition), this.formatNode(E.thenKw), this.layout = this.formatSubExpression(E.result);
|
|
18733
18781
|
}
|
|
18734
18782
|
formatCaseElse(E) {
|
|
18735
|
-
this.layout.add(
|
|
18783
|
+
this.layout.add(r.NEWLINE, r.INDENT), this.formatNode(E.elseKw), this.layout = this.formatSubExpression(E.result);
|
|
18736
18784
|
}
|
|
18737
18785
|
formatClause(E) {
|
|
18738
|
-
this.isOnelineClause(E) ? this.formatClauseInOnelineStyle(E) :
|
|
18786
|
+
this.isOnelineClause(E) ? this.formatClauseInOnelineStyle(E) : v(this.cfg) ? this.formatClauseInTabularStyle(E) : this.formatClauseInIndentedStyle(E);
|
|
18739
18787
|
}
|
|
18740
18788
|
isOnelineClause(E) {
|
|
18741
|
-
return
|
|
18789
|
+
return v(this.cfg) ? this.dialectCfg.tabularOnelineClauses[E.nameKw.text] : this.dialectCfg.onelineClauses[E.nameKw.text];
|
|
18742
18790
|
}
|
|
18743
18791
|
formatClauseInIndentedStyle(E) {
|
|
18744
|
-
this.layout.add(
|
|
18792
|
+
this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E.nameKw), r.NEWLINE), this.layout.indentation.increaseTopLevel(), this.layout.add(r.INDENT), this.layout = this.formatSubExpression(E.children), this.layout.indentation.decreaseTopLevel();
|
|
18745
18793
|
}
|
|
18746
18794
|
formatClauseInOnelineStyle(E) {
|
|
18747
|
-
this.layout.add(
|
|
18795
|
+
this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E.nameKw), r.SPACE), this.layout = this.formatSubExpression(E.children);
|
|
18748
18796
|
}
|
|
18749
18797
|
formatClauseInTabularStyle(E) {
|
|
18750
|
-
this.layout.add(
|
|
18798
|
+
this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E.nameKw), r.SPACE), this.layout.indentation.increaseTopLevel(), this.layout = this.formatSubExpression(E.children), this.layout.indentation.decreaseTopLevel();
|
|
18751
18799
|
}
|
|
18752
18800
|
formatSetOperation(E) {
|
|
18753
|
-
this.layout.add(
|
|
18801
|
+
this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E.nameKw), r.NEWLINE), this.layout.add(r.INDENT), this.layout = this.formatSubExpression(E.children);
|
|
18754
18802
|
}
|
|
18755
18803
|
formatLimitClause(E) {
|
|
18756
18804
|
this.withComments(E.limitKw, () => {
|
|
18757
|
-
this.layout.add(
|
|
18758
|
-
}), this.layout.indentation.increaseTopLevel(),
|
|
18805
|
+
this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E.limitKw));
|
|
18806
|
+
}), this.layout.indentation.increaseTopLevel(), v(this.cfg) ? this.layout.add(r.SPACE) : this.layout.add(r.NEWLINE, r.INDENT), E.offset ? (this.layout = this.formatSubExpression(E.offset), this.layout.add(r.NO_SPACE, ",", r.SPACE), this.layout = this.formatSubExpression(E.count)) : this.layout = this.formatSubExpression(E.count), this.layout.indentation.decreaseTopLevel();
|
|
18759
18807
|
}
|
|
18760
18808
|
formatAllColumnsAsterisk(E) {
|
|
18761
|
-
this.layout.add("*",
|
|
18809
|
+
this.layout.add("*", r.SPACE);
|
|
18762
18810
|
}
|
|
18763
18811
|
formatLiteral(E) {
|
|
18764
|
-
this.layout.add(E.text,
|
|
18812
|
+
this.layout.add(E.text, r.SPACE);
|
|
18765
18813
|
}
|
|
18766
18814
|
formatIdentifier(E) {
|
|
18767
|
-
this.layout.add(this.showIdentifier(E),
|
|
18815
|
+
this.layout.add(this.showIdentifier(E), r.SPACE);
|
|
18768
18816
|
}
|
|
18769
18817
|
formatParameter(E) {
|
|
18770
|
-
this.layout.add(this.params.get(E),
|
|
18818
|
+
this.layout.add(this.params.get(E), r.SPACE);
|
|
18771
18819
|
}
|
|
18772
18820
|
formatOperator({ text: E }) {
|
|
18773
|
-
this.cfg.denseOperators || this.dialectCfg.alwaysDenseOperators.includes(E) ? this.layout.add(
|
|
18821
|
+
this.cfg.denseOperators || this.dialectCfg.alwaysDenseOperators.includes(E) ? this.layout.add(r.NO_SPACE, E) : E === ":" ? this.layout.add(r.NO_SPACE, E, r.SPACE) : this.layout.add(E, r.SPACE);
|
|
18774
18822
|
}
|
|
18775
18823
|
formatComma(E) {
|
|
18776
|
-
this.inline ? this.layout.add(
|
|
18824
|
+
this.inline ? this.layout.add(r.NO_SPACE, ",", r.SPACE) : this.layout.add(r.NO_SPACE, ",", r.NEWLINE, r.INDENT);
|
|
18777
18825
|
}
|
|
18778
18826
|
withComments(E, R) {
|
|
18779
18827
|
this.formatComments(E.leadingComments), R(), this.formatComments(E.trailingComments);
|
|
@@ -18784,15 +18832,15 @@ class EE {
|
|
|
18784
18832
|
});
|
|
18785
18833
|
}
|
|
18786
18834
|
formatLineComment(E) {
|
|
18787
|
-
|
|
18835
|
+
FE(E.precedingWhitespace || "") ? this.layout.add(r.NEWLINE, r.INDENT, E.text, r.MANDATORY_NEWLINE, r.INDENT) : this.layout.getLayoutItems().length > 0 ? this.layout.add(r.NO_NEWLINE, r.SPACE, E.text, r.MANDATORY_NEWLINE, r.INDENT) : this.layout.add(E.text, r.MANDATORY_NEWLINE, r.INDENT);
|
|
18788
18836
|
}
|
|
18789
18837
|
formatBlockComment(E) {
|
|
18790
18838
|
E.type === M.block_comment && this.isMultilineBlockComment(E) ? (this.splitBlockComment(E.text).forEach((R) => {
|
|
18791
|
-
this.layout.add(
|
|
18792
|
-
}), this.layout.add(
|
|
18839
|
+
this.layout.add(r.NEWLINE, r.INDENT, R);
|
|
18840
|
+
}), this.layout.add(r.NEWLINE, r.INDENT)) : this.layout.add(E.text, r.SPACE);
|
|
18793
18841
|
}
|
|
18794
18842
|
isMultilineBlockComment(E) {
|
|
18795
|
-
return
|
|
18843
|
+
return FE(E.text) || FE(E.precedingWhitespace || "");
|
|
18796
18844
|
}
|
|
18797
18845
|
isDocComment(E) {
|
|
18798
18846
|
const R = E.split(/\n/);
|
|
@@ -18800,7 +18848,7 @@ class EE {
|
|
|
18800
18848
|
// first line starts with /* or /**
|
|
18801
18849
|
/^\/\*\*?$/.test(R[0]) && // intermediate lines start with *
|
|
18802
18850
|
R.slice(1, R.length - 1).every((A) => /^\s*\*/.test(A)) && // last line ends with */
|
|
18803
|
-
/^\s*\*\/$/.test(
|
|
18851
|
+
/^\s*\*\/$/.test(k(R))
|
|
18804
18852
|
);
|
|
18805
18853
|
}
|
|
18806
18854
|
// Breaks up block comment to multiple lines.
|
|
@@ -18834,7 +18882,7 @@ class EE {
|
|
|
18834
18882
|
return this.isDocComment(E) ? E.split(/\n/).map((R) => /^\s*\*/.test(R) ? " " + R.replace(/^\s*/, "") : R) : E.split(/\n/).map((R) => R.replace(/^\s*/, ""));
|
|
18835
18883
|
}
|
|
18836
18884
|
formatSubExpression(E) {
|
|
18837
|
-
return new
|
|
18885
|
+
return new TE({
|
|
18838
18886
|
cfg: this.cfg,
|
|
18839
18887
|
dialectCfg: this.dialectCfg,
|
|
18840
18888
|
params: this.params,
|
|
@@ -18845,7 +18893,7 @@ class EE {
|
|
|
18845
18893
|
formatInlineExpression(E) {
|
|
18846
18894
|
const R = this.params.getPositionalParameterIndex();
|
|
18847
18895
|
try {
|
|
18848
|
-
return new
|
|
18896
|
+
return new TE({
|
|
18849
18897
|
cfg: this.cfg,
|
|
18850
18898
|
dialectCfg: this.dialectCfg,
|
|
18851
18899
|
params: this.params,
|
|
@@ -18853,7 +18901,7 @@ class EE {
|
|
|
18853
18901
|
inline: !0
|
|
18854
18902
|
}).format(E);
|
|
18855
18903
|
} catch (A) {
|
|
18856
|
-
if (A instanceof
|
|
18904
|
+
if (A instanceof hE) {
|
|
18857
18905
|
this.params.setPositionalParameterIndex(R);
|
|
18858
18906
|
return;
|
|
18859
18907
|
} else
|
|
@@ -18873,19 +18921,19 @@ class EE {
|
|
|
18873
18921
|
}
|
|
18874
18922
|
}
|
|
18875
18923
|
formatJoin(E) {
|
|
18876
|
-
|
|
18924
|
+
v(this.cfg) ? (this.layout.indentation.decreaseTopLevel(), this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E), r.SPACE), this.layout.indentation.increaseTopLevel()) : this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E), r.SPACE);
|
|
18877
18925
|
}
|
|
18878
18926
|
formatKeyword(E) {
|
|
18879
|
-
this.layout.add(this.showKw(E),
|
|
18927
|
+
this.layout.add(this.showKw(E), r.SPACE);
|
|
18880
18928
|
}
|
|
18881
18929
|
formatLogicalOperator(E) {
|
|
18882
|
-
this.cfg.logicalOperatorNewline === "before" ?
|
|
18930
|
+
this.cfg.logicalOperatorNewline === "before" ? v(this.cfg) ? (this.layout.indentation.decreaseTopLevel(), this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E), r.SPACE), this.layout.indentation.increaseTopLevel()) : this.layout.add(r.NEWLINE, r.INDENT, this.showKw(E), r.SPACE) : this.layout.add(this.showKw(E), r.NEWLINE, r.INDENT);
|
|
18883
18931
|
}
|
|
18884
18932
|
formatDataType(E) {
|
|
18885
|
-
this.layout.add(this.showDataType(E),
|
|
18933
|
+
this.layout.add(this.showDataType(E), r.SPACE);
|
|
18886
18934
|
}
|
|
18887
18935
|
showKw(E) {
|
|
18888
|
-
return
|
|
18936
|
+
return cT(E.tokenType) ? GT(this.showNonTabularKw(E), this.cfg.indentStyle) : this.showNonTabularKw(E);
|
|
18889
18937
|
}
|
|
18890
18938
|
// Like showKw(), but skips tabular formatting
|
|
18891
18939
|
showNonTabularKw(E) {
|
|
@@ -18899,7 +18947,7 @@ class EE {
|
|
|
18899
18947
|
}
|
|
18900
18948
|
}
|
|
18901
18949
|
showFunctionKw(E) {
|
|
18902
|
-
return
|
|
18950
|
+
return cT(E.tokenType) ? GT(this.showNonTabularFunctionKw(E), this.cfg.indentStyle) : this.showNonTabularFunctionKw(E);
|
|
18903
18951
|
}
|
|
18904
18952
|
// Like showFunctionKw(), but skips tabular formatting
|
|
18905
18953
|
showNonTabularFunctionKw(E) {
|
|
@@ -18949,20 +18997,20 @@ class DO {
|
|
|
18949
18997
|
return this.formatAst(R).trimEnd();
|
|
18950
18998
|
}
|
|
18951
18999
|
parse(E) {
|
|
18952
|
-
return
|
|
19000
|
+
return sO(this.dialect.tokenizer).parse(E, this.cfg.paramTypes || {});
|
|
18953
19001
|
}
|
|
18954
19002
|
formatAst(E) {
|
|
18955
19003
|
return E.map((R) => this.formatStatement(R)).join(`
|
|
18956
19004
|
`.repeat(this.cfg.linesBetweenQueries + 1));
|
|
18957
19005
|
}
|
|
18958
19006
|
formatStatement(E) {
|
|
18959
|
-
const R = new
|
|
19007
|
+
const R = new TE({
|
|
18960
19008
|
cfg: this.cfg,
|
|
18961
19009
|
dialectCfg: this.dialect.formatOptions,
|
|
18962
19010
|
params: this.params,
|
|
18963
|
-
layout: new
|
|
19011
|
+
layout: new fT(new XT(vI(this.cfg)))
|
|
18964
19012
|
}).format(E.children);
|
|
18965
|
-
return E.hasSemicolon && (this.cfg.newlineBeforeSemicolon ? R.add(
|
|
19013
|
+
return E.hasSemicolon && (this.cfg.newlineBeforeSemicolon ? R.add(r.NEWLINE, ";") : R.add(r.NO_NEWLINE, ";")), R.toString();
|
|
18966
19014
|
}
|
|
18967
19015
|
}
|
|
18968
19016
|
class z extends Error {
|
|
@@ -18999,7 +19047,7 @@ var aO = function(T, E) {
|
|
|
18999
19047
|
E.indexOf(A[S]) < 0 && Object.prototype.propertyIsEnumerable.call(T, A[S]) && (R[A[S]] = T[A[S]]);
|
|
19000
19048
|
return R;
|
|
19001
19049
|
};
|
|
19002
|
-
const
|
|
19050
|
+
const bT = {
|
|
19003
19051
|
bigquery: "bigquery",
|
|
19004
19052
|
db2: "db2",
|
|
19005
19053
|
db2i: "db2i",
|
|
@@ -19020,7 +19068,7 @@ const VT = {
|
|
|
19020
19068
|
tsql: "transactsql",
|
|
19021
19069
|
singlestoredb: "singlestoredb",
|
|
19022
19070
|
snowflake: "snowflake"
|
|
19023
|
-
}, MO = Object.keys(
|
|
19071
|
+
}, MO = Object.keys(bT), UO = {
|
|
19024
19072
|
tabWidth: 2,
|
|
19025
19073
|
useTabs: !1,
|
|
19026
19074
|
keywordCase: "preserve",
|
|
@@ -19036,7 +19084,7 @@ const VT = {
|
|
|
19036
19084
|
}, GO = (T, E = {}) => {
|
|
19037
19085
|
if (typeof E.language == "string" && !MO.includes(E.language))
|
|
19038
19086
|
throw new z(`Unsupported SQL dialect: ${E.language}`);
|
|
19039
|
-
const R =
|
|
19087
|
+
const R = bT[E.language || "sql"];
|
|
19040
19088
|
return cO(T, Object.assign(Object.assign({}, E), { dialect: YI[R] }));
|
|
19041
19089
|
}, cO = (T, E) => {
|
|
19042
19090
|
var { dialect: R } = E, A = aO(E, ["dialect"]);
|
|
@@ -19045,7 +19093,7 @@ const VT = {
|
|
|
19045
19093
|
const S = iO(Object.assign(Object.assign({}, UO), A));
|
|
19046
19094
|
return new DO(JI(R), S).format(T);
|
|
19047
19095
|
};
|
|
19048
|
-
function
|
|
19096
|
+
function lT(T, E) {
|
|
19049
19097
|
try {
|
|
19050
19098
|
return GO(T, {
|
|
19051
19099
|
language: {
|
|
@@ -19061,15 +19109,15 @@ function aT(T, E) {
|
|
|
19061
19109
|
return console.warn("SQL formatting failed:", R), T;
|
|
19062
19110
|
}
|
|
19063
19111
|
}
|
|
19064
|
-
class
|
|
19112
|
+
class bE {
|
|
19065
19113
|
// 5 minutes in milliseconds
|
|
19066
19114
|
constructor(E) {
|
|
19067
|
-
|
|
19068
|
-
|
|
19069
|
-
|
|
19070
|
-
|
|
19071
|
-
|
|
19072
|
-
E != null && E.databaseExecutor ? this.dbExecutor = E.databaseExecutor : E != null && E.drizzle && (this.dbExecutor =
|
|
19115
|
+
W(this, "cubes", /* @__PURE__ */ new Map());
|
|
19116
|
+
W(this, "dbExecutor");
|
|
19117
|
+
W(this, "metadataCache");
|
|
19118
|
+
W(this, "metadataCacheTimestamp");
|
|
19119
|
+
W(this, "METADATA_CACHE_TTL", 5 * 60 * 1e3);
|
|
19120
|
+
E != null && E.databaseExecutor ? this.dbExecutor = E.databaseExecutor : E != null && E.drizzle && (this.dbExecutor = vE(
|
|
19073
19121
|
E.drizzle,
|
|
19074
19122
|
E.schema,
|
|
19075
19123
|
E.engineType
|
|
@@ -19092,7 +19140,7 @@ class hE {
|
|
|
19092
19140
|
* Set Drizzle instance and schema directly
|
|
19093
19141
|
*/
|
|
19094
19142
|
setDrizzle(E, R, A) {
|
|
19095
|
-
this.dbExecutor =
|
|
19143
|
+
this.dbExecutor = vE(E, R, A);
|
|
19096
19144
|
}
|
|
19097
19145
|
/**
|
|
19098
19146
|
* Check if database executor is configured
|
|
@@ -19130,7 +19178,7 @@ class hE {
|
|
|
19130
19178
|
async execute(E, R) {
|
|
19131
19179
|
if (!this.dbExecutor)
|
|
19132
19180
|
throw new Error("Database executor not configured");
|
|
19133
|
-
return new
|
|
19181
|
+
return new tE(this.dbExecutor).execute(this.cubes, E, R);
|
|
19134
19182
|
}
|
|
19135
19183
|
/**
|
|
19136
19184
|
* Execute a multi-cube query
|
|
@@ -19206,9 +19254,9 @@ class hE {
|
|
|
19206
19254
|
throw new Error(`Cube '${E}' not found`);
|
|
19207
19255
|
if (!this.dbExecutor)
|
|
19208
19256
|
throw new Error("Database executor not configured");
|
|
19209
|
-
const N = await new
|
|
19257
|
+
const N = await new tE(this.dbExecutor).generateSQL(S, R, A), e = this.dbExecutor.getEngineType();
|
|
19210
19258
|
return {
|
|
19211
|
-
sql:
|
|
19259
|
+
sql: lT(N.sql, e),
|
|
19212
19260
|
params: N.params
|
|
19213
19261
|
};
|
|
19214
19262
|
}
|
|
@@ -19218,9 +19266,9 @@ class hE {
|
|
|
19218
19266
|
async generateMultiCubeSQL(E, R) {
|
|
19219
19267
|
if (!this.dbExecutor)
|
|
19220
19268
|
throw new Error("Database executor not configured");
|
|
19221
|
-
const S = await new
|
|
19269
|
+
const S = await new tE(this.dbExecutor).generateMultiCubeSQL(this.cubes, E, R), I = this.dbExecutor.getEngineType();
|
|
19222
19270
|
return {
|
|
19223
|
-
sql:
|
|
19271
|
+
sql: lT(S.sql, I),
|
|
19224
19272
|
params: S.params
|
|
19225
19273
|
};
|
|
19226
19274
|
}
|
|
@@ -19261,10 +19309,10 @@ class hE {
|
|
|
19261
19309
|
* Ensures all referenced cubes and fields exist
|
|
19262
19310
|
*/
|
|
19263
19311
|
validateQuery(E) {
|
|
19264
|
-
return
|
|
19312
|
+
return KT(this.cubes, E);
|
|
19265
19313
|
}
|
|
19266
19314
|
}
|
|
19267
|
-
function
|
|
19315
|
+
function KT(T, E) {
|
|
19268
19316
|
const R = [], A = /* @__PURE__ */ new Set();
|
|
19269
19317
|
if (E.measures)
|
|
19270
19318
|
for (const S of E.measures) {
|
|
@@ -19313,17 +19361,17 @@ function hT(T, E) {
|
|
|
19313
19361
|
}
|
|
19314
19362
|
if (E.filters)
|
|
19315
19363
|
for (const S of E.filters)
|
|
19316
|
-
|
|
19364
|
+
yT(S, T, R, A);
|
|
19317
19365
|
return A.size === 0 && R.push("Query must reference at least one cube through measures, dimensions, or filters"), {
|
|
19318
19366
|
isValid: R.length === 0,
|
|
19319
19367
|
errors: R
|
|
19320
19368
|
};
|
|
19321
19369
|
}
|
|
19322
|
-
function
|
|
19370
|
+
function yT(T, E, R, A) {
|
|
19323
19371
|
if ("and" in T || "or" in T) {
|
|
19324
19372
|
const e = T.and || T.or || [];
|
|
19325
19373
|
for (const n of e)
|
|
19326
|
-
|
|
19374
|
+
yT(n, E, R, A);
|
|
19327
19375
|
return;
|
|
19328
19376
|
}
|
|
19329
19377
|
if (!("member" in T)) {
|
|
@@ -19344,11 +19392,11 @@ function fT(T, E, R, A) {
|
|
|
19344
19392
|
!N.dimensions[I] && !N.measures[I] && R.push(`Filter field '${I}' not found on cube '${S}' (must be a dimension or measure)`);
|
|
19345
19393
|
}
|
|
19346
19394
|
function YO(T) {
|
|
19347
|
-
return new
|
|
19395
|
+
return new bE(T);
|
|
19348
19396
|
}
|
|
19349
|
-
const lO = new
|
|
19397
|
+
const lO = new bE(), mO = lO;
|
|
19350
19398
|
function pO(T) {
|
|
19351
|
-
return new
|
|
19399
|
+
return new bE({
|
|
19352
19400
|
drizzle: T.drizzle,
|
|
19353
19401
|
schema: T.schema
|
|
19354
19402
|
});
|
|
@@ -19460,26 +19508,26 @@ const dO = {
|
|
|
19460
19508
|
}
|
|
19461
19509
|
};
|
|
19462
19510
|
export {
|
|
19463
|
-
|
|
19511
|
+
fE as BaseDatabaseExecutor,
|
|
19464
19512
|
zT as MySQLExecutor,
|
|
19465
19513
|
jT as PostgresExecutor,
|
|
19466
19514
|
AR as QueryBuilder,
|
|
19467
|
-
|
|
19515
|
+
tE as QueryExecutor,
|
|
19468
19516
|
SR as QueryPlanner,
|
|
19469
19517
|
TR as SQLiteExecutor,
|
|
19470
|
-
|
|
19518
|
+
bE as SemanticLayerCompiler,
|
|
19471
19519
|
dO as SemanticLayerUtils,
|
|
19472
|
-
|
|
19520
|
+
vE as createDatabaseExecutor,
|
|
19473
19521
|
pO as createDrizzleSemanticLayer,
|
|
19474
19522
|
uO as createMultiCubeContext,
|
|
19475
19523
|
ER as createMySQLExecutor,
|
|
19476
|
-
|
|
19477
|
-
|
|
19524
|
+
wE as createPostgresExecutor,
|
|
19525
|
+
xE as createSQLiteExecutor,
|
|
19478
19526
|
YO as createSemanticLayer,
|
|
19479
19527
|
mO as defaultSemanticLayer,
|
|
19480
19528
|
FO as defineCube,
|
|
19481
19529
|
RR as getJoinType,
|
|
19482
|
-
|
|
19530
|
+
QE as resolveCubeReference,
|
|
19483
19531
|
K as resolveSqlExpression,
|
|
19484
19532
|
lO as semanticLayer
|
|
19485
19533
|
};
|