@simplysm/sd-cli 10.0.4 → 10.0.21
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.cjs +1 -1
- package/dist/SdLinter.d.ts +5 -0
- package/dist/SdLinter.js.map +1 -0
- package/dist/SdLinter.mjs +37 -0
- package/dist/SdTsIncrementalBuilder.d.ts +16 -0
- package/dist/SdTsIncrementalBuilder.js.map +1 -0
- package/dist/SdTsIncrementalBuilder.mjs +54 -0
- package/dist/build-cluster.js.map +1 -1
- package/dist/build-cluster.mjs +124 -0
- package/dist/builders/SdCliClientBuilder.d.ts +13 -0
- package/dist/builders/SdCliClientBuilder.js.map +1 -0
- package/dist/builders/SdCliClientBuilder.mjs +167 -0
- package/dist/builders/SdCliJsLibLinter.d.ts +3 -7
- package/dist/builders/SdCliJsLibLinter.js.map +1 -1
- package/dist/builders/{SdCliJsLibLinter.js → SdCliJsLibLinter.mjs} +8 -17
- package/dist/builders/SdCliServerBuilder.d.ts +14 -0
- package/dist/builders/SdCliServerBuilder.js.map +1 -0
- package/dist/builders/SdCliServerBuilder.mjs +171 -0
- package/dist/builders/SdCliTsLibBuilder.d.ts +3 -10
- package/dist/builders/SdCliTsLibBuilder.js.map +1 -1
- package/dist/builders/SdCliTsLibBuilder.mjs +75 -0
- package/dist/commons.d.ts +27 -2
- package/dist/entry/SdCliProject.d.ts +1 -0
- package/dist/entry/SdCliProject.js.map +1 -1
- package/dist/entry/{SdCliProject.js → SdCliProject.mjs} +94 -10
- package/dist/sd-cli.js.map +1 -1
- package/dist/{sd-cli.js → sd-cli.mjs} +1 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.d.ts +20 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.js.map +1 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.mjs +12 -0
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.d.ts +43 -0
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.js.map +1 -0
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.mjs +54 -0
- package/dist/sd-core-common/src/decorators/PropertyValidate.d.ts +16 -0
- package/dist/sd-core-common/src/decorators/PropertyValidate.js.map +1 -0
- package/dist/sd-core-common/src/decorators/PropertyValidate.mjs +26 -0
- package/dist/sd-core-common/src/decorators/decorator-return-types.d.ts +14 -0
- package/dist/sd-core-common/src/decorators/decorator-return-types.js.map +1 -0
- package/dist/sd-core-common/src/decorators/decorator-return-types.mjs +2 -0
- package/dist/sd-core-common/src/errors/ArgumentError.d.ts +10 -0
- package/dist/sd-core-common/src/errors/ArgumentError.js.map +1 -0
- package/dist/sd-core-common/src/errors/ArgumentError.mjs +13 -0
- package/dist/sd-core-common/src/errors/NeverEntryError.d.ts +10 -0
- package/dist/sd-core-common/src/errors/NeverEntryError.js.map +1 -0
- package/dist/sd-core-common/src/errors/NeverEntryError.mjs +13 -0
- package/dist/sd-core-common/src/errors/NotImplementError.d.ts +10 -0
- package/dist/sd-core-common/src/errors/NotImplementError.js.map +1 -0
- package/dist/sd-core-common/src/errors/NotImplementError.mjs +13 -0
- package/dist/sd-core-common/src/errors/SdError.d.ts +23 -0
- package/dist/sd-core-common/src/errors/SdError.js.map +1 -0
- package/dist/sd-core-common/src/errors/SdError.mjs +40 -0
- package/dist/sd-core-common/src/errors/TimeoutError.d.ts +11 -0
- package/dist/sd-core-common/src/errors/TimeoutError.js.map +1 -0
- package/dist/sd-core-common/src/errors/TimeoutError.mjs +16 -0
- package/dist/sd-core-common/src/extensions/ArrayExtension.d.ts +147 -0
- package/dist/sd-core-common/src/extensions/ArrayExtension.js.map +1 -0
- package/dist/sd-core-common/src/extensions/ArrayExtension.mjs +448 -0
- package/dist/sd-core-common/src/extensions/MapExtension.d.ts +4 -0
- package/dist/sd-core-common/src/extensions/MapExtension.js.map +1 -0
- package/dist/sd-core-common/src/extensions/MapExtension.mjs +15 -0
- package/dist/sd-core-common/src/extensions/SetExtension.d.ts +3 -0
- package/dist/sd-core-common/src/extensions/SetExtension.js.map +1 -0
- package/dist/sd-core-common/src/extensions/SetExtension.mjs +10 -0
- package/dist/sd-core-common/src/index.d.ts +32 -0
- package/dist/sd-core-common/src/index.js.map +1 -0
- package/dist/sd-core-common/src/index.mjs +33 -0
- package/dist/sd-core-common/src/types/DateOnly.d.ts +135 -0
- package/dist/sd-core-common/src/types/DateOnly.js.map +1 -0
- package/dist/sd-core-common/src/types/DateOnly.mjs +220 -0
- package/dist/sd-core-common/src/types/DateTime.d.ts +42 -0
- package/dist/sd-core-common/src/types/DateTime.js.map +1 -0
- package/dist/sd-core-common/src/types/DateTime.mjs +156 -0
- package/dist/sd-core-common/src/types/DeepPartial.d.ts +3 -0
- package/dist/sd-core-common/src/types/DeepPartial.js.map +1 -0
- package/dist/sd-core-common/src/types/DeepPartial.mjs +2 -0
- package/dist/sd-core-common/src/types/ObjectSet.d.ts +4 -0
- package/dist/sd-core-common/src/types/ObjectSet.js.map +1 -0
- package/dist/sd-core-common/src/types/ObjectSet.mjs +18 -0
- package/dist/sd-core-common/src/types/Time.d.ts +27 -0
- package/dist/sd-core-common/src/types/Time.js.map +1 -0
- package/dist/sd-core-common/src/types/Time.mjs +108 -0
- package/dist/sd-core-common/src/types/Type.d.ts +7 -0
- package/dist/sd-core-common/src/types/Type.js.map +1 -0
- package/dist/sd-core-common/src/types/Type.mjs +2 -0
- package/dist/sd-core-common/src/types/UnwrappedType.d.ts +1 -0
- package/dist/sd-core-common/src/types/UnwrappedType.js.map +1 -0
- package/dist/sd-core-common/src/types/UnwrappedType.mjs +2 -0
- package/dist/sd-core-common/src/types/Uuid.d.ts +8 -0
- package/dist/sd-core-common/src/types/Uuid.js.map +1 -0
- package/dist/sd-core-common/src/types/Uuid.mjs +26 -0
- package/dist/sd-core-common/src/types/WrappedType.d.ts +1 -0
- package/dist/sd-core-common/src/types/WrappedType.js.map +1 -0
- package/dist/sd-core-common/src/types/WrappedType.mjs +2 -0
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.d.ts +12 -0
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.mjs +67 -0
- package/dist/sd-core-common/src/utils/FunctionQueue.d.ts +8 -0
- package/dist/sd-core-common/src/utils/FunctionQueue.js.map +1 -0
- package/dist/sd-core-common/src/utils/FunctionQueue.mjs +46 -0
- package/dist/sd-core-common/src/utils/FunctionUtil.d.ts +6 -0
- package/dist/sd-core-common/src/utils/FunctionUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/FunctionUtil.mjs +31 -0
- package/dist/sd-core-common/src/utils/JsonConvert.d.ts +8 -0
- package/dist/sd-core-common/src/utils/JsonConvert.js.map +1 -0
- package/dist/sd-core-common/src/utils/JsonConvert.mjs +78 -0
- package/dist/sd-core-common/src/utils/MathUtil.d.ts +3 -0
- package/dist/sd-core-common/src/utils/MathUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/MathUtil.mjs +6 -0
- package/dist/sd-core-common/src/utils/NumberUtil.d.ts +6 -0
- package/dist/sd-core-common/src/utils/NumberUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/NumberUtil.mjs +32 -0
- package/dist/sd-core-common/src/utils/ObjectUtil.d.ts +80 -0
- package/dist/sd-core-common/src/utils/ObjectUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/ObjectUtil.mjs +452 -0
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.d.ts +6 -0
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.js.map +1 -0
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.mjs +27 -0
- package/dist/sd-core-common/src/utils/StringUtil.d.ts +8 -0
- package/dist/sd-core-common/src/utils/StringUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/StringUtil.mjs +77 -0
- package/dist/sd-core-common/src/utils/Wait.d.ts +4 -0
- package/dist/sd-core-common/src/utils/Wait.js.map +1 -0
- package/dist/sd-core-common/src/utils/Wait.mjs +23 -0
- package/dist/sd-core-node/src/index.d.ts +6 -0
- package/dist/sd-core-node/src/index.js.map +1 -0
- package/dist/sd-core-node/src/index.mjs +7 -0
- package/dist/sd-core-node/src/utils/FsUtil.d.ts +44 -0
- package/dist/sd-core-node/src/utils/FsUtil.js.map +1 -0
- package/dist/sd-core-node/src/utils/FsUtil.mjs +493 -0
- package/dist/sd-core-node/src/utils/Logger.d.ts +91 -0
- package/dist/sd-core-node/src/utils/Logger.js.map +1 -0
- package/dist/sd-core-node/src/utils/Logger.mjs +185 -0
- package/dist/sd-core-node/src/utils/PathUtil.d.ts +6 -0
- package/dist/sd-core-node/src/utils/PathUtil.js.map +1 -0
- package/dist/sd-core-node/src/utils/PathUtil.mjs +24 -0
- package/dist/sd-core-node/src/utils/SdFsWatcher.d.ts +15 -0
- package/dist/sd-core-node/src/utils/SdFsWatcher.js.map +1 -0
- package/dist/sd-core-node/src/utils/SdFsWatcher.mjs +43 -0
- package/dist/sd-core-node/src/utils/SdProcess.d.ts +5 -0
- package/dist/sd-core-node/src/utils/SdProcess.js.map +1 -0
- package/dist/sd-core-node/src/utils/SdProcess.mjs +36 -0
- package/dist/sd-orm-common/src/CaseQueryHelper.d.ts +12 -0
- package/dist/sd-orm-common/src/CaseQueryHelper.js.map +1 -0
- package/dist/sd-orm-common/src/CaseQueryHelper.mjs +19 -0
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.d.ts +12 -0
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.js.map +1 -0
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.mjs +20 -0
- package/dist/sd-orm-common/src/DbContext.d.ts +81 -0
- package/dist/sd-orm-common/src/DbContext.js.map +1 -0
- package/dist/sd-orm-common/src/DbContext.mjs +635 -0
- package/dist/sd-orm-common/src/IDbConnection.d.ts +15 -0
- package/dist/sd-orm-common/src/IDbConnection.js.map +1 -0
- package/dist/sd-orm-common/src/IDbConnection.mjs +2 -0
- package/dist/sd-orm-common/src/IDbContextExecutor.d.ts +17 -0
- package/dist/sd-orm-common/src/IDbContextExecutor.js.map +1 -0
- package/dist/sd-orm-common/src/IDbContextExecutor.mjs +2 -0
- package/dist/sd-orm-common/src/IDbMigration.d.ts +4 -0
- package/dist/sd-orm-common/src/IDbMigration.js.map +1 -0
- package/dist/sd-orm-common/src/IDbMigration.mjs +2 -0
- package/dist/sd-orm-common/src/QueryBuilder.d.ts +48 -0
- package/dist/sd-orm-common/src/QueryBuilder.js.map +1 -0
- package/dist/sd-orm-common/src/QueryBuilder.mjs +1022 -0
- package/dist/sd-orm-common/src/QueryHelper.d.ts +75 -0
- package/dist/sd-orm-common/src/QueryHelper.js.map +1 -0
- package/dist/sd-orm-common/src/QueryHelper.mjs +627 -0
- package/dist/sd-orm-common/src/QueryUnit.d.ts +10 -0
- package/dist/sd-orm-common/src/QueryUnit.js.map +1 -0
- package/dist/sd-orm-common/src/QueryUnit.mjs +16 -0
- package/dist/sd-orm-common/src/Queryable.d.ts +105 -0
- package/dist/sd-orm-common/src/Queryable.js.map +1 -0
- package/dist/sd-orm-common/src/Queryable.mjs +1375 -0
- package/dist/sd-orm-common/src/SdOrmDataType.d.ts +21 -0
- package/dist/sd-orm-common/src/SdOrmDataType.js.map +1 -0
- package/dist/sd-orm-common/src/SdOrmDataType.mjs +2 -0
- package/dist/sd-orm-common/src/commons.d.ts +400 -0
- package/dist/sd-orm-common/src/commons.js.map +1 -0
- package/dist/sd-orm-common/src/commons.mjs +8 -0
- package/dist/sd-orm-common/src/decorators.d.ts +29 -0
- package/dist/sd-orm-common/src/decorators.js.map +1 -0
- package/dist/sd-orm-common/src/decorators.mjs +89 -0
- package/dist/sd-orm-common/src/index.d.ts +17 -0
- package/dist/sd-orm-common/src/index.js.map +1 -0
- package/dist/sd-orm-common/src/index.mjs +18 -0
- package/dist/sd-orm-common/src/models/SystemMigration.d.ts +3 -0
- package/dist/sd-orm-common/src/models/SystemMigration.js.map +1 -0
- package/dist/sd-orm-common/src/models/SystemMigration.mjs +13 -0
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.d.ts +14 -0
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.js.map +1 -0
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.mjs +66 -0
- package/dist/sd-orm-common/src/utils/SdOrmUtil.d.ts +8 -0
- package/dist/sd-orm-common/src/utils/SdOrmUtil.js.map +1 -0
- package/dist/sd-orm-common/src/utils/SdOrmUtil.mjs +248 -0
- package/dist/sd-orm-node/src/DbConnectionFactory.d.ts +4 -0
- package/dist/sd-orm-node/src/DbConnectionFactory.js.map +1 -0
- package/dist/sd-orm-node/src/DbConnectionFactory.mjs +17 -0
- package/dist/sd-orm-node/src/NodeDbContextExecutor.d.ts +19 -0
- package/dist/sd-orm-node/src/NodeDbContextExecutor.js.map +1 -0
- package/dist/sd-orm-node/src/NodeDbContextExecutor.mjs +71 -0
- package/dist/sd-orm-node/src/SdOrm.d.ts +10 -0
- package/dist/sd-orm-node/src/SdOrm.js.map +1 -0
- package/dist/sd-orm-node/src/SdOrm.mjs +25 -0
- package/dist/sd-orm-node/src/index.d.ts +4 -0
- package/dist/sd-orm-node/src/index.js.map +1 -0
- package/dist/sd-orm-node/src/index.mjs +5 -0
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.d.ts +25 -0
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.js.map +1 -0
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.mjs +321 -0
- package/dist/sd-orm-node-mssql/src/index.d.ts +2 -0
- package/dist/sd-orm-node-mssql/src/index.js.map +1 -0
- package/dist/sd-orm-node-mssql/src/index.mjs +3 -0
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.d.ts +22 -0
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.js.map +1 -0
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.mjs +200 -0
- package/dist/sd-orm-node-mysql/src/index.d.ts +2 -0
- package/dist/sd-orm-node-mysql/src/index.js.map +1 -0
- package/dist/sd-orm-node-mysql/src/index.mjs +3 -0
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.d.ts +22 -0
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.js.map +1 -0
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.mjs +172 -0
- package/dist/sd-orm-node-sqlite/src/index.d.ts +2 -0
- package/dist/sd-orm-node-sqlite/src/index.js.map +1 -0
- package/dist/sd-orm-node-sqlite/src/index.mjs +3 -0
- package/dist/sd-service-common/src/commons-orm.d.ts +4 -0
- package/dist/sd-service-common/src/commons-orm.js.map +1 -0
- package/dist/sd-service-common/src/commons-orm.mjs +2 -0
- package/dist/sd-service-common/src/commons-smtp.d.ts +29 -0
- package/dist/sd-service-common/src/commons-smtp.js.map +1 -0
- package/dist/sd-service-common/src/commons-smtp.mjs +2 -0
- package/dist/sd-service-common/src/commons.d.ts +57 -0
- package/dist/sd-service-common/src/commons.js.map +1 -0
- package/dist/sd-service-common/src/commons.mjs +3 -0
- package/dist/sd-service-common/src/index.d.ts +3 -0
- package/dist/sd-service-common/src/index.js.map +1 -0
- package/dist/sd-service-common/src/index.mjs +4 -0
- package/dist/sd-service-server/src/ApiServiceError.d.ts +12 -0
- package/dist/sd-service-server/src/ApiServiceError.js.map +1 -0
- package/dist/sd-service-server/src/ApiServiceError.mjs +15 -0
- package/dist/sd-service-server/src/SdServiceServer.d.ts +39 -0
- package/dist/sd-service-server/src/SdServiceServer.js.map +1 -0
- package/dist/sd-service-server/src/SdServiceServer.mjs +513 -0
- package/dist/sd-service-server/src/commons.d.ts +23 -0
- package/dist/sd-service-server/src/commons.js.map +1 -0
- package/dist/sd-service-server/src/commons.mjs +3 -0
- package/dist/sd-service-server/src/index.d.ts +8 -0
- package/dist/sd-service-server/src/index.js.map +1 -0
- package/dist/sd-service-server/src/index.mjs +9 -0
- package/dist/sd-service-server/src/services/SdAutoUpdateService.d.ts +4 -0
- package/dist/sd-service-server/src/services/SdAutoUpdateService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdAutoUpdateService.mjs +20 -0
- package/dist/sd-service-server/src/services/SdCryptoService.d.ts +7 -0
- package/dist/sd-service-server/src/services/SdCryptoService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdCryptoService.mjs +39 -0
- package/dist/sd-service-server/src/services/SdOrmService.d.ts +22 -0
- package/dist/sd-service-server/src/services/SdOrmService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdOrmService.mjs +115 -0
- package/dist/sd-service-server/src/services/SdSmtpClientService.d.ts +6 -0
- package/dist/sd-service-server/src/services/SdSmtpClientService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdSmtpClientService.mjs +44 -0
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.d.ts +4 -0
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.js.map +1 -0
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.mjs +36 -0
- package/dist/server-worker.d.ts +1 -0
- package/dist/server-worker.js.map +1 -0
- package/dist/server-worker.mjs +36 -0
- package/package.json +11 -4
- package/src/SdLinter.ts +41 -0
- package/src/SdTsIncrementalBuilder.ts +75 -0
- package/src/build-cluster.ts +69 -18
- package/src/builders/SdCliClientBuilder.ts +189 -0
- package/src/builders/SdCliJsLibLinter.ts +11 -23
- package/src/builders/SdCliServerBuilder.ts +191 -0
- package/src/builders/SdCliTsLibBuilder.ts +33 -202
- package/src/commons.ts +32 -2
- package/src/entry/SdCliProject.ts +133 -17
- package/src/sd-cli.ts +1 -0
- package/src/server-worker.ts +45 -0
- package/tsconfig.json +1 -10
- package/dist/build-cluster.js +0 -75
- package/dist/builders/SdCliTsLibBuilder.js +0 -205
- /package/dist/{commons.js → commons.mjs} +0 -0
- /package/dist/utils/{SdCliBuildResultUtil.js → SdCliBuildResultUtil.mjs} +0 -0
- /package/dist/utils/{SdCliConfigUtil.js → SdCliConfigUtil.mjs} +0 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { Logger } from "@simplysm/sd-core-node";
|
|
2
|
+
import tedious from "tedious";
|
|
3
|
+
import { EventEmitter } from "events";
|
|
4
|
+
import { DateOnly, DateTime, JsonConvert, NeverEntryError, StringUtil, Time, Uuid, Wait } from "@simplysm/sd-core-common";
|
|
5
|
+
import { ISOLATION_LEVEL } from "@simplysm/sd-orm-common";
|
|
6
|
+
export class MssqlDbConnection extends EventEmitter {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
super();
|
|
9
|
+
this.config = config;
|
|
10
|
+
this._logger = Logger.get(["simplysm", "sd-orm-node", this.constructor.name]);
|
|
11
|
+
this._timeout = 3 * 60 * 1000;
|
|
12
|
+
this._requests = [];
|
|
13
|
+
this.isConnected = false;
|
|
14
|
+
this.isOnTransaction = false;
|
|
15
|
+
}
|
|
16
|
+
async connectAsync() {
|
|
17
|
+
if (this.isConnected) {
|
|
18
|
+
throw new Error("이미 'Connection'이 연결되어있습니다.");
|
|
19
|
+
}
|
|
20
|
+
const conn = new tedious.Connection({
|
|
21
|
+
server: this.config.host,
|
|
22
|
+
authentication: {
|
|
23
|
+
type: "default",
|
|
24
|
+
options: {
|
|
25
|
+
userName: this.config.username,
|
|
26
|
+
password: this.config.password
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
options: {
|
|
30
|
+
database: this.config.database,
|
|
31
|
+
port: this.config.port,
|
|
32
|
+
rowCollectionOnDone: true,
|
|
33
|
+
useUTC: false,
|
|
34
|
+
encrypt: this.config.dialect === "mssql-azure",
|
|
35
|
+
requestTimeout: this._timeout,
|
|
36
|
+
trustServerCertificate: true,
|
|
37
|
+
// validateBulkLoadParameters: false,
|
|
38
|
+
connectTimeout: this._timeout * 5
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
conn.on("infoMessage", (info) => {
|
|
42
|
+
this._logger.debug(info.message);
|
|
43
|
+
});
|
|
44
|
+
conn.on("errorMessage", (error) => {
|
|
45
|
+
this._logger.error("errorMessage: " + error.message);
|
|
46
|
+
});
|
|
47
|
+
conn.on("error", (error) => {
|
|
48
|
+
this._logger.error("error: " + error.message);
|
|
49
|
+
});
|
|
50
|
+
conn.on("end", () => {
|
|
51
|
+
this.emit("close");
|
|
52
|
+
this._requests = [];
|
|
53
|
+
this.isConnected = false;
|
|
54
|
+
this.isOnTransaction = false;
|
|
55
|
+
delete this._conn;
|
|
56
|
+
});
|
|
57
|
+
await new Promise((resolve, reject) => {
|
|
58
|
+
conn.connect((err) => {
|
|
59
|
+
if (err != null) {
|
|
60
|
+
reject(new Error(err.message));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this._startTimeout();
|
|
64
|
+
this.isConnected = true;
|
|
65
|
+
this.isOnTransaction = false;
|
|
66
|
+
resolve();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
this._conn = conn;
|
|
70
|
+
}
|
|
71
|
+
async closeAsync() {
|
|
72
|
+
await new Promise(async (resolve) => {
|
|
73
|
+
this._stopTimeout();
|
|
74
|
+
if (!this._conn || !this.isConnected) {
|
|
75
|
+
// reject(new Error("'Connection'이 연결되어있지 않습니다."));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this._conn.on("end", async () => {
|
|
79
|
+
await Wait.until(() => this._conn == null, undefined, 10000);
|
|
80
|
+
resolve();
|
|
81
|
+
});
|
|
82
|
+
this._conn.cancel();
|
|
83
|
+
await Wait.until(() => this._requests.length < 1, undefined, 10000);
|
|
84
|
+
this._conn.close();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async beginTransactionAsync(isolationLevel) {
|
|
88
|
+
if (!this._conn || !this.isConnected) {
|
|
89
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
90
|
+
}
|
|
91
|
+
this._startTimeout();
|
|
92
|
+
const conn = this._conn;
|
|
93
|
+
await new Promise((resolve, reject) => {
|
|
94
|
+
conn.beginTransaction((err) => {
|
|
95
|
+
if (err) {
|
|
96
|
+
reject(new Error(err.message));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.isOnTransaction = true;
|
|
100
|
+
resolve();
|
|
101
|
+
}, "", tedious.ISOLATION_LEVEL[isolationLevel ?? this.config.defaultIsolationLevel ?? ISOLATION_LEVEL.READ_COMMITTED]);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
async commitTransactionAsync() {
|
|
105
|
+
if (!this._conn || !this.isConnected) {
|
|
106
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
107
|
+
}
|
|
108
|
+
this._startTimeout();
|
|
109
|
+
const conn = this._conn;
|
|
110
|
+
await new Promise((resolve, reject) => {
|
|
111
|
+
conn.commitTransaction((err) => {
|
|
112
|
+
if (err != null) {
|
|
113
|
+
reject(new Error(err.message));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
this.isOnTransaction = false;
|
|
117
|
+
resolve();
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async rollbackTransactionAsync() {
|
|
122
|
+
if (!this._conn || !this.isConnected) {
|
|
123
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
124
|
+
}
|
|
125
|
+
this._startTimeout();
|
|
126
|
+
const conn = this._conn;
|
|
127
|
+
await new Promise((resolve, reject) => {
|
|
128
|
+
conn.rollbackTransaction((err) => {
|
|
129
|
+
if (err != null) {
|
|
130
|
+
reject(new Error(err.message));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.isOnTransaction = false;
|
|
134
|
+
resolve();
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async executeAsync(queries) {
|
|
139
|
+
if (!this._conn || !this.isConnected) {
|
|
140
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
141
|
+
}
|
|
142
|
+
this._startTimeout();
|
|
143
|
+
const conn = this._conn;
|
|
144
|
+
const results = [];
|
|
145
|
+
for (const query of queries.filter((item) => !StringUtil.isNullOrEmpty(item))) {
|
|
146
|
+
const queryStrings = query.split(/\r?\nGO(\r?\n|$)/g);
|
|
147
|
+
for (const queryString of queryStrings) {
|
|
148
|
+
this._logger.debug("쿼리 실행:\n" + queryString);
|
|
149
|
+
await new Promise((resolve, reject) => {
|
|
150
|
+
let rejected = false;
|
|
151
|
+
const queryRequest = new tedious
|
|
152
|
+
.Request(queryString, (err) => {
|
|
153
|
+
if (err != null) {
|
|
154
|
+
rejected = true;
|
|
155
|
+
this._requests.remove(queryRequest);
|
|
156
|
+
if (err["code"] === "ECANCEL") {
|
|
157
|
+
reject(new Error("쿼리가 취소되었습니다."));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
if (err["lineNumber"] > 0) {
|
|
161
|
+
const splitQuery = queryString.split("\n");
|
|
162
|
+
splitQuery[err["lineNumber"] - 1] = "==> " + splitQuery[err["lineNumber"] - 1];
|
|
163
|
+
reject(new Error(`[${err["code"]}] ${err.message}\n-- query\n${splitQuery.join("\n")}\n--`));
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
reject(new Error(`[${err["code"]}] ${err.message}\n-- query\n${queryString}\n--`));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
.on("done", (rowCount, more, rows) => {
|
|
172
|
+
this._startTimeout();
|
|
173
|
+
if (rejected) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const result = rows.map((item) => {
|
|
177
|
+
const resultItem = {};
|
|
178
|
+
for (const col of item) {
|
|
179
|
+
resultItem[col.metadata.colName] = col.value;
|
|
180
|
+
}
|
|
181
|
+
return resultItem;
|
|
182
|
+
});
|
|
183
|
+
results.push(result);
|
|
184
|
+
})
|
|
185
|
+
.on("error", (err) => {
|
|
186
|
+
this._startTimeout();
|
|
187
|
+
if (rejected) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
rejected = true;
|
|
191
|
+
this._requests.remove(queryRequest);
|
|
192
|
+
reject(new Error(err.message));
|
|
193
|
+
})
|
|
194
|
+
.on("requestCompleted", () => {
|
|
195
|
+
this._startTimeout();
|
|
196
|
+
if (rejected) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this._requests.remove(queryRequest);
|
|
200
|
+
resolve();
|
|
201
|
+
});
|
|
202
|
+
this._requests.push(queryRequest);
|
|
203
|
+
conn.execSqlBatch(queryRequest);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return results;
|
|
208
|
+
}
|
|
209
|
+
async bulkInsertAsync(tableName, columnDefs, records) {
|
|
210
|
+
if (this._conn === undefined || !this.isConnected) {
|
|
211
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
212
|
+
}
|
|
213
|
+
this._startTimeout();
|
|
214
|
+
const tediousColumnDefs = columnDefs.map((item) => this._convertColumnDefToTediousBulkColumnDef(item));
|
|
215
|
+
await new Promise((resolve, reject) => {
|
|
216
|
+
const bulkLoad = this._conn?.newBulkLoad(tableName, (err) => {
|
|
217
|
+
if (err != null) {
|
|
218
|
+
reject(new Error(`[${err["code"]}] ${err.message}\n${JsonConvert.stringify(tediousColumnDefs)}\n-- query\n\n${JsonConvert.stringify(records).substring(0, 10000)}...\n--`));
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
resolve();
|
|
222
|
+
});
|
|
223
|
+
if (bulkLoad === undefined)
|
|
224
|
+
throw new NeverEntryError();
|
|
225
|
+
for (const tediousColumnDef of tediousColumnDefs) {
|
|
226
|
+
bulkLoad.addColumn(tediousColumnDef.name, tediousColumnDef.type, tediousColumnDef.options);
|
|
227
|
+
}
|
|
228
|
+
// @ts-expect-error
|
|
229
|
+
this._conn?.execBulkLoad(bulkLoad, records);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
_stopTimeout() {
|
|
233
|
+
if (this._connTimeout) {
|
|
234
|
+
clearTimeout(this._connTimeout);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
_startTimeout() {
|
|
238
|
+
if (this._connTimeout) {
|
|
239
|
+
clearTimeout(this._connTimeout);
|
|
240
|
+
}
|
|
241
|
+
this._connTimeout = setTimeout(async () => {
|
|
242
|
+
await this.closeAsync();
|
|
243
|
+
}, this._timeout * 2);
|
|
244
|
+
}
|
|
245
|
+
_convertColumnDefToTediousBulkColumnDef(columnDef) {
|
|
246
|
+
const tediousDataType = this._convertColumnDataTypeToTediousBulkColumnType(columnDef.dataType);
|
|
247
|
+
return {
|
|
248
|
+
name: columnDef.name,
|
|
249
|
+
type: tediousDataType.type,
|
|
250
|
+
options: {
|
|
251
|
+
length: tediousDataType.length,
|
|
252
|
+
nullable: columnDef.nullable ?? false,
|
|
253
|
+
precision: tediousDataType.precision,
|
|
254
|
+
scale: tediousDataType.scale
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
_convertColumnDataTypeToTediousBulkColumnType(type) {
|
|
259
|
+
if (type["type"] !== undefined) {
|
|
260
|
+
const currType = type;
|
|
261
|
+
switch (currType.type) {
|
|
262
|
+
case "TEXT":
|
|
263
|
+
return { type: tedious.TYPES.NText };
|
|
264
|
+
case "DECIMAL":
|
|
265
|
+
return { type: tedious.TYPES.Decimal, precision: currType.precision, scale: currType.digits };
|
|
266
|
+
case "STRING":
|
|
267
|
+
return { type: tedious.TYPES.NVarChar, length: currType.length === "MAX" ? "max" : (currType.length ?? 255) };
|
|
268
|
+
case "FIXSTRING":
|
|
269
|
+
return { type: tedious.TYPES.NChar, length: currType.length };
|
|
270
|
+
case "BINARY":
|
|
271
|
+
return {
|
|
272
|
+
type: tedious.TYPES.VarBinary,
|
|
273
|
+
length: currType.length === "MAX" ? "max" : (currType.length ?? 255)
|
|
274
|
+
};
|
|
275
|
+
default:
|
|
276
|
+
throw new TypeError();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else if (typeof type === "string") {
|
|
280
|
+
const split = type.split(/[(,)]/);
|
|
281
|
+
const typeStr = split[0];
|
|
282
|
+
const length = split[1] === "MAX" ? "max" : typeof split[1] !== "undefined" ? Number.parseInt(split[1], 10) : undefined;
|
|
283
|
+
const digits = typeof split[2] !== "undefined" ? Number.parseInt(split[2], 10) : undefined;
|
|
284
|
+
const typeKey = Object.keys(tedious.TYPES).single((item) => item.toLocaleLowerCase() === typeStr.toLowerCase());
|
|
285
|
+
if (typeKey === undefined) {
|
|
286
|
+
throw new NeverEntryError();
|
|
287
|
+
}
|
|
288
|
+
const dataType = tedious.TYPES[typeKey];
|
|
289
|
+
if (dataType === tedious.TYPES.Decimal) {
|
|
290
|
+
return { type: dataType, precision: length, scale: digits };
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
return { type: dataType, length };
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
const currType = type;
|
|
298
|
+
switch (currType) {
|
|
299
|
+
case String:
|
|
300
|
+
return { type: tedious.TYPES.NVarChar, length: 255 };
|
|
301
|
+
case Number:
|
|
302
|
+
return { type: tedious.TYPES.BigInt };
|
|
303
|
+
case Boolean:
|
|
304
|
+
return { type: tedious.TYPES.Bit };
|
|
305
|
+
case DateTime:
|
|
306
|
+
return { type: tedious.TYPES.DateTime2 };
|
|
307
|
+
case DateOnly:
|
|
308
|
+
return { type: tedious.TYPES.Date };
|
|
309
|
+
case Time:
|
|
310
|
+
return { type: tedious.TYPES.Time };
|
|
311
|
+
case Uuid:
|
|
312
|
+
return { type: tedious.TYPES.UniqueIdentifier };
|
|
313
|
+
case Buffer:
|
|
314
|
+
return { type: tedious.TYPES.Binary, length: "max" };
|
|
315
|
+
default:
|
|
316
|
+
throw new TypeError(typeof currType !== "undefined" ? currType.name : "undefined");
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=MssqlDbConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../sd-orm-node-mssql/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
import { IDbConnection, IDefaultDbConnectionConfig, IQueryColumnDef, ISOLATION_LEVEL } from "@simplysm/sd-orm-common";
|
|
4
|
+
export declare class MysqlDbConnection extends EventEmitter implements IDbConnection {
|
|
5
|
+
readonly config: IDefaultDbConnectionConfig;
|
|
6
|
+
private readonly _logger;
|
|
7
|
+
private readonly _timeout;
|
|
8
|
+
private _conn?;
|
|
9
|
+
private _connTimeout?;
|
|
10
|
+
isConnected: boolean;
|
|
11
|
+
isOnTransaction: boolean;
|
|
12
|
+
constructor(config: IDefaultDbConnectionConfig);
|
|
13
|
+
connectAsync(): Promise<void>;
|
|
14
|
+
closeAsync(): Promise<void>;
|
|
15
|
+
beginTransactionAsync(isolationLevel?: ISOLATION_LEVEL): Promise<void>;
|
|
16
|
+
commitTransactionAsync(): Promise<void>;
|
|
17
|
+
rollbackTransactionAsync(): Promise<void>;
|
|
18
|
+
executeAsync(queries: string[]): Promise<any[][]>;
|
|
19
|
+
bulkInsertAsync(tableName: string, columnDefs: IQueryColumnDef[], records: Record<string, any>[]): Promise<void>;
|
|
20
|
+
private _stopTimeout;
|
|
21
|
+
private _startTimeout;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MysqlDbConnection.js","sourceRoot":"","sources":["../../../../sd-orm-node-mysql/src/MysqlDbConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Logger } from "@simplysm/sd-core-node";
|
|
2
|
+
import mysql from "mysql";
|
|
3
|
+
import { EventEmitter } from "events";
|
|
4
|
+
import { SdError, StringUtil } from "@simplysm/sd-core-common";
|
|
5
|
+
import { ISOLATION_LEVEL, QueryHelper } from "@simplysm/sd-orm-common";
|
|
6
|
+
export class MysqlDbConnection extends EventEmitter {
|
|
7
|
+
constructor(config) {
|
|
8
|
+
super();
|
|
9
|
+
this.config = config;
|
|
10
|
+
this._logger = Logger.get(["simplysm", "sd-orm-node", this.constructor.name]);
|
|
11
|
+
this._timeout = 300000;
|
|
12
|
+
this.isConnected = false;
|
|
13
|
+
this.isOnTransaction = false;
|
|
14
|
+
}
|
|
15
|
+
async connectAsync() {
|
|
16
|
+
if (this.isConnected) {
|
|
17
|
+
throw new Error("이미 'Connection'이 연결되어있습니다.");
|
|
18
|
+
}
|
|
19
|
+
const conn = mysql.createConnection({
|
|
20
|
+
host: this.config.host,
|
|
21
|
+
port: this.config.port,
|
|
22
|
+
user: this.config.username,
|
|
23
|
+
password: this.config.password,
|
|
24
|
+
database: this.config.username === "root" ? undefined : this.config.database,
|
|
25
|
+
multipleStatements: true
|
|
26
|
+
});
|
|
27
|
+
conn.on("end", () => {
|
|
28
|
+
this.emit("close");
|
|
29
|
+
this.isConnected = false;
|
|
30
|
+
this.isOnTransaction = false;
|
|
31
|
+
delete this._conn;
|
|
32
|
+
});
|
|
33
|
+
await new Promise((resolve, reject) => {
|
|
34
|
+
conn.on("error", (error) => {
|
|
35
|
+
if (this.isConnected) {
|
|
36
|
+
this._logger.error("error: " + error.message);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
reject(new Error(error.message));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
conn.on("connect", () => {
|
|
43
|
+
this._startTimeout();
|
|
44
|
+
this.isConnected = true;
|
|
45
|
+
this.isOnTransaction = false;
|
|
46
|
+
resolve();
|
|
47
|
+
});
|
|
48
|
+
conn.connect();
|
|
49
|
+
});
|
|
50
|
+
this._conn = conn;
|
|
51
|
+
}
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
53
|
+
async closeAsync() {
|
|
54
|
+
this._stopTimeout();
|
|
55
|
+
if (!this._conn || !this.isConnected) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this._conn.destroy();
|
|
59
|
+
this.emit("close");
|
|
60
|
+
this.isConnected = false;
|
|
61
|
+
this.isOnTransaction = false;
|
|
62
|
+
delete this._conn;
|
|
63
|
+
}
|
|
64
|
+
async beginTransactionAsync(isolationLevel) {
|
|
65
|
+
if (!this._conn || !this.isConnected) {
|
|
66
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
67
|
+
}
|
|
68
|
+
this._startTimeout();
|
|
69
|
+
const conn = this._conn;
|
|
70
|
+
await new Promise((resolve, reject) => {
|
|
71
|
+
conn.beginTransaction((err) => {
|
|
72
|
+
if (err) {
|
|
73
|
+
reject(err);
|
|
74
|
+
}
|
|
75
|
+
resolve();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
await new Promise((resolve, reject) => {
|
|
79
|
+
conn.query({
|
|
80
|
+
sql: "SET SESSION TRANSACTION ISOLATION LEVEL " + (isolationLevel ?? this.config.defaultIsolationLevel ?? ISOLATION_LEVEL.REPEATABLE_READ).replace(/_/g, " "),
|
|
81
|
+
timeout: this._timeout
|
|
82
|
+
}, (err) => {
|
|
83
|
+
if (err) {
|
|
84
|
+
reject(new Error(err.message));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.isOnTransaction = true;
|
|
88
|
+
resolve();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async commitTransactionAsync() {
|
|
93
|
+
if (!this._conn || !this.isConnected) {
|
|
94
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
95
|
+
}
|
|
96
|
+
this._startTimeout();
|
|
97
|
+
const conn = this._conn;
|
|
98
|
+
await new Promise((resolve, reject) => {
|
|
99
|
+
conn.commit((err) => {
|
|
100
|
+
if (err != null) {
|
|
101
|
+
reject(new Error(err.message));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.isOnTransaction = false;
|
|
105
|
+
resolve();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async rollbackTransactionAsync() {
|
|
110
|
+
if (!this._conn || !this.isConnected) {
|
|
111
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
112
|
+
}
|
|
113
|
+
this._startTimeout();
|
|
114
|
+
const conn = this._conn;
|
|
115
|
+
await new Promise((resolve, reject) => {
|
|
116
|
+
conn.rollback((err) => {
|
|
117
|
+
if (err != null) {
|
|
118
|
+
reject(new Error(err.message));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
this.isOnTransaction = false;
|
|
122
|
+
resolve();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async executeAsync(queries) {
|
|
127
|
+
if (!this._conn || !this.isConnected) {
|
|
128
|
+
throw new Error("'Connection'이 연결되어있지 않습니다.");
|
|
129
|
+
}
|
|
130
|
+
this._startTimeout();
|
|
131
|
+
const conn = this._conn;
|
|
132
|
+
const results = [];
|
|
133
|
+
for (const query of queries.filter((item) => !StringUtil.isNullOrEmpty(item))) {
|
|
134
|
+
const queryStrings = query.split(/\r?\nGO(\r?\n|$)/g);
|
|
135
|
+
const resultItems = [];
|
|
136
|
+
for (const queryString of queryStrings) {
|
|
137
|
+
this._logger.debug("쿼리 실행:\n" + queryString);
|
|
138
|
+
await new Promise((resolve, reject) => {
|
|
139
|
+
let rejected = false;
|
|
140
|
+
conn
|
|
141
|
+
.query({ sql: queryString, timeout: this._timeout }, (err, queryResults) => {
|
|
142
|
+
this._startTimeout();
|
|
143
|
+
if (err) {
|
|
144
|
+
rejected = true;
|
|
145
|
+
reject(new SdError(err, "쿼리 수행중 오류발생" + (err.sql !== undefined ? "\n-- query\n" + err.sql.trim() + "\n--" : "")));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (queryResults instanceof Array) {
|
|
149
|
+
for (const queryResult of queryResults.filter((item) => !("affectedRows" in item && "fieldCount" in item))) {
|
|
150
|
+
resultItems.push(queryResult);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
})
|
|
154
|
+
.on("error", (err) => {
|
|
155
|
+
this._startTimeout();
|
|
156
|
+
if (rejected)
|
|
157
|
+
return;
|
|
158
|
+
rejected = true;
|
|
159
|
+
reject(new SdError(err, "쿼리 수행중 오류발생" + (err.sql !== undefined ? "\n-- query\n" + err.sql.trim() + "\n--" : "")));
|
|
160
|
+
})
|
|
161
|
+
.on("end", () => {
|
|
162
|
+
this._startTimeout();
|
|
163
|
+
if (rejected)
|
|
164
|
+
return;
|
|
165
|
+
resolve();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
results.push(resultItems);
|
|
170
|
+
}
|
|
171
|
+
return results;
|
|
172
|
+
}
|
|
173
|
+
async bulkInsertAsync(tableName, columnDefs, records) {
|
|
174
|
+
const qh = new QueryHelper("mysql");
|
|
175
|
+
const colNames = columnDefs.map((def) => def.name);
|
|
176
|
+
let q = "";
|
|
177
|
+
q += `INSERT INTO ${tableName} (${colNames.map((item) => "`" + item + "`").join(", ")})
|
|
178
|
+
VALUES`;
|
|
179
|
+
q += "\n";
|
|
180
|
+
for (const record of records) {
|
|
181
|
+
q += `(${colNames.map((colName) => qh.getQueryValue(record[colName])).join(", ")}),\n`;
|
|
182
|
+
}
|
|
183
|
+
q = q.slice(0, -2) + ";";
|
|
184
|
+
await this.executeAsync([q]);
|
|
185
|
+
}
|
|
186
|
+
_stopTimeout() {
|
|
187
|
+
if (this._connTimeout) {
|
|
188
|
+
clearTimeout(this._connTimeout);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
_startTimeout() {
|
|
192
|
+
if (this._connTimeout) {
|
|
193
|
+
clearTimeout(this._connTimeout);
|
|
194
|
+
}
|
|
195
|
+
this._connTimeout = setTimeout(async () => {
|
|
196
|
+
await this.closeAsync();
|
|
197
|
+
}, this._timeout * 2);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=MysqlDbConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../sd-orm-node-mysql/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
import { IDbConnection, IQueryColumnDef, ISOLATION_LEVEL, ISqliteDbConnectionConfig } from "@simplysm/sd-orm-common";
|
|
4
|
+
export declare class SqliteDbConnection extends EventEmitter implements IDbConnection {
|
|
5
|
+
readonly config: ISqliteDbConnectionConfig;
|
|
6
|
+
private readonly _logger;
|
|
7
|
+
private readonly _timeout;
|
|
8
|
+
private _conn?;
|
|
9
|
+
private _connTimeout?;
|
|
10
|
+
isConnected: boolean;
|
|
11
|
+
isOnTransaction: boolean;
|
|
12
|
+
constructor(config: ISqliteDbConnectionConfig);
|
|
13
|
+
connectAsync(): Promise<void>;
|
|
14
|
+
closeAsync(): Promise<void>;
|
|
15
|
+
beginTransactionAsync(isolationLevel?: ISOLATION_LEVEL): Promise<void>;
|
|
16
|
+
commitTransactionAsync(): Promise<void>;
|
|
17
|
+
rollbackTransactionAsync(): Promise<void>;
|
|
18
|
+
executeAsync(queries: string[]): Promise<any[][]>;
|
|
19
|
+
bulkInsertAsync(tableName: string, columnDefs: IQueryColumnDef[], records: Record<string, any>[]): Promise<void>;
|
|
20
|
+
private _stopTimeout;
|
|
21
|
+
private _startTimeout;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteDbConnection.js","sourceRoot":"","sources":["../../../../sd-orm-node-sqlite/src/SqliteDbConnection.ts"],"names":[],"mappings":"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"}
|