wok-server 0.4.13 → 0.6.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/README.en.md +61 -0
- package/README.md +44 -29
- package/dist/cache/cache.js +98 -98
- package/dist/cache/config.js +19 -19
- package/dist/cache/index.js +27 -27
- package/dist/cache/purge-task.js +46 -46
- package/dist/cache/stat.js +47 -47
- package/dist/config/convert.js +36 -36
- package/dist/config/exception.js +14 -14
- package/dist/config/index.js +81 -81
- package/dist/http-client/index.js +136 -136
- package/dist/i18n/ar.js +17 -17
- package/dist/i18n/de.js +17 -17
- package/dist/i18n/en-us.js +17 -17
- package/dist/i18n/es.js +17 -17
- package/dist/i18n/fr.js +17 -17
- package/dist/i18n/i18n.js +231 -231
- package/dist/i18n/index.js +52 -52
- package/dist/i18n/ja.js +17 -17
- package/dist/i18n/ko.js +17 -17
- package/dist/i18n/msg.js +2 -2
- package/dist/i18n/pt.js +17 -17
- package/dist/i18n/ru.js +17 -17
- package/dist/i18n/tag.js +18 -18
- package/dist/i18n/zh-HK.js +17 -17
- package/dist/i18n/zh-TW.js +17 -17
- package/dist/i18n/zh-cn.js +17 -17
- package/dist/index.js +14 -14
- package/dist/lock/index.js +114 -114
- package/dist/log/config.js +35 -29
- package/dist/log/date.js +21 -21
- package/dist/log/file.js +198 -72
- package/dist/log/index.js +135 -105
- package/dist/log/level.js +33 -33
- package/dist/log/log.js +56 -0
- package/dist/log/store.js +19 -16
- package/dist/mongodb/collection.js +2 -2
- package/dist/mongodb/config.js +34 -34
- package/dist/mongodb/doc.js +2 -2
- package/dist/mongodb/exception.js +14 -14
- package/dist/mongodb/index.js +58 -58
- package/dist/mongodb/manager/base.js +563 -563
- package/dist/mongodb/manager/index.js +63 -63
- package/dist/mongodb/manager/tx-strict.js +84 -84
- package/dist/mongodb/manager/tx.js +30 -30
- package/dist/mongodb/migration.js +52 -52
- package/dist/mvc/access-log.js +33 -33
- package/dist/mvc/config.js +27 -27
- package/dist/mvc/exchange.js +113 -113
- package/dist/mvc/handler/index.js +7 -6
- package/dist/mvc/handler/json.js +65 -65
- package/dist/mvc/handler/restful.js +35 -35
- package/dist/mvc/handler/sse.js +65 -0
- package/dist/mvc/handler/upload.js +31 -31
- package/dist/mvc/index.js +50 -50
- package/dist/mvc/interceptor.js +2 -2
- package/dist/mvc/query.js +43 -43
- package/dist/mvc/render/file.js +132 -132
- package/dist/mvc/render/html/html.js +90 -90
- package/dist/mvc/render/html/index.js +18 -18
- package/dist/mvc/render/html/style.js +2 -2
- package/dist/mvc/render/index.js +7 -7
- package/dist/mvc/render/json.js +26 -26
- package/dist/mvc/render/text.js +16 -16
- package/dist/mvc/router.js +2 -2
- package/dist/mvc/server.js +272 -272
- package/dist/mvc/static/header.js +67 -67
- package/dist/mvc/static/index.js +6 -6
- package/dist/mvc/static/mime-type.js +84 -84
- package/dist/mvc/static/server-cache-config.js +66 -66
- package/dist/mvc/static/server-cache.js +133 -133
- package/dist/mvc/static/static-handler.js +372 -372
- package/dist/mysql/config.js +51 -51
- package/dist/mysql/exception.js +14 -14
- package/dist/mysql/index.js +87 -87
- package/dist/mysql/manager/base.js +239 -231
- package/dist/mysql/manager/index.js +107 -107
- package/dist/mysql/manager/ops/count.js +20 -20
- package/dist/mysql/manager/ops/criteria.js +356 -356
- package/dist/mysql/manager/ops/delete.js +65 -65
- package/dist/mysql/manager/ops/exist.js +26 -26
- package/dist/mysql/manager/ops/find.js +169 -130
- package/dist/mysql/manager/ops/index.js +14 -14
- package/dist/mysql/manager/ops/insert.js +106 -106
- package/dist/mysql/manager/ops/modify.js +10 -10
- package/dist/mysql/manager/ops/paginate.js +23 -23
- package/dist/mysql/manager/ops/query.js +9 -9
- package/dist/mysql/manager/ops/update.js +216 -216
- package/dist/mysql/manager/ops/utils.js +24 -24
- package/dist/mysql/manager/tx-strict.js +103 -100
- package/dist/mysql/manager/tx.js +30 -30
- package/dist/mysql/manager/utils.js +56 -56
- package/dist/mysql/migration.js +136 -136
- package/dist/mysql/table-info.js +8 -8
- package/dist/task/daily.js +59 -59
- package/dist/task/fixed-delay.js +38 -38
- package/dist/task/fixed-rate.js +42 -42
- package/dist/task/index.js +9 -9
- package/dist/task/task.js +56 -56
- package/dist/validation/exception.js +36 -36
- package/dist/validation/index.js +40 -40
- package/dist/validation/validator/array.js +34 -34
- package/dist/validation/validator/enum.js +28 -28
- package/dist/validation/validator/index.js +14 -14
- package/dist/validation/validator/length.js +40 -40
- package/dist/validation/validator/max-length.js +35 -35
- package/dist/validation/validator/max.js +29 -29
- package/dist/validation/validator/min-length.js +33 -33
- package/dist/validation/validator/min.js +29 -29
- package/dist/validation/validator/not-blank.js +33 -33
- package/dist/validation/validator/not-null.js +21 -21
- package/dist/validation/validator/plain-obj.js +32 -32
- package/dist/validation/validator/regexp.js +34 -34
- package/documentation/en/cache.md +56 -0
- package/documentation/en/config.md +96 -0
- package/documentation/en/engineering.md +256 -0
- package/documentation/en/http-client.md +32 -0
- package/documentation/en/i18n.md +143 -0
- package/documentation/en/index.md +24 -0
- package/documentation/en/lock.md +51 -0
- package/documentation/en/log.md +109 -0
- package/documentation/en/mongodb.md +256 -0
- package/documentation/en/mvc.md +688 -0
- package/documentation/en/mysql.md +552 -0
- package/documentation/en/task.md +45 -0
- package/documentation/en/test.md +56 -0
- package/documentation/en/validate.md +130 -0
- package/documentation/zh-cn/engineering.md +1 -1
- package/documentation/zh-cn/log.md +81 -8
- package/documentation/zh-cn/mvc.md +66 -24
- package/documentation/zh-cn/mysql.md +24 -23
- package/documentation/zh-cn/validate.md +2 -2
- package/package.json +3 -1
- package/skills/wok-server-api-rules/SKILL.md +350 -0
- package/skills/wok-server-cache/SKILL.md +216 -0
- package/skills/wok-server-config/SKILL.md +200 -0
- package/skills/wok-server-getting-started/SKILL.md +123 -0
- package/skills/wok-server-getting-started/references/engineering.md +169 -0
- package/skills/wok-server-http-client/SKILL.md +164 -0
- package/skills/wok-server-i18n/SKILL.md +214 -0
- package/skills/wok-server-lock/SKILL.md +144 -0
- package/skills/wok-server-log/SKILL.md +218 -0
- package/skills/wok-server-mongodb/SKILL.md +235 -0
- package/skills/wok-server-mvc/SKILL.md +251 -0
- package/skills/wok-server-mvc/references/respond-html.md +157 -0
- package/skills/wok-server-mvc/references/sse.md +121 -0
- package/skills/wok-server-mvc/references/static-files.md +47 -0
- package/skills/wok-server-mvc/references/upload.md +62 -0
- package/skills/wok-server-mvc/references/websocket.md +30 -0
- package/skills/wok-server-mysql/SKILL.md +315 -0
- package/skills/wok-server-mysql/references/multi-datasource.md +76 -0
- package/skills/wok-server-mysql/references/version-control.md +22 -0
- package/skills/wok-server-task/SKILL.md +158 -0
- package/skills/wok-server-validate/SKILL.md +167 -0
- package/src/cache/cache.ts +118 -0
- package/src/cache/config.ts +53 -0
- package/src/cache/index.ts +27 -0
- package/src/cache/purge-task.ts +53 -0
- package/src/cache/stat.ts +47 -0
- package/src/config/convert.ts +27 -0
- package/src/config/exception.ts +8 -0
- package/src/config/index.ts +92 -0
- package/src/http-client/index.ts +202 -0
- package/src/i18n/ar.ts +16 -0
- package/src/i18n/de.ts +16 -0
- package/src/i18n/en-us.ts +16 -0
- package/src/i18n/es.ts +16 -0
- package/src/i18n/fr.ts +16 -0
- package/src/i18n/i18n.ts +230 -0
- package/src/i18n/index.ts +50 -0
- package/src/i18n/ja.ts +16 -0
- package/src/i18n/ko.ts +16 -0
- package/src/i18n/msg.ts +50 -0
- package/src/i18n/pt.ts +16 -0
- package/src/i18n/ru.ts +16 -0
- package/src/i18n/tag.ts +18 -0
- package/src/i18n/zh-HK.ts +16 -0
- package/src/i18n/zh-TW.ts +16 -0
- package/src/i18n/zh-cn.ts +16 -0
- package/src/index.ts +11 -0
- package/src/lock/index.ts +164 -0
- package/src/log/config.ts +71 -0
- package/src/log/date.ts +19 -0
- package/src/log/file.ts +215 -0
- package/src/log/index.ts +136 -0
- package/src/log/level.ts +29 -0
- package/src/log/log.ts +77 -0
- package/src/log/store.ts +31 -0
- package/src/mongodb/collection.ts +25 -0
- package/src/mongodb/config.ts +69 -0
- package/src/mongodb/doc.ts +12 -0
- package/src/mongodb/exception.ts +8 -0
- package/src/mongodb/index.ts +71 -0
- package/src/mongodb/manager/base.ts +674 -0
- package/src/mongodb/manager/index.ts +80 -0
- package/src/mongodb/manager/tx-strict.ts +153 -0
- package/src/mongodb/manager/tx.ts +34 -0
- package/src/mongodb/migration.ts +66 -0
- package/src/mvc/access-log.ts +33 -0
- package/src/mvc/config.ts +70 -0
- package/src/mvc/exchange.ts +126 -0
- package/src/mvc/handler/index.ts +4 -0
- package/src/mvc/handler/json.ts +96 -0
- package/src/mvc/handler/restful.ts +39 -0
- package/src/mvc/handler/sse.ts +90 -0
- package/src/mvc/handler/upload.ts +54 -0
- package/src/mvc/index.ts +48 -0
- package/src/mvc/interceptor.ts +12 -0
- package/src/mvc/query.ts +36 -0
- package/src/mvc/render/file.ts +148 -0
- package/src/mvc/render/html/html.ts +187 -0
- package/src/mvc/render/html/index.ts +16 -0
- package/src/mvc/render/html/style.ts +1201 -0
- package/src/mvc/render/index.ts +4 -0
- package/src/mvc/render/json.ts +24 -0
- package/src/mvc/render/text.ts +14 -0
- package/src/mvc/router.ts +13 -0
- package/src/mvc/server.ts +315 -0
- package/src/mvc/static/header.ts +86 -0
- package/src/mvc/static/index.ts +3 -0
- package/src/mvc/static/mime-type.ts +81 -0
- package/src/mvc/static/server-cache-config.ts +92 -0
- package/src/mvc/static/server-cache.ts +171 -0
- package/src/mvc/static/static-handler.ts +445 -0
- package/src/mysql/config.ts +130 -0
- package/src/mysql/exception.ts +8 -0
- package/src/mysql/index.ts +88 -0
- package/src/mysql/manager/base.ts +285 -0
- package/src/mysql/manager/index.ts +112 -0
- package/src/mysql/manager/ops/count.ts +30 -0
- package/src/mysql/manager/ops/criteria.ts +412 -0
- package/src/mysql/manager/ops/delete.ts +96 -0
- package/src/mysql/manager/ops/exist.ts +41 -0
- package/src/mysql/manager/ops/find.ts +226 -0
- package/src/mysql/manager/ops/index.ts +11 -0
- package/src/mysql/manager/ops/insert.ts +120 -0
- package/src/mysql/manager/ops/modify.ts +14 -0
- package/src/mysql/manager/ops/paginate.ts +60 -0
- package/src/mysql/manager/ops/query.ts +13 -0
- package/src/mysql/manager/ops/update.ts +294 -0
- package/src/mysql/manager/ops/utils.ts +20 -0
- package/src/mysql/manager/tx-strict.ts +138 -0
- package/src/mysql/manager/tx.ts +31 -0
- package/src/mysql/manager/utils.ts +75 -0
- package/src/mysql/migration.ts +149 -0
- package/src/mysql/table-info.ts +41 -0
- package/src/task/daily.ts +70 -0
- package/src/task/fixed-delay.ts +45 -0
- package/src/task/fixed-rate.ts +49 -0
- package/src/task/index.ts +4 -0
- package/src/task/task.ts +70 -0
- package/src/validation/exception.ts +27 -0
- package/src/validation/index.ts +61 -0
- package/src/validation/validator/array.ts +32 -0
- package/src/validation/validator/enum.ts +25 -0
- package/src/validation/validator/index.ts +11 -0
- package/src/validation/validator/length.ts +42 -0
- package/src/validation/validator/max-length.ts +33 -0
- package/src/validation/validator/max.ts +26 -0
- package/src/validation/validator/min-length.ts +31 -0
- package/src/validation/validator/min.ts +26 -0
- package/src/validation/validator/not-blank.ts +31 -0
- package/src/validation/validator/not-null.ts +19 -0
- package/src/validation/validator/plain-obj.ts +30 -0
- package/src/validation/validator/regexp.ts +32 -0
- package/types/cache/cache.d.ts +52 -52
- package/types/cache/config.d.ts +32 -32
- package/types/cache/index.d.ts +2 -2
- package/types/cache/purge-task.d.ts +11 -11
- package/types/cache/stat.d.ts +26 -26
- package/types/config/convert.d.ts +6 -6
- package/types/config/exception.d.ts +7 -7
- package/types/config/index.d.ts +25 -25
- package/types/http-client/index.d.ts +71 -71
- package/types/i18n/ar.d.ts +2 -2
- package/types/i18n/de.d.ts +2 -2
- package/types/i18n/en-us.d.ts +2 -2
- package/types/i18n/es.d.ts +2 -2
- package/types/i18n/fr.d.ts +2 -2
- package/types/i18n/i18n.d.ts +102 -102
- package/types/i18n/index.d.ts +9 -9
- package/types/i18n/ja.d.ts +2 -2
- package/types/i18n/ko.d.ts +2 -2
- package/types/i18n/msg.d.ts +50 -50
- package/types/i18n/pt.d.ts +2 -2
- package/types/i18n/ru.d.ts +2 -2
- package/types/i18n/tag.d.ts +11 -11
- package/types/i18n/zh-HK.d.ts +2 -2
- package/types/i18n/zh-TW.d.ts +2 -2
- package/types/i18n/zh-cn.d.ts +2 -2
- package/types/index.d.ts +11 -11
- package/types/lock/index.d.ts +64 -64
- package/types/log/config.d.ts +35 -27
- package/types/log/date.d.ts +2 -2
- package/types/log/file.d.ts +13 -5
- package/types/log/index.d.ts +53 -34
- package/types/log/level.d.ts +14 -14
- package/types/log/log.d.ts +40 -0
- package/types/log/store.d.ts +19 -12
- package/types/mongodb/collection.d.ts +25 -25
- package/types/mongodb/config.d.ts +45 -45
- package/types/mongodb/doc.d.ts +11 -11
- package/types/mongodb/exception.d.ts +7 -7
- package/types/mongodb/index.d.ts +29 -29
- package/types/mongodb/manager/base.d.ts +188 -188
- package/types/mongodb/manager/index.d.ts +38 -38
- package/types/mongodb/manager/tx-strict.d.ts +41 -41
- package/types/mongodb/manager/tx.d.ts +21 -21
- package/types/mongodb/migration.d.ts +12 -12
- package/types/mvc/access-log.d.ts +7 -7
- package/types/mvc/config.d.ts +42 -42
- package/types/mvc/exchange.d.ts +72 -72
- package/types/mvc/handler/index.d.ts +4 -3
- package/types/mvc/handler/json.d.ts +44 -44
- package/types/mvc/handler/restful.d.ts +11 -11
- package/types/mvc/handler/sse.d.ts +34 -0
- package/types/mvc/handler/upload.d.ts +36 -36
- package/types/mvc/index.d.ts +22 -22
- package/types/mvc/interceptor.d.ts +11 -11
- package/types/mvc/query.d.ts +13 -13
- package/types/mvc/render/file.d.ts +10 -10
- package/types/mvc/render/html/html.d.ts +98 -98
- package/types/mvc/render/html/index.d.ts +11 -11
- package/types/mvc/render/html/style.d.ts +1201 -1201
- package/types/mvc/render/index.d.ts +4 -4
- package/types/mvc/render/json.d.ts +17 -17
- package/types/mvc/render/text.d.ts +10 -10
- package/types/mvc/router.d.ts +11 -11
- package/types/mvc/server.d.ts +90 -90
- package/types/mvc/static/header.d.ts +27 -27
- package/types/mvc/static/index.d.ts +3 -3
- package/types/mvc/static/mime-type.d.ts +2 -2
- package/types/mvc/static/server-cache-config.d.ts +30 -30
- package/types/mvc/static/server-cache.d.ts +76 -76
- package/types/mvc/static/static-handler.d.ts +77 -77
- package/types/mysql/config.d.ts +90 -90
- package/types/mysql/exception.d.ts +7 -7
- package/types/mysql/index.d.ts +16 -16
- package/types/mysql/manager/base.d.ts +165 -159
- package/types/mysql/manager/index.d.ts +36 -36
- package/types/mysql/manager/ops/count.d.ts +13 -13
- package/types/mysql/manager/ops/criteria.d.ts +134 -134
- package/types/mysql/manager/ops/delete.d.ts +46 -46
- package/types/mysql/manager/ops/exist.d.ts +6 -6
- package/types/mysql/manager/ops/find.d.ts +86 -70
- package/types/mysql/manager/ops/index.d.ts +10 -10
- package/types/mysql/manager/ops/insert.d.ts +18 -18
- package/types/mysql/manager/ops/modify.d.ts +3 -3
- package/types/mysql/manager/ops/paginate.d.ts +36 -36
- package/types/mysql/manager/ops/query.d.ts +3 -3
- package/types/mysql/manager/ops/update.d.ts +76 -76
- package/types/mysql/manager/ops/utils.d.ts +5 -5
- package/types/mysql/manager/tx-strict.d.ts +36 -35
- package/types/mysql/manager/tx.d.ts +15 -15
- package/types/mysql/manager/utils.d.ts +17 -17
- package/types/mysql/migration.d.ts +8 -8
- package/types/mysql/table-info.d.ts +36 -36
- package/types/task/daily.d.ts +16 -16
- package/types/task/fixed-delay.d.ts +9 -9
- package/types/task/fixed-rate.d.ts +9 -9
- package/types/task/index.d.ts +4 -4
- package/types/task/task.d.ts +34 -34
- package/types/validation/exception.d.ts +38 -38
- package/types/validation/index.d.ts +32 -32
- package/types/validation/validator/array.d.ts +5 -5
- package/types/validation/validator/enum.d.ts +8 -8
- package/types/validation/validator/index.d.ts +11 -11
- package/types/validation/validator/length.d.ts +10 -10
- package/types/validation/validator/max-length.d.ts +8 -8
- package/types/validation/validator/max.d.ts +7 -7
- package/types/validation/validator/min-length.d.ts +6 -6
- package/types/validation/validator/min.d.ts +7 -7
- package/types/validation/validator/not-blank.d.ts +7 -7
- package/types/validation/validator/not-null.d.ts +6 -6
- package/types/validation/validator/plain-obj.d.ts +7 -7
- package/types/validation/validator/regexp.d.ts +8 -8
|
@@ -1,216 +1,216 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateMany = exports.updateOne = exports.partialUpdate = exports.update = void 0;
|
|
4
|
-
const exception_1 = require("../../exception");
|
|
5
|
-
const criteria_1 = require("./criteria");
|
|
6
|
-
const utils_1 = require("../utils");
|
|
7
|
-
const utils_2 = require("./utils");
|
|
8
|
-
/**
|
|
9
|
-
* 更新
|
|
10
|
-
* @param config
|
|
11
|
-
* @param connection
|
|
12
|
-
* @param mapping
|
|
13
|
-
* @param data
|
|
14
|
-
* @returns
|
|
15
|
-
*/
|
|
16
|
-
async function update(config, connection, table, data) {
|
|
17
|
-
// 列信息
|
|
18
|
-
let columns = [...table.columns];
|
|
19
|
-
// 创建时间不更新
|
|
20
|
-
if (table.createdDate) {
|
|
21
|
-
const { column } = table.createdDate;
|
|
22
|
-
columns = columns.filter(col => col !== column);
|
|
23
|
-
}
|
|
24
|
-
if (table.updatedDate) {
|
|
25
|
-
const updatedDate = table.updatedDate.type === 'date' ? new Date() : new Date().getTime();
|
|
26
|
-
data[table.updatedDate.column] = updatedDate;
|
|
27
|
-
columns.push(table.updatedDate.column);
|
|
28
|
-
}
|
|
29
|
-
// 构建 sql
|
|
30
|
-
const sql = `update ?? set ${columns.map(() => ' ?? = ? ').join(',')} where ?? = ?`;
|
|
31
|
-
// 值
|
|
32
|
-
const values = [
|
|
33
|
-
table.tableName,
|
|
34
|
-
...columns.flatMap(col => [col, (0, utils_2.processColumnValue)(data[col])]),
|
|
35
|
-
table.id,
|
|
36
|
-
data[table.id]
|
|
37
|
-
];
|
|
38
|
-
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
39
|
-
const packet = res;
|
|
40
|
-
if (packet.affectedRows !== 1) {
|
|
41
|
-
throw new exception_1.MysqlException(`Failed to update record, possibly due to non-existent record,table:${table.tableName},primary key: ${data[table.id]}`);
|
|
42
|
-
}
|
|
43
|
-
return data;
|
|
44
|
-
}
|
|
45
|
-
exports.update = update;
|
|
46
|
-
/**
|
|
47
|
-
* 转换更新器
|
|
48
|
-
* @param table
|
|
49
|
-
* @param updater
|
|
50
|
-
* @returns
|
|
51
|
-
*/
|
|
52
|
-
function updatorToSql(table, updater) {
|
|
53
|
-
const values = [];
|
|
54
|
-
// 更新操作
|
|
55
|
-
const updateFragList = [];
|
|
56
|
-
// 更新时间
|
|
57
|
-
if (table.updatedDate) {
|
|
58
|
-
const updatedDate = table.updatedDate.type === 'date' ? new Date() : new Date().getTime();
|
|
59
|
-
updateFragList.push(' ?? = ?');
|
|
60
|
-
values.push(table.updatedDate.column, updatedDate);
|
|
61
|
-
}
|
|
62
|
-
for (const column in updater) {
|
|
63
|
-
// 过滤掉id
|
|
64
|
-
if (column === table.id) {
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
const val = updater[column];
|
|
68
|
-
// undefined 表示不参与更新,作用是方便编写一些特殊的逻辑,比如特定情况下不更新
|
|
69
|
-
if (val === undefined) {
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
// 兼容将值设置成 null 的情况,和 ['setNull’] 等同
|
|
73
|
-
if (val === null) {
|
|
74
|
-
updateFragList.push(' ?? = NULL ');
|
|
75
|
-
values.push(column);
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
if (Array.isArray(val)) {
|
|
79
|
-
// set null
|
|
80
|
-
if (val[0] === 'setNull') {
|
|
81
|
-
updateFragList.push(' ?? = NULL ');
|
|
82
|
-
values.push(column);
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (val[0] === 'inc') {
|
|
86
|
-
updateFragList.push(' ?? = ?? + ? ');
|
|
87
|
-
values.push(column, column, val[1]);
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (val[0] === 'set') {
|
|
91
|
-
updateFragList.push(' ?? = ? ');
|
|
92
|
-
values.push(column, (0, utils_2.processColumnValue)(val[1]));
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
updateFragList.push(' ?? = ? ');
|
|
97
|
-
values.push(column, (0, utils_2.processColumnValue)(val));
|
|
98
|
-
}
|
|
99
|
-
return { sql: updateFragList.join(','), values };
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* 部分更新
|
|
103
|
-
* @param connection
|
|
104
|
-
* @param mapping
|
|
105
|
-
* @param type
|
|
106
|
-
* @param data
|
|
107
|
-
*/
|
|
108
|
-
async function partialUpdate(config, connection, table, data) {
|
|
109
|
-
if (!data[table.id]) {
|
|
110
|
-
throw new exception_1.MysqlException(`Can't do a partial update, the data to be updated does not contain a primary key,table: ${table.tableName},column:${JSON.stringify(data)}`);
|
|
111
|
-
}
|
|
112
|
-
const id = data[table.id];
|
|
113
|
-
if (typeof id !== 'string' && typeof id !== 'number') {
|
|
114
|
-
throw new exception_1.MysqlException('Primary key can only be of string or number type');
|
|
115
|
-
}
|
|
116
|
-
if (Object.keys(data).length < 2) {
|
|
117
|
-
throw new exception_1.MysqlException(`Can't do a partial update, data must contain at least one column outside of the primary key,table: ${table.tableName},column:${JSON.stringify(data)}`);
|
|
118
|
-
}
|
|
119
|
-
const fieldNames = Object.keys(data);
|
|
120
|
-
for (const name of fieldNames) {
|
|
121
|
-
if (name !== table.id && !table.columns.some(col => col === name)) {
|
|
122
|
-
throw new exception_1.MysqlException(`Can't do a partial update,there are unconfigured columns in the data,table: ${table.tableName},unconfigured column:${name}`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
let sql = ` update ?? `;
|
|
126
|
-
const values = [table.tableName];
|
|
127
|
-
// 更新操作
|
|
128
|
-
const convertRes = updatorToSql(table, data);
|
|
129
|
-
if (!convertRes.sql) {
|
|
130
|
-
throw new exception_1.MysqlException('No fields were specified to be updated!');
|
|
131
|
-
}
|
|
132
|
-
values.push(...convertRes.values);
|
|
133
|
-
sql += ` set ${convertRes.sql} where ?? = ?`;
|
|
134
|
-
values.push(table.id, id);
|
|
135
|
-
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
136
|
-
const packet = res;
|
|
137
|
-
return packet.affectedRows === 1;
|
|
138
|
-
}
|
|
139
|
-
exports.partialUpdate = partialUpdate;
|
|
140
|
-
/**
|
|
141
|
-
* 更新指定的一条记录
|
|
142
|
-
* @param config
|
|
143
|
-
* @param connection
|
|
144
|
-
* @param table
|
|
145
|
-
* @param query
|
|
146
|
-
* @param data
|
|
147
|
-
*/
|
|
148
|
-
async function updateOne(config, connection, table, query, updater) {
|
|
149
|
-
const values = [];
|
|
150
|
-
const mysqlQuery = (0, criteria_1.buildQuery)(query);
|
|
151
|
-
if (!mysqlQuery) {
|
|
152
|
-
throw new exception_1.MysqlException('No valid criteria specified.');
|
|
153
|
-
}
|
|
154
|
-
let sql = ` update ?? `;
|
|
155
|
-
values.push(table.tableName);
|
|
156
|
-
// 更新操作
|
|
157
|
-
const convertRes = updatorToSql(table, updater);
|
|
158
|
-
if (!convertRes.sql) {
|
|
159
|
-
throw new exception_1.MysqlException('No fields were specified to be updated!');
|
|
160
|
-
}
|
|
161
|
-
sql += ` set ${convertRes.sql} `;
|
|
162
|
-
values.push(...convertRes.values);
|
|
163
|
-
sql += ` where ${mysqlQuery.sql} limit 1`;
|
|
164
|
-
values.push(...mysqlQuery.values);
|
|
165
|
-
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
166
|
-
const packet = res;
|
|
167
|
-
return packet.affectedRows === 1;
|
|
168
|
-
}
|
|
169
|
-
exports.updateOne = updateOne;
|
|
170
|
-
/**
|
|
171
|
-
* 更新所有匹配条件的记录
|
|
172
|
-
* @param config
|
|
173
|
-
* @param connection 连接
|
|
174
|
-
* @param table 表
|
|
175
|
-
* @param query 查询条件
|
|
176
|
-
* @param updater 更新操作,支持置空和递增(需要使用元组)
|
|
177
|
-
*/
|
|
178
|
-
async function updateMany(config, connection, opts) {
|
|
179
|
-
const values = [];
|
|
180
|
-
const mysqlQuery = (0, criteria_1.buildQuery)(opts.query);
|
|
181
|
-
if (!mysqlQuery) {
|
|
182
|
-
throw new exception_1.MysqlException('No valid criteria specified.');
|
|
183
|
-
}
|
|
184
|
-
let sql = ` update ?? `;
|
|
185
|
-
values.push(opts.table.tableName);
|
|
186
|
-
// 更新操作
|
|
187
|
-
const convertRes = updatorToSql(opts.table, opts.updater);
|
|
188
|
-
if (!convertRes.sql) {
|
|
189
|
-
throw new exception_1.MysqlException('No fields were specified to be updated!');
|
|
190
|
-
}
|
|
191
|
-
sql += ` set ${convertRes.sql} `;
|
|
192
|
-
values.push(...convertRes.values);
|
|
193
|
-
sql += ` where ${mysqlQuery.sql} `;
|
|
194
|
-
values.push(...mysqlQuery.values);
|
|
195
|
-
// 排序
|
|
196
|
-
if (opts.orderBy && opts.orderBy.length) {
|
|
197
|
-
opts.orderBy.forEach((orderBy, idx) => {
|
|
198
|
-
const [field, sort] = orderBy;
|
|
199
|
-
if (idx == 0) {
|
|
200
|
-
sql += ` order by ?? ${sort} `;
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
sql += ` , ?? ${sort} `;
|
|
204
|
-
}
|
|
205
|
-
values.push(field);
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
// 数量限制
|
|
209
|
-
if (opts.limit) {
|
|
210
|
-
sql += ` limit ${opts.limit} `;
|
|
211
|
-
}
|
|
212
|
-
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
213
|
-
const packet = res;
|
|
214
|
-
return packet.affectedRows;
|
|
215
|
-
}
|
|
216
|
-
exports.updateMany = updateMany;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateMany = exports.updateOne = exports.partialUpdate = exports.update = void 0;
|
|
4
|
+
const exception_1 = require("../../exception");
|
|
5
|
+
const criteria_1 = require("./criteria");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const utils_2 = require("./utils");
|
|
8
|
+
/**
|
|
9
|
+
* 更新
|
|
10
|
+
* @param config
|
|
11
|
+
* @param connection
|
|
12
|
+
* @param mapping
|
|
13
|
+
* @param data
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
async function update(config, connection, table, data) {
|
|
17
|
+
// 列信息
|
|
18
|
+
let columns = [...table.columns];
|
|
19
|
+
// 创建时间不更新
|
|
20
|
+
if (table.createdDate) {
|
|
21
|
+
const { column } = table.createdDate;
|
|
22
|
+
columns = columns.filter(col => col !== column);
|
|
23
|
+
}
|
|
24
|
+
if (table.updatedDate) {
|
|
25
|
+
const updatedDate = table.updatedDate.type === 'date' ? new Date() : new Date().getTime();
|
|
26
|
+
data[table.updatedDate.column] = updatedDate;
|
|
27
|
+
columns.push(table.updatedDate.column);
|
|
28
|
+
}
|
|
29
|
+
// 构建 sql
|
|
30
|
+
const sql = `update ?? set ${columns.map(() => ' ?? = ? ').join(',')} where ?? = ?`;
|
|
31
|
+
// 值
|
|
32
|
+
const values = [
|
|
33
|
+
table.tableName,
|
|
34
|
+
...columns.flatMap(col => [col, (0, utils_2.processColumnValue)(data[col])]),
|
|
35
|
+
table.id,
|
|
36
|
+
data[table.id]
|
|
37
|
+
];
|
|
38
|
+
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
39
|
+
const packet = res;
|
|
40
|
+
if (packet.affectedRows !== 1) {
|
|
41
|
+
throw new exception_1.MysqlException(`Failed to update record, possibly due to non-existent record,table:${table.tableName},primary key: ${data[table.id]}`);
|
|
42
|
+
}
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
exports.update = update;
|
|
46
|
+
/**
|
|
47
|
+
* 转换更新器
|
|
48
|
+
* @param table
|
|
49
|
+
* @param updater
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
function updatorToSql(table, updater) {
|
|
53
|
+
const values = [];
|
|
54
|
+
// 更新操作
|
|
55
|
+
const updateFragList = [];
|
|
56
|
+
// 更新时间
|
|
57
|
+
if (table.updatedDate) {
|
|
58
|
+
const updatedDate = table.updatedDate.type === 'date' ? new Date() : new Date().getTime();
|
|
59
|
+
updateFragList.push(' ?? = ?');
|
|
60
|
+
values.push(table.updatedDate.column, updatedDate);
|
|
61
|
+
}
|
|
62
|
+
for (const column in updater) {
|
|
63
|
+
// 过滤掉id
|
|
64
|
+
if (column === table.id) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const val = updater[column];
|
|
68
|
+
// undefined 表示不参与更新,作用是方便编写一些特殊的逻辑,比如特定情况下不更新
|
|
69
|
+
if (val === undefined) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// 兼容将值设置成 null 的情况,和 ['setNull’] 等同
|
|
73
|
+
if (val === null) {
|
|
74
|
+
updateFragList.push(' ?? = NULL ');
|
|
75
|
+
values.push(column);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (Array.isArray(val)) {
|
|
79
|
+
// set null
|
|
80
|
+
if (val[0] === 'setNull') {
|
|
81
|
+
updateFragList.push(' ?? = NULL ');
|
|
82
|
+
values.push(column);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (val[0] === 'inc') {
|
|
86
|
+
updateFragList.push(' ?? = ?? + ? ');
|
|
87
|
+
values.push(column, column, val[1]);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (val[0] === 'set') {
|
|
91
|
+
updateFragList.push(' ?? = ? ');
|
|
92
|
+
values.push(column, (0, utils_2.processColumnValue)(val[1]));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
updateFragList.push(' ?? = ? ');
|
|
97
|
+
values.push(column, (0, utils_2.processColumnValue)(val));
|
|
98
|
+
}
|
|
99
|
+
return { sql: updateFragList.join(','), values };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 部分更新
|
|
103
|
+
* @param connection
|
|
104
|
+
* @param mapping
|
|
105
|
+
* @param type
|
|
106
|
+
* @param data
|
|
107
|
+
*/
|
|
108
|
+
async function partialUpdate(config, connection, table, data) {
|
|
109
|
+
if (!data[table.id]) {
|
|
110
|
+
throw new exception_1.MysqlException(`Can't do a partial update, the data to be updated does not contain a primary key,table: ${table.tableName},column:${JSON.stringify(data)}`);
|
|
111
|
+
}
|
|
112
|
+
const id = data[table.id];
|
|
113
|
+
if (typeof id !== 'string' && typeof id !== 'number') {
|
|
114
|
+
throw new exception_1.MysqlException('Primary key can only be of string or number type');
|
|
115
|
+
}
|
|
116
|
+
if (Object.keys(data).length < 2) {
|
|
117
|
+
throw new exception_1.MysqlException(`Can't do a partial update, data must contain at least one column outside of the primary key,table: ${table.tableName},column:${JSON.stringify(data)}`);
|
|
118
|
+
}
|
|
119
|
+
const fieldNames = Object.keys(data);
|
|
120
|
+
for (const name of fieldNames) {
|
|
121
|
+
if (name !== table.id && !table.columns.some(col => col === name)) {
|
|
122
|
+
throw new exception_1.MysqlException(`Can't do a partial update,there are unconfigured columns in the data,table: ${table.tableName},unconfigured column:${name}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
let sql = ` update ?? `;
|
|
126
|
+
const values = [table.tableName];
|
|
127
|
+
// 更新操作
|
|
128
|
+
const convertRes = updatorToSql(table, data);
|
|
129
|
+
if (!convertRes.sql) {
|
|
130
|
+
throw new exception_1.MysqlException('No fields were specified to be updated!');
|
|
131
|
+
}
|
|
132
|
+
values.push(...convertRes.values);
|
|
133
|
+
sql += ` set ${convertRes.sql} where ?? = ?`;
|
|
134
|
+
values.push(table.id, id);
|
|
135
|
+
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
136
|
+
const packet = res;
|
|
137
|
+
return packet.affectedRows === 1;
|
|
138
|
+
}
|
|
139
|
+
exports.partialUpdate = partialUpdate;
|
|
140
|
+
/**
|
|
141
|
+
* 更新指定的一条记录
|
|
142
|
+
* @param config
|
|
143
|
+
* @param connection
|
|
144
|
+
* @param table
|
|
145
|
+
* @param query
|
|
146
|
+
* @param data
|
|
147
|
+
*/
|
|
148
|
+
async function updateOne(config, connection, table, query, updater) {
|
|
149
|
+
const values = [];
|
|
150
|
+
const mysqlQuery = (0, criteria_1.buildQuery)(query);
|
|
151
|
+
if (!mysqlQuery) {
|
|
152
|
+
throw new exception_1.MysqlException('No valid criteria specified.');
|
|
153
|
+
}
|
|
154
|
+
let sql = ` update ?? `;
|
|
155
|
+
values.push(table.tableName);
|
|
156
|
+
// 更新操作
|
|
157
|
+
const convertRes = updatorToSql(table, updater);
|
|
158
|
+
if (!convertRes.sql) {
|
|
159
|
+
throw new exception_1.MysqlException('No fields were specified to be updated!');
|
|
160
|
+
}
|
|
161
|
+
sql += ` set ${convertRes.sql} `;
|
|
162
|
+
values.push(...convertRes.values);
|
|
163
|
+
sql += ` where ${mysqlQuery.sql} limit 1`;
|
|
164
|
+
values.push(...mysqlQuery.values);
|
|
165
|
+
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
166
|
+
const packet = res;
|
|
167
|
+
return packet.affectedRows === 1;
|
|
168
|
+
}
|
|
169
|
+
exports.updateOne = updateOne;
|
|
170
|
+
/**
|
|
171
|
+
* 更新所有匹配条件的记录
|
|
172
|
+
* @param config
|
|
173
|
+
* @param connection 连接
|
|
174
|
+
* @param table 表
|
|
175
|
+
* @param query 查询条件
|
|
176
|
+
* @param updater 更新操作,支持置空和递增(需要使用元组)
|
|
177
|
+
*/
|
|
178
|
+
async function updateMany(config, connection, opts) {
|
|
179
|
+
const values = [];
|
|
180
|
+
const mysqlQuery = (0, criteria_1.buildQuery)(opts.query);
|
|
181
|
+
if (!mysqlQuery) {
|
|
182
|
+
throw new exception_1.MysqlException('No valid criteria specified.');
|
|
183
|
+
}
|
|
184
|
+
let sql = ` update ?? `;
|
|
185
|
+
values.push(opts.table.tableName);
|
|
186
|
+
// 更新操作
|
|
187
|
+
const convertRes = updatorToSql(opts.table, opts.updater);
|
|
188
|
+
if (!convertRes.sql) {
|
|
189
|
+
throw new exception_1.MysqlException('No fields were specified to be updated!');
|
|
190
|
+
}
|
|
191
|
+
sql += ` set ${convertRes.sql} `;
|
|
192
|
+
values.push(...convertRes.values);
|
|
193
|
+
sql += ` where ${mysqlQuery.sql} `;
|
|
194
|
+
values.push(...mysqlQuery.values);
|
|
195
|
+
// 排序
|
|
196
|
+
if (opts.orderBy && opts.orderBy.length) {
|
|
197
|
+
opts.orderBy.forEach((orderBy, idx) => {
|
|
198
|
+
const [field, sort] = orderBy;
|
|
199
|
+
if (idx == 0) {
|
|
200
|
+
sql += ` order by ?? ${sort} `;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
sql += ` , ?? ${sort} `;
|
|
204
|
+
}
|
|
205
|
+
values.push(field);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
// 数量限制
|
|
209
|
+
if (opts.limit) {
|
|
210
|
+
sql += ` limit ${opts.limit} `;
|
|
211
|
+
}
|
|
212
|
+
const res = await (0, utils_1.promiseQuery)(config, connection, sql, values);
|
|
213
|
+
const packet = res;
|
|
214
|
+
return packet.affectedRows;
|
|
215
|
+
}
|
|
216
|
+
exports.updateMany = updateMany;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processColumnValue = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* 处理列的值,对特殊类型 json 进行加工处理后返回
|
|
6
|
-
* @param value
|
|
7
|
-
*/
|
|
8
|
-
function processColumnValue(value) {
|
|
9
|
-
// date 类型 typeof 也是 object ,先排除
|
|
10
|
-
if (value instanceof Date) {
|
|
11
|
-
return value;
|
|
12
|
-
}
|
|
13
|
-
// buffer 也是
|
|
14
|
-
if (value instanceof Buffer) {
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
// json
|
|
18
|
-
if (typeof value === 'object') {
|
|
19
|
-
return JSON.stringify(value);
|
|
20
|
-
}
|
|
21
|
-
// 其它的情况直接返回
|
|
22
|
-
return value;
|
|
23
|
-
}
|
|
24
|
-
exports.processColumnValue = processColumnValue;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processColumnValue = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 处理列的值,对特殊类型 json 进行加工处理后返回
|
|
6
|
+
* @param value
|
|
7
|
+
*/
|
|
8
|
+
function processColumnValue(value) {
|
|
9
|
+
// date 类型 typeof 也是 object ,先排除
|
|
10
|
+
if (value instanceof Date) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
// buffer 也是
|
|
14
|
+
if (value instanceof Buffer) {
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
// json
|
|
18
|
+
if (typeof value === 'object') {
|
|
19
|
+
return JSON.stringify(value);
|
|
20
|
+
}
|
|
21
|
+
// 其它的情况直接返回
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
exports.processColumnValue = processColumnValue;
|