UNPKG

hapiest-mysql

Version:

A wrapper around mysql that provides a very descriptive way of running queries.

90 lines (76 loc) 3.33 kB
'use strict'; const MysqlPoolConnectionConfig = require('./mysqlPoolConnectionConfig'); class MysqlPoolConnectionsConfigFactory { /** * @param {Config} nodeConfig * @param {string} [nodeConfigKey='database'] * * @returns {MysqlPoolConnectionConfig} */ static createWriteConnectionConfigFromNodeConfig(nodeConfig, nodeConfigKey) { nodeConfigKey = nodeConfigKey || 'database'; const config = Internals.createConnectionConfig(nodeConfig, `${nodeConfigKey}.write`); return MysqlPoolConnectionsConfigFactory.createConnectionConfig(config); } /** * @param {Config} nodeConfig * @param {string} [nodeConfigKey='database'] * * @returns {MysqlPoolConnectionConfig} */ static createReadConnectionConfigFromNodeConfig(nodeConfig, nodeConfigKey) { nodeConfigKey = nodeConfigKey || 'database'; const readNodeConfigKey = `${nodeConfigKey}.read`; // Check that the read config exists - requires a NULL override so we have to check the value is non-null if it exists if (nodeConfig.has(readNodeConfigKey) && nodeConfig.get(readNodeConfigKey)) { const config = Internals.createConnectionConfig(nodeConfig, readNodeConfigKey); return MysqlPoolConnectionsConfigFactory.createConnectionConfig(config); } else { return null; } } /** * @param {object} config * @param {string} config.host * @param {int} [config.port] * @param {string} config.database * @param {string} config.user * @param {string} config.password * @param {int} config.connectionLimit * @param {bool} [config.multipleStatements] * * @returns {MysqlPoolConnectionConfig} */ static createConnectionConfig(config) { return new MysqlPoolConnectionConfig(config); } } module.exports = MysqlPoolConnectionsConfigFactory; class Internals { /** * @param {Config} nodeConfig * @param {string} nodeConfigKey - e.g., database.write or database.read * @returns {{host: *, user: *, password: *, database: *, connectionLimit: *}} */ static createConnectionConfig(nodeConfig, nodeConfigKey) { const config = { host: Internals.getValue(nodeConfig, nodeConfigKey, 'host'), user: Internals.getValue(nodeConfig, nodeConfigKey, 'user'), password: Internals.getValue(nodeConfig, nodeConfigKey, 'password'), database: Internals.getValue(nodeConfig, nodeConfigKey, 'database'), connectionLimit: Internals.getValue(nodeConfig, nodeConfigKey, 'connectionLimit') }; Internals.mergeIfDefined(nodeConfig, config, nodeConfigKey, 'port'); Internals.mergeIfDefined(nodeConfig, config, nodeConfigKey, 'multipleStatements'); Internals.mergeIfDefined(nodeConfig, config, nodeConfigKey, 'timezone'); return config; } static getValue(nodeConfig, nodeConfigKey, propertyName) { return nodeConfig.get(`${nodeConfigKey}.${propertyName}`); } static mergeIfDefined(nodeConfig, config, nodeConfigKey, propertyName) { if (nodeConfig.has(`${nodeConfigKey}.${propertyName}`)) { config[propertyName] = Internals.getValue(nodeConfig, nodeConfigKey, propertyName); } } }