@deepagents/text2sql 0.24.0 → 0.25.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 (27) hide show
  1. package/dist/index.js +2 -2
  2. package/dist/index.js.map +2 -2
  3. package/dist/lib/adapters/bigquery/index.js +14 -8
  4. package/dist/lib/adapters/bigquery/index.js.map +2 -2
  5. package/dist/lib/adapters/bigquery/view.bigquery.grounding.d.ts.map +1 -1
  6. package/dist/lib/adapters/groundings/index.js +2 -0
  7. package/dist/lib/adapters/groundings/index.js.map +2 -2
  8. package/dist/lib/adapters/groundings/view.grounding.d.ts +3 -0
  9. package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
  10. package/dist/lib/adapters/mysql/index.js +13 -7
  11. package/dist/lib/adapters/mysql/index.js.map +2 -2
  12. package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts.map +1 -1
  13. package/dist/lib/adapters/postgres/index.js +13 -7
  14. package/dist/lib/adapters/postgres/index.js.map +2 -2
  15. package/dist/lib/adapters/postgres/view.postgres.grounding.d.ts.map +1 -1
  16. package/dist/lib/adapters/sqlite/index.js +10 -4
  17. package/dist/lib/adapters/sqlite/index.js.map +2 -2
  18. package/dist/lib/adapters/sqlite/view.sqlite.grounding.d.ts.map +1 -1
  19. package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts +2 -4
  20. package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts.map +1 -1
  21. package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts +0 -9
  22. package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts.map +1 -1
  23. package/dist/lib/adapters/sqlserver/index.js +91 -11
  24. package/dist/lib/adapters/sqlserver/index.js.map +3 -3
  25. package/dist/lib/adapters/sqlserver/view.sqlserver.grounding.d.ts.map +1 -1
  26. package/dist/lib/agents/result-tools.d.ts.map +1 -1
  27. package/package.json +4 -4
@@ -1,14 +1,5 @@
1
1
  import type { Adapter } from '../adapter.ts';
2
2
  import { type Column, ColumnValuesGrounding, type ColumnValuesGroundingConfig } from '../groundings/column-values.grounding.ts';
3
- /**
4
- * SQL Server implementation of ColumnValuesGrounding.
5
- *
6
- * Supports:
7
- * - CHECK constraints with IN clauses (inherited from base)
8
- * - Low cardinality data scan
9
- *
10
- * Note: SQL Server does not have native ENUM types.
11
- */
12
3
  export declare class SqlServerColumnValuesGrounding extends ColumnValuesGrounding {
13
4
  #private;
14
5
  constructor(adapter: Adapter, config?: ColumnValuesGroundingConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"column-values.sqlserver.grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/sqlserver/column-values.sqlserver.grounding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,KAAK,MAAM,EACX,qBAAqB,EACrB,KAAK,2BAA2B,EACjC,MAAM,0CAA0C,CAAC;AAElD;;;;;;;;GAQG;AACH,qBAAa,8BAA+B,SAAQ,qBAAqB;;gBAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,2BAAgC;cAK7C,qBAAqB,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CA4BjC"}
1
+ {"version":3,"file":"column-values.sqlserver.grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/sqlserver/column-values.sqlserver.grounding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,KAAK,MAAM,EACX,qBAAqB,EACrB,KAAK,2BAA2B,EACjC,MAAM,0CAA0C,CAAC;AAElD,qBAAa,8BAA+B,SAAQ,qBAAqB;;gBAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,2BAAgC;cA2B7C,qBAAqB,CAC5C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CAgCjC"}
@@ -811,12 +811,61 @@ var TableGrounding = class extends AbstractGrounding {
811
811
  // packages/text2sql/src/lib/adapters/sqlserver/column-stats.sqlserver.grounding.ts
812
812
  var SqlServerColumnStatsGrounding = class extends ColumnStatsGrounding {
813
813
  #adapter;
814
+ #nDistinctCache = /* @__PURE__ */ new Map();
814
815
  constructor(adapter, config = {}) {
815
816
  super(config);
816
817
  this.#adapter = adapter;
817
818
  }
819
+ async execute(ctx) {
820
+ await this.#fetchNDistinct(ctx);
821
+ await super.execute(ctx);
822
+ }
823
+ async #fetchNDistinct(ctx) {
824
+ if (ctx.tables.length === 0) return;
825
+ const objectIds = ctx.tables.map((t) => {
826
+ const { schema, table: table2 } = this.#adapter.parseTableName(t.name);
827
+ return `OBJECT_ID('[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table2)}]')`;
828
+ });
829
+ try {
830
+ const rows = await this.#adapter.runQuery(`
831
+ SELECT
832
+ OBJECT_SCHEMA_NAME(s.object_id) AS schema_name,
833
+ OBJECT_NAME(s.object_id) AS table_name,
834
+ COL_NAME(sc.object_id, sc.column_id) AS column_name,
835
+ (
836
+ SELECT ISNULL(SUM(h.distinct_range_rows), 0) + COUNT(*)
837
+ FROM sys.dm_db_stats_histogram(s.object_id, s.stats_id) h
838
+ ) AS approx_n_distinct
839
+ FROM sys.stats s
840
+ INNER JOIN sys.stats_columns sc
841
+ ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id
842
+ CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
843
+ WHERE sc.stats_column_id = 1
844
+ AND sp.rows > 0
845
+ AND s.object_id IN (${objectIds.join(", ")})
846
+ `);
847
+ for (const row of rows) {
848
+ const tableName = ctx.tables.find((t) => {
849
+ const { schema, table: table2 } = this.#adapter.parseTableName(t.name);
850
+ return schema === row.schema_name && table2 === row.table_name;
851
+ })?.name;
852
+ if (!tableName) continue;
853
+ let map = this.#nDistinctCache.get(tableName);
854
+ if (!map) {
855
+ map = /* @__PURE__ */ new Map();
856
+ this.#nDistinctCache.set(tableName, map);
857
+ }
858
+ map.set(row.column_name, row.approx_n_distinct);
859
+ }
860
+ } catch {
861
+ }
862
+ }
818
863
  async collectStats(tableName, column2) {
864
+ const cachedNDistinct = this.#nDistinctCache.get(tableName)?.get(column2.name);
819
865
  if (!this.#shouldCollectStats(column2.type)) {
866
+ if (cachedNDistinct != null) {
867
+ return { nDistinct: cachedNDistinct };
868
+ }
820
869
  return void 0;
821
870
  }
822
871
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
@@ -831,18 +880,22 @@ var SqlServerColumnStatsGrounding = class extends ColumnStatsGrounding {
831
880
  `;
832
881
  const rows = await this.#adapter.runQuery(sql);
833
882
  if (!rows.length) {
883
+ if (cachedNDistinct != null) {
884
+ return { nDistinct: cachedNDistinct };
885
+ }
834
886
  return void 0;
835
887
  }
836
888
  const min = rows[0]?.min_value;
837
889
  const max = rows[0]?.max_value;
838
890
  const nullFraction = this.#adapter.toNumber(rows[0]?.null_fraction);
839
- if (min == null && max == null && nullFraction == null) {
891
+ if (min == null && max == null && nullFraction == null && cachedNDistinct == null) {
840
892
  return void 0;
841
893
  }
842
894
  return {
843
895
  min: min ?? void 0,
844
896
  max: max ?? void 0,
845
- nullFraction: nullFraction != null && Number.isFinite(nullFraction) ? Math.max(0, Math.min(1, nullFraction)) : void 0
897
+ nullFraction: nullFraction != null && Number.isFinite(nullFraction) ? Math.max(0, Math.min(1, nullFraction)) : void 0,
898
+ ...cachedNDistinct != null && { nDistinct: cachedNDistinct }
846
899
  };
847
900
  }
848
901
  #shouldCollectStats(type) {
@@ -1092,7 +1145,28 @@ var SqlServerColumnValuesGrounding = class extends ColumnValuesGrounding {
1092
1145
  super(config);
1093
1146
  this.#adapter = adapter;
1094
1147
  }
1148
+ #isHighCardinality(column2) {
1149
+ const nDistinct = column2.stats?.nDistinct;
1150
+ if (nDistinct != null) {
1151
+ if (nDistinct > 0) return nDistinct > this.lowCardinalityLimit;
1152
+ return true;
1153
+ }
1154
+ const type = column2.type.toLowerCase();
1155
+ if (/nvarchar\s*\(\s*max\s*\)|varchar\s*\(\s*max\s*\)|text|ntext|xml|image|varbinary\s*\(\s*max\s*\)|uniqueidentifier/.test(
1156
+ type
1157
+ )) {
1158
+ return true;
1159
+ }
1160
+ const varcharMatch = type.match(/n?varchar\s*\(\s*(\d+)\s*\)/);
1161
+ if (varcharMatch && parseInt(varcharMatch[1]) > 255) {
1162
+ return true;
1163
+ }
1164
+ return false;
1165
+ }
1095
1166
  async collectLowCardinality(tableName, column2) {
1167
+ if (this.#isHighCardinality(column2)) {
1168
+ return void 0;
1169
+ }
1096
1170
  const { schema, table: table2 } = this.#adapter.parseTableName(tableName);
1097
1171
  const tableIdentifier = `[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table2)}]`;
1098
1172
  const columnIdentifier = `[${this.#adapter.escape(column2.name)}]`;
@@ -1745,9 +1819,11 @@ var SqlServerTableGrounding = class extends TableGrounding {
1745
1819
  // packages/text2sql/src/lib/adapters/groundings/view.grounding.ts
1746
1820
  var ViewGrounding = class extends AbstractGrounding {
1747
1821
  #filter;
1822
+ includeDefinition;
1748
1823
  constructor(config = {}) {
1749
1824
  super("view");
1750
1825
  this.#filter = config.filter;
1826
+ this.includeDefinition = config.includeDefinition ?? true;
1751
1827
  }
1752
1828
  /**
1753
1829
  * Execute the grounding process.
@@ -1801,14 +1877,18 @@ var SqlServerViewGrounding = class extends ViewGrounding {
1801
1877
  }
1802
1878
  async getView(viewName) {
1803
1879
  const { schema, table: view2 } = this.#adapter.parseTableName(viewName);
1804
- const defRows = await this.#adapter.runQuery(`
1805
- SELECT m.definition
1806
- FROM sys.views v
1807
- JOIN sys.schemas s ON v.schema_id = s.schema_id
1808
- JOIN sys.sql_modules m ON v.object_id = m.object_id
1809
- WHERE s.name = '${this.#adapter.escapeString(schema)}'
1810
- AND v.name = '${this.#adapter.escapeString(view2)}'
1811
- `);
1880
+ let definition;
1881
+ if (this.includeDefinition) {
1882
+ const defRows = await this.#adapter.runQuery(`
1883
+ SELECT m.definition
1884
+ FROM sys.views v
1885
+ JOIN sys.schemas s ON v.schema_id = s.schema_id
1886
+ JOIN sys.sql_modules m ON v.object_id = m.object_id
1887
+ WHERE s.name = '${this.#adapter.escapeString(schema)}'
1888
+ AND v.name = '${this.#adapter.escapeString(view2)}'
1889
+ `);
1890
+ definition = defRows[0]?.definition ?? void 0;
1891
+ }
1812
1892
  const columns = await this.#adapter.runQuery(`
1813
1893
  SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type
1814
1894
  FROM INFORMATION_SCHEMA.COLUMNS
@@ -1820,7 +1900,7 @@ var SqlServerViewGrounding = class extends ViewGrounding {
1820
1900
  name: viewName,
1821
1901
  schema,
1822
1902
  rawName: view2,
1823
- definition: defRows[0]?.definition ?? void 0,
1903
+ definition,
1824
1904
  columns: columns.map((col) => ({
1825
1905
  name: col.column_name ?? "unknown",
1826
1906
  type: col.data_type ?? "unknown"