midway-fatcms 0.0.1-beta.4 → 0.0.1-beta.41
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/.eslintrc.json +14 -0
- package/.prettierrc.js +4 -0
- package/README.md +7 -0
- package/dist/config/config.default.js +58 -15
- package/dist/config/seed/aeskey.txt +1 -1
- package/dist/configuration.d.ts +1 -0
- package/dist/configuration.js +33 -9
- package/dist/controller/base/BaseApiController.d.ts +7 -1
- package/dist/controller/base/BaseApiController.js +32 -6
- package/dist/controller/gateway/AsyncTaskController.d.ts +20 -0
- package/dist/controller/gateway/AsyncTaskController.js +181 -0
- package/dist/controller/gateway/CrudMtdGatewayController.d.ts +3 -3
- package/dist/controller/gateway/CrudMtdGatewayController.js +9 -6
- package/dist/controller/gateway/DocGatewayController.js +14 -9
- package/dist/controller/gateway/FileController.d.ts +3 -2
- package/dist/controller/gateway/PublicApiController.js +4 -6
- package/dist/controller/gateway/StaticController.d.ts +0 -1
- package/dist/controller/gateway/StaticController.js +40 -39
- package/dist/controller/helpers.controller.d.ts +1 -1
- package/dist/controller/home.controller.js +4 -3
- package/dist/controller/manage/AnyApiMangeApi.js +2 -2
- package/dist/controller/manage/AppLogMangeApi.js +2 -2
- package/dist/controller/manage/AppMangeApi.js +2 -2
- package/dist/controller/manage/AppPageMangeApi.js +2 -2
- package/dist/controller/manage/AppSchemaHistoryApi.js +2 -2
- package/dist/controller/manage/CrudMethodsMangeApi.js +2 -2
- package/dist/controller/manage/CrudStandardDesignApi.d.ts +1 -1
- package/dist/controller/manage/CrudStandardDesignApi.js +86 -83
- package/dist/controller/manage/DataDictManageApi.d.ts +1 -1
- package/dist/controller/manage/DataDictManageApi.js +1 -1
- package/dist/controller/manage/DeployManageApi.d.ts +1 -1
- package/dist/controller/manage/DeployManageApi.js +38 -34
- package/dist/controller/manage/DocLibManageApi.js +2 -2
- package/dist/controller/manage/DocManageApi.js +2 -2
- package/dist/controller/manage/FileManageApi.js +1 -1
- package/dist/controller/manage/LowCodeTplManageApi.js +2 -2
- package/dist/controller/manage/MenuManageApi.js +2 -2
- package/dist/controller/manage/ProxyApiMangeApi.js +2 -2
- package/dist/controller/manage/SuperAdminManageApi.d.ts +2 -2
- package/dist/controller/manage/SuperAdminManageApi.js +12 -8
- package/dist/controller/manage/SysConfigMangeApi.d.ts +1 -1
- package/dist/controller/manage/SysConfigMangeApi.js +8 -6
- package/dist/controller/manage/SystemInfoManageApi.d.ts +1 -1
- package/dist/controller/manage/SystemInfoManageApi.js +7 -1
- package/dist/controller/manage/UserAccountManageApi.d.ts +2 -2
- package/dist/controller/manage/UserAccountManageApi.js +7 -2
- package/dist/controller/manage/WorkbenchMangeApi.js +3 -3
- package/dist/controller/myinfo/AuthController.d.ts +0 -4
- package/dist/controller/myinfo/AuthController.js +1 -54
- package/dist/controller/render/AppRenderController.js +12 -5
- package/dist/controller/test.controller.d.ts +1 -1
- package/dist/controller/test.controller.js +5 -5
- package/dist/index.d.ts +35 -4
- package/dist/index.js +35 -4
- package/dist/libs/crud-pro/CrudPro.d.ts +1 -0
- package/dist/libs/crud-pro/CrudPro.js +5 -0
- package/dist/libs/crud-pro/defaultConfigs.js +2 -0
- package/dist/libs/crud-pro/interfaces.d.ts +7 -1
- package/dist/libs/crud-pro/models/ExecuteContext.d.ts +12 -5
- package/dist/libs/crud-pro/models/ExecuteContextFunc.d.ts +8 -1
- package/dist/libs/crud-pro/models/ExecuteContextFunc.js +8 -0
- package/dist/libs/crud-pro/models/RequestCfgModel.d.ts +1 -1
- package/dist/libs/crud-pro/models/ResModel.d.ts +16 -0
- package/dist/libs/crud-pro/models/ResModel.js +2 -0
- package/dist/libs/crud-pro/models/SqlCfgModel.d.ts +1 -1
- package/dist/libs/crud-pro/models/Transaction.d.ts +1 -0
- package/dist/libs/crud-pro/models/Transaction.js +7 -0
- package/dist/libs/crud-pro/models/TransactionSqlServer.js +1 -1
- package/dist/libs/crud-pro/services/CrudProCachedCfgService.d.ts +1 -0
- package/dist/libs/crud-pro/services/CrudProCachedCfgService.js +27 -15
- package/dist/libs/crud-pro/services/CrudProExecuteSqlService.js +17 -19
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.d.ts +1 -1
- package/dist/libs/crud-pro/services/CrudProGenSqlCondition.js +10 -12
- package/dist/libs/crud-pro/services/CrudProGenSqlService.js +14 -23
- package/dist/libs/crud-pro/services/CrudProOriginToExecuteSql.js +7 -6
- package/dist/libs/crud-pro/services/CrudProServiceBase.d.ts +2 -6
- package/dist/libs/crud-pro/services/CrudProServiceBase.js +15 -3
- package/dist/libs/crud-pro/services/CrudProTableMetaService.d.ts +1 -0
- package/dist/libs/crud-pro/services/CrudProTableMetaService.js +32 -7
- package/dist/libs/crud-pro/sql.txt +120 -120
- package/dist/libs/crud-pro/utils/DatabaseName.js +24 -3
- package/dist/libs/crud-pro/utils/MixinUtils.js +1 -1
- package/dist/libs/crud-pro/utils/ValidateUtils.js +1 -1
- package/dist/libs/crud-pro/utils/sqlConvert/convertColumnName.js +2 -2
- package/dist/libs/crud-pro/utils/sqlConvert/convertMix.d.ts +3 -0
- package/dist/libs/crud-pro/utils/sqlConvert/convertMix.js +22 -0
- package/dist/libs/global-config/global-config.d.ts +45 -0
- package/dist/libs/global-config/global-config.js +33 -0
- package/dist/libs/utils/base64.d.ts +9 -0
- package/dist/libs/utils/base64.js +42 -0
- package/dist/libs/utils/errorToString.d.ts +2 -0
- package/dist/libs/utils/errorToString.js +57 -0
- package/dist/libs/utils/fatcms-request.js +2 -2
- package/dist/libs/utils/functions.d.ts +2 -1
- package/dist/libs/utils/functions.js +6 -1
- package/dist/middleware/forbidden.middleware.js +4 -20
- package/dist/middleware/global.middleware.js +30 -10
- package/dist/middleware/permission.middleware.js +1 -1
- package/dist/models/AsyncTaskModel.d.ts +74 -0
- package/dist/models/AsyncTaskModel.js +31 -0
- package/dist/models/RedisKeys.d.ts +14 -0
- package/dist/models/RedisKeys.js +17 -0
- package/dist/models/SystemEntities.d.ts +8 -1
- package/dist/models/SystemEntities.js +7 -0
- package/dist/models/SystemTables.d.ts +1 -3
- package/dist/models/SystemTables.js +2 -4
- package/dist/models/bizmodels.d.ts +28 -0
- package/dist/models/bizmodels.js +6 -1
- package/dist/schedule/anonymousContext.d.ts +14 -0
- package/dist/schedule/anonymousContext.js +59 -0
- package/dist/schedule/index.d.ts +4 -3
- package/dist/schedule/index.js +8 -67
- package/dist/schedule/runSchedule.d.ts +12 -0
- package/dist/schedule/runSchedule.js +68 -0
- package/dist/schedule/scheduleNames.d.ts +13 -0
- package/dist/schedule/scheduleNames.js +17 -0
- package/dist/service/AuthService.js +8 -5
- package/dist/service/EnumInfoService.js +9 -5
- package/dist/service/FileCenterService.js +13 -9
- package/dist/service/SysConfigService.d.ts +1 -1
- package/dist/service/SysConfigService.js +4 -2
- package/dist/service/UserAccountService.js +10 -6
- package/dist/service/UserSessionService.d.ts +21 -0
- package/dist/service/UserSessionService.js +73 -2
- package/dist/service/VisitStatService.d.ts +1 -1
- package/dist/service/VisitStatService.js +20 -27
- package/dist/service/WorkbenchService.d.ts +33 -0
- package/dist/service/WorkbenchService.js +70 -12
- package/dist/service/anyapi/AnyApiSandboxService.js +12 -12
- package/dist/service/anyapi/AnyApiService.js +4 -2
- package/dist/service/asyncTask/AsyncTaskRunnerService.d.ts +50 -0
- package/dist/service/asyncTask/AsyncTaskRunnerService.js +287 -0
- package/dist/service/asyncTask/AsyncTaskService.d.ts +7 -0
- package/dist/service/asyncTask/AsyncTaskService.js +34 -0
- package/dist/service/asyncTask/handler/ExcelInfoModel.d.ts +10 -0
- package/dist/service/asyncTask/handler/ExcelInfoModel.js +2 -0
- package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.d.ts +7 -0
- package/dist/service/asyncTask/handler/ExportExcelAsyncTaskHandler.js +216 -0
- package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.d.ts +36 -0
- package/dist/service/asyncTask/handler/ExportExcelByInnerHttpHandler.js +139 -0
- package/dist/service/asyncTask/handler/ExportExcelByStdCrudHandler.d.ts +46 -0
- package/dist/service/asyncTask/handler/ExportExcelByStdCrudHandler.js +121 -0
- package/dist/service/base/BaseService.d.ts +12 -0
- package/dist/service/base/BaseService.js +22 -0
- package/dist/service/base/RedisCacheService.d.ts +7 -0
- package/dist/service/base/RedisCacheService.js +7 -0
- package/dist/service/crudstd/CrudStdService.d.ts +8 -1
- package/dist/service/crudstd/CrudStdService.js +63 -6
- package/dist/service/curd/CrudProQuick.d.ts +44 -0
- package/dist/service/curd/CrudProQuick.js +147 -0
- package/dist/service/curd/CurdMixByAccountService.d.ts +4 -4
- package/dist/service/curd/CurdMixByAccountService.js +12 -6
- package/dist/service/curd/CurdMixByDictService.d.ts +4 -4
- package/dist/service/curd/CurdMixByDictService.js +10 -7
- package/dist/service/curd/CurdMixByLinkToCustomService.d.ts +13 -4
- package/dist/service/curd/CurdMixByLinkToCustomService.js +73 -24
- package/dist/service/curd/CurdMixBySysConfigService.d.ts +3 -3
- package/dist/service/curd/CurdMixBySysConfigService.js +4 -2
- package/dist/service/curd/CurdMixByWorkbenchService.d.ts +3 -3
- package/dist/service/curd/CurdMixByWorkbenchService.js +4 -2
- package/dist/service/curd/CurdMixService.d.ts +13 -3
- package/dist/service/curd/CurdMixService.js +26 -2
- package/dist/service/curd/CurdMixUtils.d.ts +27 -4
- package/dist/service/curd/CurdMixUtils.js +115 -41
- package/dist/service/curd/CurdProService.d.ts +3 -10
- package/dist/service/curd/CurdProService.js +36 -148
- package/dist/service/curd/fixCfgModel.d.ts +3 -0
- package/dist/service/curd/fixCfgModel.js +107 -0
- package/dist/service/proxyapi/ProxyApiLoadService.js +7 -4
- package/dist/service/proxyapi/ProxyApiService.d.ts +1 -0
- package/dist/service/proxyapi/ProxyApiService.js +43 -9
- package/dist/views/404_app.html +31 -31
- package/dist/views/404_workbench.html +34 -34
- package/package.json +28 -24
- package/tsconfig.json +32 -0
- package/dist/controller/medstatistic/MedAdminController.d.ts +0 -35
- package/dist/controller/medstatistic/MedAdminController.js +0 -205
- package/dist/controller/medstatistic/MedClientController.d.ts +0 -28
- package/dist/controller/medstatistic/MedClientController.js +0 -188
- package/dist/controller/medstatistic/MedMessageService.d.ts +0 -19
- package/dist/controller/medstatistic/MedMessageService.js +0 -95
- package/dist/controller/medstatistic/MedScoreService.d.ts +0 -21
- package/dist/controller/medstatistic/MedScoreService.js +0 -107
- package/dist/controller/medstatistic/constants.d.ts +0 -32
- package/dist/controller/medstatistic/constants.js +0 -43
- package/src/config/config.default.ts +0 -172
- package/src/config/seed/aeskey.txt +0 -1
- package/src/config/utils.ts +0 -23
- package/src/configuration.ts +0 -83
- package/src/controller/base/BaseApiController.ts +0 -145
- package/src/controller/gateway/AnyApiGatewayController.ts +0 -33
- package/src/controller/gateway/CrudMtdGatewayController.ts +0 -107
- package/src/controller/gateway/CrudStdGatewayController.ts +0 -101
- package/src/controller/gateway/DocGatewayController.ts +0 -165
- package/src/controller/gateway/FileController.ts +0 -110
- package/src/controller/gateway/ProxyApiGatewayController.ts +0 -47
- package/src/controller/gateway/PublicApiController.ts +0 -145
- package/src/controller/gateway/StaticController.ts +0 -328
- package/src/controller/helpers.controller.ts +0 -161
- package/src/controller/home.controller.ts +0 -71
- package/src/controller/manage/AnyApiMangeApi.ts +0 -66
- package/src/controller/manage/AppLogMangeApi.ts +0 -53
- package/src/controller/manage/AppMangeApi.ts +0 -53
- package/src/controller/manage/AppPageMangeApi.ts +0 -52
- package/src/controller/manage/AppSchemaHistoryApi.ts +0 -49
- package/src/controller/manage/CrudMethodsMangeApi.ts +0 -49
- package/src/controller/manage/CrudStandardDesignApi.ts +0 -353
- package/src/controller/manage/DataDictManageApi.ts +0 -78
- package/src/controller/manage/DeployManageApi.ts +0 -179
- package/src/controller/manage/DocLibManageApi.ts +0 -69
- package/src/controller/manage/DocManageApi.ts +0 -99
- package/src/controller/manage/FileManageApi.ts +0 -45
- package/src/controller/manage/LowCodeTplManageApi.ts +0 -52
- package/src/controller/manage/MenuManageApi.ts +0 -63
- package/src/controller/manage/ProxyApiMangeApi.ts +0 -52
- package/src/controller/manage/SuperAdminManageApi.ts +0 -138
- package/src/controller/manage/SysConfigMangeApi.ts +0 -95
- package/src/controller/manage/SystemInfoManageApi.ts +0 -48
- package/src/controller/manage/UserAccountManageApi.ts +0 -88
- package/src/controller/manage/WorkbenchMangeApi.ts +0 -72
- package/src/controller/medstatistic/MedAdminController.ts +0 -221
- package/src/controller/medstatistic/MedClientController.ts +0 -188
- package/src/controller/medstatistic/MedMessageService.ts +0 -89
- package/src/controller/medstatistic/MedScoreService.ts +0 -108
- package/src/controller/medstatistic/constants.ts +0 -63
- package/src/controller/myinfo/AuthController.ts +0 -174
- package/src/controller/myinfo/MyInfoController.ts +0 -32
- package/src/controller/render/AppRenderController.ts +0 -76
- package/src/controller/test.controller.ts +0 -37
- package/src/filter/default.filter.ts +0 -13
- package/src/filter/notfound.filter.ts +0 -10
- package/src/index.ts +0 -71
- package/src/interface.ts +0 -31
- package/src/libs/crud-pro/CrudPro.ts +0 -158
- package/src/libs/crud-pro/defaultConfigs.ts +0 -13
- package/src/libs/crud-pro/exceptions.ts +0 -124
- package/src/libs/crud-pro/interfaces.ts +0 -183
- package/src/libs/crud-pro/models/ExecuteContext.ts +0 -111
- package/src/libs/crud-pro/models/ExecuteContextFunc.ts +0 -86
- package/src/libs/crud-pro/models/FuncContext.ts +0 -21
- package/src/libs/crud-pro/models/RequestCfgModel.ts +0 -141
- package/src/libs/crud-pro/models/RequestModel.ts +0 -141
- package/src/libs/crud-pro/models/ServiceHub.ts +0 -32
- package/src/libs/crud-pro/models/SqlCfgModel.ts +0 -52
- package/src/libs/crud-pro/models/SqlSegArg.ts +0 -13
- package/src/libs/crud-pro/models/Transaction.ts +0 -74
- package/src/libs/crud-pro/models/TransactionMySQL.ts +0 -79
- package/src/libs/crud-pro/models/TransactionPostgres.ts +0 -91
- package/src/libs/crud-pro/models/TransactionSqlServer.ts +0 -107
- package/src/libs/crud-pro/models/keys.ts +0 -159
- package/src/libs/crud-pro/services/CrudProCachedCfgService.ts +0 -75
- package/src/libs/crud-pro/services/CrudProExecuteFuncService.ts +0 -128
- package/src/libs/crud-pro/services/CrudProExecuteSqlService.ts +0 -279
- package/src/libs/crud-pro/services/CrudProFieldUpdateService.ts +0 -60
- package/src/libs/crud-pro/services/CrudProFieldValidateService.ts +0 -180
- package/src/libs/crud-pro/services/CrudProGenSqlCondition.ts +0 -373
- package/src/libs/crud-pro/services/CrudProGenSqlService.ts +0 -202
- package/src/libs/crud-pro/services/CrudProOriginToExecuteSql.ts +0 -397
- package/src/libs/crud-pro/services/CrudProServiceBase.ts +0 -98
- package/src/libs/crud-pro/services/CrudProTableMetaService.ts +0 -59
- package/src/libs/crud-pro/services/CurdProServiceHub.ts +0 -92
- package/src/libs/crud-pro/sql.txt +0 -120
- package/src/libs/crud-pro/utils/CompareUtils.ts +0 -23
- package/src/libs/crud-pro/utils/DatabaseName.ts +0 -40
- package/src/libs/crud-pro/utils/DateTimeUtils.ts +0 -20
- package/src/libs/crud-pro/utils/MemoryRefreshCache.ts +0 -64
- package/src/libs/crud-pro/utils/MessageParseUtils.ts +0 -33
- package/src/libs/crud-pro/utils/MixinUtils.ts +0 -285
- package/src/libs/crud-pro/utils/ModelUtils.ts +0 -55
- package/src/libs/crud-pro/utils/MultiKeyMap.ts +0 -72
- package/src/libs/crud-pro/utils/SqlFuncUtils.ts +0 -29
- package/src/libs/crud-pro/utils/TypeUtils.ts +0 -188
- package/src/libs/crud-pro/utils/ValidateUtils.ts +0 -167
- package/src/libs/crud-pro/utils/pool/MySQLUtils.ts +0 -20
- package/src/libs/crud-pro/utils/pool/PostgresUtils.ts +0 -22
- package/src/libs/crud-pro/utils/pool/SqlServerUtils.ts +0 -22
- package/src/libs/crud-pro/utils/sqlConvert/convertColumnName.ts +0 -26
- package/src/libs/crud-pro/utils/sqlConvert/convertMsSql.ts +0 -11
- package/src/libs/crud-pro/utils/sqlConvert/convertPgSql.ts +0 -11
- package/src/libs/crud-pro/utils/sqlConvert/convertPgType.ts +0 -129
- package/src/libs/utils/common-dto.ts +0 -52
- package/src/libs/utils/crypto-utils.ts +0 -52
- package/src/libs/utils/fatcms-request.ts +0 -115
- package/src/libs/utils/functions.ts +0 -67
- package/src/libs/utils/ordernum-utils.ts +0 -18
- package/src/libs/utils/parseConfig.ts +0 -62
- package/src/libs/utils/parseCreateSql.ts +0 -91
- package/src/libs/utils/render-utils.ts +0 -184
- package/src/middleware/forbidden.middleware.ts +0 -71
- package/src/middleware/global.middleware.ts +0 -278
- package/src/middleware/permission.middleware.ts +0 -81
- package/src/middleware/tx.middleware.ts +0 -30
- package/src/models/SystemEntities.ts +0 -115
- package/src/models/SystemPerm.ts +0 -105
- package/src/models/SystemTables.ts +0 -30
- package/src/models/bizmodels.ts +0 -89
- package/src/models/contextLogger.ts +0 -132
- package/src/models/devops.ts +0 -17
- package/src/models/userSession.ts +0 -216
- package/src/schedule/index.ts +0 -73
- package/src/service/AuthService.ts +0 -270
- package/src/service/EnumInfoService.ts +0 -129
- package/src/service/FileCenterService.ts +0 -394
- package/src/service/SysConfigService.ts +0 -34
- package/src/service/UserAccountService.ts +0 -100
- package/src/service/UserSessionService.ts +0 -81
- package/src/service/VisitStatService.ts +0 -179
- package/src/service/WorkbenchService.ts +0 -160
- package/src/service/anyapi/AnyApiSandboxService.ts +0 -121
- package/src/service/anyapi/AnyApiService.ts +0 -184
- package/src/service/base/ApiBaseService.ts +0 -42
- package/src/service/base/ApiRateLimiter.ts +0 -59
- package/src/service/base/BaseService.ts +0 -74
- package/src/service/base/RedisCacheService.ts +0 -38
- package/src/service/crudstd/CrudStdActionService.ts +0 -27
- package/src/service/crudstd/CrudStdConstant.ts +0 -62
- package/src/service/crudstd/CrudStdRelationService.ts +0 -78
- package/src/service/crudstd/CrudStdService.ts +0 -188
- package/src/service/curd/CurdMixByAccountService.ts +0 -83
- package/src/service/curd/CurdMixByDictService.ts +0 -113
- package/src/service/curd/CurdMixByLinkToCustomService.ts +0 -167
- package/src/service/curd/CurdMixBySysConfigService.ts +0 -78
- package/src/service/curd/CurdMixByWorkbenchService.ts +0 -68
- package/src/service/curd/CurdMixService.ts +0 -65
- package/src/service/curd/CurdMixUtils.ts +0 -248
- package/src/service/curd/CurdProService.ts +0 -379
- package/src/service/proxyapi/ProxyApiLoadService.ts +0 -165
- package/src/service/proxyapi/ProxyApiService.ts +0 -262
- package/src/service/proxyapi/ProxyApiUtils.ts +0 -32
- package/src/service/proxyapi/RouteHandler.ts +0 -8
- package/src/service/proxyapi/RouteTrie.ts +0 -74
- package/src/service/proxyapi/WeightedRandom.ts +0 -37
- package/src/service/proxyapi/WeightedRoundRobin.ts +0 -44
- package/src/views/404_app.html +0 -31
- package/src/views/404_workbench.html +0 -34
- package/src/views/static/favicon.ico +0 -0
|
@@ -10,6 +10,7 @@ class Transaction {
|
|
|
10
10
|
this.transactionMySQL = new TransactionMySQL_1.TransactionMySQL();
|
|
11
11
|
this.transactionPostgres = new TransactionPostgres_1.TransactionPostgres();
|
|
12
12
|
this.transactionSqlServer = new TransactionSqlServer_1.TransactionSqlServer();
|
|
13
|
+
this.isReleased = false;
|
|
13
14
|
}
|
|
14
15
|
getTxObj(pool) {
|
|
15
16
|
if (pool.dbType === keys_1.SqlDbType.postgres) {
|
|
@@ -28,6 +29,11 @@ class Transaction {
|
|
|
28
29
|
* @param pool
|
|
29
30
|
*/
|
|
30
31
|
async getTxConnection(pool) {
|
|
32
|
+
if (this.isReleased) {
|
|
33
|
+
const msg = '[Transaction] getTxConnection error, the txObject is isReleased, please check your code . DB request must be await';
|
|
34
|
+
console.error(msg);
|
|
35
|
+
throw new Error(msg);
|
|
36
|
+
}
|
|
31
37
|
const txObj = this.getTxObj(pool);
|
|
32
38
|
return txObj.getTxConnection(pool);
|
|
33
39
|
}
|
|
@@ -62,6 +68,7 @@ class Transaction {
|
|
|
62
68
|
await this.transactionMySQL.releaseTx();
|
|
63
69
|
await this.transactionPostgres.releaseTx();
|
|
64
70
|
await this.transactionSqlServer.releaseTx();
|
|
71
|
+
this.isReleased = true;
|
|
65
72
|
}
|
|
66
73
|
}
|
|
67
74
|
exports.Transaction = Transaction;
|
|
@@ -4,6 +4,7 @@ import { ICurdProServiceHub } from '../models/ServiceHub';
|
|
|
4
4
|
declare class CrudProCachedCfgService extends CrudProServiceBase {
|
|
5
5
|
constructor(serviceHub: ICurdProServiceHub);
|
|
6
6
|
getCachedCfgByMethod(method: string, isEnableCache: boolean): Promise<IRequestCfgModel | null>;
|
|
7
|
+
private getCachedCfgByMethodInner;
|
|
7
8
|
private loadMethodInfo;
|
|
8
9
|
private loadMethodInfoList;
|
|
9
10
|
}
|
|
@@ -4,6 +4,7 @@ exports.CrudProCachedCfgService = void 0;
|
|
|
4
4
|
const humps_1 = require("humps");
|
|
5
5
|
const CrudProServiceBase_1 = require("./CrudProServiceBase");
|
|
6
6
|
const MixinUtils_1 = require("../utils/MixinUtils");
|
|
7
|
+
const convertMix_1 = require("../utils/sqlConvert/convertMix");
|
|
7
8
|
const MemoryRefreshCache_1 = require("../utils/MemoryRefreshCache");
|
|
8
9
|
const methodCache = new MemoryRefreshCache_1.default();
|
|
9
10
|
function parseMethodInfo(methodInfo) {
|
|
@@ -17,42 +18,53 @@ class CrudProCachedCfgService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
17
18
|
super(serviceHub);
|
|
18
19
|
}
|
|
19
20
|
async getCachedCfgByMethod(method, isEnableCache) {
|
|
21
|
+
const methodInfo = await this.getCachedCfgByMethodInner(method, isEnableCache);
|
|
22
|
+
if (!methodInfo) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return { ...methodInfo };
|
|
26
|
+
}
|
|
27
|
+
async getCachedCfgByMethodInner(method, isEnableCache) {
|
|
20
28
|
// 不使用缓存
|
|
21
29
|
if (!isEnableCache) {
|
|
22
30
|
return await this.loadMethodInfo(method);
|
|
23
31
|
}
|
|
24
32
|
methodCache.setProps({
|
|
25
|
-
keepTime:
|
|
33
|
+
keepTime: 1000 * 60 * 2,
|
|
26
34
|
requestFn: () => this.loadMethodInfoList(),
|
|
27
35
|
getKeyFn: item => item.method,
|
|
28
36
|
});
|
|
29
|
-
|
|
37
|
+
const methodInfo = await methodCache.getItem(method);
|
|
38
|
+
if (methodInfo) {
|
|
39
|
+
return methodInfo;
|
|
40
|
+
}
|
|
41
|
+
return await this.loadMethodInfo(method);
|
|
30
42
|
}
|
|
31
43
|
async loadMethodInfo(method) {
|
|
32
|
-
const { methodsTableName, sysDatabaseName } = this.getContextCfg();
|
|
33
|
-
const sql = `select *
|
|
34
|
-
from ${methodsTableName}
|
|
35
|
-
where method = ? `; // 全部加载到内存
|
|
44
|
+
const { methodsTableName, sysDatabaseName, sysDatabaseDbType } = this.getContextCfg();
|
|
45
|
+
const sql = `select * from ${methodsTableName} where method = ? `; // 全部加载到内存
|
|
36
46
|
const baseInfo = {
|
|
37
|
-
|
|
38
|
-
|
|
47
|
+
sqlTable: methodsTableName,
|
|
48
|
+
sqlDatabase: sysDatabaseName,
|
|
49
|
+
sqlDbType: sysDatabaseDbType,
|
|
39
50
|
};
|
|
40
|
-
const
|
|
41
|
-
const rows2 =
|
|
51
|
+
const queryRes = await this.executeUnsafeQuery(baseInfo, sql, [method]);
|
|
52
|
+
const rows2 = (0, convertMix_1.pickAndConvertRowsByMix)(queryRes, sysDatabaseDbType);
|
|
42
53
|
if (rows2.length > 0) {
|
|
43
54
|
return parseMethodInfo(rows2[0]);
|
|
44
55
|
}
|
|
45
56
|
return null;
|
|
46
57
|
}
|
|
47
58
|
async loadMethodInfoList() {
|
|
48
|
-
const { methodsTableName, sysDatabaseName } = this.getContextCfg();
|
|
59
|
+
const { methodsTableName, sysDatabaseName, sysDatabaseDbType } = this.getContextCfg();
|
|
49
60
|
const sql = `select * from ${methodsTableName}`; // 全部加载到内存
|
|
50
61
|
const baseInfo = {
|
|
51
|
-
|
|
52
|
-
|
|
62
|
+
sqlTable: methodsTableName,
|
|
63
|
+
sqlDatabase: sysDatabaseName,
|
|
64
|
+
sqlDbType: sysDatabaseDbType,
|
|
53
65
|
};
|
|
54
|
-
const
|
|
55
|
-
const rows2 =
|
|
66
|
+
const queryRes = await this.executeUnsafeQuery(baseInfo, sql);
|
|
67
|
+
const rows2 = (0, convertMix_1.pickAndConvertRowsByMix)(queryRes, sysDatabaseDbType);
|
|
56
68
|
return rows2.map(row => {
|
|
57
69
|
return parseMethodInfo(row);
|
|
58
70
|
});
|
|
@@ -5,7 +5,7 @@ const _ = require("lodash");
|
|
|
5
5
|
const CrudProServiceBase_1 = require("./CrudProServiceBase");
|
|
6
6
|
const keys_1 = require("../models/keys");
|
|
7
7
|
const exceptions_1 = require("../exceptions");
|
|
8
|
-
const
|
|
8
|
+
const convertMix_1 = require("../utils/sqlConvert/convertMix");
|
|
9
9
|
const convertPgSql_1 = require("../utils/sqlConvert/convertPgSql");
|
|
10
10
|
const convertMsSql_1 = require("../utils/sqlConvert/convertMsSql");
|
|
11
11
|
const ModelUtils_1 = require("../utils/ModelUtils");
|
|
@@ -30,47 +30,45 @@ class CrudProExecuteSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
30
30
|
const exeCtx = this.getExecuteContext();
|
|
31
31
|
const connection = await this.getTxConnectionBySqlCfg(sqlCfgModel);
|
|
32
32
|
const executeSqlArgs = this.handleExecuteSqlArgsByResModel(exeCtx, sqlCfgModel.executeSqlArgs || []);
|
|
33
|
-
let sqlRes;
|
|
34
33
|
let queryRes;
|
|
35
|
-
if (sqlCfgModel.
|
|
34
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
35
|
+
// import { PoolClient } from 'pg';
|
|
36
36
|
const pgClient = connection;
|
|
37
37
|
const pgSql = (0, convertPgSql_1.replaceQuestionMarks)(sqlCfgModel.executeSql);
|
|
38
|
-
this.logger.
|
|
38
|
+
this.logger.debug('[CrudProExecuteSqlService]executeSqlCfgModel_postgres', pgSql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
39
39
|
queryRes = await pgClient.query({
|
|
40
40
|
text: pgSql,
|
|
41
|
-
values: executeSqlArgs || []
|
|
41
|
+
values: executeSqlArgs || [],
|
|
42
42
|
});
|
|
43
|
-
sqlRes = (0, convertPgType_1.pickAndConvertPgRows)(queryRes);
|
|
44
43
|
}
|
|
45
|
-
else if (sqlCfgModel.
|
|
46
|
-
const mssql = (0, convertMsSql_1.replaceQuestionMarksForMssql)(sqlCfgModel.executeSql);
|
|
47
|
-
this.logger.info('executeSqlCfgModel_sqlserver', mssql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
44
|
+
else if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
48
45
|
// SQLServer
|
|
46
|
+
const mssql = (0, convertMsSql_1.replaceQuestionMarksForMssql)(sqlCfgModel.executeSql);
|
|
47
|
+
this.logger.debug('[CrudProExecuteSqlService]executeSqlCfgModel_sqlserver', mssql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
49
48
|
queryRes = await connection.query(mssql, executeSqlArgs);
|
|
50
|
-
sqlRes = _.get(queryRes, 'recordsets[0]') || [];
|
|
51
49
|
}
|
|
52
50
|
else {
|
|
53
|
-
this.logger.info('executeSqlCfgModel_mysql', sqlCfgModel.executeSql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
54
51
|
// MYSQL
|
|
52
|
+
this.logger.debug('[CrudProExecuteSqlService]executeSqlCfgModel_mysql', sqlCfgModel.executeSql, executeSqlArgs, sqlCfgModel.resPicker);
|
|
55
53
|
queryRes = await connection.query(sqlCfgModel.executeSql, executeSqlArgs);
|
|
56
|
-
sqlRes = queryRes[0];
|
|
57
54
|
}
|
|
55
|
+
const sqlRes = (0, convertMix_1.pickAndConvertRowsByMix)(queryRes, sqlCfgModel.sqlDbType);
|
|
58
56
|
const resObject = this.toQueryResByResPicker(sqlRes, queryRes, sqlCfgModel);
|
|
59
57
|
exeCtx.setResModelItem(sqlCfgModel.resName, resObject);
|
|
60
58
|
}
|
|
61
59
|
handleExecuteSqlArgsByResModel(exeCtx, executeSqlArgs) {
|
|
62
|
-
return executeSqlArgs.map(
|
|
60
|
+
return executeSqlArgs.map(arg => {
|
|
63
61
|
if (arg && typeof arg === 'object' && typeof arg.___GENERATE_GET_RES_ATTR___ === 'string') {
|
|
64
62
|
const word = arg.___GENERATE_GET_RES_ATTR___;
|
|
65
63
|
if (word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_NUMBER)) {
|
|
66
64
|
const resName = MixinUtils_1.MixinUtils.removeStringPrefix(word, keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_NUMBER);
|
|
67
65
|
this.logger.info('handleExecuteSqlArgsByResModel resName', resName);
|
|
68
|
-
this.logger.
|
|
66
|
+
this.logger.debug('handleExecuteSqlArgsByResModel getResModel', exeCtx.getResModel());
|
|
69
67
|
return Number(exeCtx.getResModelItemLodash(resName) || 0);
|
|
70
68
|
}
|
|
71
69
|
if (word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_STRING)) {
|
|
72
70
|
const resName = MixinUtils_1.MixinUtils.removeStringPrefix(word, keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_STRING);
|
|
73
|
-
return String(exeCtx.getResModelItemLodash(resName) ||
|
|
71
|
+
return String(exeCtx.getResModelItemLodash(resName) || '');
|
|
74
72
|
}
|
|
75
73
|
}
|
|
76
74
|
return arg;
|
|
@@ -198,16 +196,16 @@ class CrudProExecuteSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
198
196
|
}
|
|
199
197
|
// 增删改res的内容是修改结果:包括: insert\delete\update
|
|
200
198
|
if (keys_1.KeysOfSqlResPicker.UPDATE_RESULT === resPicker) {
|
|
201
|
-
if (sqlCfgModel.
|
|
199
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
202
200
|
return {
|
|
203
201
|
insertId: _.get(queryRes, 'rows[0].id'),
|
|
204
|
-
affectedRows: _.get(queryRes, 'rowCount')
|
|
202
|
+
affectedRows: _.get(queryRes, 'rowCount'),
|
|
205
203
|
};
|
|
206
204
|
}
|
|
207
|
-
if (sqlCfgModel.
|
|
205
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
208
206
|
return {
|
|
209
207
|
insertId: _.get(queryRes, 'recordset[0].id'),
|
|
210
|
-
affectedRows: _.get(queryRes, 'rowsAffected[0]')
|
|
208
|
+
affectedRows: _.get(queryRes, 'rowsAffected[0]'),
|
|
211
209
|
};
|
|
212
210
|
}
|
|
213
211
|
return sqlRes;
|
|
@@ -16,10 +16,8 @@ const createFunc = (sqlCfg) => {
|
|
|
16
16
|
},
|
|
17
17
|
toMatchSqlColumnName: (columnName) => {
|
|
18
18
|
const arr = columnName.split(',');
|
|
19
|
-
return arr
|
|
20
|
-
|
|
21
|
-
.join(',');
|
|
22
|
-
}
|
|
19
|
+
return arr.map(s => (0, convertColumnName_1.toSqlColumnName)(s.trim(), sqlCfg)).join(',');
|
|
20
|
+
},
|
|
23
21
|
};
|
|
24
22
|
};
|
|
25
23
|
class ValueChecker {
|
|
@@ -192,29 +190,29 @@ class CrudProGenSqlCondition {
|
|
|
192
190
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$LIKE, compare)) {
|
|
193
191
|
tmpArgList.push(value0);
|
|
194
192
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI like concat(?, '%')`; // like前缀匹配
|
|
195
|
-
if (this.sqlCfg.
|
|
196
|
-
tmpSql = `${toSqlColumnName(key)} like concat(
|
|
193
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
194
|
+
tmpSql = `${toSqlColumnName(key)} like concat(?::text, '%')`; // like前缀匹配
|
|
197
195
|
}
|
|
198
196
|
}
|
|
199
197
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$NOT_LIKE, compare)) {
|
|
200
198
|
tmpArgList.push(value0);
|
|
201
199
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI not like concat(?, '%')`;
|
|
202
|
-
if (this.sqlCfg.
|
|
203
|
-
tmpSql = `${toSqlColumnName(key)} not like concat(
|
|
200
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
201
|
+
tmpSql = `${toSqlColumnName(key)} not like concat(?::text, '%')`;
|
|
204
202
|
}
|
|
205
203
|
}
|
|
206
204
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$LIKE_INCLUDE, compare)) {
|
|
207
205
|
tmpArgList.push(value0);
|
|
208
206
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI like concat('%', ?, '%')`; // like包含
|
|
209
|
-
if (this.sqlCfg.
|
|
210
|
-
tmpSql = `${toSqlColumnName(key)} like concat('%',
|
|
207
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
208
|
+
tmpSql = `${toSqlColumnName(key)} like concat('%', ?::text, '%')`; // like包含
|
|
211
209
|
}
|
|
212
210
|
}
|
|
213
211
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$NOT_LIKE_INCLUDE, compare)) {
|
|
214
212
|
tmpArgList.push(value0);
|
|
215
213
|
tmpSql = `${toSqlColumnName(key)} COLLATE UTF8MB4_GENERAL_CI not like concat('%',?, '%')`; // like不包含
|
|
216
|
-
if (this.sqlCfg.
|
|
217
|
-
tmpSql = `${toSqlColumnName(key)} not like concat('%'
|
|
214
|
+
if (this.sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
215
|
+
tmpSql = `${toSqlColumnName(key)} not like concat('%',?::text, '%')`; // like不包含
|
|
218
216
|
}
|
|
219
217
|
}
|
|
220
218
|
else if (equalsIgnoreCase(keys_1.KeysOfConditions.$MATCH, compare)) {
|
|
@@ -91,10 +91,10 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
91
91
|
* @private
|
|
92
92
|
*/
|
|
93
93
|
generateOriginSqlForDelete(cfgModel) {
|
|
94
|
-
if (cfgModel.
|
|
94
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
95
95
|
return 'delete from @@table where @@asWhere:condition ';
|
|
96
96
|
}
|
|
97
|
-
if (cfgModel.
|
|
97
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
98
98
|
return 'delete from @@table where @@asWhere:condition ';
|
|
99
99
|
}
|
|
100
100
|
return 'delete from @@table where @@asWhere:condition limit 100 '; // 删除操作,不能一次性删除太多
|
|
@@ -105,35 +105,26 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
105
105
|
* @private
|
|
106
106
|
*/
|
|
107
107
|
generateOriginSqlForDuplicateInsert(cfgModel) {
|
|
108
|
-
if (cfgModel.
|
|
108
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
109
109
|
const uniqueColumn = cfgModel.uniqueColumn; // id
|
|
110
110
|
if (!Array.isArray(uniqueColumn) || uniqueColumn.length === 0) {
|
|
111
111
|
throw new exceptions_1.CommonException(exceptions_1.Exceptions.CFG_ERROR_POSTGRES_UNIQUE_COLUMNS_NULL);
|
|
112
112
|
}
|
|
113
|
-
const unique_column = uniqueColumn
|
|
113
|
+
const unique_column = uniqueColumn
|
|
114
|
+
.map(s => {
|
|
114
115
|
return `"${s}"`;
|
|
115
|
-
})
|
|
116
|
+
})
|
|
117
|
+
.join(',');
|
|
116
118
|
return `insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data ) ON CONFLICT (${unique_column}) DO UPDATE set @@asUpdate:data `; // 关键字的前后,必须有空格
|
|
117
119
|
}
|
|
118
|
-
if (cfgModel.
|
|
120
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
119
121
|
const uniqueColumn = cfgModel.uniqueColumn; // id
|
|
120
122
|
if (uniqueColumn.length !== 1) {
|
|
121
123
|
throw new exceptions_1.CommonException(exceptions_1.Exceptions.CFG_UNIQUE_COLUMN_COUNT_MUST_ONE);
|
|
122
124
|
}
|
|
123
125
|
const uniqueColumnStr = uniqueColumn[0];
|
|
124
|
-
const uniqueColumnVal =
|
|
125
|
-
const sql =
|
|
126
|
-
`IF EXISTS (SELECT 1 FROM @@table WHERE [${uniqueColumnStr}] = ${uniqueColumnVal})` +
|
|
127
|
-
"BEGIN\n" +
|
|
128
|
-
" UPDATE @@table\n" +
|
|
129
|
-
" SET @@asUpdate:data\n" +
|
|
130
|
-
` WHERE [${uniqueColumnStr}] = ${uniqueColumnVal} ;\n` +
|
|
131
|
-
"END\n" +
|
|
132
|
-
"ELSE\n" +
|
|
133
|
-
"BEGIN\n" +
|
|
134
|
-
" INSERT INTO @@table ( @@asInsertKeys:data )\n" +
|
|
135
|
-
" VALUES ( @@asInsertValues:data );\n" +
|
|
136
|
-
"END";
|
|
126
|
+
const uniqueColumnVal = '@@data.' + uniqueColumnStr;
|
|
127
|
+
const sql = '' + `IF EXISTS (SELECT 1 FROM @@table WHERE [${uniqueColumnStr}] = ${uniqueColumnVal})` + 'BEGIN\n' + ' UPDATE @@table\n' + ' SET @@asUpdate:data\n' + ` WHERE [${uniqueColumnStr}] = ${uniqueColumnVal} ;\n` + 'END\n' + 'ELSE\n' + 'BEGIN\n' + ' INSERT INTO @@table ( @@asInsertKeys:data )\n' + ' VALUES ( @@asInsertValues:data );\n' + 'END';
|
|
137
128
|
return sql;
|
|
138
129
|
}
|
|
139
130
|
return 'insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data ) on duplicate key update @@asUpdate:data '; // 关键字的前后,必须有空格
|
|
@@ -144,10 +135,10 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
144
135
|
* @private
|
|
145
136
|
*/
|
|
146
137
|
generateOriginSqlForInsert(cfgModel) {
|
|
147
|
-
if (cfgModel.
|
|
138
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
148
139
|
return 'insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data ) RETURNING * ';
|
|
149
140
|
}
|
|
150
|
-
if (cfgModel.
|
|
141
|
+
if (cfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
151
142
|
return 'insert into @@table ( @@asInsertKeys:data ) OUTPUT INSERTED.* values( @@asInsertValues:data ) ';
|
|
152
143
|
}
|
|
153
144
|
return 'insert into @@table ( @@asInsertKeys:data ) values( @@asInsertValues:data )'; // 关键字的前后,必须有空格
|
|
@@ -156,10 +147,10 @@ class CrudProGenSqlService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
156
147
|
const exeCtx = this.getExecuteContext();
|
|
157
148
|
const reqCfgModel = exeCtx.getCfgModel();
|
|
158
149
|
const sqlCfgList = reqCfgModel.sqlCfgList || [];
|
|
159
|
-
const { sqlTable, sqlSchema, sqlDatabase,
|
|
150
|
+
const { sqlTable, sqlSchema, sqlDatabase, sqlDbType, maxLimit, columns, columnsRelation } = reqCfgModel;
|
|
160
151
|
for (let i = 0; i < sqlCfgList.length; i++) {
|
|
161
152
|
const sqlCfgModel = sqlCfgList[i];
|
|
162
|
-
sqlCfgModel.
|
|
153
|
+
sqlCfgModel.sqlDbType = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlDbType, sqlDbType);
|
|
163
154
|
sqlCfgModel.sqlDatabase = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlDatabase, sqlDatabase);
|
|
164
155
|
sqlCfgModel.sqlSchema = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlSchema, sqlSchema);
|
|
165
156
|
sqlCfgModel.sqlTable = MixinUtils_1.MixinUtils.selectNotEmpty(sqlCfgModel.sqlTable, sqlTable);
|
|
@@ -100,8 +100,7 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase_1.CrudProServiceBase
|
|
|
100
100
|
else if (word === keys_1.KeysOfCustomSQL.SQL_ORDER_BYS) {
|
|
101
101
|
return this.generateOrderBys(reqModel, sqlCfg);
|
|
102
102
|
}
|
|
103
|
-
else if ((word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_DATA_ATTR_START) ||
|
|
104
|
-
word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_CONDITION_ATTR_START)) && word.indexOf('.') > 0) {
|
|
103
|
+
else if ((word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_DATA_ATTR_START) || word.startsWith(keys_1.KeysOfCustomSQL.SQL_GET_CONDITION_ATTR_START)) && word.indexOf('.') > 0) {
|
|
105
104
|
return this.generateGetAttr(reqModel, word); //// data.xxx, condition.xxx
|
|
106
105
|
}
|
|
107
106
|
else if (word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_NUMBER) || word.startsWith(keys_1.KeysOfCustomSQL.SQL_PICK_RES_AS_STRING)) {
|
|
@@ -198,10 +197,10 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase_1.CrudProServiceBase
|
|
|
198
197
|
const maxLimit = ModelUtils_1.ModelUtils.getMaxLimit(sqlCfg, requestCfg);
|
|
199
198
|
const reqLimit = req.limit;
|
|
200
199
|
const limit = Math.min(maxLimit, reqLimit);
|
|
201
|
-
if (sqlCfg.
|
|
200
|
+
if (sqlCfg.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
202
201
|
return new SqlSegArg_1.SqlSegArg(' LIMIT ? OFFSET ? ', [limit, req.offset]);
|
|
203
202
|
}
|
|
204
|
-
if (sqlCfg.
|
|
203
|
+
if (sqlCfg.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
205
204
|
return new SqlSegArg_1.SqlSegArg(' OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ', [req.offset, limit]);
|
|
206
205
|
}
|
|
207
206
|
return new SqlSegArg_1.SqlSegArg(' limit ?,? ', [req.offset, limit]);
|
|
@@ -219,9 +218,11 @@ class CrudProOriginToExecuteSql extends CrudProServiceBase_1.CrudProServiceBase
|
|
|
219
218
|
return new SqlSegArg_1.SqlSegArg(sql);
|
|
220
219
|
}
|
|
221
220
|
generatePickResAs(req, world) {
|
|
222
|
-
return new SqlSegArg_1.SqlSegArg(' ? ', [
|
|
221
|
+
return new SqlSegArg_1.SqlSegArg(' ? ', [
|
|
222
|
+
{
|
|
223
223
|
___GENERATE_GET_RES_ATTR___: world,
|
|
224
|
-
}
|
|
224
|
+
},
|
|
225
|
+
]);
|
|
225
226
|
}
|
|
226
227
|
generateGetAttr(req, word) {
|
|
227
228
|
const attrName = MixinUtils_1.MixinUtils.removeStringPrefix(word, '@@');
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { ICurdProServiceHub } from '../models/ServiceHub';
|
|
2
|
-
import { ICrudProCfg, ILogger, IPoolConnectionClient } from '../interfaces';
|
|
2
|
+
import { ICrudProCfg, IExecuteUnsafeQueryCtx, ILogger, IPoolConnectionClient } from '../interfaces';
|
|
3
3
|
import { SqlCfgModel } from '../models/SqlCfgModel';
|
|
4
4
|
import { ExecuteContext } from '../models/ExecuteContext';
|
|
5
5
|
import { IExecuteContextFunc } from '../models/ExecuteContextFunc';
|
|
6
|
-
interface ExecuteUnsafeQueryCtx {
|
|
7
|
-
tableName: string;
|
|
8
|
-
dbName: string;
|
|
9
|
-
}
|
|
10
6
|
declare class CrudProServiceBase {
|
|
11
7
|
protected serviceHub: ICurdProServiceHub;
|
|
12
8
|
constructor(serviceHub: ICurdProServiceHub);
|
|
@@ -21,7 +17,7 @@ declare class CrudProServiceBase {
|
|
|
21
17
|
* @param values
|
|
22
18
|
* @protected
|
|
23
19
|
*/
|
|
24
|
-
protected executeUnsafeQuery(obj:
|
|
20
|
+
protected executeUnsafeQuery(obj: IExecuteUnsafeQueryCtx, sql: string, values?: any): Promise<any[]>;
|
|
25
21
|
protected getContextCfg(): ICrudProCfg;
|
|
26
22
|
protected getExecuteFunction(funcName: string): any;
|
|
27
23
|
}
|
|
@@ -7,6 +7,9 @@ const TypeUtils_1 = require("../utils/TypeUtils");
|
|
|
7
7
|
const CompareUtils_1 = require("../utils/CompareUtils");
|
|
8
8
|
const DateTimeUtils_1 = require("../utils/DateTimeUtils");
|
|
9
9
|
const defaultConfigs_1 = require("../defaultConfigs");
|
|
10
|
+
const keys_1 = require("../models/keys");
|
|
11
|
+
const convertPgSql_1 = require("../utils/sqlConvert/convertPgSql");
|
|
12
|
+
const convertMsSql_1 = require("../utils/sqlConvert/convertMsSql");
|
|
10
13
|
function createBuildInExecuteFuncMap() {
|
|
11
14
|
return {
|
|
12
15
|
...DateTimeUtils_1.DateTimeUtils,
|
|
@@ -45,8 +48,9 @@ class CrudProServiceBase {
|
|
|
45
48
|
*/
|
|
46
49
|
async executeUnsafeQuery(obj, sql, values) {
|
|
47
50
|
const sqlCfgModel = {
|
|
48
|
-
sqlTable: obj.
|
|
49
|
-
sqlDatabase: obj.
|
|
51
|
+
sqlTable: obj.sqlTable,
|
|
52
|
+
sqlDatabase: obj.sqlDatabase,
|
|
53
|
+
sqlDbType: obj.sqlDbType,
|
|
50
54
|
columns: [],
|
|
51
55
|
columnsRelation: [],
|
|
52
56
|
maxLimit: defaultConfigs_1.DEFAULT_MAX_LIMIT,
|
|
@@ -56,8 +60,16 @@ class CrudProServiceBase {
|
|
|
56
60
|
executeSqlArgs: values,
|
|
57
61
|
crudType: null,
|
|
58
62
|
};
|
|
63
|
+
if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
64
|
+
const pgSql = (0, convertPgSql_1.replaceQuestionMarks)(sqlCfgModel.executeSql);
|
|
65
|
+
sqlCfgModel.executeSql = pgSql;
|
|
66
|
+
}
|
|
67
|
+
else if (sqlCfgModel.sqlDbType === keys_1.SqlDbType.sqlserver) {
|
|
68
|
+
const mssql = (0, convertMsSql_1.replaceQuestionMarksForMssql)(sqlCfgModel.executeSql);
|
|
69
|
+
sqlCfgModel.executeSql = mssql;
|
|
70
|
+
}
|
|
59
71
|
const connection = await this.getTxConnectionBySqlCfg(sqlCfgModel);
|
|
60
|
-
return await connection.query(
|
|
72
|
+
return await connection.query(sqlCfgModel.executeSql, values);
|
|
61
73
|
}
|
|
62
74
|
getContextCfg() {
|
|
63
75
|
return this.getExecuteContext().getContextCfg();
|
|
@@ -4,5 +4,6 @@ import { ITableMeta } from '../interfaces';
|
|
|
4
4
|
declare class CrudProTableMetaService extends CrudProServiceBase {
|
|
5
5
|
getTableMeta(sqlCfgModel: SqlCfgModel): Promise<ITableMeta>;
|
|
6
6
|
private loadTableMeta;
|
|
7
|
+
private loadTableColumnInfo;
|
|
7
8
|
}
|
|
8
9
|
export { CrudProTableMetaService };
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CrudProTableMetaService = void 0;
|
|
4
4
|
const CrudProServiceBase_1 = require("./CrudProServiceBase");
|
|
5
|
+
const keys_1 = require("../models/keys");
|
|
6
|
+
const convertMix_1 = require("../utils/sqlConvert/convertMix");
|
|
5
7
|
class CrudProTableMetaCache {
|
|
6
8
|
constructor() {
|
|
7
9
|
this.cacheMap = {};
|
|
@@ -39,15 +41,38 @@ class CrudProTableMetaService extends CrudProServiceBase_1.CrudProServiceBase {
|
|
|
39
41
|
tableColumns: [],
|
|
40
42
|
};
|
|
41
43
|
const baseInfo = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
sqlTable: sqlCfgModel.sqlTable,
|
|
45
|
+
sqlDatabase: sqlCfgModel.sqlDatabase,
|
|
46
|
+
sqlDbType: sqlCfgModel.sqlDbType,
|
|
44
47
|
};
|
|
45
|
-
|
|
46
|
-
const tableDescribe2 = JSON.parse(JSON.stringify(tableDescribe));
|
|
47
|
-
obj.tableColumns = tableDescribe2.map(fieldObj => {
|
|
48
|
-
return fieldObj['Field'];
|
|
49
|
-
});
|
|
48
|
+
obj.tableColumns = await this.loadTableColumnInfo(baseInfo);
|
|
50
49
|
return obj;
|
|
51
50
|
}
|
|
51
|
+
async loadTableColumnInfo(baseInfo) {
|
|
52
|
+
if (baseInfo.sqlDbType === keys_1.SqlDbType.mysql) {
|
|
53
|
+
const queryRes = await this.executeUnsafeQuery(baseInfo, 'describe ' + baseInfo.sqlTable);
|
|
54
|
+
const tableDescribe = (0, convertMix_1.pickAndConvertRowsByMix)(queryRes, baseInfo.sqlDbType);
|
|
55
|
+
const tableDescribe2 = JSON.parse(JSON.stringify(tableDescribe));
|
|
56
|
+
return tableDescribe2.map(fieldObj => {
|
|
57
|
+
return fieldObj['Field'];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else if (baseInfo.sqlDbType === keys_1.SqlDbType.postgres) {
|
|
61
|
+
const schemaname = 'public';
|
|
62
|
+
const columnArraySql = `
|
|
63
|
+
SELECT
|
|
64
|
+
*
|
|
65
|
+
FROM information_schema.columns
|
|
66
|
+
WHERE table_schema = '${schemaname}' and table_name = '${baseInfo.sqlTable}'
|
|
67
|
+
ORDER BY ordinal_position;
|
|
68
|
+
`.trim();
|
|
69
|
+
const queryRes = await this.executeUnsafeQuery(baseInfo, columnArraySql);
|
|
70
|
+
const tableDescribe = (0, convertMix_1.pickAndConvertRowsByMix)(queryRes, baseInfo.sqlDbType);
|
|
71
|
+
return tableDescribe.map(fieldObj => {
|
|
72
|
+
return fieldObj['column_name'];
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
throw new Error('暂不支持的数据库类型:' + baseInfo.sqlDbType);
|
|
76
|
+
}
|
|
52
77
|
}
|
|
53
78
|
exports.CrudProTableMetaService = CrudProTableMetaService;
|