feat: 打通出库作业链路
This commit is contained in:
81
tools/mcp/sqlserver-mcp-server/dist/db.js
vendored
Normal file
81
tools/mcp/sqlserver-mcp-server/dist/db.js
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
import sql from "mssql";
|
||||
import { quoteIdentifier, resolveDatabaseName } from "./sql.js";
|
||||
export class SqlServerClient {
|
||||
config;
|
||||
pools = new Map();
|
||||
constructor(config) {
|
||||
this.config = config;
|
||||
}
|
||||
get allowedDatabases() {
|
||||
return this.config.allowedDatabases;
|
||||
}
|
||||
get defaultDatabase() {
|
||||
return this.config.defaultDatabase;
|
||||
}
|
||||
get readOnly() {
|
||||
return this.config.readOnly;
|
||||
}
|
||||
get enableDdl() {
|
||||
return this.config.enableDdl;
|
||||
}
|
||||
get maxRows() {
|
||||
return this.config.maxRows;
|
||||
}
|
||||
get maxWriteRows() {
|
||||
return this.config.maxWriteRows;
|
||||
}
|
||||
async query(databaseName, statement, params = []) {
|
||||
const pool = await this.getPool(databaseName);
|
||||
const request = pool.request();
|
||||
bindParams(request, params);
|
||||
return request.query(statement);
|
||||
}
|
||||
async batch(databaseName, statement) {
|
||||
const pool = await this.getPool(databaseName);
|
||||
return pool.request().batch(statement);
|
||||
}
|
||||
async close() {
|
||||
const pools = await Promise.all([...this.pools.values()]);
|
||||
await Promise.all(pools.map((pool) => pool.close()));
|
||||
this.pools.clear();
|
||||
}
|
||||
async getPool(requestedDatabase) {
|
||||
const database = resolveDatabaseName(requestedDatabase, this.config.defaultDatabase, this.config.allowedDatabases);
|
||||
const key = database.toLowerCase();
|
||||
const existing = this.pools.get(key);
|
||||
if (existing) {
|
||||
return existing;
|
||||
}
|
||||
const poolPromise = new sql.ConnectionPool(buildSqlConfig(this.config, database)).connect();
|
||||
this.pools.set(key, poolPromise);
|
||||
return poolPromise;
|
||||
}
|
||||
}
|
||||
export function useDatabaseStatement(databaseName) {
|
||||
return `USE ${quoteIdentifier(databaseName)};`;
|
||||
}
|
||||
function buildSqlConfig(config, database) {
|
||||
return {
|
||||
server: config.serverName,
|
||||
database,
|
||||
user: config.user,
|
||||
password: config.password,
|
||||
connectionTimeout: config.connectionTimeoutMs,
|
||||
requestTimeout: config.requestTimeoutMs,
|
||||
options: {
|
||||
encrypt: config.encrypt,
|
||||
trustServerCertificate: config.trustServerCertificate
|
||||
},
|
||||
pool: {
|
||||
max: 5,
|
||||
min: 0,
|
||||
idleTimeoutMillis: 30000
|
||||
}
|
||||
};
|
||||
}
|
||||
function bindParams(request, params) {
|
||||
for (const param of params) {
|
||||
request.input(param.name, param.value);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=db.js.map
|
||||
Reference in New Issue
Block a user