@checkdigit/eslint-plugin 7.18.0-PR.143-e2e9 → 7.18.0-PR.143-cf9d
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-mjs/athena/api-locator.mjs +19 -10
- package/dist-mjs/athena/api-matcher.mjs +37 -77
- package/dist-mjs/athena/validate.mjs +130 -161
- package/dist-mjs/athena/visitor.mjs +32 -52
- package/dist-mjs/openapi/generate-schema.mjs +17 -23
- package/dist-mjs/openapi/service-schema-generator.mjs +7 -9
- package/dist-types/athena/visitor.d.ts +5 -3
- package/package.json +1 -1
- package/src/athena/api-locator.ts +20 -12
- package/src/athena/api-matcher.ts +45 -79
- package/src/athena/validate.ts +175 -170
- package/src/athena/visitor.ts +38 -71
- package/src/openapi/generate-schema.ts +18 -34
- package/src/openapi/service-schema-generator.ts +7 -8
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
extractColumnRefs,
|
|
15
15
|
extractJsonExtractCalls,
|
|
16
16
|
extractJsonExtractPath,
|
|
17
|
+
fromClauseItems,
|
|
17
18
|
hasFunctionCalls,
|
|
18
19
|
isBaseFrom,
|
|
19
20
|
isJoin,
|
|
@@ -42,6 +43,7 @@ function offsetToLoc(text, offset) {
|
|
|
42
43
|
}
|
|
43
44
|
var log = debug("eslint-plugin:athena");
|
|
44
45
|
var ANONYMOUS_TABLE = "<anonymous>";
|
|
46
|
+
var SUBQUERY_TABLE = "<subquery>";
|
|
45
47
|
function resolvedCol(name, schema, ast) {
|
|
46
48
|
return ast !== void 0 ? { name, schema, ast } : { name, schema };
|
|
47
49
|
}
|
|
@@ -54,20 +56,20 @@ function getApiSchemas(serviceName, ctx) {
|
|
|
54
56
|
return schemas;
|
|
55
57
|
}
|
|
56
58
|
function lookupTables(nameOrAlias, ctx) {
|
|
57
|
-
if (ctx.tables.has(nameOrAlias)) {
|
|
58
|
-
return ctx.tables.get(nameOrAlias) ?? [];
|
|
59
|
-
}
|
|
60
59
|
const canonical = ctx.aliases.get(nameOrAlias) ?? nameOrAlias;
|
|
61
|
-
return ctx.tables.get(canonical) ?? [];
|
|
60
|
+
return ctx.tables.get(nameOrAlias) ?? ctx.tables.get(canonical) ?? [];
|
|
62
61
|
}
|
|
63
|
-
function
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return
|
|
62
|
+
function flattenTables(ctx) {
|
|
63
|
+
return [...ctx.tables.values()].flat();
|
|
64
|
+
}
|
|
65
|
+
function resolveReferencedTables(tableRef, allTables, ctx) {
|
|
66
|
+
return tableRef !== void 0 ? lookupTables(tableRef, ctx) : allTables;
|
|
67
|
+
}
|
|
68
|
+
function resolveColumnRefParts(ref) {
|
|
69
|
+
return {
|
|
70
|
+
tableRef: ref.table ?? void 0,
|
|
71
|
+
colRef: typeof ref.column === "string" ? ref.column : void 0
|
|
72
|
+
};
|
|
71
73
|
}
|
|
72
74
|
function resolveServiceTable(select, item, ctx, storageKey) {
|
|
73
75
|
const { table: tableName } = item;
|
|
@@ -96,29 +98,29 @@ function extractColumnAliasName(arg) {
|
|
|
96
98
|
}
|
|
97
99
|
const fnNode = arg;
|
|
98
100
|
if (fnNode.type === "function" && fnNode.args?.value?.length === 0) {
|
|
99
|
-
|
|
100
|
-
return functionName !== void 0 ? functionName.toLowerCase() : void 0;
|
|
101
|
+
return fnNode.name?.name?.[0]?.value?.toLowerCase();
|
|
101
102
|
}
|
|
102
103
|
return void 0;
|
|
103
104
|
}
|
|
104
105
|
function isStandaloneUnnest(node) {
|
|
105
106
|
return isUnnestFrom(node) && typeof node.expr.column !== "string";
|
|
106
107
|
}
|
|
108
|
+
function aliasAsSingleton(alias) {
|
|
109
|
+
return alias !== void 0 ? [alias] : [];
|
|
110
|
+
}
|
|
107
111
|
function fromItemTableNames(item) {
|
|
108
112
|
if (isBaseFrom(item) || isJoin(item)) {
|
|
109
113
|
return item.as !== null ? [item.as, item.table] : [item.table];
|
|
110
114
|
}
|
|
111
115
|
if (isTableExpr(item)) {
|
|
112
|
-
return [typeof item.as === "string" ? item.as :
|
|
116
|
+
return [typeof item.as === "string" ? item.as : SUBQUERY_TABLE];
|
|
113
117
|
}
|
|
114
118
|
if (isValuesFrom(item)) {
|
|
115
|
-
|
|
116
|
-
return alias !== void 0 ? [alias] : [];
|
|
119
|
+
return aliasAsSingleton(getFunctionAliasName(item.as));
|
|
117
120
|
}
|
|
118
121
|
const unknownItem = item;
|
|
119
122
|
if (isStandaloneUnnest(unknownItem)) {
|
|
120
|
-
|
|
121
|
-
return alias !== void 0 ? [alias] : [];
|
|
123
|
+
return aliasAsSingleton(getFunctionAliasName(unknownItem.as));
|
|
122
124
|
}
|
|
123
125
|
return [];
|
|
124
126
|
}
|
|
@@ -133,6 +135,9 @@ function restrictToFromClause(select, ctx) {
|
|
|
133
135
|
function tableIsResolved(tableName, storageKey, ctx) {
|
|
134
136
|
return ctx.tables.has(storageKey) || ctx.tables.has(tableName);
|
|
135
137
|
}
|
|
138
|
+
function registerAliasedTable(tableAlias, columns, ctx) {
|
|
139
|
+
ctx.tables.set(tableAlias, [{ name: tableAlias, columns }]);
|
|
140
|
+
}
|
|
136
141
|
function resolveTableOrJoinItem(select, item, ctx) {
|
|
137
142
|
const { table: tableName, as: alias } = item;
|
|
138
143
|
if (alias !== null) {
|
|
@@ -155,7 +160,7 @@ function resolveFromClause(select, ctx) {
|
|
|
155
160
|
return [colName, [resolvedCol(colName, {})]];
|
|
156
161
|
})
|
|
157
162
|
);
|
|
158
|
-
|
|
163
|
+
registerAliasedTable(tableAlias, columns, ctx);
|
|
159
164
|
}
|
|
160
165
|
} else if (isUnnestFrom(unknownItem)) {
|
|
161
166
|
} else if (isValuesFrom(item)) {
|
|
@@ -164,10 +169,10 @@ function resolveFromClause(select, ctx) {
|
|
|
164
169
|
const columns = new Map(
|
|
165
170
|
item.as.args.value.map((columnRef) => [columnRef.column, [resolvedCol(columnRef.column, {})]])
|
|
166
171
|
);
|
|
167
|
-
|
|
172
|
+
registerAliasedTable(tableAlias, columns, ctx);
|
|
168
173
|
}
|
|
169
174
|
} else if (isTableExpr(item)) {
|
|
170
|
-
const alias = typeof item.as === "string" ? item.as :
|
|
175
|
+
const alias = typeof item.as === "string" ? item.as : SUBQUERY_TABLE;
|
|
171
176
|
checkSelect(item.expr.ast, ctx, alias);
|
|
172
177
|
} else if (isJoin(item) || isBaseFrom(item)) {
|
|
173
178
|
resolveTableOrJoinItem(select, item, ctx);
|
|
@@ -203,62 +208,54 @@ function extractUnnestMappings(select) {
|
|
|
203
208
|
}
|
|
204
209
|
return mappings;
|
|
205
210
|
}
|
|
211
|
+
function buildUnnestColumnMap(fromColumn, toColumns, sourceSchema, sourceAst, ast, hasKnownApiOperation) {
|
|
212
|
+
if (sourceSchema?.type === "array") {
|
|
213
|
+
const [toColumn] = toColumns;
|
|
214
|
+
assert.ok(toColumn !== void 0);
|
|
215
|
+
return /* @__PURE__ */ new Map([[toColumn, [resolvedCol(toColumn, sourceSchema.items, sourceAst)]]]);
|
|
216
|
+
}
|
|
217
|
+
if (sourceSchema?.type === "object") {
|
|
218
|
+
const [keyColumn, valueColumn] = toColumns;
|
|
219
|
+
assert.ok(
|
|
220
|
+
keyColumn !== void 0 && valueColumn !== void 0,
|
|
221
|
+
`UNNEST of map column '${fromColumn}' requires exactly two alias columns (key, value)`
|
|
222
|
+
);
|
|
223
|
+
const addlProps = sourceSchema["additionalProperties"];
|
|
224
|
+
const valueSchema = typeof addlProps === "object" && addlProps !== null ? addlProps : { type: "string" };
|
|
225
|
+
return /* @__PURE__ */ new Map([
|
|
226
|
+
[keyColumn, [resolvedCol(keyColumn, { type: "string" }, sourceAst)]],
|
|
227
|
+
[valueColumn, [resolvedCol(valueColumn, valueSchema, sourceAst)]]
|
|
228
|
+
]);
|
|
229
|
+
}
|
|
230
|
+
if (!hasKnownApiOperation) {
|
|
231
|
+
return new Map(toColumns.map((toColumn) => [toColumn, [resolvedCol(toColumn, {})]]));
|
|
232
|
+
}
|
|
233
|
+
throw new AthenaError(
|
|
234
|
+
ATHENA_ERROR,
|
|
235
|
+
`UNNEST source column '${fromColumn}' must resolve to an array or map schema`,
|
|
236
|
+
ast
|
|
237
|
+
);
|
|
238
|
+
}
|
|
206
239
|
function applyUnnestPre(mappings, ctx) {
|
|
207
240
|
const deferred = [];
|
|
208
241
|
for (const { fromColumn, toColumns, tableAlias, ast } of mappings) {
|
|
209
|
-
const ownerTable =
|
|
242
|
+
const ownerTable = flattenTables(ctx).find((table) => table.columns.has(fromColumn));
|
|
210
243
|
if (ownerTable === void 0) {
|
|
211
244
|
deferred.push({ fromColumn, toColumns, ...tableAlias !== void 0 ? { tableAlias } : {}, ast });
|
|
212
245
|
continue;
|
|
213
246
|
}
|
|
214
247
|
const sourceColumns = ownerTable.columns.get(fromColumn) ?? [];
|
|
215
|
-
const sourceSchema = sourceColumns[0]?.schema;
|
|
216
248
|
const unnestTableName = `${ownerTable.name ?? ANONYMOUS_TABLE}:<unnested>`;
|
|
217
249
|
const apiOperation = ownerTable.apiOperation !== void 0 ? { apiOperation: ownerTable.apiOperation } : {};
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
];
|
|
229
|
-
} else if (sourceSchema?.type === "object") {
|
|
230
|
-
const [keyColumn, valueColumn] = toColumns;
|
|
231
|
-
assert.ok(
|
|
232
|
-
keyColumn !== void 0 && valueColumn !== void 0,
|
|
233
|
-
`UNNEST of map column '${fromColumn}' requires exactly two alias columns (key, value)`
|
|
234
|
-
);
|
|
235
|
-
const addlProps = sourceSchema["additionalProperties"];
|
|
236
|
-
const valueSchema = typeof addlProps === "object" && addlProps !== null ? addlProps : { type: "string" };
|
|
237
|
-
unnestEntry = [
|
|
238
|
-
{
|
|
239
|
-
name: unnestTableName,
|
|
240
|
-
...apiOperation,
|
|
241
|
-
columns: /* @__PURE__ */ new Map([
|
|
242
|
-
[keyColumn, [resolvedCol(keyColumn, { type: "string" }, sourceColumns[0]?.ast)]],
|
|
243
|
-
[valueColumn, [resolvedCol(valueColumn, valueSchema, sourceColumns[0]?.ast)]]
|
|
244
|
-
])
|
|
245
|
-
}
|
|
246
|
-
];
|
|
247
|
-
} else if (ownerTable.apiOperation !== void 0) {
|
|
248
|
-
throw new AthenaError(
|
|
249
|
-
ATHENA_ERROR,
|
|
250
|
-
`UNNEST source column '${fromColumn}' must resolve to an array or map schema`,
|
|
251
|
-
ast
|
|
252
|
-
);
|
|
253
|
-
} else {
|
|
254
|
-
unnestEntry = [
|
|
255
|
-
{
|
|
256
|
-
name: unnestTableName,
|
|
257
|
-
...apiOperation,
|
|
258
|
-
columns: new Map(toColumns.map((toColumn) => [toColumn, [resolvedCol(toColumn, {})]]))
|
|
259
|
-
}
|
|
260
|
-
];
|
|
261
|
-
}
|
|
250
|
+
const unnestColumns = buildUnnestColumnMap(
|
|
251
|
+
fromColumn,
|
|
252
|
+
toColumns,
|
|
253
|
+
sourceColumns[0]?.schema,
|
|
254
|
+
sourceColumns[0]?.ast,
|
|
255
|
+
ast,
|
|
256
|
+
ownerTable.apiOperation !== void 0
|
|
257
|
+
);
|
|
258
|
+
const unnestEntry = [{ name: unnestTableName, ...apiOperation, columns: unnestColumns }];
|
|
262
259
|
ctx.tables.set(unnestTableName, unnestEntry);
|
|
263
260
|
if (tableAlias !== void 0) {
|
|
264
261
|
ctx.tables.set(tableAlias, unnestEntry);
|
|
@@ -272,27 +269,16 @@ function applyUnnestPost(mappings, columns) {
|
|
|
272
269
|
if (sourceColumns === void 0) {
|
|
273
270
|
throw new AthenaError(ATHENA_ERROR, `UNNEST source column '${fromColumn}' not found in SELECT`, ast);
|
|
274
271
|
}
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
);
|
|
286
|
-
const addlProps = sourceSchema["additionalProperties"];
|
|
287
|
-
const valueSchema = typeof addlProps === "object" && addlProps !== null ? addlProps : { type: "string" };
|
|
288
|
-
columns.set(keyColumn, [resolvedCol(keyColumn, { type: "string" }, sourceColumns[0]?.ast)]);
|
|
289
|
-
columns.set(valueColumn, [resolvedCol(valueColumn, valueSchema, sourceColumns[0]?.ast)]);
|
|
290
|
-
} else {
|
|
291
|
-
throw new AthenaError(
|
|
292
|
-
ATHENA_ERROR,
|
|
293
|
-
`UNNEST source column '${fromColumn}' must resolve to an array or map schema`,
|
|
294
|
-
ast
|
|
295
|
-
);
|
|
272
|
+
const unnestColumns = buildUnnestColumnMap(
|
|
273
|
+
fromColumn,
|
|
274
|
+
toColumns,
|
|
275
|
+
sourceColumns[0]?.schema,
|
|
276
|
+
sourceColumns[0]?.ast,
|
|
277
|
+
ast,
|
|
278
|
+
true
|
|
279
|
+
);
|
|
280
|
+
for (const [key, value] of unnestColumns) {
|
|
281
|
+
columns.set(key, value);
|
|
296
282
|
}
|
|
297
283
|
}
|
|
298
284
|
}
|
|
@@ -311,23 +297,18 @@ function schemaPropertyHint(resolvedColumns) {
|
|
|
311
297
|
if (resolvedColumns.length === 0) {
|
|
312
298
|
return "";
|
|
313
299
|
}
|
|
314
|
-
const
|
|
315
|
-
if (!resolvedColumns.every((col) => JSON.stringify(col.schema) ===
|
|
300
|
+
const firstSchema = resolvedColumns[0]?.schema;
|
|
301
|
+
if (!resolvedColumns.every((col) => JSON.stringify(col.schema) === JSON.stringify(firstSchema))) {
|
|
316
302
|
return "";
|
|
317
303
|
}
|
|
318
|
-
|
|
319
|
-
if (schema?.type !== "object") {
|
|
304
|
+
if (firstSchema?.type !== "object" || firstSchema.properties === void 0) {
|
|
320
305
|
return "";
|
|
321
306
|
}
|
|
322
|
-
const
|
|
323
|
-
if (properties === void 0) {
|
|
324
|
-
return "";
|
|
325
|
-
}
|
|
326
|
-
const propNames = Object.keys(properties);
|
|
307
|
+
const propNames = Object.keys(firstSchema.properties);
|
|
327
308
|
return propNames.length > 0 ? `; available properties: ${propNames.join(", ")}` : "";
|
|
328
309
|
}
|
|
329
310
|
function resolveSchemaAtPath(colRef, propertyAccessor, resolvedColumns, ast) {
|
|
330
|
-
const adjustedPath = `$.${propertyAccessor.substring(1).replace(/(
|
|
311
|
+
const adjustedPath = `$.${propertyAccessor.substring(1).replace(/(?<sep>\.|\[)/gu, "..properties$<sep>")}`;
|
|
331
312
|
log("adjusted path", adjustedPath);
|
|
332
313
|
const extractedSchemas = resolvedColumns.flatMap(
|
|
333
314
|
(col) => JSONPath({ json: col.schema, path: adjustedPath })
|
|
@@ -350,6 +331,20 @@ function navigateSchemaPath(colRef, propertyAccessor, resolvedColumns, colName,
|
|
|
350
331
|
extractedSchemas.map((schema) => resolvedCol(colName, schema, columnAST))
|
|
351
332
|
);
|
|
352
333
|
}
|
|
334
|
+
function throwUnknownTableError(tableRef, colRef, ctx, ref) {
|
|
335
|
+
throw new AthenaError(
|
|
336
|
+
ATHENA_ERROR,
|
|
337
|
+
`unknown table or alias '${tableRef ?? colRef}'; known tables: ${[...ctx.tables.keys()].join(", ")}`,
|
|
338
|
+
ref
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
function resolveReferencedTablesOrThrow(tableRef, colRef, allTables, ctx, ref) {
|
|
342
|
+
const referencedTables = resolveReferencedTables(tableRef, allTables, ctx);
|
|
343
|
+
if (referencedTables.length === 0) {
|
|
344
|
+
throwUnknownTableError(tableRef, colRef, ctx, ref);
|
|
345
|
+
}
|
|
346
|
+
return referencedTables;
|
|
347
|
+
}
|
|
353
348
|
function lookupColumnOrThrow(colRef, ref, referencedTables) {
|
|
354
349
|
const resolvedColumns = referencedTables.flatMap((table) => table.columns.get(colRef) ?? []);
|
|
355
350
|
if (resolvedColumns.length === 0) {
|
|
@@ -370,33 +365,24 @@ function checkColumnRefsExist(ast, allTables, ctx, selectColumns) {
|
|
|
370
365
|
return;
|
|
371
366
|
}
|
|
372
367
|
for (const ref of extractColumnRefs(ast)) {
|
|
373
|
-
const
|
|
368
|
+
const { tableRef, colRef } = resolveColumnRefParts(ref);
|
|
374
369
|
if (colRef === void 0 || colRef === "*") {
|
|
375
370
|
continue;
|
|
376
371
|
}
|
|
377
|
-
const tableRef = ref.table ?? void 0;
|
|
378
372
|
if (tableRef === void 0 && selectColumns?.has(colRef) === true) {
|
|
379
373
|
continue;
|
|
380
374
|
}
|
|
381
|
-
const referencedTables = tableRef
|
|
382
|
-
if (referencedTables.length === 0) {
|
|
383
|
-
throw new AthenaError(
|
|
384
|
-
ATHENA_ERROR,
|
|
385
|
-
`unknown table or alias '${tableRef ?? colRef}'; known tables: ${[...ctx.tables.keys()].join(", ")}`,
|
|
386
|
-
ref
|
|
387
|
-
);
|
|
388
|
-
}
|
|
375
|
+
const referencedTables = resolveReferencedTablesOrThrow(tableRef, colRef, allTables, ctx, ref);
|
|
389
376
|
lookupColumnOrThrow(colRef, ref, referencedTables);
|
|
390
377
|
}
|
|
391
378
|
}
|
|
392
379
|
function validateComplexColumnExpression(columnAST, allTables, ctx) {
|
|
393
380
|
for (const { ref, path, fnNode } of extractJsonExtractCalls(columnAST)) {
|
|
394
|
-
const tableRef = ref
|
|
395
|
-
const colRef = typeof ref.column === "string" ? ref.column : void 0;
|
|
381
|
+
const { tableRef, colRef } = resolveColumnRefParts(ref);
|
|
396
382
|
if (colRef === void 0) {
|
|
397
383
|
continue;
|
|
398
384
|
}
|
|
399
|
-
const referencedTables =
|
|
385
|
+
const referencedTables = resolveReferencedTables(tableRef, allTables, ctx);
|
|
400
386
|
const resolvedColumns = referencedTables.flatMap((table) => table.columns.get(colRef) ?? []);
|
|
401
387
|
if (resolvedColumns.length > 0) {
|
|
402
388
|
resolveSchemaAtPath(colRef, path, resolvedColumns, fnNode);
|
|
@@ -404,17 +390,9 @@ function validateComplexColumnExpression(columnAST, allTables, ctx) {
|
|
|
404
390
|
}
|
|
405
391
|
}
|
|
406
392
|
function resolveSingleColumnRef(columnAST, columnAlias, indexedName, ref, allTables, ctx, columns) {
|
|
407
|
-
const tableRef = ref
|
|
408
|
-
const colRef = typeof ref.column === "string" ? ref.column : void 0;
|
|
393
|
+
const { tableRef, colRef } = resolveColumnRefParts(ref);
|
|
409
394
|
assert.ok(colRef !== void 0, "column_ref must have a string column name");
|
|
410
|
-
const referencedTables = tableRef
|
|
411
|
-
if (referencedTables.length === 0) {
|
|
412
|
-
throw new AthenaError(
|
|
413
|
-
ATHENA_ERROR,
|
|
414
|
-
`unknown table or alias '${tableRef ?? colRef}'; known tables: ${[...ctx.tables.keys()].join(", ")}`,
|
|
415
|
-
ref
|
|
416
|
-
);
|
|
417
|
-
}
|
|
395
|
+
const referencedTables = resolveReferencedTablesOrThrow(tableRef, colRef, allTables, ctx, ref);
|
|
418
396
|
if (colRef === "*") {
|
|
419
397
|
expandWildcard(referencedTables, columns);
|
|
420
398
|
return;
|
|
@@ -432,8 +410,25 @@ function resolveSingleColumnRef(columnAST, columnAlias, indexedName, ref, allTab
|
|
|
432
410
|
resolvedColumns.map((col) => resolvedCol(colName, col.schema, columnAST))
|
|
433
411
|
);
|
|
434
412
|
}
|
|
413
|
+
function applySchemaTypeOverride(columnAST, columnAlias, indexedName, columns, predicate, schemaType) {
|
|
414
|
+
if (!predicate(columnAST)) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const colName = columnAlias ?? indexedName;
|
|
418
|
+
const existing = columns.get(colName);
|
|
419
|
+
if (existing !== void 0 && existing[0]?.schema.type !== schemaType) {
|
|
420
|
+
columns.set(
|
|
421
|
+
colName,
|
|
422
|
+
existing.map((col) => resolvedCol(col.name, { type: schemaType }, col.ast))
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
function validateClauseExpression(expression, allTables, ctx, selectColumns) {
|
|
427
|
+
checkColumnRefsExist(expression, allTables, ctx, selectColumns);
|
|
428
|
+
validateComplexColumnExpression(expression, allTables, ctx);
|
|
429
|
+
}
|
|
435
430
|
function resolveSelectColumns(select, ctx) {
|
|
436
|
-
const allTables =
|
|
431
|
+
const allTables = flattenTables(ctx);
|
|
437
432
|
const columns = /* @__PURE__ */ new Map();
|
|
438
433
|
for (const [index, columnAST] of select.columns.entries()) {
|
|
439
434
|
log("resolving column", columnAST);
|
|
@@ -441,34 +436,15 @@ function resolveSelectColumns(select, ctx) {
|
|
|
441
436
|
const indexedName = `_col${String(index)}`;
|
|
442
437
|
const columnRefs = extractColumnRefs(columnAST);
|
|
443
438
|
if (columnRefs.length !== 1) {
|
|
444
|
-
|
|
445
|
-
validateComplexColumnExpression(columnAST, allTables, ctx);
|
|
439
|
+
validateClauseExpression(columnAST, allTables, ctx);
|
|
446
440
|
resolveDefaultSchemaColumn(columnAlias, indexedName, columnAST, columns);
|
|
447
441
|
} else {
|
|
448
442
|
const [ref] = columnRefs;
|
|
449
443
|
assert.ok(ref !== void 0);
|
|
450
444
|
resolveSingleColumnRef(columnAST, columnAlias, indexedName, ref, allTables, ctx, columns);
|
|
451
445
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
const existing = columns.get(colName);
|
|
455
|
-
if (existing !== void 0 && existing[0]?.schema.type !== "array") {
|
|
456
|
-
columns.set(
|
|
457
|
-
colName,
|
|
458
|
-
existing.map((col) => resolvedCol(col.name, { type: "array" }, col.ast))
|
|
459
|
-
);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
if (containsCastToMap(columnAST)) {
|
|
463
|
-
const colName = columnAlias ?? indexedName;
|
|
464
|
-
const existing = columns.get(colName);
|
|
465
|
-
if (existing !== void 0 && existing[0]?.schema.type !== "object") {
|
|
466
|
-
columns.set(
|
|
467
|
-
colName,
|
|
468
|
-
existing.map((col) => resolvedCol(col.name, { type: "object" }, col.ast))
|
|
469
|
-
);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
446
|
+
applySchemaTypeOverride(columnAST, columnAlias, indexedName, columns, containsCastToArray, "array");
|
|
447
|
+
applySchemaTypeOverride(columnAST, columnAlias, indexedName, columns, containsCastToMap, "object");
|
|
472
448
|
}
|
|
473
449
|
return columns;
|
|
474
450
|
}
|
|
@@ -482,40 +458,33 @@ function checkSelect(selectAST, ctx, withTableName) {
|
|
|
482
458
|
const columns = resolveSelectColumns(select, selectCtx);
|
|
483
459
|
applyUnnestPost(deferredUnnest, columns);
|
|
484
460
|
log("resolved columns", [...columns.keys()]);
|
|
485
|
-
const allTables =
|
|
461
|
+
const allTables = flattenTables(selectCtx);
|
|
486
462
|
for (const item of fromClauseItems(select)) {
|
|
487
463
|
const onExpr = item.on;
|
|
488
464
|
if (onExpr !== void 0) {
|
|
489
|
-
|
|
490
|
-
validateComplexColumnExpression(onExpr, allTables, selectCtx);
|
|
465
|
+
validateClauseExpression(onExpr, allTables, selectCtx);
|
|
491
466
|
}
|
|
492
467
|
}
|
|
493
468
|
if (select.where !== null) {
|
|
494
|
-
|
|
495
|
-
validateComplexColumnExpression(select.where, allTables, selectCtx);
|
|
469
|
+
validateClauseExpression(select.where, allTables, selectCtx);
|
|
496
470
|
}
|
|
497
471
|
if (select.having !== null) {
|
|
498
|
-
|
|
499
|
-
validateComplexColumnExpression(select.having, allTables, selectCtx);
|
|
472
|
+
validateClauseExpression(select.having, allTables, selectCtx, columns);
|
|
500
473
|
}
|
|
501
474
|
for (const orderItem of select.orderby ?? []) {
|
|
502
|
-
|
|
503
|
-
validateComplexColumnExpression(orderItem.expr, allTables, selectCtx);
|
|
475
|
+
validateClauseExpression(orderItem.expr, allTables, selectCtx, columns);
|
|
504
476
|
}
|
|
505
477
|
if (select.groupby?.columns !== void 0) {
|
|
506
478
|
for (const groupCol of select.groupby.columns) {
|
|
507
|
-
|
|
508
|
-
validateComplexColumnExpression(groupCol, allTables, selectCtx);
|
|
479
|
+
validateClauseExpression(groupCol, allTables, selectCtx, columns);
|
|
509
480
|
}
|
|
510
481
|
}
|
|
511
482
|
if (select._next !== void 0) {
|
|
512
483
|
const nextColumns = checkSelect(select._next, ctx, withTableName);
|
|
513
|
-
|
|
514
|
-
const nextNumberOfKeys = nextColumns.size;
|
|
515
|
-
if (currentNumberOfKeys !== nextNumberOfKeys) {
|
|
484
|
+
if (columns.size !== nextColumns.size) {
|
|
516
485
|
throw new AthenaError(
|
|
517
486
|
ATHENA_ERROR,
|
|
518
|
-
`UNION ALL parts have different number of columns: ${
|
|
487
|
+
`UNION ALL parts have different number of columns: ${columns.size.toString()} vs ${nextColumns.size.toString()}`,
|
|
519
488
|
select._next
|
|
520
489
|
);
|
|
521
490
|
}
|
|
@@ -544,4 +513,4 @@ export {
|
|
|
544
513
|
checkAthenaAst,
|
|
545
514
|
offsetToLoc
|
|
546
515
|
};
|
|
547
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS92YWxpZGF0ZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFVQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxPQUFPLFdBQVc7QUFDbEIsU0FBUyxnQkFBZ0I7QUFJekIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUywwQkFBc0Y7QUFDL0YsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FFSztBQUVBLElBQU0sZ0JBQWdCO0FBQ3RCLElBQU0sZUFBZTtBQUVyQixJQUFNLGNBQU4sY0FBMEIsTUFBTTtBQUFBLEVBQzlCO0FBQUEsRUFDQTtBQUFBLEVBQ1AsWUFBWSxNQUFjLFNBQWlCLEtBQWM7QUFDdkQsVUFBTSxPQUFPO0FBQ2IsU0FBSyxPQUFPO0FBQ1osU0FBSyxPQUFPO0FBQ1osUUFBSSxRQUFRLFFBQVc7QUFDckIsV0FBSyxNQUFNO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFDRjtBQUdPLFNBQVMsWUFBWSxNQUFjLFFBQWtEO0FBQzFGLFFBQU0sU0FBUyxLQUFLLE1BQU0sR0FBRyxNQUFNO0FBQ25DLFFBQU0sUUFBUSxPQUFPLE1BQU0sSUFBSTtBQUMvQixTQUFPLEVBQUUsTUFBTSxNQUFNLFFBQVEsUUFBUSxNQUFNLE1BQU0sU0FBUyxDQUFDLEdBQUcsVUFBVSxFQUFFO0FBQzVFO0FBRUEsSUFBTSxNQUFNLE1BQU0sc0JBQXNCO0FBQ3hDLElBQU0sa0JBQWtCO0FBTXhCLFNBQVMsWUFBWSxNQUFjLFFBQXNCLEtBQThCO0FBQ3JGLFNBQU8sUUFBUSxTQUFZLEVBQUUsTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLE1BQU0sT0FBTztBQUNwRTtBQUVBLFNBQVMsY0FB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
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS92YWxpZGF0ZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFVQSxTQUFTLFVBQVUsY0FBYztBQUVqQyxPQUFPLFdBQVc7QUFDbEIsU0FBUyxnQkFBZ0I7QUFJekIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUywwQkFBc0Y7QUFDL0YsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BRUs7QUFFQSxJQUFNLGdCQUFnQjtBQUN0QixJQUFNLGVBQWU7QUFFckIsSUFBTSxjQUFOLGNBQTBCLE1BQU07QUFBQSxFQUM5QjtBQUFBLEVBQ0E7QUFBQSxFQUNQLFlBQVksTUFBYyxTQUFpQixLQUFjO0FBQ3ZELFVBQU0sT0FBTztBQUNiLFNBQUssT0FBTztBQUNaLFNBQUssT0FBTztBQUNaLFFBQUksUUFBUSxRQUFXO0FBQ3JCLFdBQUssTUFBTTtBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0Y7QUFHTyxTQUFTLFlBQVksTUFBYyxRQUFrRDtBQUMxRixRQUFNLFNBQVMsS0FBSyxNQUFNLEdBQUcsTUFBTTtBQUNuQyxRQUFNLFFBQVEsT0FBTyxNQUFNLElBQUk7QUFDL0IsU0FBTyxFQUFFLE1BQU0sTUFBTSxRQUFRLFFBQVEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxHQUFHLFVBQVUsRUFBRTtBQUM1RTtBQUVBLElBQU0sTUFBTSxNQUFNLHNCQUFzQjtBQUN4QyxJQUFNLGtCQUFrQjtBQUN4QixJQUFNLGlCQUFpQjtBQU12QixTQUFTLFlBQVksTUFBYyxRQUFzQixLQUE4QjtBQUNyRixTQUFPLFFBQVEsU0FBWSxFQUFFLE1BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxN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
|