jh-common-dataaccess
Version:
common-dataaccess
97 lines (95 loc) • 2.31 kB
JavaScript
const moment = require('moment');
const MssqlHelper = require('./MssqlHelper');
const MysqlHelper = require('./MysqlHelper');
// const SqliteHelper = require('./SqliteHelper');
const PostgreHelper = require('./PostgreHelper');
module.exports = class DataAccess {
constructor(config) {
if (!('type' in config)) throw new Error(`params should include 'type'`);
switch (config.type.toLowerCase()) {
case 'mssql':
this.Database = MssqlHelper;
break;
case 'mysql':
this.Database = MysqlHelper;
break;
// case 'sqlite':
// this.Database = SqliteHelper;
// break;
case 'postgre':
this.Database = PostgreHelper;
break;
default:
throw new Error('no this type database config');
break;
}
this.config = config;
}
/**
* 获取datatable
* @param {String} sqlstr
*/
getTable(sqlstr) {
return new this.Database(this.config).query(sqlstr);
}
/**
* 执行增删改
* @param {String} sqlstr
*/
execute(sqlstr) {
return new this.Database(this.config).execute(sqlstr);
}
/**
* 自动执行增删改
* @param {TransParams} transParams
*/
transExecute(transParams) {
if (['', null, undefined].includes(transParams)) {
return Promise.reject('params invalid');
} else {
return new this.Database(this.config).translate(transParams);
}
}
/**
* 过滤参数
* @param {*} data 日期对象或者字符串
*/
parse(data) {
if (data) {
if (data instanceof Date) {
return `'${moment(data).format('YYYY-MM-DD HH:mm:ss')}'`;
} else {
data = data.trim();
return "'" + data.replace("'", '’') + "'";
}
} else {
return 'null';
}
}
/**
* 生成分页语句
* @param {*} pageno
* @param {*} pagesize
* @param {*} sqlstr
* @param {*} sp 排序逻辑(mssql分页时不可空)
*/
datapager(pageno, pagesize, sqlstr, sp) {
if (sqlstr) {
pageno = Math.max(pageno, 1);
pagesize = Math.max(pagesize, 1);
if (!sp || Object.keys(sp).length === 0) {
sp = { Field: 1, SortDirection: 'asc' };
}
return this.Database.datapager(pageno, pagesize, sqlstr, sp);
} else {
return sqlstr;
}
}
/**
* 包装字段,避免大小写敏感异常
* @param {*} field 表名/字段名
*/
packCaseLow(field) {
return new this.Database(this.config).packCaseLow(field);
}
};