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); }