From c4755f5346c484db9bd1bb40df944d6d11d40159 Mon Sep 17 00:00:00 2001 From: Boris D Date: Mon, 13 Oct 2025 08:47:54 +0300 Subject: [PATCH] feat: implement connection pooling in DatabasePlugin for improved database connection management --- src/vm/plugins/database.plugin.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/vm/plugins/database.plugin.ts b/src/vm/plugins/database.plugin.ts index 63aaeea..b354ce7 100644 --- a/src/vm/plugins/database.plugin.ts +++ b/src/vm/plugins/database.plugin.ts @@ -2,6 +2,8 @@ import { Plugin } from "../plugin.class"; import * as mysql from "mysql2/promise"; export class DatabasePlugin extends Plugin { + private static connectionPool: Map = new Map(); + constructor(name: string, private dbConnection: any) { if (!dbConnection || typeof dbConnection.execute !== "function") { throw new Error( @@ -24,6 +26,14 @@ export class DatabasePlugin extends Plugin { connectTimeout: number; } ): Promise { + const connectionKey = `${config.host}:${config.port}:${config.user}:${config.database}`; + + if (DatabasePlugin.connectionPool.has(connectionKey)) { + const existingConnection = + DatabasePlugin.connectionPool.get(connectionKey); + return new DatabasePlugin(name, existingConnection); + } + const dbConnection = await mysql.createConnection({ host: config.host, user: config.user, @@ -37,6 +47,7 @@ export class DatabasePlugin extends Plugin { // await dbConnection.query("SET SESSION MAX_EXECUTION_TIME=2000;"); + DatabasePlugin.connectionPool.set(connectionKey, dbConnection); return new DatabasePlugin(name, dbConnection); }