From fbc2fc7f6510df204e5aae45e0bd82a2910f2738 Mon Sep 17 00:00:00 2001 From: Daniel Lockyer Date: Tue, 1 Mar 2022 08:37:06 +0100 Subject: [PATCH] Altered function usage of `@tryghost/database-info` refs https://github.com/TryGhost/Toolbox/issues/174 - this exposes `isMySQL` and `isSQLite` functions which can be used within Ghost to figure out which DB we are using - also cleans up public properties of the class --- ghost/database-info/lib/database-info.js | 64 ++++++++++++------------ 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/ghost/database-info/lib/database-info.js b/ghost/database-info/lib/database-info.js index a8d3119cc6..de5a2995c4 100644 --- a/ghost/database-info/lib/database-info.js +++ b/ghost/database-info/lib/database-info.js @@ -3,11 +3,11 @@ module.exports = class DatabaseInfo { * @param {import('knex')} knex */ constructor(knex) { - this.knex = knex; - this.client = this.knex.client; - this.driver = this.client.config.client; + this._knex = knex; + this._client = this.knex.client; + this._driver = this.client.config.client; - this.databaseDetails = { + this._databaseDetails = { // The underlying driver that `knex` uses // ie. `sqlite3`, `mysql` or `mysql2` driver: this.driver, @@ -24,37 +24,37 @@ module.exports = class DatabaseInfo { } async init() { - switch (this.driver) { + switch (this._driver) { case 'sqlite3': - this.databaseDetails.database = 'SQLite'; - this.databaseDetails.engine = 'sqlite3'; - this.databaseDetails.version = this.client.driver.VERSION; + this._databaseDetails.database = 'SQLite'; + this._databaseDetails.engine = 'sqlite3'; + this._databaseDetails.version = this._client.driver.VERSION; break; case 'mysql': case 'mysql2': try { - const version = await this.knex.raw('SELECT version() as version;'); + const version = await this._knex.raw('SELECT version() as version;'); const mysqlVersion = version[0][0].version; if (mysqlVersion.includes('MariaDB')) { - this.databaseDetails.database = 'MariaDB'; - this.databaseDetails.engine = 'mariadb'; - this.databaseDetails.version = mysqlVersion.split('-')[0]; + this._databaseDetails.database = 'MariaDB'; + this._databaseDetails.engine = 'mariadb'; + this._databaseDetails.version = mysqlVersion.split('-')[0]; } else { - this.databaseDetails.database = 'MySQL'; + this._databaseDetails.database = 'MySQL'; if (mysqlVersion.startsWith('5')) { - this.databaseDetails.engine = 'mysql5'; + this._databaseDetails.engine = 'mysql5'; } else if (mysqlVersion.startsWith('8')) { - this.databaseDetails.engine = 'mysql8'; + this._databaseDetails.engine = 'mysql8'; } else { - this.databaseDetails.engine = 'mysql'; + this._databaseDetails.engine = 'mysql'; } - this.databaseDetails.version = mysqlVersion; + this._databaseDetails.version = mysqlVersion; } } catch (err) { - return this.databaseDetails; + return this._databaseDetails; } break; default: @@ -63,34 +63,36 @@ module.exports = class DatabaseInfo { break; } - return this.databaseDetails; + return this._databaseDetails; } getDriver() { - return this.databaseDetails.driver; + return this._databaseDetails.driver; } getDatabase() { - return this.databaseDetails.database; + return this._databaseDetails.database; } getEngine() { - return this.databaseDetails.engine; + return this._databaseDetails.engine; } getVersion() { - return this.databaseDetails.version; + return this._databaseDetails.version; } - isSqlite() { - return this.databaseDetails.database === 'SQLite'; + /** + * Returns if the driver used is for SQLite + */ + isSQLite() { + return ['sqlite3'].includes(this._driver); } - isMysql() { - return this.databaseDetails.database === 'MySQL'; - } - - isMariadb() { - return this.databaseDetails.database === 'MariaDB'; + /** + * Returns if the driver used is for MySQL + */ + isMySQL() { + return ['mysql', 'mysql2'].includes(this._driver); } };