dborm-mysql 2.1.4 → 2.2.0
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/.history/base/dbUtil_20221202115852.js +478 -0
- package/.history/base/dbUtil_20230807151512.js +478 -0
- package/.history/base/dbUtil_20230807151513.js +478 -0
- package/.history/base/dbUtil_20230807151624.js +478 -0
- package/.history/base/dbUtil_20230807151706.js +478 -0
- package/.history/base/dbUtil_20230807152233.js +478 -0
- package/.history/base/dbUtil_20230807152346.js +478 -0
- package/.history/base/dbUtil_20230807152500.js +478 -0
- package/.history/base/dbUtil_20230807152501.js +478 -0
- package/.history/{package_20220831202000.json → package_20230807152934.json} +1 -1
- package/.history/{package_20221025154242.json → package_20230807152935.json} +1 -1
- package/.history/test_20210114114116.js +536 -0
- package/.history/test_20230807152745.js +537 -0
- package/.history/test_20230807152855.js +537 -0
- package/.history/test_20230807152908.js +537 -0
- package/.history/test_20230807152909.js +537 -0
- package/.history/test_20230807152948.js +536 -0
- package/.history/test_20230807153410.js +536 -0
- package/.history/test_20230807153411.js +536 -0
- package/.history/test_20230807153412.js +536 -0
- package/.history/test_20230807153423.js +536 -0
- package/base/dbUtil.js +14 -9
- package/package.json +1 -1
- package/test.js +7 -7
- package/.history/package_20221123193139.json +0 -36
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Created by hzzhangdianpeng on 2016/12/3.
|
|
3
|
+
*/
|
|
4
|
+
const util = require('util');
|
|
5
|
+
const Err = require('./err');
|
|
6
|
+
const commonUtil = require('./commonUtil');
|
|
7
|
+
const _ = require('lodash');
|
|
8
|
+
|
|
9
|
+
module.exports = (config, {dbCode = 733, ignoreDataError = false}) => {
|
|
10
|
+
let {db2ramFieldMap : db2ramFieldMaps, textDbFieldsMap: textDbFields} = config;
|
|
11
|
+
|
|
12
|
+
let dbUtil = {};
|
|
13
|
+
|
|
14
|
+
let tableNames = Object.keys(textDbFields);
|
|
15
|
+
|
|
16
|
+
dbUtil.getFieldNames = function(tableName, extra = false){
|
|
17
|
+
let fieldNames = Object.keys(db2ramFieldMaps[tableName]);
|
|
18
|
+
if(extra){
|
|
19
|
+
fieldNames.push('keyword', 'inFields', 'customQuery');
|
|
20
|
+
}
|
|
21
|
+
return fieldNames;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
dbUtil.parseKeyword = function(keyword){
|
|
25
|
+
if(typeof keyword == 'string'){
|
|
26
|
+
keyword = keyword.replace(/\\/g, '\\\\');
|
|
27
|
+
keyword = keyword.replace(/[_|%]/g, a => `\\${a}`);
|
|
28
|
+
}
|
|
29
|
+
return keyword;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
dbUtil.createKeywordSql = function(tableName, keywordRes){
|
|
33
|
+
let params = [], orSqls = [];
|
|
34
|
+
if(typeof keywordRes == 'string'){
|
|
35
|
+
let [field, ...keyword] = keywordRes.split(':');
|
|
36
|
+
keyword = keyword.join(':');
|
|
37
|
+
orSqls.push(tableName + '.' + field + ' like ?');
|
|
38
|
+
if (keyword) {
|
|
39
|
+
keyword = dbUtil.parseKeyword(keyword);
|
|
40
|
+
}
|
|
41
|
+
params.push('%' + keyword + '%');
|
|
42
|
+
}else{
|
|
43
|
+
Object.keys(keywordRes).map(field => {
|
|
44
|
+
let subKeyword = keywordRes[field];
|
|
45
|
+
if (subKeyword) {
|
|
46
|
+
orSqls.push(tableName + '.' + field + ' like ?');
|
|
47
|
+
subKeyword = dbUtil.parseKeyword(subKeyword);
|
|
48
|
+
params.push('%' + subKeyword + '%');
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
params,
|
|
54
|
+
sql: `(${orSqls.join(' or ')})`
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
};
|
|
58
|
+
dbUtil.getWhereFields = function(tableName, field, insertFieldNameMap){
|
|
59
|
+
if(insertFieldNameMap[field]){
|
|
60
|
+
return '(' + insertFieldNameMap[field] + ')';
|
|
61
|
+
}else{
|
|
62
|
+
return tableName + '.' + '`' + field + '`';
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
dbUtil.getRam2dbFieldMaps = function (db2ramFieldMaps) {
|
|
67
|
+
let newObj = {};
|
|
68
|
+
for (let tableName in db2ramFieldMaps) {
|
|
69
|
+
if (db2ramFieldMaps.hasOwnProperty(tableName)) {
|
|
70
|
+
newObj[tableName] = commonUtil.exchangeKV(db2ramFieldMaps[tableName]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return newObj;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
dbUtil.getTextRamFields = function (textDbFields) {
|
|
77
|
+
let newObj = {};
|
|
78
|
+
for (let tableName in textDbFields) {
|
|
79
|
+
if (textDbFields.hasOwnProperty(tableName)) {
|
|
80
|
+
newObj[tableName] = textDbFields[tableName].map(field => db2ramFieldMaps[tableName][field]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return newObj;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
let ram2dbFieldMaps = dbUtil.getRam2dbFieldMaps(db2ramFieldMaps);
|
|
87
|
+
let textRamFields = dbUtil.getTextRamFields(textDbFields);
|
|
88
|
+
|
|
89
|
+
function judgeTable(tableName) {
|
|
90
|
+
if (!tableNames.concat('pageTable').includes(tableName)) {
|
|
91
|
+
throw new Error(`tableName<${tableName}> is not ok`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//将data中key为数据库的字段名称转换为内存的字段名称
|
|
96
|
+
dbUtil.convert2RamFieldName = function (tableName, data) {
|
|
97
|
+
judgeTable(tableName);
|
|
98
|
+
let fieldMap = db2ramFieldMaps[tableName];
|
|
99
|
+
let textFields = textDbFields[tableName];
|
|
100
|
+
if (!fieldMap || !data || typeof (data) !== 'object') {
|
|
101
|
+
return data;
|
|
102
|
+
}
|
|
103
|
+
let isArr = true;
|
|
104
|
+
if (!util.isArray(data)) {
|
|
105
|
+
isArr = false;
|
|
106
|
+
data = [data];
|
|
107
|
+
}
|
|
108
|
+
data.forEach(function (dataRow) {
|
|
109
|
+
for (let field in dataRow) {
|
|
110
|
+
if (textFields.indexOf(field) != -1 && util.isString(dataRow[field])) {
|
|
111
|
+
try{
|
|
112
|
+
dataRow[field] = JSON.parse(dataRow[field]);
|
|
113
|
+
}catch(err){
|
|
114
|
+
let errMsg = `data error in mysql, tableName:${tableName}, dataRow:${JSON.stringify(dataRow)}, field:${field}`;
|
|
115
|
+
if(ignoreDataError){
|
|
116
|
+
dataRow[field] = {reason: errMsg};
|
|
117
|
+
}else{
|
|
118
|
+
throw new Error(errMsg);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (fieldMap.hasOwnProperty(field)) {
|
|
123
|
+
dataRow[fieldMap[field]] = dataRow[field];
|
|
124
|
+
if (field !== fieldMap[field]) {
|
|
125
|
+
delete dataRow[field];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return isArr ? data : data[0];
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
//将data中key为内存中的字段名称转换为数据库中的名称
|
|
134
|
+
dbUtil.convert2DbFieldName = function (tableName, data) {
|
|
135
|
+
judgeTable(tableName);
|
|
136
|
+
let fieldMap = ram2dbFieldMaps[tableName];
|
|
137
|
+
let textFields = textRamFields[tableName];
|
|
138
|
+
if (!fieldMap || !data || typeof (data) !== 'object') {
|
|
139
|
+
return data;
|
|
140
|
+
}
|
|
141
|
+
let isArr = true;
|
|
142
|
+
if (!util.isArray(data)) {
|
|
143
|
+
isArr = false;
|
|
144
|
+
data = [data];
|
|
145
|
+
}
|
|
146
|
+
let newData;
|
|
147
|
+
newData = data.map(function (dataRow) {
|
|
148
|
+
let newObj = {};
|
|
149
|
+
for (let field in dataRow) {
|
|
150
|
+
if (textFields.indexOf(field) != -1 && util.isObject(dataRow[field]))
|
|
151
|
+
newObj[field] = JSON.stringify(dataRow[field]);
|
|
152
|
+
else {
|
|
153
|
+
newObj[field] = dataRow[field];
|
|
154
|
+
}
|
|
155
|
+
if (fieldMap.hasOwnProperty(field)) {
|
|
156
|
+
newObj[fieldMap[field]] = newObj[field];
|
|
157
|
+
if (field !== fieldMap[field]) {
|
|
158
|
+
delete newObj[field];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return newObj;
|
|
163
|
+
});
|
|
164
|
+
return isArr ? newData : newData[0];
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
//将fieldNames转换为数据库对应的名字, insertFieldNames表示有些自定义的字段不需要转换
|
|
168
|
+
dbUtil.toDbFieldNames = function (tableName, fieldNames, insertFieldNames = []) {
|
|
169
|
+
judgeTable(tableName);
|
|
170
|
+
let fieldMap = ram2dbFieldMaps[tableName];
|
|
171
|
+
return fieldNames.map(fieldName => {
|
|
172
|
+
if (insertFieldNames.includes(fieldName)){
|
|
173
|
+
return fieldName;
|
|
174
|
+
}else if (!util.isNullOrUndefined(fieldMap[fieldName])){
|
|
175
|
+
return fieldMap[fieldName]
|
|
176
|
+
}else {
|
|
177
|
+
throw new Error(`<${tableName}>中不存在该字段<${fieldName}>`);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
//创建一次插入一条数据的sql相关信息
|
|
183
|
+
dbUtil.createInsertSql = function (tableName, obj) {
|
|
184
|
+
judgeTable(tableName);
|
|
185
|
+
|
|
186
|
+
let fieldNames = dbUtil.getFieldNames(tableName);
|
|
187
|
+
let addFieldNames = fieldNames.filter(fieldName => !util.isUndefined(obj[fieldName]));
|
|
188
|
+
if(!addFieldNames.length){
|
|
189
|
+
throw new Err('insert fieldNames is empty', dbCode);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (!obj.create_time && fieldNames.includes('create_time')){
|
|
193
|
+
obj.create_time = new Date();
|
|
194
|
+
if (!addFieldNames.includes('create_time')) {
|
|
195
|
+
addFieldNames.push('create_time');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (!obj.modify_time && fieldNames.includes('modify_time')){
|
|
200
|
+
obj.modify_time = new Date();
|
|
201
|
+
if (!addFieldNames.includes('modify_time')) {
|
|
202
|
+
addFieldNames.push('modify_time');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
let sql = `INSERT INTO ${tableName} (${addFieldNames.map(field => '`' + field + '`').join(',')}) VALUES(?)`;
|
|
207
|
+
let params = addFieldNames.map(fieldName => obj[fieldName]);
|
|
208
|
+
return {
|
|
209
|
+
params: [params],
|
|
210
|
+
sql: sql
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
//创建一次性插入多条数据的sql相关信息
|
|
215
|
+
dbUtil.createBulkInsertSql = function (tableName, objs) {
|
|
216
|
+
judgeTable(tableName);
|
|
217
|
+
let fieldNames = dbUtil.getFieldNames(tableName);
|
|
218
|
+
|
|
219
|
+
//以第一行数据作判断
|
|
220
|
+
let addFieldNames = fieldNames.filter(fieldName => !util.isUndefined(objs[0][fieldName]));
|
|
221
|
+
|
|
222
|
+
if(!addFieldNames.length){
|
|
223
|
+
throw new Err('insert fieldNames is empty', dbCode);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
let date = new Date();
|
|
227
|
+
objs.forEach(obj => {
|
|
228
|
+
if (!obj.create_time && fieldNames.includes('create_time')){
|
|
229
|
+
obj.create_time = date;
|
|
230
|
+
if(!addFieldNames.includes('create_time')){
|
|
231
|
+
addFieldNames.push('create_time');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (!obj.modify_time && fieldNames.includes('modify_time')){
|
|
235
|
+
obj.modify_time = date;
|
|
236
|
+
if(!addFieldNames.includes('modify_time')){
|
|
237
|
+
addFieldNames.push('modify_time');
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
let sql = 'INSERT INTO ' + tableName + '(' + addFieldNames.map(field => '`' + field + '`').join(',') + ')' + ' VALUES ?';
|
|
244
|
+
let params = objs.map(obj => addFieldNames.map(fieldName => obj[fieldName]));
|
|
245
|
+
return {
|
|
246
|
+
params: [params],
|
|
247
|
+
sql: sql
|
|
248
|
+
};
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
//从给定的fieldNames中选择where字段,其中kwFieldName表示关键字查询对应的字段
|
|
252
|
+
dbUtil.createWhereQuery = function (obj, tableName, insertFieldNameMap = {}) {
|
|
253
|
+
judgeTable(tableName);
|
|
254
|
+
|
|
255
|
+
let params = [], whereArr = [];
|
|
256
|
+
if (!obj) {
|
|
257
|
+
return {
|
|
258
|
+
params,
|
|
259
|
+
sql: '',
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
let insertFieldNames = Object.keys(insertFieldNameMap);
|
|
264
|
+
let fieldNames = dbUtil.getFieldNames(tableName, true).concat(insertFieldNames);
|
|
265
|
+
|
|
266
|
+
for (let fieldName of fieldNames) {
|
|
267
|
+
if (util.isNullOrUndefined(obj[fieldName])) continue;
|
|
268
|
+
if (fieldName == 'keyword') {
|
|
269
|
+
if(!obj[fieldName]){
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
let keywordRes = obj[fieldName];
|
|
273
|
+
if(typeof keywordRes == 'string'){
|
|
274
|
+
let [field, ...keyword] = keywordRes.split(':');
|
|
275
|
+
keyword = keyword.join(':');
|
|
276
|
+
field = dbUtil.toDbFieldNames(tableName, [field], insertFieldNames)[0];
|
|
277
|
+
let realField = dbUtil.getWhereFields(tableName, field, insertFieldNameMap);
|
|
278
|
+
whereArr.push({ sql: realField + ' like ?', fieldName });
|
|
279
|
+
if (keyword) {
|
|
280
|
+
keyword = dbUtil.parseKeyword(keyword);
|
|
281
|
+
}
|
|
282
|
+
params.push({ value: '%' + keyword + '%', fieldName });
|
|
283
|
+
}else{
|
|
284
|
+
let orSqls = [];
|
|
285
|
+
Object.keys(keywordRes).map(field => {
|
|
286
|
+
let subKeyword = keywordRes[field];
|
|
287
|
+
if (subKeyword) {
|
|
288
|
+
field = dbUtil.toDbFieldNames(tableName, [field], insertFieldNames)[0];
|
|
289
|
+
let realField = dbUtil.getWhereFields(tableName, field, insertFieldNameMap);
|
|
290
|
+
orSqls.push(realField + ' like ?');
|
|
291
|
+
subKeyword = dbUtil.parseKeyword(subKeyword);
|
|
292
|
+
params.push({ value: '%' + subKeyword + '%', fieldName });
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
whereArr.push({ sql: '(' + orSqls.join(' or ') + ')', fieldName });
|
|
296
|
+
}
|
|
297
|
+
} else if(fieldName == 'inFields'){
|
|
298
|
+
let inFields = obj[fieldName];
|
|
299
|
+
inFields = dbUtil.convert2DbFieldName(tableName, inFields);
|
|
300
|
+
let inSqls = [];
|
|
301
|
+
Object.keys(inFields).forEach(key => {
|
|
302
|
+
let value = inFields[key] || [];
|
|
303
|
+
value = [... new Set(value)];
|
|
304
|
+
if (value.length) {
|
|
305
|
+
let realField = dbUtil.getWhereFields(tableName, key, insertFieldNameMap);
|
|
306
|
+
inSqls.push(` ${realField} in (?) `);
|
|
307
|
+
params.push({ value, fieldName });
|
|
308
|
+
}else{
|
|
309
|
+
inSqls.push('0=1');
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
if(inSqls.length){
|
|
313
|
+
whereArr.push({ sql: '(' + inSqls.join(' and ') + ')', fieldName });
|
|
314
|
+
}
|
|
315
|
+
} else if(fieldName === 'customQuery'){
|
|
316
|
+
let customQuery = obj[fieldName];
|
|
317
|
+
if(customQuery.length){
|
|
318
|
+
whereArr.push({ sql: '(' + customQuery + ')', fieldName });
|
|
319
|
+
}
|
|
320
|
+
}else {
|
|
321
|
+
params.push({ value: obj[fieldName], fieldName });
|
|
322
|
+
//对于role,projectId=-1属于所有项目
|
|
323
|
+
if (tableName == 'role' && fieldName == 'project_id') {
|
|
324
|
+
whereArr.push({ sql: '(role.project_id = ? or role.project_id = -1)', fieldName });
|
|
325
|
+
} else {
|
|
326
|
+
let realField = dbUtil.getWhereFields(tableName, fieldName, insertFieldNameMap);
|
|
327
|
+
whereArr.push({ sql: realField + '=?', fieldName });
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// 根据传入 query 的字段顺序排序
|
|
333
|
+
const keys = Object.keys(obj);
|
|
334
|
+
params = params.sort((a,b) => keys.indexOf(a.fieldName) - keys.indexOf(b.fieldName)).map(i => i.value);
|
|
335
|
+
whereArr = whereArr.sort((a,b) => keys.indexOf(a.fieldName) - keys.indexOf(b.fieldName)).map(i => i.sql);
|
|
336
|
+
|
|
337
|
+
return {
|
|
338
|
+
params: params,
|
|
339
|
+
sql: whereArr.join(' and ')
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
//从给定的fieldNames中查找要更新的字段,创建更新sql语句
|
|
344
|
+
dbUtil.createUpdateQuery = function (tableName, obj) {
|
|
345
|
+
let params = [], updateArr = [];
|
|
346
|
+
|
|
347
|
+
let fieldNames = dbUtil.getFieldNames(tableName).filter(name => name != 'id');
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
if (obj) {
|
|
351
|
+
if (!obj.noUpdateTime && !obj.modify_time && fieldNames.includes('modify_time')){
|
|
352
|
+
obj.modify_time = new Date();
|
|
353
|
+
}
|
|
354
|
+
let nullFields = dbUtil.toDbFieldNames(tableName, obj['nullFields'] || []);
|
|
355
|
+
fieldNames.forEach((fieldName) => {
|
|
356
|
+
let value = obj[fieldName];
|
|
357
|
+
if (nullFields.includes(fieldName) || !util.isNullOrUndefined(value)) {
|
|
358
|
+
params.push(value);
|
|
359
|
+
updateArr.push(fieldName + '=?');
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
if (!params.length) {
|
|
364
|
+
throw new Error('update params can not be empty');
|
|
365
|
+
}
|
|
366
|
+
return {
|
|
367
|
+
params: params,
|
|
368
|
+
sql: updateArr.join(' , ')
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
dbUtil.createBulkUpdateSql = function (tableName, objs) {
|
|
373
|
+
judgeTable(tableName);
|
|
374
|
+
|
|
375
|
+
let fieldNames = dbUtil.getFieldNames(tableName);
|
|
376
|
+
|
|
377
|
+
if (!util.isArray(objs)) {
|
|
378
|
+
throw new Error('bulkUpdate.objs need Array');
|
|
379
|
+
}
|
|
380
|
+
if(!objs.length){
|
|
381
|
+
return {
|
|
382
|
+
sql: 'select 1',
|
|
383
|
+
params: []
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
let hasId = objs.every(obj => !util.isNullOrUndefined(obj.id));
|
|
387
|
+
if (!hasId) {
|
|
388
|
+
throw new Error(tableName + ' bulkUpdate need id');
|
|
389
|
+
}
|
|
390
|
+
objs.forEach(obj => {
|
|
391
|
+
if (!obj.modify_time && fieldNames.includes('modify_time'))
|
|
392
|
+
obj.modify_time = new Date();
|
|
393
|
+
});
|
|
394
|
+
fieldNames = fieldNames.filter(fieldName => !util.isUndefined(objs[0][fieldName]));
|
|
395
|
+
let sql = 'INSERT INTO ' + tableName + '(' + fieldNames.map(fieldName => '`' + fieldName + '`').join(',') + ')' + ' VALUES ?';
|
|
396
|
+
let params = objs.map(obj => fieldNames.map(fieldName => obj[fieldName]));
|
|
397
|
+
let updateField = [];
|
|
398
|
+
fieldNames.forEach(function (field) {
|
|
399
|
+
if (field != 'id')
|
|
400
|
+
updateField.push(field + '=VALUES(' + field + ')');
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
sql = sql + ' ON DUPLICATE KEY UPDATE ' + updateField.join(',');
|
|
404
|
+
return {
|
|
405
|
+
params: [params],
|
|
406
|
+
sql: sql
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
//mode = 1或者mode = 2 按照中文升降排序,mode = 3 或者 mode = 4按照英文升降排序
|
|
411
|
+
dbUtil.getOrderBySql = function (field, mode, tableName, insertFieldNames = []) {
|
|
412
|
+
if (tableName) {
|
|
413
|
+
judgeTable(tableName);
|
|
414
|
+
if(!insertFieldNames.includes(field)){
|
|
415
|
+
field = tableName + '.' + field;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
let sql;
|
|
419
|
+
if (mode === '1' || mode === '2') {
|
|
420
|
+
sql = ' convert( ' + field + ' using gbk) ';
|
|
421
|
+
} else if (mode === '3' || mode === '4') {
|
|
422
|
+
sql = ' ' + field + ' ';
|
|
423
|
+
} else if (mode === '0') {
|
|
424
|
+
sql = '';
|
|
425
|
+
} else {
|
|
426
|
+
throw new Error(`<${field}> order-by mode is not ok, mode need in [0,1,2,3,4]`);
|
|
427
|
+
}
|
|
428
|
+
if (mode === '2' || mode === '4') sql += ' desc ';
|
|
429
|
+
return sql;
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
dbUtil.createSelectSql = function (tableName, selectFields = ['*']) {
|
|
433
|
+
!Array.isArray(selectFields) && (selectFields = [selectFields]);
|
|
434
|
+
|
|
435
|
+
let insertFieldNames = [], toSelectFields = [], insertFieldNameMap = {};
|
|
436
|
+
selectFields.forEach(field => {
|
|
437
|
+
if(field.includes(' ') && (field.includes(' as ') || field.includes(' AS '))){
|
|
438
|
+
let insertFieldName = _.last(field.split(' '));
|
|
439
|
+
insertFieldNames.push(insertFieldName);
|
|
440
|
+
insertFieldNameMap[insertFieldName] = field.split(field.includes(' as ') ? 'as' : 'AS')[0];
|
|
441
|
+
toSelectFields.push(field);
|
|
442
|
+
}else {
|
|
443
|
+
if(field !== '*'){
|
|
444
|
+
field = '`' + dbUtil.toDbFieldNames(tableName, [field])[0] + '`';
|
|
445
|
+
}
|
|
446
|
+
toSelectFields.push(tableName + '.' + field);
|
|
447
|
+
}
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
return {
|
|
451
|
+
sql: `select ${toSelectFields.join(',')} from ${tableName}`,
|
|
452
|
+
insertFieldNames,
|
|
453
|
+
insertFieldNameMap
|
|
454
|
+
};
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
dbUtil.convertSort = function (sort, strFields) {
|
|
458
|
+
if(sort){
|
|
459
|
+
let [field, mode] = sort.split(':');
|
|
460
|
+
let isStr = strFields && strFields.includes(field);
|
|
461
|
+
let realMode;
|
|
462
|
+
if (mode === '1' || mode === 'asc') {
|
|
463
|
+
realMode = isStr ? '1' : '3';
|
|
464
|
+
} else if (mode === '2' || mode === 'desc') {
|
|
465
|
+
realMode = isStr ? '2' : '4';
|
|
466
|
+
}else{
|
|
467
|
+
realMode = mode;
|
|
468
|
+
}
|
|
469
|
+
if (!realMode) throw new Error('sort attr error');
|
|
470
|
+
return [field, realMode].join(':');
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
return dbUtil;
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
|