@simplysm/sd-cli 10.0.22 → 10.0.24
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/dist/SdTsIncrementalBuilder.d.ts +1 -1
- package/dist/SdTsIncrementalBuilder.js.map +1 -1
- package/dist/SdTsIncrementalBuilder.mjs +39 -16
- package/dist/entry/SdCliLocalUpdate.d.ts +5 -0
- package/dist/entry/SdCliLocalUpdate.js.map +1 -1
- package/dist/entry/SdCliLocalUpdate.mjs +46 -1
- package/dist/entry/SdCliProject.js.map +1 -1
- package/dist/entry/SdCliProject.mjs +5 -0
- package/package.json +4 -4
- package/src/SdTsIncrementalBuilder.ts +29 -4
- package/src/entry/SdCliLocalUpdate.ts +53 -1
- package/src/entry/SdCliProject.ts +6 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.d.ts +0 -20
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.js.map +0 -1
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.mjs +0 -12
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.d.ts +0 -43
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.js.map +0 -1
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.mjs +0 -54
- package/dist/sd-core-common/src/decorators/PropertyValidate.d.ts +0 -16
- package/dist/sd-core-common/src/decorators/PropertyValidate.js.map +0 -1
- package/dist/sd-core-common/src/decorators/PropertyValidate.mjs +0 -26
- package/dist/sd-core-common/src/decorators/decorator-return-types.d.ts +0 -14
- package/dist/sd-core-common/src/decorators/decorator-return-types.js.map +0 -1
- package/dist/sd-core-common/src/decorators/decorator-return-types.mjs +0 -2
- package/dist/sd-core-common/src/errors/ArgumentError.d.ts +0 -10
- package/dist/sd-core-common/src/errors/ArgumentError.js.map +0 -1
- package/dist/sd-core-common/src/errors/ArgumentError.mjs +0 -13
- package/dist/sd-core-common/src/errors/NeverEntryError.d.ts +0 -10
- package/dist/sd-core-common/src/errors/NeverEntryError.js.map +0 -1
- package/dist/sd-core-common/src/errors/NeverEntryError.mjs +0 -13
- package/dist/sd-core-common/src/errors/NotImplementError.d.ts +0 -10
- package/dist/sd-core-common/src/errors/NotImplementError.js.map +0 -1
- package/dist/sd-core-common/src/errors/NotImplementError.mjs +0 -13
- package/dist/sd-core-common/src/errors/SdError.d.ts +0 -23
- package/dist/sd-core-common/src/errors/SdError.js.map +0 -1
- package/dist/sd-core-common/src/errors/SdError.mjs +0 -40
- package/dist/sd-core-common/src/errors/TimeoutError.d.ts +0 -11
- package/dist/sd-core-common/src/errors/TimeoutError.js.map +0 -1
- package/dist/sd-core-common/src/errors/TimeoutError.mjs +0 -16
- package/dist/sd-core-common/src/extensions/ArrayExtension.d.ts +0 -147
- package/dist/sd-core-common/src/extensions/ArrayExtension.js.map +0 -1
- package/dist/sd-core-common/src/extensions/ArrayExtension.mjs +0 -448
- package/dist/sd-core-common/src/extensions/MapExtension.d.ts +0 -4
- package/dist/sd-core-common/src/extensions/MapExtension.js.map +0 -1
- package/dist/sd-core-common/src/extensions/MapExtension.mjs +0 -15
- package/dist/sd-core-common/src/extensions/SetExtension.d.ts +0 -3
- package/dist/sd-core-common/src/extensions/SetExtension.js.map +0 -1
- package/dist/sd-core-common/src/extensions/SetExtension.mjs +0 -10
- package/dist/sd-core-common/src/index.d.ts +0 -32
- package/dist/sd-core-common/src/index.js.map +0 -1
- package/dist/sd-core-common/src/index.mjs +0 -33
- package/dist/sd-core-common/src/types/DateOnly.d.ts +0 -135
- package/dist/sd-core-common/src/types/DateOnly.js.map +0 -1
- package/dist/sd-core-common/src/types/DateOnly.mjs +0 -220
- package/dist/sd-core-common/src/types/DateTime.d.ts +0 -42
- package/dist/sd-core-common/src/types/DateTime.js.map +0 -1
- package/dist/sd-core-common/src/types/DateTime.mjs +0 -156
- package/dist/sd-core-common/src/types/DeepPartial.d.ts +0 -3
- package/dist/sd-core-common/src/types/DeepPartial.js.map +0 -1
- package/dist/sd-core-common/src/types/DeepPartial.mjs +0 -2
- package/dist/sd-core-common/src/types/ObjectSet.d.ts +0 -4
- package/dist/sd-core-common/src/types/ObjectSet.js.map +0 -1
- package/dist/sd-core-common/src/types/ObjectSet.mjs +0 -18
- package/dist/sd-core-common/src/types/Time.d.ts +0 -27
- package/dist/sd-core-common/src/types/Time.js.map +0 -1
- package/dist/sd-core-common/src/types/Time.mjs +0 -108
- package/dist/sd-core-common/src/types/Type.d.ts +0 -7
- package/dist/sd-core-common/src/types/Type.js.map +0 -1
- package/dist/sd-core-common/src/types/Type.mjs +0 -2
- package/dist/sd-core-common/src/types/UnwrappedType.d.ts +0 -1
- package/dist/sd-core-common/src/types/UnwrappedType.js.map +0 -1
- package/dist/sd-core-common/src/types/UnwrappedType.mjs +0 -2
- package/dist/sd-core-common/src/types/Uuid.d.ts +0 -8
- package/dist/sd-core-common/src/types/Uuid.js.map +0 -1
- package/dist/sd-core-common/src/types/Uuid.mjs +0 -26
- package/dist/sd-core-common/src/types/WrappedType.d.ts +0 -1
- package/dist/sd-core-common/src/types/WrappedType.js.map +0 -1
- package/dist/sd-core-common/src/types/WrappedType.mjs +0 -2
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.d.ts +0 -12
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.js.map +0 -1
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.mjs +0 -67
- package/dist/sd-core-common/src/utils/FunctionQueue.d.ts +0 -8
- package/dist/sd-core-common/src/utils/FunctionQueue.js.map +0 -1
- package/dist/sd-core-common/src/utils/FunctionQueue.mjs +0 -46
- package/dist/sd-core-common/src/utils/FunctionUtil.d.ts +0 -6
- package/dist/sd-core-common/src/utils/FunctionUtil.js.map +0 -1
- package/dist/sd-core-common/src/utils/FunctionUtil.mjs +0 -31
- package/dist/sd-core-common/src/utils/JsonConvert.d.ts +0 -8
- package/dist/sd-core-common/src/utils/JsonConvert.js.map +0 -1
- package/dist/sd-core-common/src/utils/JsonConvert.mjs +0 -78
- package/dist/sd-core-common/src/utils/MathUtil.d.ts +0 -3
- package/dist/sd-core-common/src/utils/MathUtil.js.map +0 -1
- package/dist/sd-core-common/src/utils/MathUtil.mjs +0 -6
- package/dist/sd-core-common/src/utils/NumberUtil.d.ts +0 -6
- package/dist/sd-core-common/src/utils/NumberUtil.js.map +0 -1
- package/dist/sd-core-common/src/utils/NumberUtil.mjs +0 -32
- package/dist/sd-core-common/src/utils/ObjectUtil.d.ts +0 -80
- package/dist/sd-core-common/src/utils/ObjectUtil.js.map +0 -1
- package/dist/sd-core-common/src/utils/ObjectUtil.mjs +0 -452
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.d.ts +0 -6
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.js.map +0 -1
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.mjs +0 -27
- package/dist/sd-core-common/src/utils/StringUtil.d.ts +0 -8
- package/dist/sd-core-common/src/utils/StringUtil.js.map +0 -1
- package/dist/sd-core-common/src/utils/StringUtil.mjs +0 -77
- package/dist/sd-core-common/src/utils/Wait.d.ts +0 -4
- package/dist/sd-core-common/src/utils/Wait.js.map +0 -1
- package/dist/sd-core-common/src/utils/Wait.mjs +0 -23
- package/dist/sd-core-node/src/index.d.ts +0 -6
- package/dist/sd-core-node/src/index.js.map +0 -1
- package/dist/sd-core-node/src/index.mjs +0 -7
- package/dist/sd-core-node/src/utils/FsUtil.d.ts +0 -44
- package/dist/sd-core-node/src/utils/FsUtil.js.map +0 -1
- package/dist/sd-core-node/src/utils/FsUtil.mjs +0 -493
- package/dist/sd-core-node/src/utils/Logger.d.ts +0 -91
- package/dist/sd-core-node/src/utils/Logger.js.map +0 -1
- package/dist/sd-core-node/src/utils/Logger.mjs +0 -185
- package/dist/sd-core-node/src/utils/PathUtil.d.ts +0 -6
- package/dist/sd-core-node/src/utils/PathUtil.js.map +0 -1
- package/dist/sd-core-node/src/utils/PathUtil.mjs +0 -24
- package/dist/sd-core-node/src/utils/SdFsWatcher.d.ts +0 -15
- package/dist/sd-core-node/src/utils/SdFsWatcher.js.map +0 -1
- package/dist/sd-core-node/src/utils/SdFsWatcher.mjs +0 -43
- package/dist/sd-core-node/src/utils/SdProcess.d.ts +0 -5
- package/dist/sd-core-node/src/utils/SdProcess.js.map +0 -1
- package/dist/sd-core-node/src/utils/SdProcess.mjs +0 -36
- package/dist/sd-orm-common/src/CaseQueryHelper.d.ts +0 -12
- package/dist/sd-orm-common/src/CaseQueryHelper.js.map +0 -1
- package/dist/sd-orm-common/src/CaseQueryHelper.mjs +0 -19
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.d.ts +0 -12
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.js.map +0 -1
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.mjs +0 -20
- package/dist/sd-orm-common/src/DbContext.d.ts +0 -81
- package/dist/sd-orm-common/src/DbContext.js.map +0 -1
- package/dist/sd-orm-common/src/DbContext.mjs +0 -635
- package/dist/sd-orm-common/src/IDbConnection.d.ts +0 -15
- package/dist/sd-orm-common/src/IDbConnection.js.map +0 -1
- package/dist/sd-orm-common/src/IDbConnection.mjs +0 -2
- package/dist/sd-orm-common/src/IDbContextExecutor.d.ts +0 -17
- package/dist/sd-orm-common/src/IDbContextExecutor.js.map +0 -1
- package/dist/sd-orm-common/src/IDbContextExecutor.mjs +0 -2
- package/dist/sd-orm-common/src/IDbMigration.d.ts +0 -4
- package/dist/sd-orm-common/src/IDbMigration.js.map +0 -1
- package/dist/sd-orm-common/src/IDbMigration.mjs +0 -2
- package/dist/sd-orm-common/src/QueryBuilder.d.ts +0 -48
- package/dist/sd-orm-common/src/QueryBuilder.js.map +0 -1
- package/dist/sd-orm-common/src/QueryBuilder.mjs +0 -1022
- package/dist/sd-orm-common/src/QueryHelper.d.ts +0 -75
- package/dist/sd-orm-common/src/QueryHelper.js.map +0 -1
- package/dist/sd-orm-common/src/QueryHelper.mjs +0 -627
- package/dist/sd-orm-common/src/QueryUnit.d.ts +0 -10
- package/dist/sd-orm-common/src/QueryUnit.js.map +0 -1
- package/dist/sd-orm-common/src/QueryUnit.mjs +0 -16
- package/dist/sd-orm-common/src/Queryable.d.ts +0 -105
- package/dist/sd-orm-common/src/Queryable.js.map +0 -1
- package/dist/sd-orm-common/src/Queryable.mjs +0 -1375
- package/dist/sd-orm-common/src/SdOrmDataType.d.ts +0 -21
- package/dist/sd-orm-common/src/SdOrmDataType.js.map +0 -1
- package/dist/sd-orm-common/src/SdOrmDataType.mjs +0 -2
- package/dist/sd-orm-common/src/commons.d.ts +0 -400
- package/dist/sd-orm-common/src/commons.js.map +0 -1
- package/dist/sd-orm-common/src/commons.mjs +0 -8
- package/dist/sd-orm-common/src/decorators.d.ts +0 -29
- package/dist/sd-orm-common/src/decorators.js.map +0 -1
- package/dist/sd-orm-common/src/decorators.mjs +0 -89
- package/dist/sd-orm-common/src/index.d.ts +0 -17
- package/dist/sd-orm-common/src/index.js.map +0 -1
- package/dist/sd-orm-common/src/index.mjs +0 -18
- package/dist/sd-orm-common/src/models/SystemMigration.d.ts +0 -3
- package/dist/sd-orm-common/src/models/SystemMigration.js.map +0 -1
- package/dist/sd-orm-common/src/models/SystemMigration.mjs +0 -13
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.d.ts +0 -14
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.js.map +0 -1
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.mjs +0 -66
- package/dist/sd-orm-common/src/utils/SdOrmUtil.d.ts +0 -8
- package/dist/sd-orm-common/src/utils/SdOrmUtil.js.map +0 -1
- package/dist/sd-orm-common/src/utils/SdOrmUtil.mjs +0 -248
- package/dist/sd-orm-node/src/DbConnectionFactory.d.ts +0 -4
- package/dist/sd-orm-node/src/DbConnectionFactory.js.map +0 -1
- package/dist/sd-orm-node/src/DbConnectionFactory.mjs +0 -17
- package/dist/sd-orm-node/src/NodeDbContextExecutor.d.ts +0 -19
- package/dist/sd-orm-node/src/NodeDbContextExecutor.js.map +0 -1
- package/dist/sd-orm-node/src/NodeDbContextExecutor.mjs +0 -71
- package/dist/sd-orm-node/src/SdOrm.d.ts +0 -10
- package/dist/sd-orm-node/src/SdOrm.js.map +0 -1
- package/dist/sd-orm-node/src/SdOrm.mjs +0 -25
- package/dist/sd-orm-node/src/index.d.ts +0 -4
- package/dist/sd-orm-node/src/index.js.map +0 -1
- package/dist/sd-orm-node/src/index.mjs +0 -5
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.d.ts +0 -25
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.js.map +0 -1
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.mjs +0 -321
- package/dist/sd-orm-node-mssql/src/index.d.ts +0 -2
- package/dist/sd-orm-node-mssql/src/index.js.map +0 -1
- package/dist/sd-orm-node-mssql/src/index.mjs +0 -3
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.d.ts +0 -22
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.js.map +0 -1
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.mjs +0 -200
- package/dist/sd-orm-node-mysql/src/index.d.ts +0 -2
- package/dist/sd-orm-node-mysql/src/index.js.map +0 -1
- package/dist/sd-orm-node-mysql/src/index.mjs +0 -3
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.d.ts +0 -22
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.js.map +0 -1
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.mjs +0 -172
- package/dist/sd-orm-node-sqlite/src/index.d.ts +0 -2
- package/dist/sd-orm-node-sqlite/src/index.js.map +0 -1
- package/dist/sd-orm-node-sqlite/src/index.mjs +0 -3
- package/dist/sd-service-common/src/commons-orm.d.ts +0 -4
- package/dist/sd-service-common/src/commons-orm.js.map +0 -1
- package/dist/sd-service-common/src/commons-orm.mjs +0 -2
- package/dist/sd-service-common/src/commons-smtp.d.ts +0 -29
- package/dist/sd-service-common/src/commons-smtp.js.map +0 -1
- package/dist/sd-service-common/src/commons-smtp.mjs +0 -2
- package/dist/sd-service-common/src/commons.d.ts +0 -57
- package/dist/sd-service-common/src/commons.js.map +0 -1
- package/dist/sd-service-common/src/commons.mjs +0 -3
- package/dist/sd-service-common/src/index.d.ts +0 -3
- package/dist/sd-service-common/src/index.js.map +0 -1
- package/dist/sd-service-common/src/index.mjs +0 -4
- package/dist/sd-service-server/src/ApiServiceError.d.ts +0 -12
- package/dist/sd-service-server/src/ApiServiceError.js.map +0 -1
- package/dist/sd-service-server/src/ApiServiceError.mjs +0 -15
- package/dist/sd-service-server/src/SdServiceServer.d.ts +0 -39
- package/dist/sd-service-server/src/SdServiceServer.js.map +0 -1
- package/dist/sd-service-server/src/SdServiceServer.mjs +0 -513
- package/dist/sd-service-server/src/commons.d.ts +0 -23
- package/dist/sd-service-server/src/commons.js.map +0 -1
- package/dist/sd-service-server/src/commons.mjs +0 -3
- package/dist/sd-service-server/src/index.d.ts +0 -8
- package/dist/sd-service-server/src/index.js.map +0 -1
- package/dist/sd-service-server/src/index.mjs +0 -9
- package/dist/sd-service-server/src/services/SdAutoUpdateService.d.ts +0 -4
- package/dist/sd-service-server/src/services/SdAutoUpdateService.js.map +0 -1
- package/dist/sd-service-server/src/services/SdAutoUpdateService.mjs +0 -20
- package/dist/sd-service-server/src/services/SdCryptoService.d.ts +0 -7
- package/dist/sd-service-server/src/services/SdCryptoService.js.map +0 -1
- package/dist/sd-service-server/src/services/SdCryptoService.mjs +0 -39
- package/dist/sd-service-server/src/services/SdOrmService.d.ts +0 -22
- package/dist/sd-service-server/src/services/SdOrmService.js.map +0 -1
- package/dist/sd-service-server/src/services/SdOrmService.mjs +0 -115
- package/dist/sd-service-server/src/services/SdSmtpClientService.d.ts +0 -6
- package/dist/sd-service-server/src/services/SdSmtpClientService.js.map +0 -1
- package/dist/sd-service-server/src/services/SdSmtpClientService.mjs +0 -44
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.d.ts +0 -4
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.js.map +0 -1
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.mjs +0 -36
|
@@ -1,321 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MysqlDbConnection.js","sourceRoot":"","sources":["../../../../sd-orm-node-mysql/src/MysqlDbConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,200 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDbConnection.js","sourceRoot":"","sources":["../../../../sd-orm-node-sqlite/src/SqliteDbConnection.ts"],"names":[],"mappings":"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"}
|