@eamonboyle/mssql-mcp 1.1.0 → 1.3.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 +169 -22
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +74 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +29 -24
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +144 -112
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +382 -122
- package/dist/index.js.map +1 -1
- package/dist/mcpResults.d.ts +49 -0
- package/dist/mcpResults.d.ts.map +1 -0
- package/dist/mcpResults.js +246 -0
- package/dist/mcpResults.js.map +1 -0
- package/dist/promptRegistry.d.ts +16 -0
- package/dist/promptRegistry.d.ts.map +1 -0
- package/dist/promptRegistry.js +112 -0
- package/dist/promptRegistry.js.map +1 -0
- package/dist/resourceRegistry.d.ts +14 -0
- package/dist/resourceRegistry.d.ts.map +1 -0
- package/dist/resourceRegistry.js +311 -0
- package/dist/resourceRegistry.js.map +1 -0
- package/dist/schema.d.ts +57 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +390 -0
- package/dist/schema.js.map +1 -0
- package/dist/serverState.d.ts +28 -0
- package/dist/serverState.d.ts.map +1 -0
- package/dist/serverState.js +99 -0
- package/dist/serverState.js.map +1 -0
- package/dist/sql.d.ts +7 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +73 -0
- package/dist/sql.js.map +1 -0
- package/dist/toolRegistry.d.ts +20 -0
- package/dist/toolRegistry.d.ts.map +1 -0
- package/dist/toolRegistry.js +547 -0
- package/dist/toolRegistry.js.map +1 -0
- package/dist/tools/AnalyzeTableTool.d.ts +37 -0
- package/dist/tools/AnalyzeTableTool.d.ts.map +1 -0
- package/dist/tools/AnalyzeTableTool.js +81 -0
- package/dist/tools/AnalyzeTableTool.js.map +1 -0
- package/dist/tools/CreateIndexTool.d.ts +30 -23
- package/dist/tools/CreateIndexTool.d.ts.map +1 -1
- package/dist/tools/CreateIndexTool.js +47 -77
- package/dist/tools/CreateIndexTool.js.map +1 -1
- package/dist/tools/CreateTableTool.d.ts +18 -11
- package/dist/tools/CreateTableTool.d.ts.map +1 -1
- package/dist/tools/CreateTableTool.js +37 -61
- package/dist/tools/CreateTableTool.js.map +1 -1
- package/dist/tools/DeleteDataTool.d.ts +22 -0
- package/dist/tools/DeleteDataTool.d.ts.map +1 -0
- package/dist/tools/DeleteDataTool.js +38 -0
- package/dist/tools/DeleteDataTool.js.map +1 -0
- package/dist/tools/DescribeObjectTool.d.ts +21 -0
- package/dist/tools/DescribeObjectTool.d.ts.map +1 -0
- package/dist/tools/DescribeObjectTool.js +31 -0
- package/dist/tools/DescribeObjectTool.js.map +1 -0
- package/dist/tools/DescribeRelationshipsTool.d.ts +20 -0
- package/dist/tools/DescribeRelationshipsTool.d.ts.map +1 -0
- package/dist/tools/DescribeRelationshipsTool.js +24 -0
- package/dist/tools/DescribeRelationshipsTool.js.map +1 -0
- package/dist/tools/DescribeTableTool.d.ts +19 -20
- package/dist/tools/DescribeTableTool.d.ts.map +1 -1
- package/dist/tools/DescribeTableTool.js +23 -44
- package/dist/tools/DescribeTableTool.js.map +1 -1
- package/dist/tools/DropTableTool.d.ts +13 -11
- package/dist/tools/DropTableTool.d.ts.map +1 -1
- package/dist/tools/DropTableTool.js +30 -44
- package/dist/tools/DropTableTool.js.map +1 -1
- package/dist/tools/ExplainQueryTool.d.ts +32 -0
- package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
- package/dist/tools/ExplainQueryTool.js +102 -0
- package/dist/tools/ExplainQueryTool.js.map +1 -0
- package/dist/tools/InsertDataTool.d.ts +20 -16
- package/dist/tools/InsertDataTool.d.ts.map +1 -1
- package/dist/tools/InsertDataTool.js +91 -108
- package/dist/tools/InsertDataTool.js.map +1 -1
- package/dist/tools/ListDatabasesTool.d.ts +16 -0
- package/dist/tools/ListDatabasesTool.d.ts.map +1 -0
- package/dist/tools/ListDatabasesTool.js +26 -0
- package/dist/tools/ListDatabasesTool.js.map +1 -0
- package/dist/tools/ListForeignKeysTool.d.ts +19 -0
- package/dist/tools/ListForeignKeysTool.d.ts.map +1 -0
- package/dist/tools/ListForeignKeysTool.js +24 -0
- package/dist/tools/ListForeignKeysTool.js.map +1 -0
- package/dist/tools/ListObjectsTool.d.ts +20 -0
- package/dist/tools/ListObjectsTool.d.ts.map +1 -0
- package/dist/tools/ListObjectsTool.js +26 -0
- package/dist/tools/ListObjectsTool.js.map +1 -0
- package/dist/tools/ListTableTool.d.ts +20 -16
- package/dist/tools/ListTableTool.d.ts.map +1 -1
- package/dist/tools/ListTableTool.js +32 -51
- package/dist/tools/ListTableTool.js.map +1 -1
- package/dist/tools/PreviewDeleteTool.d.ts +28 -0
- package/dist/tools/PreviewDeleteTool.d.ts.map +1 -0
- package/dist/tools/PreviewDeleteTool.js +31 -0
- package/dist/tools/PreviewDeleteTool.js.map +1 -0
- package/dist/tools/PreviewUpdateTool.d.ts +30 -0
- package/dist/tools/PreviewUpdateTool.d.ts.map +1 -0
- package/dist/tools/PreviewUpdateTool.js +34 -0
- package/dist/tools/PreviewUpdateTool.js.map +1 -0
- package/dist/tools/ReadDataTool.d.ts +35 -33
- package/dist/tools/ReadDataTool.d.ts.map +1 -1
- package/dist/tools/ReadDataTool.js +92 -105
- package/dist/tools/ReadDataTool.js.map +1 -1
- package/dist/tools/SearchDataTool.d.ts +27 -0
- package/dist/tools/SearchDataTool.d.ts.map +1 -0
- package/dist/tools/SearchDataTool.js +61 -0
- package/dist/tools/SearchDataTool.js.map +1 -0
- package/dist/tools/UpdateDataTool.d.ts +22 -16
- package/dist/tools/UpdateDataTool.d.ts.map +1 -1
- package/dist/tools/UpdateDataTool.js +48 -65
- package/dist/tools/UpdateDataTool.js.map +1 -1
- package/dist/validation.d.ts +13 -13
- package/dist/validation.js +133 -133
- package/dist/validation.js.map +1 -1
- package/dist/writePreview.d.ts +20 -0
- package/dist/writePreview.d.ts.map +1 -0
- package/dist/writePreview.js +27 -0
- package/dist/writePreview.js.map +1 -0
- package/dist/writePreviewGrant.d.ts +18 -0
- package/dist/writePreviewGrant.d.ts.map +1 -0
- package/dist/writePreviewGrant.js +71 -0
- package/dist/writePreviewGrant.js.map +1 -0
- package/dist/writePreviewGrantStore.d.ts +10 -0
- package/dist/writePreviewGrantStore.d.ts.map +1 -0
- package/dist/writePreviewGrantStore.js +47 -0
- package/dist/writePreviewGrantStore.js.map +1 -0
- package/dist/writeSafety.d.ts +21 -0
- package/dist/writeSafety.d.ts.map +1 -0
- package/dist/writeSafety.js +169 -0
- package/dist/writeSafety.js.map +1 -0
- package/package.json +6 -5
- package/dist/__tests__/db.test.d.ts +0 -2
- package/dist/__tests__/db.test.d.ts.map +0 -1
- package/dist/__tests__/db.test.js +0 -204
- package/dist/__tests__/db.test.js.map +0 -1
- package/dist/__tests__/validation.test.d.ts +0 -2
- package/dist/__tests__/validation.test.d.ts.map +0 -1
- package/dist/__tests__/validation.test.js +0 -111
- package/dist/__tests__/validation.test.js.map +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { analyzeTable } from "../schema.js";
|
|
2
|
+
function formatScalar(value) {
|
|
3
|
+
if (value === null || value === undefined) {
|
|
4
|
+
return "n/a";
|
|
5
|
+
}
|
|
6
|
+
if (typeof value === "bigint") {
|
|
7
|
+
return value.toString();
|
|
8
|
+
}
|
|
9
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
10
|
+
return Number.isInteger(value)
|
|
11
|
+
? String(value)
|
|
12
|
+
: value.toLocaleString(undefined, { maximumFractionDigits: 4 });
|
|
13
|
+
}
|
|
14
|
+
return String(value);
|
|
15
|
+
}
|
|
16
|
+
export function formatAnalyzeTableText(data) {
|
|
17
|
+
const s = data.summary;
|
|
18
|
+
if (!s) {
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
const schema = formatScalar(s.schemaName);
|
|
22
|
+
const table = formatScalar(s.tableName);
|
|
23
|
+
const lines = [
|
|
24
|
+
`Table: ${schema}.${table}`,
|
|
25
|
+
`Estimated rows: ${formatScalar(s.rowCount)}`,
|
|
26
|
+
`Reserved: ${formatScalar(s.reservedMB)} MB`,
|
|
27
|
+
`Used: ${formatScalar(s.usedMB)} MB`,
|
|
28
|
+
"",
|
|
29
|
+
"Indexes:",
|
|
30
|
+
];
|
|
31
|
+
if (data.indexes.length === 0) {
|
|
32
|
+
lines.push(" (none)");
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
for (const idx of data.indexes) {
|
|
36
|
+
const name = idx.name != null ? formatScalar(idx.name) : "(unnamed)";
|
|
37
|
+
const type = idx.type != null ? formatScalar(idx.type) : "?";
|
|
38
|
+
const tags = [];
|
|
39
|
+
if (idx.isPrimaryKey === true || idx.isPrimaryKey === 1) {
|
|
40
|
+
tags.push("primary key");
|
|
41
|
+
}
|
|
42
|
+
if (idx.isUnique === true || idx.isUnique === 1) {
|
|
43
|
+
tags.push("unique");
|
|
44
|
+
}
|
|
45
|
+
const tagPart = tags.length > 0 ? ` (${tags.join(", ")})` : "";
|
|
46
|
+
lines.push(` - ${name}: ${type}${tagPart}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return lines.join("\n");
|
|
50
|
+
}
|
|
51
|
+
export class AnalyzeTableTool {
|
|
52
|
+
constructor() {
|
|
53
|
+
this.name = "analyze_table";
|
|
54
|
+
this.description = "Summarizes row counts, storage, and indexes for a table.";
|
|
55
|
+
}
|
|
56
|
+
async run(params) {
|
|
57
|
+
try {
|
|
58
|
+
const data = await analyzeTable(params.tableName, params.databaseName, params.schemaName);
|
|
59
|
+
if (!data.summary) {
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
message: `No table named '${params.tableName}' was found.`,
|
|
63
|
+
data,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const detail = formatAnalyzeTableText(data);
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
message: `Analyzed ${params.tableName} successfully.\n\n${detail}`,
|
|
70
|
+
data,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
message: `Failed to analyze table: ${error}`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=AnalyzeTableTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyzeTableTool.js","sourceRoot":"","sources":["../../src/tools/AnalyzeTableTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
interface CreateIndexParams {
|
|
2
|
+
schemaName?: string;
|
|
3
|
+
tableName: string;
|
|
4
|
+
indexName: string;
|
|
5
|
+
columns: string[];
|
|
6
|
+
isUnique?: boolean;
|
|
7
|
+
isClustered?: boolean;
|
|
8
|
+
databaseName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class CreateIndexTool {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
run(params: CreateIndexParams): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
details?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
success: boolean;
|
|
19
|
+
message: string;
|
|
20
|
+
details: {
|
|
21
|
+
schemaName: string | undefined;
|
|
22
|
+
tableName: string;
|
|
23
|
+
indexName: string;
|
|
24
|
+
columnNames: string;
|
|
25
|
+
isUnique: boolean;
|
|
26
|
+
isClustered: boolean;
|
|
27
|
+
};
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
24
31
|
//# sourceMappingURL=CreateIndexTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateIndexTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreateIndexTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,IAAI,SAAkB;IACtB,WAAW,SACsE;IAE3E,GAAG,CAAC,MAAM,EAAE,iBAAiB;;;;;;;;;;;;;;;;CAkDpC"}
|
|
@@ -1,78 +1,48 @@
|
|
|
1
|
-
import { getSqlRequest } from "../db.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
this.
|
|
6
|
-
this.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
let indexType = isClustered ? "CLUSTERED" : "NONCLUSTERED";
|
|
49
|
-
if (isUnique) {
|
|
50
|
-
indexType = `UNIQUE ${indexType}`;
|
|
51
|
-
}
|
|
52
|
-
const columnNames = columns.join(", ");
|
|
53
|
-
const tableRef = schemaName ? `${schemaName}.${tableName}` : tableName;
|
|
54
|
-
const query = `CREATE ${indexType} INDEX ${indexName} ON ${tableRef} (${columnNames})`;
|
|
55
|
-
await request.query(query);
|
|
56
|
-
return {
|
|
57
|
-
success: true,
|
|
58
|
-
message: `Index [${indexName}] created successfully on table [${tableRef}]`,
|
|
59
|
-
details: {
|
|
60
|
-
schemaName: schemaName || undefined,
|
|
61
|
-
tableName,
|
|
62
|
-
indexName,
|
|
63
|
-
columnNames,
|
|
64
|
-
isUnique,
|
|
65
|
-
isClustered,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.error("Error creating index:", error);
|
|
71
|
-
return {
|
|
72
|
-
success: false,
|
|
73
|
-
message: `Failed to create index: ${error}`,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
1
|
+
import { getSqlRequest } from "../db.js";
|
|
2
|
+
import { buildQualifiedName, quoteIdentifier } from "../sql.js";
|
|
3
|
+
export class CreateIndexTool {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = "create_index";
|
|
6
|
+
this.description = "Creates an index on a specified column or columns in an MSSQL Database table";
|
|
7
|
+
}
|
|
8
|
+
async run(params) {
|
|
9
|
+
try {
|
|
10
|
+
const { schemaName, tableName, indexName, columns, databaseName, isUnique = false, isClustered = false, } = params;
|
|
11
|
+
const { request, error } = await getSqlRequest(databaseName);
|
|
12
|
+
if (error) {
|
|
13
|
+
return { success: false, message: error };
|
|
14
|
+
}
|
|
15
|
+
let indexType = isClustered ? "CLUSTERED" : "NONCLUSTERED";
|
|
16
|
+
if (isUnique) {
|
|
17
|
+
indexType = `UNIQUE ${indexType}`;
|
|
18
|
+
}
|
|
19
|
+
if (!Array.isArray(columns) || columns.length === 0) {
|
|
20
|
+
throw new Error("At least one column is required to create an index.");
|
|
21
|
+
}
|
|
22
|
+
const columnNames = columns.map((columnName) => quoteIdentifier(columnName)).join(", ");
|
|
23
|
+
const tableRef = buildQualifiedName(tableName, schemaName);
|
|
24
|
+
const query = `CREATE ${indexType} INDEX ${quoteIdentifier(indexName)} ON ${tableRef} (${columnNames})`;
|
|
25
|
+
await request.query(query);
|
|
26
|
+
return {
|
|
27
|
+
success: true,
|
|
28
|
+
message: `Index [${indexName}] created successfully on table [${tableRef}]`,
|
|
29
|
+
details: {
|
|
30
|
+
schemaName: schemaName || undefined,
|
|
31
|
+
tableName,
|
|
32
|
+
indexName,
|
|
33
|
+
columnNames,
|
|
34
|
+
isUnique,
|
|
35
|
+
isClustered,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error("Error creating index:", error);
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
message: `Failed to create index: ${error}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
78
48
|
//# sourceMappingURL=CreateIndexTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateIndexTool.js","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreateIndexTool.js","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAYhE,MAAM,OAAO,eAAe;IAA5B;QACE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,8EAA8E,CAAC;IAoDnF,CAAC;IAlDC,KAAK,CAAC,GAAG,CAAC,MAAyB;QACjC,IAAI,CAAC;YACH,MAAM,EACJ,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,YAAY,EACZ,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAC;YAEX,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;YAC3D,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,GAAG,UAAU,SAAS,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,UAAU,SAAS,UAAU,eAAe,CAAC,SAAS,CAAC,OAAO,QAAQ,KAAK,WAAW,GAAG,CAAC;YACxG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,SAAS,oCAAoC,QAAQ,GAAG;gBAC3E,OAAO,EAAE;oBACP,UAAU,EAAE,UAAU,IAAI,SAAS;oBACnC,SAAS;oBACT,SAAS;oBACT,WAAW;oBACX,QAAQ;oBACR,WAAW;iBACZ;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2BAA2B,KAAK,EAAE;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { type SqlTypeDeclaration } from "../writeSafety.js";
|
|
2
|
+
interface CreateTableParams {
|
|
3
|
+
schemaName?: string;
|
|
4
|
+
tableName: string;
|
|
5
|
+
columns: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
} & SqlTypeDeclaration>;
|
|
8
|
+
databaseName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class CreateTableTool {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
run(params: CreateTableParams): Promise<{
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
12
19
|
//# sourceMappingURL=CreateTableTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateTableTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreateTableTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,IAAI,SAAkB;IACtB,WAAW,SAC+D;IAEpE,GAAG,CAAC,MAAM,EAAE,iBAAiB;;;;CA6BpC"}
|
|
@@ -1,62 +1,38 @@
|
|
|
1
|
-
import { getSqlRequest } from "../db.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
this.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return { success: false, message: error };
|
|
39
|
-
}
|
|
40
|
-
if (!Array.isArray(columns) || columns.length === 0) {
|
|
41
|
-
throw new Error("'columns' must be a non-empty array");
|
|
42
|
-
}
|
|
43
|
-
const columnDefs = columns
|
|
44
|
-
.map((col) => `[${col.name}] ${col.type}`)
|
|
45
|
-
.join(", ");
|
|
46
|
-
const query = `CREATE TABLE [${tableName}] (${columnDefs})`;
|
|
47
|
-
await request.query(query);
|
|
48
|
-
return {
|
|
49
|
-
success: true,
|
|
50
|
-
message: `Table '${tableName}' created successfully.`,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
console.error("Error creating table:", error);
|
|
55
|
-
return {
|
|
56
|
-
success: false,
|
|
57
|
-
message: `Failed to create table: ${error}`,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
1
|
+
import { getSqlRequest } from "../db.js";
|
|
2
|
+
import { buildQualifiedName } from "../sql.js";
|
|
3
|
+
import { buildCreateColumnDefinition, } from "../writeSafety.js";
|
|
4
|
+
export class CreateTableTool {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = "create_table";
|
|
7
|
+
this.description = "Creates a new table in the MSSQL Database with the specified columns.";
|
|
8
|
+
}
|
|
9
|
+
async run(params) {
|
|
10
|
+
try {
|
|
11
|
+
const { schemaName, tableName, columns, databaseName } = params;
|
|
12
|
+
const { request, error } = await getSqlRequest(databaseName);
|
|
13
|
+
if (error) {
|
|
14
|
+
return { success: false, message: error };
|
|
15
|
+
}
|
|
16
|
+
if (!Array.isArray(columns) || columns.length === 0) {
|
|
17
|
+
throw new Error("'columns' must be a non-empty array");
|
|
18
|
+
}
|
|
19
|
+
const columnDefs = columns
|
|
20
|
+
.map((col) => buildCreateColumnDefinition(col.name, col))
|
|
21
|
+
.join(", ");
|
|
22
|
+
const query = `CREATE TABLE ${buildQualifiedName(tableName, schemaName)} (${columnDefs})`;
|
|
23
|
+
await request.query(query);
|
|
24
|
+
return {
|
|
25
|
+
success: true,
|
|
26
|
+
message: `Table '${tableName}' created successfully.`,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error("Error creating table:", error);
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
message: `Failed to create table: ${error}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
62
38
|
//# sourceMappingURL=CreateTableTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateTableTool.js","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CreateTableTool.js","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,2BAA2B,GAE5B,MAAM,mBAAmB,CAAC;AAS3B,MAAM,OAAO,eAAe;IAA5B;QACE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,uEAAuE,CAAC;IA+B5E,CAAC;IA7BC,KAAK,CAAC,GAAG,CAAC,MAAyB;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAEhE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,UAAU,GAAG,OAAO;iBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBACxD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,gBAAgB,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,UAAU,GAAG,CAAC;YAC1F,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,SAAS,yBAAyB;aACtD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2BAA2B,KAAK,EAAE;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type SqlFilter } from "../writeSafety.js";
|
|
2
|
+
interface DeleteDataParams {
|
|
3
|
+
tableName: string;
|
|
4
|
+
schemaName?: string;
|
|
5
|
+
filters: SqlFilter[];
|
|
6
|
+
databaseName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class DeleteDataTool {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
run(params: DeleteDataParams): Promise<{
|
|
12
|
+
success: boolean;
|
|
13
|
+
message: string;
|
|
14
|
+
rowsAffected?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
success: boolean;
|
|
17
|
+
message: string;
|
|
18
|
+
rowsAffected: number;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=DeleteDataTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/DeleteDataTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAElF,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,IAAI,SAAiB;IACrB,WAAW,SAC6D;IAElE,GAAG,CAAC,MAAM,EAAE,gBAAgB;;;;;;;;;CAqCnC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getMaxWriteRows } from "../config.js";
|
|
2
|
+
import { getSqlRequest } from "../db.js";
|
|
3
|
+
import { buildQualifiedName } from "../sql.js";
|
|
4
|
+
import { buildParameterizedWhereClause } from "../writeSafety.js";
|
|
5
|
+
export class DeleteDataTool {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = "delete_data";
|
|
8
|
+
this.description = "Deletes rows from an MSSQL table using required structured filters.";
|
|
9
|
+
}
|
|
10
|
+
async run(params) {
|
|
11
|
+
let query;
|
|
12
|
+
try {
|
|
13
|
+
const { tableName, schemaName, filters, databaseName } = params;
|
|
14
|
+
const { request, error } = await getSqlRequest(databaseName);
|
|
15
|
+
if (error) {
|
|
16
|
+
return { success: false, message: error };
|
|
17
|
+
}
|
|
18
|
+
const whereClause = buildParameterizedWhereClause(filters, (name, value) => request.input(name, value), "delete_filter");
|
|
19
|
+
query = `DELETE FROM ${buildQualifiedName(tableName, schemaName)} WHERE ${whereClause}`;
|
|
20
|
+
const maxRows = getMaxWriteRows();
|
|
21
|
+
request.input("mcp_rowcap", maxRows);
|
|
22
|
+
const result = await request.query(`SET ROWCOUNT @mcp_rowcap;\n${query}\nSET ROWCOUNT 0;`);
|
|
23
|
+
return {
|
|
24
|
+
success: true,
|
|
25
|
+
message: `Delete completed successfully. ${result.rowsAffected[0]} row(s) affected`,
|
|
26
|
+
rowsAffected: result.rowsAffected[0],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error("Error deleting data:", error);
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
message: `Failed to delete data${query ? ` with '${query}'` : ""}: ${error}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=DeleteDataTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteDataTool.js","sourceRoot":"","sources":["../../src/tools/DeleteDataTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAkB,MAAM,mBAAmB,CAAC;AASlF,MAAM,OAAO,cAAc;IAA3B;QACE,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GACT,qEAAqE,CAAC;IAuC1E,CAAC;IArCC,KAAK,CAAC,GAAG,CAAC,MAAwB;QAChC,IAAI,KAAyB,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAEhE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5C,CAAC;YAED,MAAM,WAAW,GAAG,6BAA6B,CAC/C,OAAO,EACP,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAC3C,eAAe,CAChB,CAAC;YAEF,KAAK,GAAG,eAAe,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,WAAW,EAAE,CAAC;YACxF,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAChC,8BAA8B,KAAK,mBAAmB,CACvD,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,kCAAkC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB;gBACnF,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;aACrC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wBAAwB,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE;aAC7E,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface DescribeObjectParams {
|
|
2
|
+
objectName: string;
|
|
3
|
+
objectTypes?: string[];
|
|
4
|
+
schemaName?: string;
|
|
5
|
+
databaseName?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class DescribeObjectTool {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
run(params: DescribeObjectParams): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
message: string;
|
|
13
|
+
object?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
success: boolean;
|
|
16
|
+
object: import("../schema.js").DatabaseObjectDescription;
|
|
17
|
+
message?: undefined;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=DescribeObjectTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescribeObjectTool.d.ts","sourceRoot":"","sources":["../../src/tools/DescribeObjectTool.ts"],"names":[],"mappings":"AAEA,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B,IAAI,SAAqB;IACzB,WAAW,SACoG;IAEzG,GAAG,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;;CA6BvC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describeDatabaseObject } from "../schema.js";
|
|
2
|
+
export class DescribeObjectTool {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.name = "describe_object";
|
|
5
|
+
this.description = "Describes a table, view, procedure, function, or trigger, including columns and definition when available.";
|
|
6
|
+
}
|
|
7
|
+
async run(params) {
|
|
8
|
+
try {
|
|
9
|
+
const { objectName, objectTypes, schemaName, databaseName } = params;
|
|
10
|
+
const object = await describeDatabaseObject(objectName, databaseName, schemaName, objectTypes);
|
|
11
|
+
if (!object) {
|
|
12
|
+
return {
|
|
13
|
+
success: false,
|
|
14
|
+
message: `No object named '${objectName}' was found.`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
success: true,
|
|
19
|
+
object,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error("Error describing object:", error);
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
message: `Failed to describe object: ${error}`,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=DescribeObjectTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescribeObjectTool.js","sourceRoot":"","sources":["../../src/tools/DescribeObjectTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAStD,MAAM,OAAO,kBAAkB;IAA/B;QACE,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GACT,4GAA4G,CAAC;IA+BjH,CAAC;IA7BC,KAAK,CAAC,GAAG,CAAC,MAA4B;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,UAAU,EACV,YAAY,EACZ,UAAU,EACV,WAAW,CACZ,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,oBAAoB,UAAU,cAAc;iBACtD,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,8BAA8B,KAAK,EAAE;aAC/C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface DescribeRelationshipsParams {
|
|
2
|
+
tableName: string;
|
|
3
|
+
schemaName?: string;
|
|
4
|
+
databaseName?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class DescribeRelationshipsTool {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
run(params: DescribeRelationshipsParams): Promise<{
|
|
10
|
+
success: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
data: any[];
|
|
13
|
+
} | {
|
|
14
|
+
success: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
data?: undefined;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=DescribeRelationshipsTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescribeRelationshipsTool.d.ts","sourceRoot":"","sources":["../../src/tools/DescribeRelationshipsTool.ts"],"names":[],"mappings":"AAEA,UAAU,2BAA2B;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,yBAAyB;IACpC,IAAI,SAA4B;IAChC,WAAW,SACgE;IAErE,GAAG,CAAC,MAAM,EAAE,2BAA2B;;;;;;;;;CAmB9C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describeRelationships } from "../schema.js";
|
|
2
|
+
export class DescribeRelationshipsTool {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.name = "describe_relationships";
|
|
5
|
+
this.description = "Describes incoming and outgoing foreign key relationships for a table.";
|
|
6
|
+
}
|
|
7
|
+
async run(params) {
|
|
8
|
+
try {
|
|
9
|
+
const data = await describeRelationships(params.tableName, params.databaseName, params.schemaName);
|
|
10
|
+
return {
|
|
11
|
+
success: true,
|
|
12
|
+
message: `Found ${data.length} relationship row(s) for ${params.tableName}.`,
|
|
13
|
+
data,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
message: `Failed to describe relationships: ${error}`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=DescribeRelationshipsTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescribeRelationshipsTool.js","sourceRoot":"","sources":["../../src/tools/DescribeRelationshipsTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAQrD,MAAM,OAAO,yBAAyB;IAAtC;QACE,SAAI,GAAG,wBAAwB,CAAC;QAChC,gBAAW,GACT,wEAAwE,CAAC;IAqB7E,CAAC;IAnBC,KAAK,CAAC,GAAG,CAAC,MAAmC;QAC3C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,qBAAqB,CACtC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,CAClB,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS,IAAI,CAAC,MAAM,4BAA4B,MAAM,CAAC,SAAS,GAAG;gBAC5E,IAAI;aACL,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qCAAqC,KAAK,EAAE;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|