mm_mysql 2.5.2 → 2.5.4

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.
Files changed (3) hide show
  1. package/index.js +53 -0
  2. package/package.json +5 -5
  3. package/sql.js +20 -0
package/index.js CHANGED
@@ -245,6 +245,59 @@ Mysql.prototype.exec = async function (sql, params = []) {
245
245
  return ret;
246
246
  };
247
247
 
248
+ /**
249
+ * 执行多语句SQL脚本(专用于导入)
250
+ * 通过独立连接执行,不影响连接池默认配置
251
+ * @param {string} sql - SQL脚本内容,可含多条以分号分隔的语句
252
+ * @returns {Promise<object>} 执行结果统计对象
253
+ * @throws {TypeError} 当sql参数无效时
254
+ */
255
+ Mysql.prototype.runSql = async function (sql) {
256
+ // 参数校验
257
+ if (typeof sql !== 'string' || sql.trim() === '') {
258
+ throw new TypeError('sql must be non-empty string');
259
+ }
260
+
261
+ let conn = null;
262
+ let ret = { success: false, statements: 0, affected_rows: 0, error: null };
263
+ try {
264
+ // 创建专用连接,仅导入连接开启多语句支持
265
+ let valid_config = this._getValidConfig(false);
266
+ valid_config.multipleStatements = true;
267
+ conn = await mysql.createConnection(valid_config);
268
+
269
+ // 执行整段SQL脚本
270
+ let [results] = await conn.query(sql);
271
+ // 统计语句数和受影响行数
272
+ if (Array.isArray(results)) {
273
+ ret.statements = results.length;
274
+ for (let item of results) {
275
+ ret.affected_rows += item.affectedRows || 0;
276
+ }
277
+ } else {
278
+ ret.statements = 1;
279
+ ret.affected_rows = results.affectedRows || 0;
280
+ }
281
+ ret.success = true;
282
+ } catch (error) {
283
+ this.error = {
284
+ code: error.errno,
285
+ message: error.sqlMessage || error.message
286
+ };
287
+ this.sql = error.sql || sql;
288
+ ret.error = this.error.message;
289
+ } finally {
290
+ if (conn) {
291
+ try {
292
+ await conn.end();
293
+ } catch (end_error) {
294
+ this.log('error', '关闭导入连接失败', end_error);
295
+ }
296
+ }
297
+ }
298
+ return ret;
299
+ };
300
+
248
301
  /**
249
302
  * 开始事务(优化版)
250
303
  * @returns {Promise<object>} 事务连接对象
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "mm_mysql",
3
- "version": "2.5.2",
3
+ "version": "2.5.4",
4
4
  "description": "这是超级美眉mysql帮助函数模块,用于便捷操作mysql,使用await方式,可以避免嵌套函数",
5
5
  "main": "index.js",
6
6
  "dependencies": {
7
- "mm_expand": "^2.5.1",
8
- "mysql2": "^3.23.2",
7
+ "mm_expand": "^2.5.3",
8
+ "mysql2": "^3.23.3",
9
9
  "sqlstring": "^2.3.3"
10
10
  },
11
11
  "scripts": {
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "devDependencies": {
39
39
  "eslint": "^10.8.1",
40
- "eslint-plugin-jsdoc": "^64.0.1",
41
- "mm_eslint": "^1.7.5"
40
+ "eslint-plugin-jsdoc": "^64.2.0",
41
+ "mm_eslint": "^1.7.6"
42
42
  }
43
43
  }
package/sql.js CHANGED
@@ -775,6 +775,26 @@ Sql.prototype.getObj = async function (query, sort, view, like, timeout = 20000)
775
775
  return obj;
776
776
  };
777
777
 
778
+ /**
779
+ * 查询数据
780
+ * @param {object} query 查询条件
781
+ * @param {string} sort 排序
782
+ * @param {string} view 返回的字段
783
+ * @param {boolean} like 是否使用like匹配, 为空使用默认方式
784
+ * @param {number} timeout 超时时间(毫秒),默认20000ms
785
+ * @returns {Promise|Array} 查询结果
786
+ */
787
+ Sql.prototype.list = async function (query, sort, view, like, timeout = 20000) {
788
+ if (!this.table) {
789
+ throw new Error('表名未设置');
790
+ }
791
+
792
+ let sql = this.toGetSql(query, sort, view, like);
793
+ this.sql = sql;
794
+ let list = await this.run(sql);
795
+ return list;
796
+ };
797
+
778
798
  /**
779
799
  * 统计记录数
780
800
  * @param {object} query 查询条件