UNPKG

access-db

Version:

[统一数据库的连接]Unified access to all kinds of databases

118 lines (117 loc) 4.26 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const dbMysql_1 = require("../utils/dbMysql"); const utils_1 = require("../utils/utils"); let pool = (0, dbMysql_1.mysqlPool)(); const connectQuery = (con, sql) => { return new Promise((resolve, reject) => { con.query(sql, [], (err, res) => { if (err) reject(err); resolve(res); }); }); }; function getConnection() { return new Promise((resolve, reject) => { pool.getConnection((err, connection) => { if (err) reject(err); resolve(connection); }); }); } function fetchTransaction() { return new Promise((resolve_all, reject_all) => __awaiter(this, void 0, void 0, function* () { let connection = yield getConnection(); let isTran = false; // 事务是否开启 // 回滚事务 let rollback = () => { return new Promise((resolve, reject) => { connection.rollback(() => { connection.release(); resolve(true); }); }); }; // 运行sql let run = (sql) => { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { try { if (!isTran) { connection.release(); reject('事务未开启'); } let run_res = { data: {}, objects: [] }; let jsonStr = JSON.stringify(yield connectQuery(connection, sql)); let jsonRes = JSON.parse(jsonStr); if ((0, utils_1.isArray)(jsonRes)) { run_res.data = jsonRes[0] || {}; run_res.data.objects = jsonRes; } else { run_res.data = jsonRes; run_res.data.objects = []; } resolve(run_res); } catch (run_err) { connection.release(); reject(run_err); } })); }; // 开始事务 let begin = (callback) => { return new Promise((resolve, reject) => { connection.beginTransaction((err) => __awaiter(this, void 0, void 0, function* () { if (err) { isTran = false; reject(err); } else { isTran = true; yield callback(); resolve(true); } })); }); }; // 提交事务 let commit = () => { return new Promise((resolve, reject) => { connection.commit((err) => { if (err) { connection.release(); reject(err); } connection.release(); resolve(true); }); }); }; resolve_all({ begin, run, rollback, commit, locks: { shared_locks: ' LOCK IN SHARE MODE', exclusive_locks: ' FOR UPDATE' } }); })); } exports.default = fetchTransaction;