access-db
Version:
[统一数据库的连接]Unified access to all kinds of databases
139 lines (138 loc) • 6.22 kB
JavaScript
;
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;