doomiwork 3.5.0 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/database/mysqlbase.js +35 -33
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ const apiResult = require('../actionresult');
|
|
|
6
6
|
const logHelper = require('doomi-helper').logHelper;
|
|
7
7
|
const PoolManager = require('./poolmanager')
|
|
8
8
|
const mysql = require('mysql');
|
|
9
|
+
const executeSqlWithConnection = Symbol("executeSqlWithConnection");
|
|
9
10
|
class Database {
|
|
10
11
|
/**
|
|
11
12
|
*
|
|
@@ -21,30 +22,30 @@ class Database {
|
|
|
21
22
|
* 防Sql注入进行编码
|
|
22
23
|
* @param {*} value
|
|
23
24
|
*/
|
|
24
|
-
escape(value){
|
|
25
|
+
escape(value) {
|
|
25
26
|
return mysql.escape(value);
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
29
|
* 记录错误日志
|
|
29
30
|
*/
|
|
30
|
-
logError(scene,error,user=null){
|
|
31
|
+
logError(scene, error, user = null) {
|
|
31
32
|
///不需要记录错误日志
|
|
32
|
-
if (this.ingoreErrorLog === true || !this.actionLogger || typeof (this.actionLogger.logError)!=='function'){
|
|
33
|
-
return
|
|
33
|
+
if (this.ingoreErrorLog === true || !this.actionLogger || typeof (this.actionLogger.logError) !== 'function') {
|
|
34
|
+
return;
|
|
34
35
|
}
|
|
35
36
|
///如果没有传场景,则记录数据库的业务值
|
|
36
37
|
if (!scene) scene = this.constructor.name;
|
|
37
|
-
this.actionLogger.logError({ scene, error, user})
|
|
38
|
+
this.actionLogger.logError({ scene, error, user })
|
|
38
39
|
}
|
|
39
40
|
/**
|
|
40
41
|
* 检查是否存在数据
|
|
41
42
|
* @param {*} sqlCommand
|
|
42
43
|
* @param {*} parameters
|
|
43
44
|
*/
|
|
44
|
-
async existedSqlData(sqlCommand, parameters){
|
|
45
|
-
let sqlExecute = await this.executeSql(sqlCommand, parameters);
|
|
46
|
-
if (!sqlExecute.successed) return {successed:false}
|
|
47
|
-
if (!sqlExecute.rows || sqlExecute.rows.length == 0) return { success: true, existed:false }
|
|
45
|
+
async existedSqlData(sqlCommand, parameters, conn, autoclose = true) {
|
|
46
|
+
let sqlExecute = await this.executeSql(sqlCommand, parameters, conn, autoclose);
|
|
47
|
+
if (!sqlExecute.successed) return { successed: false }
|
|
48
|
+
if (!sqlExecute.rows || sqlExecute.rows.length == 0) return { success: true, existed: false }
|
|
48
49
|
return { successed: true, existed: true, ...sqlExecute.rows[0] }
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
@@ -53,9 +54,9 @@ class Database {
|
|
|
53
54
|
* @param {*} parameters
|
|
54
55
|
* @returns
|
|
55
56
|
*/
|
|
56
|
-
async getComputedRowValue(sqlCommand, parameters) {
|
|
57
|
-
let sqlExecute = await this.executeSql(sqlCommand, parameters);
|
|
58
|
-
if (sqlExecute.successed || sqlExecute.rows
|
|
57
|
+
async getComputedRowValue(sqlCommand, parameters, conn, autoclose = true) {
|
|
58
|
+
let sqlExecute = await this.executeSql(sqlCommand, parameters, conn, autoclose);
|
|
59
|
+
if (sqlExecute.successed || sqlExecute.rows.length == 0) return { successed: false, errcode: -1, errmsg: '没有任何记录' }
|
|
59
60
|
return { successed: true, ...sqlExecute.rows[0] }
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -63,7 +64,7 @@ class Database {
|
|
|
63
64
|
* 单独获得一个连接串
|
|
64
65
|
* @returns
|
|
65
66
|
*/
|
|
66
|
-
getConnection(){
|
|
67
|
+
getConnection() {
|
|
67
68
|
return new Promise((success, failed) => {
|
|
68
69
|
if (!this.pool) {
|
|
69
70
|
return success(null);
|
|
@@ -79,23 +80,24 @@ class Database {
|
|
|
79
80
|
* @param {*} sqlCommand
|
|
80
81
|
* @param {*} parameters 参数
|
|
81
82
|
*/
|
|
82
|
-
executeSql(sqlCommand, parameters,conn,autoclose=true) {
|
|
83
|
+
executeSql(sqlCommand, parameters, conn, autoclose = true) {
|
|
83
84
|
let logger = this.logger;
|
|
84
|
-
let that = this;
|
|
85
|
-
if (conn){
|
|
86
|
-
return this
|
|
85
|
+
// let that = this;
|
|
86
|
+
if (conn) {
|
|
87
|
+
return this[executeSqlWithConnection](sqlCommand, parameters, conn, autoclose)
|
|
87
88
|
}
|
|
88
89
|
return new Promise((success, failed) => {
|
|
89
90
|
if (!this.pool) {
|
|
90
91
|
return success(apiResult.DB_CONNECTED_FAILED);
|
|
91
92
|
}
|
|
92
93
|
///创建出数据库连接,准备执行
|
|
93
|
-
this.pool.getConnection((err, connection)=> {
|
|
94
|
+
this.pool.getConnection(async (err, connection) => {
|
|
94
95
|
if (err) {
|
|
95
|
-
logger.error("Database Connected Failed :"+ err);
|
|
96
|
+
logger.error("Database Connected Failed :" + err);
|
|
96
97
|
return success(apiResult.DB_CONNECTED_FAILED);
|
|
97
98
|
}
|
|
98
|
-
|
|
99
|
+
let sqlResult = await this[executeSqlWithConnection](sqlCommand, parameters, connection, autoclose)
|
|
100
|
+
return success(sqlResult)
|
|
99
101
|
});
|
|
100
102
|
});
|
|
101
103
|
}
|
|
@@ -106,11 +108,11 @@ class Database {
|
|
|
106
108
|
* @param {*} conn
|
|
107
109
|
* @param {*} closeAfterQuery 执行完毕后是否关闭
|
|
108
110
|
*/
|
|
109
|
-
executeSqlWithConnection(sqlCommand, parameters, conn, autoclose =true){
|
|
111
|
+
[executeSqlWithConnection](sqlCommand, parameters, conn, autoclose = true) {
|
|
110
112
|
if (!conn) return Promise.resolve(apiResult.DB_CONNECTED_FAILED);
|
|
111
|
-
return new Promise(success=>{
|
|
113
|
+
return new Promise((success) => {
|
|
112
114
|
this.logger.trace("SqlCommand:", sqlCommand, "Parameters:", parameters);
|
|
113
|
-
conn.query(sqlCommand, parameters, (err, rows) => {
|
|
115
|
+
return conn.query(sqlCommand, parameters, (err, rows) => {
|
|
114
116
|
if (autoclose) conn.release();
|
|
115
117
|
if (err) {
|
|
116
118
|
this.logger.error("Database Query Error :" + err, sqlCommand);
|
|
@@ -126,29 +128,29 @@ class Database {
|
|
|
126
128
|
* @param {*} conn
|
|
127
129
|
* @param {*} func
|
|
128
130
|
*/
|
|
129
|
-
async executeSqlWithTransaction(func
|
|
131
|
+
async executeSqlWithTransaction(conn, func) {
|
|
130
132
|
if (!conn) {
|
|
131
133
|
conn = await this.getConnection();
|
|
132
134
|
}
|
|
133
|
-
if (!conn) return Promise.resolve({successed:false});
|
|
134
|
-
return new Promise(success=>{
|
|
135
|
-
conn.beginTransaction(async err=>{
|
|
136
|
-
if (err) return success({successed:false,errcode
|
|
137
|
-
let result = {successed:true}
|
|
138
|
-
if (func && typeof (func)==='function') result = await func(
|
|
135
|
+
if (!conn) return Promise.resolve({ successed: false });
|
|
136
|
+
return new Promise(success => {
|
|
137
|
+
conn.beginTransaction(async err => {
|
|
138
|
+
if (err) return success({ successed: false, errcode: -1, errmessage: '【事务启动错误】' + err.message });
|
|
139
|
+
let result = { successed: true }
|
|
140
|
+
if (func && typeof (func) === 'function') result = await func(conn);
|
|
139
141
|
if (result.successed) {
|
|
140
142
|
conn.commit(commiterror => {
|
|
141
143
|
if (commiterror) {
|
|
142
144
|
console.log('事务提交失败 :', commiterror);
|
|
143
|
-
return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage:
|
|
145
|
+
return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: commiterror.message }));
|
|
144
146
|
}
|
|
145
147
|
conn.release();
|
|
146
148
|
return success(result);
|
|
147
149
|
})
|
|
148
|
-
}else{
|
|
150
|
+
} else {
|
|
149
151
|
conn.rollback(() => {
|
|
150
152
|
conn.release();
|
|
151
|
-
return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage:
|
|
153
|
+
return success(Object.assign(apiResult.DB_EXECUTE_FAILED, { errmessage: '撤回操作' }));
|
|
152
154
|
})
|
|
153
155
|
}
|
|
154
156
|
})
|