@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.
@@ -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 fromClauseItems(select) {
64
- if (Array.isArray(select.from)) {
65
- return select.from;
66
- }
67
- if (select.from !== null) {
68
- return [select.from];
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
- const functionName = fnNode.name?.name?.[0]?.value;
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 : "<subquery>"];
116
+ return [typeof item.as === "string" ? item.as : SUBQUERY_TABLE];
113
117
  }
114
118
  if (isValuesFrom(item)) {
115
- const alias = getFunctionAliasName(item.as);
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
- const alias = getFunctionAliasName(unknownItem.as);
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
- ctx.tables.set(tableAlias, [{ name: tableAlias, columns }]);
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
- ctx.tables.set(tableAlias, [{ name: tableAlias, columns }]);
172
+ registerAliasedTable(tableAlias, columns, ctx);
168
173
  }
169
174
  } else if (isTableExpr(item)) {
170
- const alias = typeof item.as === "string" ? item.as : "<subquery>";
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 = [...ctx.tables.values()].flat().find((table) => table.columns.has(fromColumn));
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
- let unnestEntry;
219
- if (sourceSchema?.type === "array") {
220
- const [toColumn] = toColumns;
221
- assert.ok(toColumn !== void 0);
222
- unnestEntry = [
223
- {
224
- name: unnestTableName,
225
- ...apiOperation,
226
- columns: /* @__PURE__ */ new Map([[toColumn, [resolvedCol(toColumn, sourceSchema.items, sourceColumns[0]?.ast)]]])
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 sourceSchema = sourceColumns[0]?.schema;
276
- if (sourceSchema?.type === "array") {
277
- const [toColumn] = toColumns;
278
- assert.ok(toColumn !== void 0);
279
- columns.set(toColumn, [resolvedCol(toColumn, sourceSchema.items, sourceColumns[0]?.ast)]);
280
- } else if (sourceSchema?.type === "object") {
281
- const [keyColumn, valueColumn] = toColumns;
282
- assert.ok(
283
- keyColumn !== void 0 && valueColumn !== void 0,
284
- `UNNEST of map column '${fromColumn}' requires exactly two alias columns (key, value)`
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 first = JSON.stringify(resolvedColumns[0]?.schema);
315
- if (!resolvedColumns.every((col) => JSON.stringify(col.schema) === first)) {
300
+ const firstSchema = resolvedColumns[0]?.schema;
301
+ if (!resolvedColumns.every((col) => JSON.stringify(col.schema) === JSON.stringify(firstSchema))) {
316
302
  return "";
317
303
  }
318
- const schema = resolvedColumns[0]?.schema;
319
- if (schema?.type !== "object") {
304
+ if (firstSchema?.type !== "object" || firstSchema.properties === void 0) {
320
305
  return "";
321
306
  }
322
- const properties = schema.properties;
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(/(\.|\[)/gu, "..properties$1")}`;
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 colRef = typeof ref.column === "string" ? ref.column : void 0;
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 !== void 0 ? lookupTables(tableRef, ctx) : allTables;
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.table ?? void 0;
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 = tableRef !== void 0 ? lookupTables(tableRef, ctx) : allTables;
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.table ?? void 0;
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 !== void 0 ? lookupTables(tableRef, ctx) : allTables;
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 = [...ctx.tables.values()].flat();
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
- checkColumnRefsExist(columnAST, allTables, ctx);
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
- if (containsCastToArray(columnAST)) {
453
- const colName = columnAlias ?? indexedName;
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 = [...selectCtx.tables.values()].flat();
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
- checkColumnRefsExist(onExpr, allTables, selectCtx);
490
- validateComplexColumnExpression(onExpr, allTables, selectCtx);
465
+ validateClauseExpression(onExpr, allTables, selectCtx);
491
466
  }
492
467
  }
493
468
  if (select.where !== null) {
494
- checkColumnRefsExist(select.where, allTables, selectCtx);
495
- validateComplexColumnExpression(select.where, allTables, selectCtx);
469
+ validateClauseExpression(select.where, allTables, selectCtx);
496
470
  }
497
471
  if (select.having !== null) {
498
- checkColumnRefsExist(select.having, allTables, selectCtx, columns);
499
- validateComplexColumnExpression(select.having, allTables, selectCtx);
472
+ validateClauseExpression(select.having, allTables, selectCtx, columns);
500
473
  }
501
474
  for (const orderItem of select.orderby ?? []) {
502
- checkColumnRefsExist(orderItem.expr, allTables, selectCtx, columns);
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
- checkColumnRefsExist(groupCol, allTables, selectCtx, columns);
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
- const currentNumberOfKeys = columns.size;
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: ${currentNumberOfKeys.toString()} vs ${nextNumberOfKeys.toString()}`,
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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