salix/print/core/mixins/db-helper.js

96 lines
3.1 KiB
JavaScript

const Vue = require('vue');
const path = require('path');
const db = require('../database');
const dbHelper = {
methods: {
/**
* Retuns a pool connection from specific cluster node
* @param {String} name - The cluster name
*
* @return {Object} - Pool connection
*/
getConnection: name => db.getConnection(name),
/**
* Makes a query from a raw sql
* @param {String} query - The raw SQL query
* @param {Object} params - Parameterized values
* @param {Object} connection - Optional pool connection
*
* @return {Object} - Result promise
*/
rawSql: (query, params, connection) =>
db.rawSql(query, params, connection),
/**
* Makes a query from a SQL file
* @param {String} queryName - The SQL file name
* @param {Object} params - Parameterized values
* @param {Object} connection - Optional pool connection
*
* @return {Object} - Result promise
*/
rawSqlFromDef(queryName, params, connection) {
const absolutePath = path.join(__dirname, '../', this.path, 'sql', queryName);
return db.rawSqlFromDef(absolutePath, params, connection);
},
/**
* Returns the first row from a given raw sql
* @param {String} query - The raw SQL query
* @param {Object} params - Parameterized values
*
* @return {Object} - Result promise
*/
findOne: (query, params) => db.findOne(query, params),
/**
* Returns the first row from a given SQL file
* @param {String} queryName - The SQL file name
* @param {Object} params - Parameterized values
*
* @return {Object} - Result promise
*/
findOneFromDef(queryName, params) {
return this.rawSqlFromDef(queryName, params)
.then(([row]) => row);
},
/**
* Returns the first property from a given raw sql
* @param {String} query - The raw SQL query
* @param {Object} params - Parameterized values
*
* @return {Object} - Result promise
*/
findValue: (query, params) => db.findValue(query, params),
/**
* Returns the first property from a given SQL file
* @param {String} queryName - The SQL file name
* @param {Object} params - Parameterized values
*
* @return {Object} - Result promise
*/
findValueFromDef(queryName, params) {
return this.findOneFromDef(queryName, params).then(row => {
if (row) return Object.values(row)[0];
});
},
/**
* Returns the content of an SQL file
* @param {String} queryName - The SQL file name
*
* @return {Object} - SQL
*/
getSqlFromDef(queryName) {
const absolutePath = path.join(__dirname, '../', this.path, 'sql', queryName);
return db.getSqlFromDef(absolutePath);
},
}
};
Vue.mixin(dbHelper);