UNPKG

jh-common-dataaccess

Version:
93 lines (91 loc) 2.31 kB
const pg = require('pg'); const DatabaseHelper = require('./DatabaseHelper'); module.exports = class PostgreHelper extends DatabaseHelper { constructor() { super(arguments[0]); } connect() { return new Promise((resolve, reject) => { const connection = new pg.Client(this.config); connection .connect() .then(() => { resolve(connection); }) .catch(err => { this.print(err); reject('postgre connect error'); }); }); } query(sqlstr) { return new Promise((resolve, reject) => { this.connect().then(client => { client.query(sqlstr, function(error, results) { if (error) { reject(error); } else { results.rows.forEach(row => { Object.keys(row).forEach(key => { if (row[key] instanceof Date) { row[key] = this.formatDate(row[key]); } }); }); resolve(results.rows); } client.end(); }); }); }); } execute(sqlstr) { return new Promise((resolve, reject) => { this.connect().then(client => { client.query(sqlstr, function(error, results) { if (error) { reject(error); } else { resolve(results.rowCount >= 1); } client.end(); }); }); }); } translate(transParams) { return new Promise((resolve, reject) => { this.connect().then(client => { const keylist = []; const valuelist = []; transParams.sql.split(' ').forEach(item => { item.split('=').forEach(cell => { if (/@.+$/.test(cell)) { keylist.push(cell); const p = transParams.l_dp.find(o => o.paramsname === cell.replace('@', '')); if (p.paramsvalue instanceof Date) { p.paramsvalue = this.formatDate(p.paramsvalue); } valuelist.push(p.paramsvalue); } }); }); keylist.forEach((key, index) => { transParams.sql = transParams.sql.replace(key, '$' + (index + 1)); }); client.query(transParams.sql, valuelist, function(error, results) { if (error) { reject(error); } else { resolve(results.rowCount >= 1); } client.end(); }); }); }); } static datapager(pageno, pagesize, sqlstr, sp) { return ` ${sqlstr} order by "${sp.Field}" ${sp.SortDirection || ''} limit ${pagesize} offset ${(pageno - 1) * pagesize} `; } };