@mcp-consultant-tools/azure-sql 28.0.0-beta.13 → 28.0.0-beta.15
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/build/cli/commands/crud-commands.d.ts +7 -0
- package/build/cli/commands/crud-commands.d.ts.map +1 -0
- package/build/cli/commands/crud-commands.js +63 -0
- package/build/cli/commands/crud-commands.js.map +1 -0
- package/build/cli/commands/index.d.ts +3 -0
- package/build/cli/commands/index.d.ts.map +1 -1
- package/build/cli/commands/index.js +9 -0
- package/build/cli/commands/index.js.map +1 -1
- package/build/cli/commands/sproc-commands.d.ts +7 -0
- package/build/cli/commands/sproc-commands.d.ts.map +1 -0
- package/build/cli/commands/sproc-commands.js +87 -0
- package/build/cli/commands/sproc-commands.js.map +1 -0
- package/build/cli/commands/view-commands.d.ts +7 -0
- package/build/cli/commands/view-commands.d.ts.map +1 -0
- package/build/cli/commands/view-commands.js +66 -0
- package/build/cli/commands/view-commands.js.map +1 -0
- package/build/context-factory.d.ts.map +1 -1
- package/build/context-factory.js +43 -0
- package/build/context-factory.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +44 -0
- package/build/index.js.map +1 -1
- package/build/services/index.d.ts +2 -0
- package/build/services/index.d.ts.map +1 -1
- package/build/services/index.js +1 -0
- package/build/services/index.js.map +1 -1
- package/build/services/write-service.d.ts +81 -0
- package/build/services/write-service.d.ts.map +1 -0
- package/build/services/write-service.js +633 -0
- package/build/services/write-service.js.map +1 -0
- package/build/tool-examples.d.ts +32 -0
- package/build/tool-examples.d.ts.map +1 -1
- package/build/tool-examples.js +33 -0
- package/build/tool-examples.js.map +1 -1
- package/build/tools/crud-tools.d.ts +3 -0
- package/build/tools/crud-tools.d.ts.map +1 -0
- package/build/tools/crud-tools.js +115 -0
- package/build/tools/crud-tools.js.map +1 -0
- package/build/tools/index.d.ts +3 -0
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +9 -0
- package/build/tools/index.js.map +1 -1
- package/build/tools/sproc-tools.d.ts +3 -0
- package/build/tools/sproc-tools.d.ts.map +1 -0
- package/build/tools/sproc-tools.js +172 -0
- package/build/tools/sproc-tools.js.map +1 -0
- package/build/tools/view-tools.d.ts +3 -0
- package/build/tools/view-tools.d.ts.map +1 -0
- package/build/tools/view-tools.js +121 -0
- package/build/tools/view-tools.js.map +1 -0
- package/build/types.d.ts +10 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRUD CLI Commands - 3 commands mapping to INSERT/UPDATE/DELETE MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import type { Command } from 'commander';
|
|
5
|
+
import type { ServiceContext } from '../../types.js';
|
|
6
|
+
export declare function registerCrudCommands(program: Command, ctx: ServiceContext): void;
|
|
7
|
+
//# sourceMappingURL=crud-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/crud-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CA2DhF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRUD CLI Commands - 3 commands mapping to INSERT/UPDATE/DELETE MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import { getGlobalFlags, handleCliError } from '@mcp-consultant-tools/core';
|
|
5
|
+
import { outputResult } from '../output.js';
|
|
6
|
+
export function registerCrudCommands(program, ctx) {
|
|
7
|
+
const crud = program.command('crud').description('Data modification operations (INSERT, UPDATE, DELETE)');
|
|
8
|
+
crud
|
|
9
|
+
.command('insert')
|
|
10
|
+
.description('Execute an INSERT query')
|
|
11
|
+
.argument('<query>', 'INSERT query to execute (e.g., "INSERT INTO Users (Name, Email) VALUES (\'John\', \'john@example.com\')")')
|
|
12
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
13
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
14
|
+
.action(async (query, opts) => {
|
|
15
|
+
try {
|
|
16
|
+
ctx.checkInsertEnabled();
|
|
17
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
18
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
19
|
+
const result = await ctx.write.executeInsert(resolvedServerId, resolvedDatabase, query);
|
|
20
|
+
outputResult({ fileName: 'sql-crud-insert', data: result, summary: result.message }, getGlobalFlags(program));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
handleCliError(error, 'insert');
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
crud
|
|
27
|
+
.command('update')
|
|
28
|
+
.description('Execute an UPDATE query')
|
|
29
|
+
.argument('<query>', 'UPDATE query to execute (e.g., "UPDATE Users SET Status = 1 WHERE Email = \'john@example.com\'")')
|
|
30
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
31
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
32
|
+
.action(async (query, opts) => {
|
|
33
|
+
try {
|
|
34
|
+
ctx.checkUpdateEnabled();
|
|
35
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
36
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
37
|
+
const result = await ctx.write.executeUpdate(resolvedServerId, resolvedDatabase, query);
|
|
38
|
+
outputResult({ fileName: 'sql-crud-update', data: result, summary: result.message }, getGlobalFlags(program));
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
handleCliError(error, 'update');
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
crud
|
|
45
|
+
.command('delete')
|
|
46
|
+
.description('Execute a DELETE query (requires WHERE clause)')
|
|
47
|
+
.argument('<query>', 'DELETE query to execute (e.g., "DELETE FROM Users WHERE Status = 0")')
|
|
48
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
49
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
50
|
+
.action(async (query, opts) => {
|
|
51
|
+
try {
|
|
52
|
+
ctx.checkDeleteEnabled();
|
|
53
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
54
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
55
|
+
const result = await ctx.write.executeDelete(resolvedServerId, resolvedDatabase, query);
|
|
56
|
+
outputResult({ fileName: 'sql-crud-delete', data: result, summary: result.message }, getGlobalFlags(program));
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
handleCliError(error, 'delete');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=crud-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/crud-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,7 @@ import type { ServiceContext } from '../../types.js';
|
|
|
6
6
|
export declare function registerAllCommands(program: Command, ctx: ServiceContext): void;
|
|
7
7
|
export { registerQueryCommands } from './query-commands.js';
|
|
8
8
|
export { registerConnectionCommands } from './connection-commands.js';
|
|
9
|
+
export { registerViewCommands } from './view-commands.js';
|
|
10
|
+
export { registerSprocCommands } from './sproc-commands.js';
|
|
11
|
+
export { registerCrudCommands } from './crud-commands.js';
|
|
9
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOrD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAM/E;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -3,10 +3,19 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { registerQueryCommands } from './query-commands.js';
|
|
5
5
|
import { registerConnectionCommands } from './connection-commands.js';
|
|
6
|
+
import { registerViewCommands } from './view-commands.js';
|
|
7
|
+
import { registerSprocCommands } from './sproc-commands.js';
|
|
8
|
+
import { registerCrudCommands } from './crud-commands.js';
|
|
6
9
|
export function registerAllCommands(program, ctx) {
|
|
7
10
|
registerQueryCommands(program, ctx);
|
|
8
11
|
registerConnectionCommands(program, ctx);
|
|
12
|
+
registerViewCommands(program, ctx);
|
|
13
|
+
registerSprocCommands(program, ctx);
|
|
14
|
+
registerCrudCommands(program, ctx);
|
|
9
15
|
}
|
|
10
16
|
export { registerQueryCommands } from './query-commands.js';
|
|
11
17
|
export { registerConnectionCommands } from './connection-commands.js';
|
|
18
|
+
export { registerViewCommands } from './view-commands.js';
|
|
19
|
+
export { registerSprocCommands } from './sproc-commands.js';
|
|
20
|
+
export { registerCrudCommands } from './crud-commands.js';
|
|
12
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAmB;IACvE,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,0BAA0B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sproc CLI Commands - 3 commands mapping to stored procedure MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import type { Command } from 'commander';
|
|
5
|
+
import type { ServiceContext } from '../../types.js';
|
|
6
|
+
export declare function registerSprocCommands(program: Command, ctx: ServiceContext): void;
|
|
7
|
+
//# sourceMappingURL=sproc-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sproc-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sproc-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAoFjF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sproc CLI Commands - 3 commands mapping to stored procedure MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import { getGlobalFlags, handleCliError } from '@mcp-consultant-tools/core';
|
|
5
|
+
import { outputResult } from '../output.js';
|
|
6
|
+
export function registerSprocCommands(program, ctx) {
|
|
7
|
+
const sproc = program.command('sproc').description('Stored procedure management and execution');
|
|
8
|
+
sproc
|
|
9
|
+
.command('manage')
|
|
10
|
+
.description('Create or alter a stored procedure')
|
|
11
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
12
|
+
.argument('<sprocName>', "Procedure name (e.g., 'usp_GetActiveUsers')")
|
|
13
|
+
.argument('<definition>', 'Procedure definition (parameters + body, e.g., "@Status INT AS SELECT * FROM Users WHERE Status = @Status")')
|
|
14
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
15
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
16
|
+
.action(async (schemaName, sprocName, definition, opts) => {
|
|
17
|
+
try {
|
|
18
|
+
ctx.checkSprocManageEnabled();
|
|
19
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
20
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
21
|
+
const result = await ctx.write.manageSproc(resolvedServerId, resolvedDatabase, schemaName, sprocName, definition);
|
|
22
|
+
outputResult({ fileName: `sql-sproc-manage-${schemaName}-${sprocName}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
handleCliError(error, 'manage sproc');
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
sproc
|
|
29
|
+
.command('deploy')
|
|
30
|
+
.description('Deploy a stored procedure from a local .sql file')
|
|
31
|
+
.argument('<filePath>', 'Path to a .sql file containing a CREATE OR ALTER PROCEDURE statement')
|
|
32
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
33
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
34
|
+
.action(async (filePath, opts) => {
|
|
35
|
+
try {
|
|
36
|
+
ctx.checkSprocManageEnabled();
|
|
37
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
38
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
39
|
+
const result = await ctx.write.deploySprocFromFile(resolvedServerId, resolvedDatabase, filePath);
|
|
40
|
+
outputResult({ fileName: `sql-sproc-deploy-${filePath.replace(/[^a-zA-Z0-9]/g, '_')}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
handleCliError(error, 'deploy sproc from file');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
sproc
|
|
47
|
+
.command('drop')
|
|
48
|
+
.description('Drop a stored procedure if it exists')
|
|
49
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
50
|
+
.argument('<sprocName>', "Procedure name (e.g., 'usp_GetActiveUsers')")
|
|
51
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
52
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
53
|
+
.action(async (schemaName, sprocName, opts) => {
|
|
54
|
+
try {
|
|
55
|
+
ctx.checkSprocDropEnabled();
|
|
56
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
57
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
58
|
+
const result = await ctx.write.dropSproc(resolvedServerId, resolvedDatabase, schemaName, sprocName);
|
|
59
|
+
outputResult({ fileName: `sql-sproc-drop-${schemaName}-${sprocName}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
handleCliError(error, 'drop sproc');
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
sproc
|
|
66
|
+
.command('execute')
|
|
67
|
+
.description('Execute a stored procedure with optional parameters')
|
|
68
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
69
|
+
.argument('<sprocName>', "Procedure name (e.g., 'usp_GetActiveUsers')")
|
|
70
|
+
.option('-p, --parameters <json>', 'Parameters as JSON object (e.g., \'{"Status": 1, "Name": "John"}\')')
|
|
71
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
72
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
73
|
+
.action(async (schemaName, sprocName, opts) => {
|
|
74
|
+
try {
|
|
75
|
+
ctx.checkSprocExecuteEnabled();
|
|
76
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
77
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
78
|
+
const parameters = opts.parameters ? JSON.parse(opts.parameters) : undefined;
|
|
79
|
+
const result = await ctx.write.executeSproc(resolvedServerId, resolvedDatabase, schemaName, sprocName, parameters);
|
|
80
|
+
outputResult({ fileName: `sql-sproc-exec-${schemaName}-${sprocName}`, data: result, summary: `Procedure ${schemaName}.${sprocName} returned ${result.rowCount} row(s), return value: ${result.returnValue}` }, getGlobalFlags(program));
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
handleCliError(error, 'execute sproc');
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=sproc-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sproc-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/sproc-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View CLI Commands - 2 commands mapping to view management MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import type { Command } from 'commander';
|
|
5
|
+
import type { ServiceContext } from '../../types.js';
|
|
6
|
+
export declare function registerViewCommands(program: Command, ctx: ServiceContext): void;
|
|
7
|
+
//# sourceMappingURL=view-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/view-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CA8DhF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View CLI Commands - 2 commands mapping to view management MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import { getGlobalFlags, handleCliError } from '@mcp-consultant-tools/core';
|
|
5
|
+
import { outputResult } from '../output.js';
|
|
6
|
+
export function registerViewCommands(program, ctx) {
|
|
7
|
+
const view = program.command('view').description('View management operations');
|
|
8
|
+
view
|
|
9
|
+
.command('manage')
|
|
10
|
+
.description('Create or alter a SQL view')
|
|
11
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
12
|
+
.argument('<viewName>', "View name (e.g., 'vw_ActiveUsers')")
|
|
13
|
+
.argument('<selectBody>', 'SELECT body for the view (e.g., "SELECT id, name FROM Users WHERE active = 1")')
|
|
14
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
15
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
16
|
+
.action(async (schemaName, viewName, selectBody, opts) => {
|
|
17
|
+
try {
|
|
18
|
+
ctx.checkViewManageEnabled();
|
|
19
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
20
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
21
|
+
const result = await ctx.write.manageView(resolvedServerId, resolvedDatabase, schemaName, viewName, selectBody);
|
|
22
|
+
outputResult({ fileName: `sql-view-manage-${schemaName}-${viewName}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
handleCliError(error, 'manage view');
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
view
|
|
29
|
+
.command('deploy')
|
|
30
|
+
.description('Deploy a SQL view from a local .sql file')
|
|
31
|
+
.argument('<filePath>', 'Path to a .sql file containing a CREATE OR ALTER VIEW statement')
|
|
32
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
33
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
34
|
+
.action(async (filePath, opts) => {
|
|
35
|
+
try {
|
|
36
|
+
ctx.checkViewManageEnabled();
|
|
37
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
38
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
39
|
+
const result = await ctx.write.deployViewFromFile(resolvedServerId, resolvedDatabase, filePath);
|
|
40
|
+
outputResult({ fileName: `sql-view-deploy-${filePath.replace(/[^a-zA-Z0-9]/g, '_')}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
handleCliError(error, 'deploy view from file');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
view
|
|
47
|
+
.command('drop')
|
|
48
|
+
.description('Drop a SQL view if it exists')
|
|
49
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
50
|
+
.argument('<viewName>', "View name (e.g., 'vw_ActiveUsers')")
|
|
51
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
52
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
53
|
+
.action(async (schemaName, viewName, opts) => {
|
|
54
|
+
try {
|
|
55
|
+
ctx.checkViewDropEnabled();
|
|
56
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
57
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
58
|
+
const result = await ctx.write.dropView(resolvedServerId, resolvedDatabase, schemaName, viewName);
|
|
59
|
+
outputResult({ fileName: `sql-view-drop-${schemaName}-${viewName}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
handleCliError(error, 'drop view');
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=view-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/view-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-factory.d.ts","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"context-factory.d.ts","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CA+FrD"}
|
package/build/context-factory.js
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { ConnectionService } from './services/connection-service.js';
|
|
6
6
|
import { QueryService } from './services/query-service.js';
|
|
7
|
+
import { WriteService } from './services/write-service.js';
|
|
7
8
|
/**
|
|
8
9
|
* Build a ServiceContext from environment variables (lazy service initialization).
|
|
9
10
|
*/
|
|
10
11
|
export function createServiceContext() {
|
|
11
12
|
let connection = null;
|
|
12
13
|
let query = null;
|
|
14
|
+
let write = null;
|
|
13
15
|
function getConnection() {
|
|
14
16
|
if (!connection) {
|
|
15
17
|
const missingConfig = [];
|
|
@@ -56,6 +58,47 @@ export function createServiceContext() {
|
|
|
56
58
|
return {
|
|
57
59
|
get connection() { return getConnection(); },
|
|
58
60
|
get query() { return query ??= new QueryService(getConnection()); },
|
|
61
|
+
get write() { return write ??= new WriteService(getConnection()); },
|
|
62
|
+
checkViewManageEnabled() {
|
|
63
|
+
if (process.env.SQL_ENABLE_VIEW_MANAGE !== 'true') {
|
|
64
|
+
throw new Error('View management is disabled. Set SQL_ENABLE_VIEW_MANAGE=true to enable CREATE OR ALTER VIEW.');
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
checkViewDropEnabled() {
|
|
68
|
+
if (process.env.SQL_ENABLE_VIEW_DROP !== 'true') {
|
|
69
|
+
throw new Error('View drop is disabled. Set SQL_ENABLE_VIEW_DROP=true to enable DROP VIEW.');
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
checkSprocManageEnabled() {
|
|
73
|
+
if (process.env.SQL_ENABLE_SPROC_MANAGE !== 'true') {
|
|
74
|
+
throw new Error('Stored procedure management is disabled. Set SQL_ENABLE_SPROC_MANAGE=true to enable CREATE OR ALTER PROCEDURE.');
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
checkSprocDropEnabled() {
|
|
78
|
+
if (process.env.SQL_ENABLE_SPROC_DROP !== 'true') {
|
|
79
|
+
throw new Error('Stored procedure drop is disabled. Set SQL_ENABLE_SPROC_DROP=true to enable DROP PROCEDURE.');
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
checkSprocExecuteEnabled() {
|
|
83
|
+
if (process.env.SQL_ENABLE_SPROC_EXECUTE !== 'true') {
|
|
84
|
+
throw new Error('Stored procedure execution is disabled. Set SQL_ENABLE_SPROC_EXECUTE=true to enable EXEC.');
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
checkInsertEnabled() {
|
|
88
|
+
if (process.env.SQL_ENABLE_INSERT !== 'true') {
|
|
89
|
+
throw new Error('INSERT operations are disabled. Set SQL_ENABLE_INSERT=true to enable.');
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
checkUpdateEnabled() {
|
|
93
|
+
if (process.env.SQL_ENABLE_UPDATE !== 'true') {
|
|
94
|
+
throw new Error('UPDATE operations are disabled. Set SQL_ENABLE_UPDATE=true to enable.');
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
checkDeleteEnabled() {
|
|
98
|
+
if (process.env.SQL_ENABLE_DELETE !== 'true') {
|
|
99
|
+
throw new Error('DELETE operations are disabled. Set SQL_ENABLE_DELETE=true to enable.');
|
|
100
|
+
}
|
|
101
|
+
},
|
|
59
102
|
};
|
|
60
103
|
}
|
|
61
104
|
//# sourceMappingURL=context-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-factory.js","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAI3D;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,UAAU,GAA6B,IAAI,CAAC;IAChD,IAAI,KAAK,GAAwB,IAAI,CAAC;IAEtC,SAAS,aAAa;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,IAAI,SAAS,GAAU,EAAE,CAAC;YAE1B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC1E,SAAS,GAAG,CAAC;wBACX,EAAE,EAAE,SAAS;wBACb,IAAI,EAAE,oBAAoB;wBAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;wBACpC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC;wBACpD,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,CAAC;gCACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;gCACpC,MAAM,EAAE,IAAI;6BACb,CAAC;wBACF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;wBAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;qBAC/C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,MAAM,MAAM,GAAmB;gBAC7B,SAAS;gBACT,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC;gBACtE,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,MAAM,CAAC;aACzE,CAAC;YAEF,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI,UAAU,KAAK,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"context-factory.js","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
export declare function registerAzureSqlTools(server: any): void;
|
|
13
13
|
export { ConnectionService } from './services/connection-service.js';
|
|
14
14
|
export { QueryService } from './services/query-service.js';
|
|
15
|
+
export { WriteService } from './services/write-service.js';
|
|
15
16
|
export type { AzureSqlConfig } from './services/connection-service.js';
|
|
16
17
|
export type { ServiceContext } from './types.js';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAmHH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAIvD;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { realpathSync } from "node:fs";
|
|
|
11
11
|
import { createMcpServer, createEnvLoader } from "@mcp-consultant-tools/core";
|
|
12
12
|
import { ConnectionService } from './services/connection-service.js';
|
|
13
13
|
import { QueryService } from './services/query-service.js';
|
|
14
|
+
import { WriteService } from './services/write-service.js';
|
|
14
15
|
import { registerAllTools } from './tools/index.js';
|
|
15
16
|
import { registerAllPrompts } from './prompts/index.js';
|
|
16
17
|
/**
|
|
@@ -19,6 +20,7 @@ import { registerAllPrompts } from './prompts/index.js';
|
|
|
19
20
|
function createServiceContext() {
|
|
20
21
|
let connection = null;
|
|
21
22
|
let query = null;
|
|
23
|
+
let write = null;
|
|
22
24
|
function getConnection() {
|
|
23
25
|
if (!connection) {
|
|
24
26
|
const missingConfig = [];
|
|
@@ -65,6 +67,47 @@ function createServiceContext() {
|
|
|
65
67
|
return {
|
|
66
68
|
get connection() { return getConnection(); },
|
|
67
69
|
get query() { return query ??= new QueryService(getConnection()); },
|
|
70
|
+
get write() { return write ??= new WriteService(getConnection()); },
|
|
71
|
+
checkViewManageEnabled() {
|
|
72
|
+
if (process.env.SQL_ENABLE_VIEW_MANAGE !== 'true') {
|
|
73
|
+
throw new Error('View management is disabled. Set SQL_ENABLE_VIEW_MANAGE=true to enable CREATE OR ALTER VIEW.');
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
checkViewDropEnabled() {
|
|
77
|
+
if (process.env.SQL_ENABLE_VIEW_DROP !== 'true') {
|
|
78
|
+
throw new Error('View drop is disabled. Set SQL_ENABLE_VIEW_DROP=true to enable DROP VIEW.');
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
checkSprocManageEnabled() {
|
|
82
|
+
if (process.env.SQL_ENABLE_SPROC_MANAGE !== 'true') {
|
|
83
|
+
throw new Error('Stored procedure management is disabled. Set SQL_ENABLE_SPROC_MANAGE=true to enable CREATE OR ALTER PROCEDURE.');
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
checkSprocDropEnabled() {
|
|
87
|
+
if (process.env.SQL_ENABLE_SPROC_DROP !== 'true') {
|
|
88
|
+
throw new Error('Stored procedure drop is disabled. Set SQL_ENABLE_SPROC_DROP=true to enable DROP PROCEDURE.');
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
checkSprocExecuteEnabled() {
|
|
92
|
+
if (process.env.SQL_ENABLE_SPROC_EXECUTE !== 'true') {
|
|
93
|
+
throw new Error('Stored procedure execution is disabled. Set SQL_ENABLE_SPROC_EXECUTE=true to enable EXEC.');
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
checkInsertEnabled() {
|
|
97
|
+
if (process.env.SQL_ENABLE_INSERT !== 'true') {
|
|
98
|
+
throw new Error('INSERT operations are disabled. Set SQL_ENABLE_INSERT=true to enable.');
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
checkUpdateEnabled() {
|
|
102
|
+
if (process.env.SQL_ENABLE_UPDATE !== 'true') {
|
|
103
|
+
throw new Error('UPDATE operations are disabled. Set SQL_ENABLE_UPDATE=true to enable.');
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
checkDeleteEnabled() {
|
|
107
|
+
if (process.env.SQL_ENABLE_DELETE !== 'true') {
|
|
108
|
+
throw new Error('DELETE operations are disabled. Set SQL_ENABLE_DELETE=true to enable.');
|
|
109
|
+
}
|
|
110
|
+
},
|
|
68
111
|
};
|
|
69
112
|
}
|
|
70
113
|
/**
|
|
@@ -79,6 +122,7 @@ export function registerAzureSqlTools(server) {
|
|
|
79
122
|
// Backward-compatible exports
|
|
80
123
|
export { ConnectionService } from './services/connection-service.js';
|
|
81
124
|
export { QueryService } from './services/query-service.js';
|
|
125
|
+
export { WriteService } from './services/write-service.js';
|
|
82
126
|
/**
|
|
83
127
|
* Standalone CLI server (when run directly)
|
|
84
128
|
* Uses realpathSync to resolve symlinks created by npx
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,SAAS,oBAAoB;IAC3B,IAAI,UAAU,GAA6B,IAAI,CAAC;IAChD,IAAI,KAAK,GAAwB,IAAI,CAAC;IAEtC,SAAS,aAAa;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,IAAI,SAAS,GAAU,EAAE,CAAC;YAE1B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC1E,SAAS,GAAG,CAAC;wBACX,EAAE,EAAE,SAAS;wBACb,IAAI,EAAE,oBAAoB;wBAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;wBACpC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC;wBACpD,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,CAAC;gCACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;gCACpC,MAAM,EAAE,IAAI;6BACb,CAAC;wBACF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;wBAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;qBAC/C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,MAAM,MAAM,GAAmB;gBAC7B,SAAS;gBACT,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC;gBACtE,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,MAAM,CAAC;aACzE,CAAC;YAEF,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI,UAAU,KAAK,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { ConnectionService } from './connection-service.js';
|
|
2
2
|
export { QueryService } from './query-service.js';
|
|
3
|
+
export { WriteService } from './write-service.js';
|
|
3
4
|
export type { AzureSqlConfig, AzureSqlServerResource, AzureSqlDatabaseConfig, SqlApiCollectionResponse, ServerInfo, DatabaseInfo, DefaultConfiguration, ConnectionTestResult, } from './connection-service.js';
|
|
4
5
|
export type { TableInfo, ViewInfo, StoredProcedureInfo, TriggerInfo, FunctionInfo, ColumnInfo, IndexInfo, ForeignKeyInfo, TableSchema, ObjectDefinition, } from './query-service.js';
|
|
6
|
+
export type { WriteResult, } from './write-service.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
|
package/build/services/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { ConnectionService } from './connection-service.js';
|
|
2
|
+
export interface WriteResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
message: string;
|
|
5
|
+
objectName?: string;
|
|
6
|
+
rowsAffected?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* WriteService handles all write operations against Azure SQL databases:
|
|
10
|
+
* view management, stored procedure management/execution, and DML (INSERT/UPDATE/DELETE).
|
|
11
|
+
*
|
|
12
|
+
* Depends on ConnectionService for connection pooling.
|
|
13
|
+
*/
|
|
14
|
+
export declare class WriteService {
|
|
15
|
+
private readonly connectionService;
|
|
16
|
+
constructor(connectionService: ConnectionService);
|
|
17
|
+
/**
|
|
18
|
+
* Validate that a string is a safe SQL identifier (schema name, table name, etc.).
|
|
19
|
+
* Prevents SQL injection on object names.
|
|
20
|
+
*/
|
|
21
|
+
private validateIdentifier;
|
|
22
|
+
/**
|
|
23
|
+
* Strip SQL comments and normalize whitespace for validation.
|
|
24
|
+
*/
|
|
25
|
+
private cleanSql;
|
|
26
|
+
/**
|
|
27
|
+
* Validate a DML query starts with the expected keyword and contains no dangerous patterns.
|
|
28
|
+
*/
|
|
29
|
+
private validateDmlQuery;
|
|
30
|
+
/**
|
|
31
|
+
* Create or alter a view.
|
|
32
|
+
*/
|
|
33
|
+
manageView(serverId: string, database: string, schemaName: string, viewName: string, selectBody: string): Promise<WriteResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Deploy a view from a local .sql file.
|
|
36
|
+
* Reads the file and executes its contents as-is against the database.
|
|
37
|
+
* The file must contain a valid CREATE OR ALTER VIEW statement.
|
|
38
|
+
*/
|
|
39
|
+
deployViewFromFile(serverId: string, database: string, filePath: string): Promise<WriteResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Drop a view if it exists.
|
|
42
|
+
*/
|
|
43
|
+
dropView(serverId: string, database: string, schemaName: string, viewName: string): Promise<WriteResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Create or alter a stored procedure.
|
|
46
|
+
*/
|
|
47
|
+
manageSproc(serverId: string, database: string, schemaName: string, sprocName: string, definition: string): Promise<WriteResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Deploy a stored procedure from a local .sql file.
|
|
50
|
+
* Reads the file and executes its contents as-is against the database.
|
|
51
|
+
* The file must contain a valid CREATE OR ALTER PROCEDURE statement.
|
|
52
|
+
*/
|
|
53
|
+
deploySprocFromFile(serverId: string, database: string, filePath: string): Promise<WriteResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Drop a stored procedure if it exists.
|
|
56
|
+
*/
|
|
57
|
+
dropSproc(serverId: string, database: string, schemaName: string, sprocName: string): Promise<WriteResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Execute a stored procedure using mssql request.execute() (not raw SQL).
|
|
60
|
+
* Parameters are passed via request.input() for safety.
|
|
61
|
+
*/
|
|
62
|
+
executeSproc(serverId: string, database: string, schemaName: string, sprocName: string, parameters?: Record<string, any>): Promise<{
|
|
63
|
+
rows: any[];
|
|
64
|
+
rowCount: number;
|
|
65
|
+
returnValue: number;
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* Execute an INSERT query with safety validation.
|
|
69
|
+
*/
|
|
70
|
+
executeInsert(serverId: string, database: string, query: string): Promise<WriteResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Execute an UPDATE query with safety validation.
|
|
73
|
+
*/
|
|
74
|
+
executeUpdate(serverId: string, database: string, query: string): Promise<WriteResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Execute a DELETE query with safety validation.
|
|
77
|
+
* REQUIRES a WHERE clause to prevent accidental full-table deletes.
|
|
78
|
+
*/
|
|
79
|
+
executeDelete(serverId: string, database: string, query: string): Promise<WriteResult>;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=write-service.d.ts.map
|