@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.
- package/dist/index.js +2 -2
- package/dist/index.js.map +2 -2
- package/dist/lib/adapters/bigquery/index.js +14 -8
- package/dist/lib/adapters/bigquery/index.js.map +2 -2
- package/dist/lib/adapters/bigquery/view.bigquery.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/index.js +2 -0
- package/dist/lib/adapters/groundings/index.js.map +2 -2
- package/dist/lib/adapters/groundings/view.grounding.d.ts +3 -0
- package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/mysql/index.js +13 -7
- package/dist/lib/adapters/mysql/index.js.map +2 -2
- package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/postgres/index.js +13 -7
- package/dist/lib/adapters/postgres/index.js.map +2 -2
- package/dist/lib/adapters/postgres/view.postgres.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlite/index.js +10 -4
- package/dist/lib/adapters/sqlite/index.js.map +2 -2
- package/dist/lib/adapters/sqlite/view.sqlite.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts +2 -4
- package/dist/lib/adapters/sqlserver/column-stats.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts +0 -9
- package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/index.js +91 -11
- package/dist/lib/adapters/sqlserver/index.js.map +3 -3
- package/dist/lib/adapters/sqlserver/view.sqlserver.grounding.d.ts.map +1 -1
- package/dist/lib/agents/result-tools.d.ts.map +1 -1
- 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
|
|
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
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
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
|
|
1903
|
+
definition,
|
|
1824
1904
|
columns: columns.map((col) => ({
|
|
1825
1905
|
name: col.column_name ?? "unknown",
|
|
1826
1906
|
type: col.data_type ?? "unknown"
|