@deepagents/text2sql 0.3.1 → 0.7.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/README.md +167 -0
- package/dist/finetune/convert-to-gguf.d.ts +18 -0
- package/dist/finetune/convert-to-gguf.d.ts.map +1 -0
- package/dist/finetune/run-finetune.d.ts +23 -0
- package/dist/finetune/run-finetune.d.ts.map +1 -0
- package/dist/finetune/run-mlx.d.ts +22 -0
- package/dist/finetune/run-mlx.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2500 -318
- package/dist/index.js.map +4 -4
- package/dist/lib/adapters/adapter.d.ts +3 -3
- package/dist/lib/adapters/adapter.d.ts.map +1 -1
- package/dist/lib/adapters/{grounding.ticket.d.ts → groundings/abstract.grounding.d.ts} +2 -2
- package/dist/lib/adapters/groundings/abstract.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/groundings/column-stats.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/column-stats.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/column-values.grounding.d.ts +76 -0
- package/dist/lib/adapters/groundings/column-values.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/groundings/constraint.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/constraint.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/context.d.ts +1 -1
- package/dist/lib/adapters/groundings/context.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/{grounding.d.ts → index.d.ts} +8 -5
- package/dist/lib/adapters/groundings/index.d.ts.map +1 -0
- package/dist/lib/adapters/groundings/{grounding.js → index.js} +411 -206
- package/dist/lib/adapters/groundings/index.js.map +7 -0
- package/dist/lib/adapters/groundings/indexes.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/indexes.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/info.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/info.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/report.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/report.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/row-count.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/row-count.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/table.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/table.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/groundings/view.grounding.d.ts +1 -1
- package/dist/lib/adapters/groundings/view.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/mysql/column-stats.mysql.grounding.d.ts +14 -0
- package/dist/lib/adapters/mysql/column-stats.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/column-values.mysql.grounding.d.ts +22 -0
- package/dist/lib/adapters/mysql/column-values.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/constraint.mysql.grounding.d.ts +13 -0
- package/dist/lib/adapters/mysql/constraint.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/index.d.ts +44 -0
- package/dist/lib/adapters/mysql/index.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/indexes.mysql.grounding.d.ts +13 -0
- package/dist/lib/adapters/mysql/indexes.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/info.mysql.grounding.d.ts +13 -0
- package/dist/lib/adapters/mysql/info.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/mysql.d.ts +33 -0
- package/dist/lib/adapters/mysql/mysql.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/row-count.mysql.grounding.d.ts +13 -0
- package/dist/lib/adapters/mysql/row-count.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/table.mysql.grounding.d.ts +21 -0
- package/dist/lib/adapters/mysql/table.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts +18 -0
- package/dist/lib/adapters/mysql/view.mysql.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/postgres/column-stats.postgres.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/postgres/column-values.postgres.grounding.d.ts +17 -0
- package/dist/lib/adapters/postgres/column-values.postgres.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/postgres/index.d.ts +4 -4
- package/dist/lib/adapters/postgres/index.d.ts.map +1 -1
- package/dist/lib/adapters/postgres/index.js +233 -33
- package/dist/lib/adapters/postgres/index.js.map +4 -4
- package/dist/lib/adapters/sqlite/column-values.sqlite.grounding.d.ts +17 -0
- package/dist/lib/adapters/sqlite/column-values.sqlite.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/sqlite/constraint.sqlite.grounding.d.ts.map +1 -1
- package/dist/lib/adapters/sqlite/index.d.ts +4 -4
- package/dist/lib/adapters/sqlite/index.d.ts.map +1 -1
- package/dist/lib/adapters/sqlite/index.js +214 -46
- package/dist/lib/adapters/sqlite/index.js.map +4 -4
- package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts +17 -0
- package/dist/lib/adapters/sqlserver/column-values.sqlserver.grounding.d.ts.map +1 -0
- package/dist/lib/adapters/sqlserver/index.d.ts +4 -4
- package/dist/lib/adapters/sqlserver/index.d.ts.map +1 -1
- package/dist/lib/adapters/sqlserver/index.js +179 -32
- package/dist/lib/adapters/sqlserver/index.js.map +4 -4
- package/dist/lib/agents/bi.agent.d.ts +14 -0
- package/dist/lib/agents/bi.agent.d.ts.map +1 -0
- package/dist/lib/agents/chat1.agent.d.ts +50 -0
- package/dist/lib/agents/chat1.agent.d.ts.map +1 -0
- package/dist/lib/agents/chat2.agent.d.ts +68 -0
- package/dist/lib/agents/chat2.agent.d.ts.map +1 -0
- package/dist/lib/agents/chat3.agent.d.ts +80 -0
- package/dist/lib/agents/chat3.agent.d.ts.map +1 -0
- package/dist/lib/agents/chat4.agent.d.ts +88 -0
- package/dist/lib/agents/chat4.agent.d.ts.map +1 -0
- package/dist/lib/agents/developer.agent.d.ts +31 -0
- package/dist/lib/agents/developer.agent.d.ts.map +1 -0
- package/dist/lib/agents/question.agent.d.ts +23 -0
- package/dist/lib/agents/question.agent.d.ts.map +1 -0
- package/dist/lib/agents/sql.agent.d.ts +44 -0
- package/dist/lib/agents/sql.agent.d.ts.map +1 -0
- package/dist/lib/agents/teachables.agent.d.ts +8 -9
- package/dist/lib/agents/teachables.agent.d.ts.map +1 -1
- package/dist/lib/agents/text2sql.agent.d.ts +0 -1
- package/dist/lib/agents/text2sql.agent.d.ts.map +1 -1
- package/dist/lib/checkpoint.d.ts +99 -0
- package/dist/lib/checkpoint.d.ts.map +1 -0
- package/dist/lib/instructions.js +50 -21
- package/dist/lib/instructions.js.map +2 -2
- package/dist/lib/sql.d.ts +125 -3
- package/dist/lib/sql.d.ts.map +1 -1
- package/dist/lib/syntheize.d.ts +2 -0
- package/dist/lib/syntheize.d.ts.map +1 -0
- package/dist/lib/synthesis/decorators/deduplicated-producer.d.ts +26 -0
- package/dist/lib/synthesis/decorators/deduplicated-producer.d.ts.map +1 -0
- package/dist/lib/synthesis/decorators/filtered-producer.d.ts +26 -0
- package/dist/lib/synthesis/decorators/filtered-producer.d.ts.map +1 -0
- package/dist/lib/synthesis/decorators/index.d.ts +7 -0
- package/dist/lib/synthesis/decorators/index.d.ts.map +1 -0
- package/dist/lib/synthesis/decorators/validated-producer.d.ts +33 -0
- package/dist/lib/synthesis/decorators/validated-producer.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/base-contextual-extractor.d.ts +76 -0
- package/dist/lib/synthesis/extractors/base-contextual-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/full-context-extractor.d.ts +25 -0
- package/dist/lib/synthesis/extractors/full-context-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/index.d.ts +8 -0
- package/dist/lib/synthesis/extractors/index.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/last-query-extractor.d.ts +30 -0
- package/dist/lib/synthesis/extractors/last-query-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/message-extractor.d.ts +27 -0
- package/dist/lib/synthesis/extractors/message-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/segmented-context-extractor.d.ts +48 -0
- package/dist/lib/synthesis/extractors/segmented-context-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/sql-extractor.d.ts +27 -0
- package/dist/lib/synthesis/extractors/sql-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/extractors/windowed-context-extractor.d.ts +30 -0
- package/dist/lib/synthesis/extractors/windowed-context-extractor.d.ts.map +1 -0
- package/dist/lib/synthesis/index.d.ts +6 -0
- package/dist/lib/synthesis/index.d.ts.map +1 -0
- package/dist/lib/synthesis/index.js +2172 -0
- package/dist/lib/synthesis/index.js.map +7 -0
- package/dist/lib/synthesis/synthesizers/breadth-evolver.d.ts +34 -0
- package/dist/lib/synthesis/synthesizers/breadth-evolver.d.ts.map +1 -0
- package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts +41 -0
- package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts.map +1 -0
- package/dist/lib/synthesis/synthesizers/index.d.ts +7 -0
- package/dist/lib/synthesis/synthesizers/index.d.ts.map +1 -0
- package/dist/lib/synthesis/synthesizers/persona-generator.d.ts +34 -0
- package/dist/lib/synthesis/synthesizers/persona-generator.d.ts.map +1 -0
- package/dist/lib/synthesis/synthesizers/schema-synthesizer.d.ts +39 -0
- package/dist/lib/synthesis/synthesizers/schema-synthesizer.d.ts.map +1 -0
- package/dist/lib/synthesis/synthesizers/styles.d.ts +8 -0
- package/dist/lib/synthesis/synthesizers/styles.d.ts.map +1 -0
- package/dist/lib/synthesis/synthesizers/teachings-generator.d.ts +32 -0
- package/dist/lib/synthesis/synthesizers/teachings-generator.d.ts.map +1 -0
- package/dist/lib/synthesis/types.d.ts +26 -0
- package/dist/lib/synthesis/types.d.ts.map +1 -0
- package/dist/lib/teach/teachables.d.ts +18 -3
- package/dist/lib/teach/teachables.d.ts.map +1 -1
- package/dist/lib/teach/teachings.d.ts +9 -2
- package/dist/lib/teach/teachings.d.ts.map +1 -1
- package/package.json +38 -15
- package/dist/lib/adapters/grounding.ticket.d.ts.map +0 -1
- package/dist/lib/adapters/groundings/grounding.d.ts.map +0 -1
- package/dist/lib/adapters/groundings/grounding.js.map +0 -7
- package/dist/lib/adapters/groundings/low-cardinality.grounding.d.ts +0 -35
- package/dist/lib/adapters/groundings/low-cardinality.grounding.d.ts.map +0 -1
- package/dist/lib/adapters/postgres/low-cardinality.postgres.grounding.d.ts +0 -14
- package/dist/lib/adapters/postgres/low-cardinality.postgres.grounding.d.ts.map +0 -1
- package/dist/lib/adapters/sqlite/low-cardinality.sqlite.grounding.d.ts +0 -14
- package/dist/lib/adapters/sqlite/low-cardinality.sqlite.grounding.d.ts.map +0 -1
- package/dist/lib/adapters/sqlserver/low-cardinality.sqlserver.grounding.d.ts +0 -14
- package/dist/lib/adapters/sqlserver/low-cardinality.sqlserver.grounding.d.ts.map +0 -1
|
@@ -10,9 +10,8 @@ function createGroundingContext() {
|
|
|
10
10
|
|
|
11
11
|
// packages/text2sql/src/lib/adapters/adapter.ts
|
|
12
12
|
var Adapter = class {
|
|
13
|
-
async introspect() {
|
|
13
|
+
async introspect(ctx = createGroundingContext()) {
|
|
14
14
|
const lines = [];
|
|
15
|
-
const ctx = createGroundingContext();
|
|
16
15
|
for (const fn of this.grounding) {
|
|
17
16
|
const grounding = fn(this);
|
|
18
17
|
lines.push({
|
|
@@ -82,7 +81,7 @@ ${description}
|
|
|
82
81
|
}
|
|
83
82
|
};
|
|
84
83
|
|
|
85
|
-
// packages/text2sql/src/lib/adapters/grounding.
|
|
84
|
+
// packages/text2sql/src/lib/adapters/groundings/abstract.grounding.ts
|
|
86
85
|
var AbstractGrounding = class {
|
|
87
86
|
tag;
|
|
88
87
|
constructor(tag) {
|
|
@@ -196,31 +195,108 @@ var InfoGrounding = class extends AbstractGrounding {
|
|
|
196
195
|
}
|
|
197
196
|
};
|
|
198
197
|
|
|
199
|
-
// packages/text2sql/src/lib/adapters/groundings/
|
|
200
|
-
var
|
|
198
|
+
// packages/text2sql/src/lib/adapters/groundings/column-values.grounding.ts
|
|
199
|
+
var ColumnValuesGrounding = class extends AbstractGrounding {
|
|
200
|
+
lowCardinalityLimit;
|
|
201
201
|
constructor(config = {}) {
|
|
202
|
-
super("
|
|
202
|
+
super("column_values");
|
|
203
|
+
this.lowCardinalityLimit = config.lowCardinalityLimit ?? 20;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get values for native ENUM type columns.
|
|
207
|
+
* Return undefined if column is not an ENUM type.
|
|
208
|
+
* Default implementation returns undefined (no native ENUM support).
|
|
209
|
+
*/
|
|
210
|
+
async collectEnumValues(_tableName, _column) {
|
|
211
|
+
return void 0;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Parse CHECK constraint for enum-like IN clause.
|
|
215
|
+
* Extracts values from patterns like:
|
|
216
|
+
* - CHECK (status IN ('active', 'inactive'))
|
|
217
|
+
* - CHECK ((status)::text = ANY (ARRAY['a'::text, 'b'::text]))
|
|
218
|
+
* - CHECK (status = 'active' OR status = 'inactive')
|
|
219
|
+
*/
|
|
220
|
+
parseCheckConstraint(constraint, columnName) {
|
|
221
|
+
if (constraint.type !== "CHECK" || !constraint.definition) {
|
|
222
|
+
return void 0;
|
|
223
|
+
}
|
|
224
|
+
if (constraint.columns && !constraint.columns.includes(columnName)) {
|
|
225
|
+
return void 0;
|
|
226
|
+
}
|
|
227
|
+
const def = constraint.definition;
|
|
228
|
+
const escapedCol = this.escapeRegex(columnName);
|
|
229
|
+
const colPattern = `(?:\\(?\\(?${escapedCol}\\)?(?:::(?:text|varchar|character varying))?\\)?)`;
|
|
230
|
+
const inMatch = def.match(
|
|
231
|
+
new RegExp(`${colPattern}\\s+IN\\s*\\(([^)]+)\\)`, "i")
|
|
232
|
+
);
|
|
233
|
+
if (inMatch) {
|
|
234
|
+
return this.extractStringValues(inMatch[1]);
|
|
235
|
+
}
|
|
236
|
+
const anyMatch = def.match(
|
|
237
|
+
new RegExp(
|
|
238
|
+
`${colPattern}\\s*=\\s*ANY\\s*\\(\\s*(?:ARRAY)?\\s*\\[([^\\]]+)\\]`,
|
|
239
|
+
"i"
|
|
240
|
+
)
|
|
241
|
+
);
|
|
242
|
+
if (anyMatch) {
|
|
243
|
+
return this.extractStringValues(anyMatch[1]);
|
|
244
|
+
}
|
|
245
|
+
const orPattern = new RegExp(
|
|
246
|
+
`\\b${this.escapeRegex(columnName)}\\b\\s*=\\s*'([^']*)'`,
|
|
247
|
+
"gi"
|
|
248
|
+
);
|
|
249
|
+
const orMatches = [...def.matchAll(orPattern)];
|
|
250
|
+
if (orMatches.length >= 2) {
|
|
251
|
+
return orMatches.map((m) => m[1]);
|
|
252
|
+
}
|
|
253
|
+
return void 0;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Extract string values from a comma-separated list.
|
|
257
|
+
*/
|
|
258
|
+
extractStringValues(input) {
|
|
259
|
+
const values = [];
|
|
260
|
+
const matches = input.matchAll(/'([^']*)'/g);
|
|
261
|
+
for (const match of matches) {
|
|
262
|
+
values.push(match[1]);
|
|
263
|
+
}
|
|
264
|
+
return values.length > 0 ? values : void 0;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Escape special regex characters in a string.
|
|
268
|
+
*/
|
|
269
|
+
escapeRegex(str) {
|
|
270
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Get the table from context by name.
|
|
274
|
+
*/
|
|
275
|
+
getTable(ctx, name) {
|
|
276
|
+
return ctx.tables.find((t) => t.name === name);
|
|
203
277
|
}
|
|
204
278
|
/**
|
|
205
279
|
* Execute the grounding process.
|
|
206
|
-
* Annotates columns in ctx.tables and ctx.views with
|
|
280
|
+
* Annotates columns in ctx.tables and ctx.views with values.
|
|
207
281
|
*/
|
|
208
282
|
async execute(ctx) {
|
|
209
283
|
const allContainers = [...ctx.tables, ...ctx.views];
|
|
210
284
|
for (const container of allContainers) {
|
|
285
|
+
const table = this.getTable(ctx, container.name);
|
|
211
286
|
for (const column of container.columns) {
|
|
212
287
|
try {
|
|
213
|
-
const
|
|
288
|
+
const result = await this.resolveColumnValues(
|
|
214
289
|
container.name,
|
|
215
|
-
column
|
|
290
|
+
column,
|
|
291
|
+
table?.constraints
|
|
216
292
|
);
|
|
217
|
-
if (
|
|
218
|
-
column.kind =
|
|
219
|
-
column.values =
|
|
293
|
+
if (result) {
|
|
294
|
+
column.kind = result.kind;
|
|
295
|
+
column.values = result.values;
|
|
220
296
|
}
|
|
221
297
|
} catch (error) {
|
|
222
298
|
console.warn(
|
|
223
|
-
"Error collecting
|
|
299
|
+
"Error collecting column values for",
|
|
224
300
|
container.name,
|
|
225
301
|
column.name,
|
|
226
302
|
error
|
|
@@ -230,6 +306,28 @@ var LowCardinalityGrounding = class extends AbstractGrounding {
|
|
|
230
306
|
}
|
|
231
307
|
return () => this.#describe();
|
|
232
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Resolve column values from all sources in priority order.
|
|
311
|
+
*/
|
|
312
|
+
async resolveColumnValues(tableName, column, constraints2) {
|
|
313
|
+
const enumValues = await this.collectEnumValues(tableName, column);
|
|
314
|
+
if (enumValues?.length) {
|
|
315
|
+
return { kind: "Enum", values: enumValues };
|
|
316
|
+
}
|
|
317
|
+
if (constraints2) {
|
|
318
|
+
for (const constraint of constraints2) {
|
|
319
|
+
const checkValues = this.parseCheckConstraint(constraint, column.name);
|
|
320
|
+
if (checkValues?.length) {
|
|
321
|
+
return { kind: "Enum", values: checkValues };
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const lowCardValues = await this.collectLowCardinality(tableName, column);
|
|
326
|
+
if (lowCardValues?.length) {
|
|
327
|
+
return { kind: "LowCardinality", values: lowCardValues };
|
|
328
|
+
}
|
|
329
|
+
return void 0;
|
|
330
|
+
}
|
|
233
331
|
#describe() {
|
|
234
332
|
return null;
|
|
235
333
|
}
|
|
@@ -478,18 +576,61 @@ var TableGrounding = class extends AbstractGrounding {
|
|
|
478
576
|
}
|
|
479
577
|
return tables2.map((table) => {
|
|
480
578
|
const rowCountInfo = table.rowCount != null ? ` [rows: ${table.rowCount}${table.sizeHint ? `, size: ${table.sizeHint}` : ""}]` : "";
|
|
481
|
-
const pkConstraint = table.constraints?.find(
|
|
579
|
+
const pkConstraint = table.constraints?.find(
|
|
580
|
+
(c) => c.type === "PRIMARY_KEY"
|
|
581
|
+
);
|
|
482
582
|
const pkColumns = new Set(pkConstraint?.columns ?? []);
|
|
583
|
+
const notNullColumns = new Set(
|
|
584
|
+
table.constraints?.filter((c) => c.type === "NOT_NULL").flatMap((c) => c.columns ?? []) ?? []
|
|
585
|
+
);
|
|
586
|
+
const defaultByColumn = /* @__PURE__ */ new Map();
|
|
587
|
+
for (const c of table.constraints?.filter(
|
|
588
|
+
(c2) => c2.type === "DEFAULT"
|
|
589
|
+
) ?? []) {
|
|
590
|
+
for (const col of c.columns ?? []) {
|
|
591
|
+
if (c.defaultValue != null) {
|
|
592
|
+
defaultByColumn.set(col, c.defaultValue);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
const uniqueColumns = new Set(
|
|
597
|
+
table.constraints?.filter((c) => c.type === "UNIQUE" && c.columns?.length === 1).flatMap((c) => c.columns ?? []) ?? []
|
|
598
|
+
);
|
|
599
|
+
const fkByColumn = /* @__PURE__ */ new Map();
|
|
600
|
+
for (const c of table.constraints?.filter(
|
|
601
|
+
(c2) => c2.type === "FOREIGN_KEY"
|
|
602
|
+
) ?? []) {
|
|
603
|
+
const cols = c.columns ?? [];
|
|
604
|
+
const refCols = c.referencedColumns ?? [];
|
|
605
|
+
for (let i = 0; i < cols.length; i++) {
|
|
606
|
+
const refCol = refCols[i] ?? refCols[0] ?? cols[i];
|
|
607
|
+
fkByColumn.set(cols[i], `${c.referencedTable}.${refCol}`);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
483
610
|
const columns = table.columns.map((column) => {
|
|
484
611
|
const annotations = [];
|
|
485
612
|
const isPrimaryKey = pkColumns.has(column.name);
|
|
486
613
|
if (isPrimaryKey) {
|
|
487
614
|
annotations.push("PK");
|
|
488
615
|
}
|
|
616
|
+
if (fkByColumn.has(column.name)) {
|
|
617
|
+
annotations.push(`FK -> ${fkByColumn.get(column.name)}`);
|
|
618
|
+
}
|
|
619
|
+
if (uniqueColumns.has(column.name)) {
|
|
620
|
+
annotations.push("UNIQUE");
|
|
621
|
+
}
|
|
622
|
+
if (notNullColumns.has(column.name)) {
|
|
623
|
+
annotations.push("NOT NULL");
|
|
624
|
+
}
|
|
625
|
+
if (defaultByColumn.has(column.name)) {
|
|
626
|
+
annotations.push(`DEFAULT: ${defaultByColumn.get(column.name)}`);
|
|
627
|
+
}
|
|
489
628
|
if (column.isIndexed && !isPrimaryKey) {
|
|
490
629
|
annotations.push("Indexed");
|
|
491
630
|
}
|
|
492
|
-
if (column.kind === "
|
|
631
|
+
if (column.kind === "Enum" && column.values?.length) {
|
|
632
|
+
annotations.push(`Enum: ${column.values.join(", ")}`);
|
|
633
|
+
} else if (column.kind === "LowCardinality" && column.values?.length) {
|
|
493
634
|
annotations.push(`LowCardinality: ${column.values.join(", ")}`);
|
|
494
635
|
}
|
|
495
636
|
if (column.stats) {
|
|
@@ -524,9 +665,19 @@ ${table.indexes.map((index) => {
|
|
|
524
665
|
const columnsText = index.columns?.length ? index.columns.join(", ") : "expression";
|
|
525
666
|
return ` - ${index.name}${propsText}: ${columnsText}`;
|
|
526
667
|
}).join("\n")}` : "";
|
|
668
|
+
const multiColumnUniques = table.constraints?.filter(
|
|
669
|
+
(c) => c.type === "UNIQUE" && (c.columns?.length ?? 0) > 1
|
|
670
|
+
) ?? [];
|
|
671
|
+
const uniqueConstraints = multiColumnUniques.length ? `
|
|
672
|
+
Unique Constraints:
|
|
673
|
+
${multiColumnUniques.map((c) => ` - ${c.name}: (${c.columns?.join(", ")})`).join("\n")}` : "";
|
|
674
|
+
const checkConstraints = table.constraints?.filter((c) => c.type === "CHECK") ?? [];
|
|
675
|
+
const checks = checkConstraints.length ? `
|
|
676
|
+
Check Constraints:
|
|
677
|
+
${checkConstraints.map((c) => ` - ${c.name}: ${c.definition}`).join("\n")}` : "";
|
|
527
678
|
return `- Table: ${table.name}${rowCountInfo}
|
|
528
679
|
Columns:
|
|
529
|
-
${columns}${indexes2}`;
|
|
680
|
+
${columns}${indexes2}${uniqueConstraints}${checks}`;
|
|
530
681
|
}).join("\n\n");
|
|
531
682
|
}
|
|
532
683
|
#formatTableLabel = (tableName) => {
|
|
@@ -847,9 +998,8 @@ var SqlServerInfoGrounding = class extends InfoGrounding {
|
|
|
847
998
|
}
|
|
848
999
|
};
|
|
849
1000
|
|
|
850
|
-
// packages/text2sql/src/lib/adapters/sqlserver/
|
|
851
|
-
var
|
|
852
|
-
var SqlServerLowCardinalityGrounding = class extends LowCardinalityGrounding {
|
|
1001
|
+
// packages/text2sql/src/lib/adapters/sqlserver/column-values.sqlserver.grounding.ts
|
|
1002
|
+
var SqlServerColumnValuesGrounding = class extends ColumnValuesGrounding {
|
|
853
1003
|
#adapter;
|
|
854
1004
|
constructor(adapter, config = {}) {
|
|
855
1005
|
super(config);
|
|
@@ -859,14 +1009,14 @@ var SqlServerLowCardinalityGrounding = class extends LowCardinalityGrounding {
|
|
|
859
1009
|
const { schema, table } = this.#adapter.parseTableName(tableName);
|
|
860
1010
|
const tableIdentifier = `[${this.#adapter.escape(schema)}].[${this.#adapter.escape(table)}]`;
|
|
861
1011
|
const columnIdentifier = `[${this.#adapter.escape(column.name)}]`;
|
|
862
|
-
const limit =
|
|
1012
|
+
const limit = this.lowCardinalityLimit + 1;
|
|
863
1013
|
const sql = `
|
|
864
1014
|
SELECT DISTINCT TOP ${limit} CAST(${columnIdentifier} AS NVARCHAR(MAX)) AS value
|
|
865
1015
|
FROM ${tableIdentifier}
|
|
866
1016
|
WHERE ${columnIdentifier} IS NOT NULL
|
|
867
1017
|
`;
|
|
868
1018
|
const rows = await this.#adapter.runQuery(sql);
|
|
869
|
-
if (!rows.length || rows.length >
|
|
1019
|
+
if (!rows.length || rows.length > this.lowCardinalityLimit) {
|
|
870
1020
|
return void 0;
|
|
871
1021
|
}
|
|
872
1022
|
const values = [];
|
|
@@ -876,10 +1026,7 @@ var SqlServerLowCardinalityGrounding = class extends LowCardinalityGrounding {
|
|
|
876
1026
|
}
|
|
877
1027
|
values.push(row.value);
|
|
878
1028
|
}
|
|
879
|
-
|
|
880
|
-
return void 0;
|
|
881
|
-
}
|
|
882
|
-
return { kind: "LowCardinality", values };
|
|
1029
|
+
return values.length ? values : void 0;
|
|
883
1030
|
}
|
|
884
1031
|
};
|
|
885
1032
|
|
|
@@ -923,7 +1070,7 @@ var SQL_SERVER_ERROR_MAP = {
|
|
|
923
1070
|
hint: "The query violates a constraint. Re-check join logic and filtering."
|
|
924
1071
|
}
|
|
925
1072
|
};
|
|
926
|
-
var
|
|
1073
|
+
var LOW_CARDINALITY_LIMIT = 20;
|
|
927
1074
|
function getErrorCode(error) {
|
|
928
1075
|
if (typeof error === "object" && error !== null && "number" in error && typeof error.number === "number") {
|
|
929
1076
|
return String(error.number);
|
|
@@ -1233,7 +1380,7 @@ var SqlServer = class extends Adapter {
|
|
|
1233
1380
|
});
|
|
1234
1381
|
for (const column of table.columns) {
|
|
1235
1382
|
const columnIdentifier = this.#quoteIdentifier(column.name);
|
|
1236
|
-
const limit =
|
|
1383
|
+
const limit = LOW_CARDINALITY_LIMIT + 1;
|
|
1237
1384
|
const sql = `
|
|
1238
1385
|
SELECT DISTINCT TOP (${limit}) ${columnIdentifier} AS value
|
|
1239
1386
|
FROM ${tableIdentifier}
|
|
@@ -1245,7 +1392,7 @@ var SqlServer = class extends Adapter {
|
|
|
1245
1392
|
} catch {
|
|
1246
1393
|
continue;
|
|
1247
1394
|
}
|
|
1248
|
-
if (!rows.length || rows.length >
|
|
1395
|
+
if (!rows.length || rows.length > LOW_CARDINALITY_LIMIT) {
|
|
1249
1396
|
continue;
|
|
1250
1397
|
}
|
|
1251
1398
|
const values = [];
|
|
@@ -1647,9 +1794,9 @@ function columnStats(config = {}) {
|
|
|
1647
1794
|
return new SqlServerColumnStatsGrounding(adapter, config);
|
|
1648
1795
|
};
|
|
1649
1796
|
}
|
|
1650
|
-
function
|
|
1797
|
+
function columnValues(config = {}) {
|
|
1651
1798
|
return (adapter) => {
|
|
1652
|
-
return new
|
|
1799
|
+
return new SqlServerColumnValuesGrounding(adapter, config);
|
|
1653
1800
|
};
|
|
1654
1801
|
}
|
|
1655
1802
|
function indexes(config = {}) {
|
|
@@ -1675,7 +1822,7 @@ var sqlserver_default = {
|
|
|
1675
1822
|
info,
|
|
1676
1823
|
views,
|
|
1677
1824
|
columnStats,
|
|
1678
|
-
|
|
1825
|
+
columnValues,
|
|
1679
1826
|
indexes,
|
|
1680
1827
|
rowCount,
|
|
1681
1828
|
constraints,
|
|
@@ -1685,12 +1832,12 @@ var sqlserver_default = {
|
|
|
1685
1832
|
export {
|
|
1686
1833
|
SqlServer,
|
|
1687
1834
|
columnStats,
|
|
1835
|
+
columnValues,
|
|
1688
1836
|
constraints,
|
|
1689
1837
|
sqlserver_default as default,
|
|
1690
1838
|
formatSqlServerError,
|
|
1691
1839
|
indexes,
|
|
1692
1840
|
info,
|
|
1693
|
-
lowCardinality,
|
|
1694
1841
|
report,
|
|
1695
1842
|
rowCount,
|
|
1696
1843
|
tables,
|