@deepagents/text2sql 0.29.1 → 0.31.0

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.
Files changed (39) hide show
  1. package/dist/index.js +727 -379
  2. package/dist/index.js.map +4 -4
  3. package/dist/lib/adapters/adapter.d.ts +6 -4
  4. package/dist/lib/adapters/adapter.d.ts.map +1 -1
  5. package/dist/lib/adapters/bigquery/bigquery.d.ts +2 -2
  6. package/dist/lib/adapters/bigquery/bigquery.d.ts.map +1 -1
  7. package/dist/lib/adapters/bigquery/index.js +310 -13
  8. package/dist/lib/adapters/bigquery/index.js.map +4 -4
  9. package/dist/lib/adapters/groundings/abstract.grounding.d.ts +23 -0
  10. package/dist/lib/adapters/groundings/abstract.grounding.d.ts.map +1 -1
  11. package/dist/lib/adapters/groundings/index.js +48 -5
  12. package/dist/lib/adapters/groundings/index.js.map +2 -2
  13. package/dist/lib/adapters/groundings/table.grounding.d.ts +9 -1
  14. package/dist/lib/adapters/groundings/table.grounding.d.ts.map +1 -1
  15. package/dist/lib/adapters/groundings/view.grounding.d.ts +7 -1
  16. package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
  17. package/dist/lib/adapters/mysql/index.js +309 -12
  18. package/dist/lib/adapters/mysql/index.js.map +4 -4
  19. package/dist/lib/adapters/mysql/mysql.d.ts +2 -2
  20. package/dist/lib/adapters/mysql/mysql.d.ts.map +1 -1
  21. package/dist/lib/adapters/postgres/index.js +309 -12
  22. package/dist/lib/adapters/postgres/index.js.map +4 -4
  23. package/dist/lib/adapters/postgres/postgres.d.ts +2 -2
  24. package/dist/lib/adapters/postgres/postgres.d.ts.map +1 -1
  25. package/dist/lib/adapters/spreadsheet/index.js +304 -11
  26. package/dist/lib/adapters/spreadsheet/index.js.map +4 -4
  27. package/dist/lib/adapters/sqlite/index.js +309 -12
  28. package/dist/lib/adapters/sqlite/index.js.map +4 -4
  29. package/dist/lib/adapters/sqlite/sqlite.d.ts +2 -2
  30. package/dist/lib/adapters/sqlite/sqlite.d.ts.map +1 -1
  31. package/dist/lib/adapters/sqlserver/index.js +309 -12
  32. package/dist/lib/adapters/sqlserver/index.js.map +4 -4
  33. package/dist/lib/adapters/sqlserver/sqlserver.d.ts +2 -2
  34. package/dist/lib/adapters/sqlserver/sqlserver.d.ts.map +1 -1
  35. package/dist/lib/agents/result-tools.d.ts +19 -1
  36. package/dist/lib/agents/result-tools.d.ts.map +1 -1
  37. package/dist/lib/agents/sql-transform-plugins.d.ts +19 -0
  38. package/dist/lib/agents/sql-transform-plugins.d.ts.map +1 -0
  39. package/package.json +6 -6
@@ -1,5 +1,5 @@
1
1
  import { type SqlLanguage } from 'sql-formatter';
2
- import type { ContextFragment } from '@deepagents/context';
2
+ import type { ContextFragment, FragmentObject } from '@deepagents/context';
3
3
  import type { AbstractGrounding } from './groundings/abstract.grounding.ts';
4
4
  import { type GroundingContext } from './groundings/context.ts';
5
5
  /**
@@ -63,7 +63,7 @@ export interface AdapterInfo {
63
63
  dialect: string;
64
64
  version?: string;
65
65
  database?: string;
66
- details?: Record<string, unknown>;
66
+ details?: FragmentObject;
67
67
  }
68
68
  export type AdapterInfoProvider = AdapterInfo | (() => Promise<AdapterInfo> | AdapterInfo);
69
69
  export type IntrospectionPhase = 'tables' | 'row_counts' | 'primary_keys' | 'indexes' | 'column_stats' | 'low_cardinality' | 'relationships';
@@ -110,8 +110,10 @@ export declare abstract class Adapter {
110
110
  */
111
111
  resolveAllowedEntities(): Promise<string[]>;
112
112
  format(sql: string): string;
113
- abstract execute(sql: string): Promise<any[]> | any[];
114
- abstract validate(sql: string): Promise<string | void> | string | void;
113
+ validate(sql: string): Promise<string | void>;
114
+ execute(sql: string): Promise<any[]>;
115
+ abstract executeImpl(sql: string): Promise<any[]> | any[];
116
+ abstract validateImpl(sql: string): Promise<string | void> | string | void;
115
117
  abstract runQuery<Row>(sql: string): Promise<Row[]> | Row[];
116
118
  /**
117
119
  * Quote an identifier (table/column name) for safe use in SQL.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/adapter.ts"],"names":[],"mappings":"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"}
@@ -32,8 +32,8 @@ export declare class BigQuery extends Adapter {
32
32
  * Uses standard BigQuery backtick quoting on the full path.
33
33
  */
34
34
  infoSchemaView(dataset: string, viewName: string): string;
35
- execute(sql: string): Promise<any>;
36
- validate(sql: string): Promise<string | void>;
35
+ executeImpl(sql: string): Promise<any>;
36
+ validateImpl(sql: string): Promise<string | void>;
37
37
  runQuery<Row>(sql: string): Promise<Row[]>;
38
38
  quoteIdentifier(name: string): string;
39
39
  escape(value: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"bigquery.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/bigquery/bigquery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB;;;OAGG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA2BF,qBAAa,QAAS,SAAQ,OAAO;;IAInC,SAAkB,SAAS,EAAE,WAAW,EAAE,CAAC;IAC3C,SAAkB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,SAAkB,aAAa,EAAE,MAAM,EAAE,CAAM;IAC/C,SAAkB,iBAAiB,cAAc;gBAErC,OAAO,EAAE,sBAAsB;IA2B3C,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI1C;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK1C,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,QAAQ,CAAC,GAAG,EAAE,MAAM;IAQpB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAqBhD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM;CAsBV"}
1
+ {"version":3,"file":"bigquery.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/bigquery/bigquery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB;;;OAGG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA2BF,qBAAa,QAAS,SAAQ,OAAO;;IAInC,SAAkB,SAAS,EAAE,WAAW,EAAE,CAAC;IAC3C,SAAkB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IACpD,SAAkB,aAAa,EAAE,MAAM,EAAE,CAAM;IAC/C,SAAkB,iBAAiB,cAAc;gBAErC,OAAO,EAAE,sBAAsB;IA2B3C,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI1C;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK1C,WAAW,CAAC,GAAG,EAAE,MAAM;IAIvB,YAAY,CAAC,GAAG,EAAE,MAAM;IAQxB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAqBhD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM;CAsBV"}
@@ -1,6 +1,48 @@
1
1
  // packages/text2sql/src/lib/adapters/adapter.ts
2
2
  import { format as formatSql } from "sql-formatter";
3
3
 
4
+ // packages/text2sql/src/lib/agents/exceptions.ts
5
+ var sqlValidationMarker = Symbol("SQLValidationError");
6
+ var unanswerableSqlMarker = Symbol("UnanswerableSQLError");
7
+ var sqlScopeMarker = Symbol("SQLScopeError");
8
+ var SQLValidationError = class _SQLValidationError extends Error {
9
+ [sqlValidationMarker];
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = "SQLValidationError";
13
+ this[sqlValidationMarker] = true;
14
+ }
15
+ static isInstance(error) {
16
+ return error instanceof _SQLValidationError && error[sqlValidationMarker] === true;
17
+ }
18
+ };
19
+ var UnanswerableSQLError = class _UnanswerableSQLError extends Error {
20
+ [unanswerableSqlMarker];
21
+ constructor(message) {
22
+ super(message);
23
+ this.name = "UnanswerableSQLError";
24
+ this[unanswerableSqlMarker] = true;
25
+ }
26
+ static isInstance(error) {
27
+ return error instanceof _UnanswerableSQLError && error[unanswerableSqlMarker] === true;
28
+ }
29
+ };
30
+ var SQLScopeError = class _SQLScopeError extends Error {
31
+ [sqlScopeMarker];
32
+ payload;
33
+ errorType;
34
+ constructor(payload) {
35
+ super(JSON.stringify(payload));
36
+ this.name = "SQLScopeError";
37
+ this.payload = payload;
38
+ this.errorType = payload.error_type;
39
+ this[sqlScopeMarker] = true;
40
+ }
41
+ static isInstance(error) {
42
+ return error instanceof _SQLScopeError && error[sqlScopeMarker] === true;
43
+ }
44
+ };
45
+
4
46
  // packages/text2sql/src/lib/fragments/schema.ts
5
47
  function dialectInfo(input) {
6
48
  return {
@@ -104,6 +146,134 @@ function createGroundingContext() {
104
146
  };
105
147
  }
106
148
 
149
+ // packages/text2sql/src/lib/adapters/runtime-scope.ts
150
+ import nodeSqlParser from "node-sql-parser";
151
+ var { Parser } = nodeSqlParser;
152
+ var parser = new Parser();
153
+ function extractBaseEntityReferences(sql, dialect) {
154
+ const ast = parser.astify(sql, { database: dialect });
155
+ const state = {
156
+ cteNames: /* @__PURE__ */ new Set(),
157
+ references: /* @__PURE__ */ new Map()
158
+ };
159
+ visitNode(ast, state);
160
+ return Array.from(state.references.values());
161
+ }
162
+ function buildOutOfScopePayload(sql, referencedEntities, allowedEntities) {
163
+ return {
164
+ error: `Query references entities outside grounded scope: ${referencedEntities.join(", ")}`,
165
+ error_type: "OUT_OF_SCOPE",
166
+ suggestion: "Restrict the query to grounded tables/views or expand grounding to include the referenced entities.",
167
+ sql_attempted: sql,
168
+ referenced_entities: referencedEntities,
169
+ allowed_entities: allowedEntities
170
+ };
171
+ }
172
+ function buildScopeParseErrorPayload(sql, dialect, error) {
173
+ const parserError = error instanceof Error ? error.message : String(error ?? "Unknown error");
174
+ return {
175
+ error: `SQL scope analysis failed before validation/execution: ${parserError}`,
176
+ error_type: "SQL_SCOPE_PARSE_ERROR",
177
+ suggestion: "Rewrite the query into simpler SQL that can be analyzed safely, or extend parser coverage for this dialect feature.",
178
+ sql_attempted: sql,
179
+ parser_dialect: dialect,
180
+ parser_error: parserError
181
+ };
182
+ }
183
+ function visitNode(node, state) {
184
+ if (Array.isArray(node)) {
185
+ for (const item of node) {
186
+ visitNode(item, state);
187
+ }
188
+ return;
189
+ }
190
+ if (!isAstLike(node)) {
191
+ return;
192
+ }
193
+ if (isStatementNode(node)) {
194
+ visitStatement(node, state);
195
+ return;
196
+ }
197
+ if (isTableReferenceNode(node)) {
198
+ addReference(node, state);
199
+ }
200
+ for (const value of Object.values(node)) {
201
+ visitNode(value, state);
202
+ }
203
+ }
204
+ function visitStatement(node, parentState) {
205
+ const localState = {
206
+ cteNames: new Set(parentState.cteNames),
207
+ references: parentState.references
208
+ };
209
+ const withItems = Array.isArray(node.with) ? node.with : [];
210
+ for (const item of withItems) {
211
+ if (!isAstLike(item)) {
212
+ continue;
213
+ }
214
+ const cteName = readCteName(item);
215
+ if (cteName) {
216
+ localState.cteNames.add(caseFold(cteName));
217
+ }
218
+ }
219
+ for (const item of withItems) {
220
+ if (!isAstLike(item)) {
221
+ continue;
222
+ }
223
+ visitNode(item.stmt, localState);
224
+ }
225
+ for (const [key, value] of Object.entries(node)) {
226
+ if (key === "with") {
227
+ continue;
228
+ }
229
+ visitNode(value, localState);
230
+ }
231
+ }
232
+ function addReference(node, state) {
233
+ const table2 = typeof node.table === "string" ? node.table : null;
234
+ if (!table2) {
235
+ return;
236
+ }
237
+ if (state.cteNames.has(caseFold(table2))) {
238
+ return;
239
+ }
240
+ const db = typeof node.db === "string" ? node.db : null;
241
+ const key = db ? `${db}.${table2}` : table2;
242
+ if (!state.references.has(key)) {
243
+ state.references.set(key, { db, table: table2 });
244
+ }
245
+ }
246
+ function readCteName(node) {
247
+ const name = node.name;
248
+ if (typeof name === "string") {
249
+ return name;
250
+ }
251
+ if (!isAstLike(name)) {
252
+ return void 0;
253
+ }
254
+ const value = name.value;
255
+ return typeof value === "string" ? value : void 0;
256
+ }
257
+ function isStatementNode(node) {
258
+ const type = node.type;
259
+ return typeof type === "string" && ["delete", "insert", "replace", "select", "update"].includes(type);
260
+ }
261
+ function isTableReferenceNode(node) {
262
+ if (node.type === "column_ref") {
263
+ return false;
264
+ }
265
+ if (typeof node.table !== "string") {
266
+ return false;
267
+ }
268
+ return "addition" in node || "as" in node || "db" in node || "join" in node || "operator" in node || "surround" in node || "table_hint" in node || "temporal_table" in node;
269
+ }
270
+ function isAstLike(value) {
271
+ return typeof value === "object" && value !== null;
272
+ }
273
+ function caseFold(value) {
274
+ return value.toLowerCase();
275
+ }
276
+
107
277
  // packages/text2sql/src/lib/adapters/adapter.ts
108
278
  var Adapter = class {
109
279
  /**
@@ -133,10 +303,7 @@ var Adapter = class {
133
303
  const grounding = fn(this);
134
304
  await grounding.execute(ctx);
135
305
  }
136
- return [
137
- ...ctx.tables.map((t) => t.name),
138
- ...ctx.views.map((v) => v.name)
139
- ];
306
+ return [...ctx.tables.map((t) => t.name), ...ctx.views.map((v) => v.name)];
140
307
  }
141
308
  /**
142
309
  * Convert complete grounding context to schema fragments.
@@ -149,7 +316,8 @@ var Adapter = class {
149
316
  dialectInfo({
150
317
  dialect: ctx.info.dialect,
151
318
  version: ctx.info.version,
152
- database: ctx.info.database
319
+ database: ctx.info.database,
320
+ details: ctx.info.details
153
321
  })
154
322
  );
155
323
  }
@@ -160,7 +328,18 @@ var Adapter = class {
160
328
  fragments.push(this.#viewToFragment(v));
161
329
  }
162
330
  const tableMap = new Map(ctx.tables.map((t) => [t.name, t]));
331
+ const tableColumnSets = new Map(
332
+ ctx.tables.map((t) => [t.name, new Set(t.columns.map((c) => c.name))])
333
+ );
163
334
  for (const rel of ctx.relationships) {
335
+ const sourceColumns = tableColumnSets.get(rel.table);
336
+ const targetColumns = tableColumnSets.get(rel.referenced_table);
337
+ if (sourceColumns && rel.from.some((column2) => !sourceColumns.has(column2))) {
338
+ continue;
339
+ }
340
+ if (targetColumns && rel.to.some((column2) => !targetColumns.has(column2))) {
341
+ continue;
342
+ }
164
343
  const sourceTable = tableMap.get(rel.table);
165
344
  const targetTable = tableMap.get(rel.referenced_table);
166
345
  fragments.push(
@@ -215,7 +394,10 @@ var Adapter = class {
215
394
  stats: col.stats
216
395
  })
217
396
  );
218
- const indexFragments = (t.indexes ?? []).map(
397
+ const presentColumns = new Set(t.columns.map((c) => c.name));
398
+ const indexFragments = (t.indexes ?? []).filter(
399
+ (idx) => idx.columns.every((column2) => presentColumns.has(column2))
400
+ ).map(
219
401
  (idx) => index({
220
402
  name: idx.name,
221
403
  columns: idx.columns,
@@ -225,6 +407,8 @@ var Adapter = class {
225
407
  );
226
408
  const constraintFragments = (t.constraints ?? []).filter(
227
409
  (c) => c.type === "CHECK" || c.type === "UNIQUE" && (c.columns?.length ?? 0) > 1
410
+ ).filter(
411
+ (c) => !c.columns?.length || c.columns.every((column2) => presentColumns.has(column2))
228
412
  ).map(
229
413
  (c) => constraint({
230
414
  name: c.name,
@@ -293,6 +477,78 @@ var Adapter = class {
293
477
  return sql;
294
478
  }
295
479
  }
480
+ #cachedAllowedEntities = null;
481
+ async #resolveScope() {
482
+ if (this.#cachedAllowedEntities) return this.#cachedAllowedEntities;
483
+ this.#cachedAllowedEntities = await this.resolveAllowedEntities();
484
+ return this.#cachedAllowedEntities;
485
+ }
486
+ async #checkScope(sql, allowedEntities) {
487
+ const dialect = this.formatterLanguage;
488
+ const scopeDialects = {
489
+ sqlite: "mysql",
490
+ postgresql: "postgresql",
491
+ bigquery: "bigquery",
492
+ transactsql: "transactsql",
493
+ mysql: "mysql"
494
+ };
495
+ const scopeDialect = scopeDialects[dialect];
496
+ if (!scopeDialect) {
497
+ throw new TypeError(
498
+ `No scope dialect mapping for formatter language "${dialect}". Add it to the scopeDialects map in Adapter.#checkScope.`
499
+ );
500
+ }
501
+ let references;
502
+ try {
503
+ references = extractBaseEntityReferences(sql, scopeDialect);
504
+ } catch (error) {
505
+ return buildScopeParseErrorPayload(
506
+ sql,
507
+ dialect,
508
+ error
509
+ );
510
+ }
511
+ if (references.length === 0) return null;
512
+ const allowedQualified = new Set(
513
+ allowedEntities.map((e) => e.toLowerCase())
514
+ );
515
+ const allowedUnqualified = /* @__PURE__ */ new Set();
516
+ for (const entity of allowedEntities) {
517
+ const dot = entity.lastIndexOf(".");
518
+ if (dot !== -1) {
519
+ allowedUnqualified.add(entity.slice(dot + 1).toLowerCase());
520
+ } else {
521
+ allowedUnqualified.add(entity.toLowerCase());
522
+ }
523
+ }
524
+ const outOfScope = references.map((ref) => ref.db ? `${ref.db}.${ref.table}` : ref.table).filter((name) => {
525
+ const lower = name.toLowerCase();
526
+ if (name.includes(".")) {
527
+ if (allowedQualified.has(lower)) return false;
528
+ const parts = lower.split(".");
529
+ if (parts.length >= 3) {
530
+ const datasetTable = parts.slice(-2).join(".");
531
+ if (allowedQualified.has(datasetTable)) return false;
532
+ }
533
+ return true;
534
+ }
535
+ return !allowedQualified.has(lower) && !allowedUnqualified.has(lower);
536
+ });
537
+ if (outOfScope.length === 0) return null;
538
+ return buildOutOfScopePayload(sql, outOfScope, allowedEntities);
539
+ }
540
+ async validate(sql) {
541
+ const allowed = await this.#resolveScope();
542
+ const scopeError = await this.#checkScope(sql, allowed);
543
+ if (scopeError) return JSON.stringify(scopeError);
544
+ return this.validateImpl(sql);
545
+ }
546
+ async execute(sql) {
547
+ const allowed = await this.#resolveScope();
548
+ const scopeError = await this.#checkScope(sql, allowed);
549
+ if (scopeError) throw new SQLScopeError(scopeError);
550
+ return this.executeImpl(sql);
551
+ }
296
552
  /**
297
553
  * Convert unknown database value to number.
298
554
  * Handles number, bigint, and string types.
@@ -346,6 +602,21 @@ var Adapter = class {
346
602
  };
347
603
 
348
604
  // packages/text2sql/src/lib/adapters/groundings/abstract.grounding.ts
605
+ function filterColumns(columns, filter) {
606
+ if (Array.isArray(filter)) {
607
+ return columns.filter((col) => filter.includes(col.name));
608
+ }
609
+ if (filter instanceof RegExp) {
610
+ return columns.filter((col) => filter.test(col.name));
611
+ }
612
+ return columns.filter((col) => filter(col.name));
613
+ }
614
+ function applyColumnFilter(entity, columnsConfig) {
615
+ if (!columnsConfig) return entity;
616
+ const filter = columnsConfig[entity.name];
617
+ if (!filter) return entity;
618
+ return { ...entity, columns: filterColumns(entity.columns, filter) };
619
+ }
349
620
  var AbstractGrounding = class {
350
621
  /**
351
622
  * Grounding identifier for debugging/logging.
@@ -547,11 +818,13 @@ var RowCountGrounding = class extends AbstractGrounding {
547
818
  // packages/text2sql/src/lib/adapters/groundings/table.grounding.ts
548
819
  var TableGrounding = class extends AbstractGrounding {
549
820
  #filter;
821
+ #columns;
550
822
  #forward;
551
823
  #backward;
552
824
  constructor(config = {}) {
553
825
  super("table");
554
826
  this.#filter = config.filter;
827
+ this.#columns = config.columns;
555
828
  this.#forward = config.forward;
556
829
  this.#backward = config.backward;
557
830
  }
@@ -565,7 +838,9 @@ var TableGrounding = class extends AbstractGrounding {
565
838
  const backward = this.#backward;
566
839
  if (!forward && !backward) {
567
840
  const tables3 = await Promise.all(
568
- seedTables.map((name) => this.getTable(name))
841
+ seedTables.map(
842
+ async (name) => applyColumnFilter(await this.getTable(name), this.#columns)
843
+ )
569
844
  );
570
845
  ctx.tables.push(...tables3);
571
846
  return;
@@ -589,11 +864,15 @@ var TableGrounding = class extends AbstractGrounding {
589
864
  if (forwardVisited.has(name)) continue;
590
865
  forwardVisited.add(name);
591
866
  if (!tables2[name]) {
592
- tables2[name] = await this.getTable(name);
867
+ tables2[name] = applyColumnFilter(
868
+ await this.getTable(name),
869
+ this.#columns
870
+ );
593
871
  }
594
872
  if (depth < forwardLimit) {
595
873
  const rels = await this.findOutgoingRelations(name);
596
874
  for (const rel of rels) {
875
+ if (!this.isRelationshipVisible(rel)) continue;
597
876
  this.addRelationship(rel, allRelationships, seenRelationships);
598
877
  if (!forwardVisited.has(rel.referenced_table)) {
599
878
  forwardQueue.push({ name: rel.referenced_table, depth: depth + 1 });
@@ -609,11 +888,15 @@ var TableGrounding = class extends AbstractGrounding {
609
888
  if (backwardVisited.has(name)) continue;
610
889
  backwardVisited.add(name);
611
890
  if (!tables2[name]) {
612
- tables2[name] = await this.getTable(name);
891
+ tables2[name] = applyColumnFilter(
892
+ await this.getTable(name),
893
+ this.#columns
894
+ );
613
895
  }
614
896
  if (depth < backwardLimit) {
615
897
  const rels = await this.findIncomingRelations(name);
616
898
  for (const rel of rels) {
899
+ if (!this.isRelationshipVisible(rel)) continue;
617
900
  this.addRelationship(rel, allRelationships, seenRelationships);
618
901
  if (!backwardVisited.has(rel.table)) {
619
902
  backwardQueue.push({ name: rel.table, depth: depth + 1 });
@@ -653,6 +936,16 @@ var TableGrounding = class extends AbstractGrounding {
653
936
  all.push(rel);
654
937
  }
655
938
  }
939
+ isRelationshipVisible(rel) {
940
+ return this.areColumnsVisible(rel.from, this.#columns?.[rel.table]) && this.areColumnsVisible(rel.to, this.#columns?.[rel.referenced_table]);
941
+ }
942
+ areColumnsVisible(names, filter) {
943
+ if (!filter) return true;
944
+ return filterColumns(
945
+ names.map((name) => ({ name })),
946
+ filter
947
+ ).length === names.length;
948
+ }
656
949
  };
657
950
 
658
951
  // packages/text2sql/src/lib/adapters/bigquery/bigquery.ts
@@ -710,14 +1003,14 @@ var BigQuery = class extends Adapter {
710
1003
  const projectPrefix = this.projectId ? `${this.projectId}.` : "";
711
1004
  return `\`${projectPrefix}${dataset}.INFORMATION_SCHEMA.${viewName}\``;
712
1005
  }
713
- async execute(sql) {
1006
+ async executeImpl(sql) {
714
1007
  return this.#options.execute(sql);
715
1008
  }
716
- async validate(sql) {
1009
+ async validateImpl(sql) {
717
1010
  try {
718
1011
  return await this.#options.validate(sql);
719
1012
  } catch (error) {
720
- return JSON.stringify(formatBigQueryError(sql, error));
1013
+ return JSON.stringify(formatBigQueryError(this.format(sql), error));
721
1014
  }
722
1015
  }
723
1016
  async runQuery(sql) {
@@ -1364,10 +1657,12 @@ var BigQueryTableGrounding = class extends TableGrounding {
1364
1657
  // packages/text2sql/src/lib/adapters/groundings/view.grounding.ts
1365
1658
  var ViewGrounding = class extends AbstractGrounding {
1366
1659
  #filter;
1660
+ #columns;
1367
1661
  includeDefinition;
1368
1662
  constructor(config = {}) {
1369
1663
  super("view");
1370
1664
  this.#filter = config.filter;
1665
+ this.#columns = config.columns;
1371
1666
  this.includeDefinition = config.includeDefinition ?? true;
1372
1667
  }
1373
1668
  /**
@@ -1377,7 +1672,9 @@ var ViewGrounding = class extends AbstractGrounding {
1377
1672
  async execute(ctx) {
1378
1673
  const viewNames = await this.applyFilter();
1379
1674
  const views2 = await Promise.all(
1380
- viewNames.map((name) => this.getView(name))
1675
+ viewNames.map(
1676
+ async (name) => applyColumnFilter(await this.getView(name), this.#columns)
1677
+ )
1381
1678
  );
1382
1679
  ctx.views.push(...views2);
1383
1680
  }