You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
const mysql = require("mysql2/promise");const UrlPattern = require("url-pattern");
class MySQLConnector { #connected = false; database_id = ""; constructor( config = { connectionString: null, } ) { this.connectionString = config.connectionString; this._client = null; this.database_id = this.#parseDatabase(); }
#parseDatabase() { const connectionPattern = new UrlPattern("mysql\\://*@*/:database*"); const match = connectionPattern.match(this.connectionString); return match?.database; }
async connect() { this._client = await mysql.createConnection({ uri: this.connectionString }); this.#connected = true; return this._client; }
/** * * @param {string} queryString the SQL query to be run * @returns {import(".").QueryResult} */ async runQuery(queryString = "") { const result = { rows: [], count: 0, error: null }; try { if (!this.#connected) await this.connect(); const [query] = await this._client.query(queryString); result.rows = query; result.count = query?.length; } catch (err) { console.log(this.constructor.name, err); result.error = err.message; } finally { await this._client.end(); this.#connected = false; } return result; }
getTablesSql() { return `SELECT table_name FROM information_schema.tables WHERE table_schema = '${this.database_id}'`; } getTableSchemaSql(table_name) { return `SHOW COLUMNS FROM ${this.database_id}.${table_name};`; }}
module.exports.MySQLConnector = MySQLConnector;
|