UNPKG

access-db

Version:

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

139 lines (138 loc) 6.22 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../constants/constants"); const utils_1 = require("./utils"); const error_1 = require("../constants/error"); const dbMongodb_1 = require("./dbMongodb"); const updateTrans_1 = __importDefault(require("./updateTrans")); function updatemanyTrans(params, query, dbType) { let result; if (dbType === constants_1.PLATFORM_NAME.MONGODB) { let oldParams = params; let tempParams = JSON.parse(JSON.stringify(oldParams)); // 数组对象的深拷贝 let bulkList = []; let keys = []; if ((0, utils_1.isArray)(query)) { keys = query; } else { keys = [query]; } for (let i = 0; i < oldParams.length; i++) { if (keys.length === 1) { let querySon = {}; if (keys[0] === '_id') { if ((0, utils_1.isMongodbObjectId)(oldParams[i]._id)) { querySon['_id'] = oldParams[i]._id; } else { querySon['_id'] = (0, dbMongodb_1.mongodbId)(oldParams[i]._id); } } else { querySon[`${keys[0]}`] = oldParams[i][keys[0]]; } delete tempParams[i][keys[0]]; bulkList.push({ updateMany: { filter: querySon, update: (0, updateTrans_1.default)(tempParams[i], {}, constants_1.PLATFORM_NAME.MONGODB), } }); } else { let querySon = { '$and': [] }; for (let j = 0; j < keys.length; j++) { if (keys[j] === '_id') { if ((0, utils_1.isMongodbObjectId)(oldParams[i]._id)) { querySon['$and'].push({ _id: oldParams[i]._id }); } else { querySon['$and'].push((0, dbMongodb_1.mongodbId)(oldParams[i]._id)); } } else { querySon['$and'].push({ [`${keys[j]}`]: oldParams[i][keys[j]] }); } delete tempParams[i][keys[j]]; } bulkList.push({ updateMany: { filter: querySon, update: (0, updateTrans_1.default)(tempParams[i], {}, constants_1.PLATFORM_NAME.MONGODB), } }); } } result = bulkList; } //mysql类 if (dbType === constants_1.PLATFORM_NAME.MYSQL) { let operate = [], tempParams = params, joinTable = query.table + '_upmj', setdata = []; for (let i = 0; i < tempParams.length; i++) { let opone = []; for (let p in tempParams[i]) { if (!(0, utils_1.isArray)(tempParams[i][p])) { //不是数组,则直接 set opone.push(` ${(0, utils_1.changeSqlParam)(tempParams[i][p])} AS ${p}`); } else { if (constants_1.MYSQL_UPDATE_METHORD.indexOf(tempParams[i][p][0]) > -1) { switch (tempParams[i][p][0]) { case 'set': opone.push(` ${(0, utils_1.changeSqlParam)(tempParams[i][p][1])} AS ${p}`); break; case 'unset': opone.push(` NULL AS ${p}`); break; case 'incr': opone.push(` ${(0, utils_1.changeSqlParam)(tempParams[i][p][1])} AS ${p}`); break; default: throw new Error(error_1.UPDATE_ERROR); } } else { //直接 set opone.push(` ${(0, utils_1.changeSqlParam)(tempParams[i][p])} AS ${p}`); } } if (i === 0) { if (query.tempKey.indexOf(p) === -1) { if (!(0, utils_1.isArray)(tempParams[i][p])) { setdata.push(` ${query.table}.${p} = ${joinTable}.${p}`); } else { if (constants_1.MYSQL_UPDATE_METHORD.indexOf(tempParams[i][p][0]) > -1) { switch (tempParams[i][p][0]) { case 'set': setdata.push(` ${query.table}.${p} = ${joinTable}.${p}`); break; case 'unset': setdata.push(` ${query.table}.${p} = ${joinTable}.${p}`); break; case 'incr': setdata.push(` ${query.table}.${p} = ${query.table}.${p} + ${joinTable}.${p}`); break; default: throw new Error(error_1.UPDATE_ERROR); } } else { //直接 set setdata.push(` ${query.table}.${p} = ${joinTable}.${p}`); } } } } } operate.push(` SELECT ${opone.toString()} `); } result = `(${operate.join('UNION')} ) AS ${joinTable} USING(${query.tempKey.toString()}) SET ${setdata.toString()}`; } return result; } exports.default = updatemanyTrans;