jh-common-dataaccess
Version:
common-dataaccess
93 lines (91 loc) • 2.31 kB
JavaScript
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} `;
}
};