emilsoftware-utilities 2.0.0-dev.1 → 2.0.0-dev.10
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/DatabaseUpdater.d.ts +1 -1
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/Orm.d.ts +5 -1
- package/dist/Orm.js +147 -78
- package/dist/Orm.js.map +1 -1
- package/dist/Utilities.d.ts +2 -2
- package/dist/Utilities.js +2 -0
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.d.ts +1 -1
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.d.ts +1 -0
- package/dist/accessi-module/Services/AuthService/AuthService.js +12 -2
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +9 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/index.d.ts +1 -0
- package/dist/accessi-module/index.js +42 -6
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/allegati-module/AllegatiModule.d.ts +1 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.10.tgz +0 -0
- package/dist/firebird-compat.d.ts +24 -0
- package/dist/firebird-compat.js +218 -0
- package/dist/firebird-compat.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.js +28 -2
- package/dist/index.js.map +1 -1
- package/dist/swagger/SwaggerConfig.d.ts +6 -1
- package/dist/swagger/SwaggerConfig.js +6 -6
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +2 -2
- package/dist/emilsoftware-utilities-2.0.0-dev.1.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Orm } from \"./Orm\";\nimport { Logger } from \"./Logger\";\nimport { Options } from \"es-node-firebird\";\n\nexport abstract class DatabaseUpdater {\n //#region Fields and Options\n protected static options: Options;\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\n //#endregion\n\n //#region Utility Methods\n /**\n * Checks if a table exists.\n * @param options Database connection options.\n * @param table Table name.\n * @returns True if the table exists, false otherwise.\n */\n protected static async tableExists(\n options: Options,\n table: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$RELATIONS\n WHERE RDB$RELATION_NAME = ?\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\n const result = await Orm.query(options, query, [table.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking table ${table}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a column exists in a specific table.\n * @param options Database connection options.\n * @param table Table name.\n * @param column Column name.\n * @returns True if the column exists, false otherwise.\n */\n protected static async columnExists(\n options: Options,\n table: string,\n column: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1 \n FROM RDB$RELATION_FIELDS \n WHERE RDB$RELATION_NAME = ? \n AND RDB$FIELD_NAME = ?`;\n const result = await Orm.query(options, query, [\n table.toUpperCase(),\n column.toUpperCase(),\n ]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a generator/sequence exists.\n * @param options Database connection options.\n * @param generator Generator name.\n * @returns True if the generator exists, false otherwise.\n */\n protected static async generatorExists(\n options: Options,\n generator: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$GENERATORS\n WHERE RDB$GENERATOR_NAME = ?`;\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking generator ${generator}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a trigger exists.\n * @param options Database connection options.\n * @param trigger Trigger name.\n * @returns True if the trigger exists, false otherwise.\n */\n protected static async triggerExists(\n options: Options,\n trigger: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$TRIGGERS\n WHERE RDB$TRIGGER_NAME = ?\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking trigger ${trigger}:`, error);\n throw error;\n }\n }\n\n /**\n * Retrieves the current database version from the PARAMETRI table.\n * @param options Database connection options.\n * @returns The current database version or null if not found.\n */\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\n\n try {\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\n return null;\n }\n\n const parameters = (await Orm.query(\n options,\n `SELECT CODPAR, DESPAR\n FROM PARAMETRI\n WHERE CODPAR IN (?, ?)\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\n [\n this.versionParameterKeys[0],\n this.versionParameterKeys[1],\n this.versionParameterKeys[0],\n ]\n )) as any[];\n\n return parameters.length > 0 ? parameters[0].DESPAR : null;\n } catch (error: any) {\n this.logger.error(`Error getting database version:`, error);\n throw error;\n }\n }\n\n /**\n * Updates the database version in the PARAMETRI table.\n * @param options Database connection options.\n * @param version The new database version.\n */\n protected static async setDatabaseVersion(\n options: Options,\n version: string\n ): Promise<void> {\n\n try {\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\n await this.createParametersTable(options);\n }\n\n const existingRows = (await Orm.query(\n options,\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\n )) as any[];\n\n if (existingRows.length === 0) {\n await Orm.execute(\n options,\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\n [this.versionParameterKeys[0], version, \"versione\", null]\n );\n return;\n }\n\n for (const row of existingRows) {\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\n version,\n row.CODPAR?.trim?.() ?? row.CODPAR,\n ]);\n }\n } catch (error: any) {\n this.logger.error(`Error setting database version:`, error);\n throw error;\n }\n }\n //#endregion\n\n //#region Initialization Methods\n /**\n * Ensures the PARAMETRI table exists and initializes it if necessary.\n * @param options Database connection options.\n */\n protected static async createParametersTable(options: Options): Promise<void> {\n try {\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\n if (!tableAlreadyExists) {\n const createTableQuery = `\n CREATE TABLE PARAMETRI (\n CODPAR VARCHAR(15) NOT NULL,\n DESPAR VARCHAR(255),\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\n GRUPPO VARCHAR(20)\n );`;\n\n await Orm.query(options, createTableQuery);\n\n await Orm.query(\n options,\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\n );\n\n await Orm.query(options, \"GRANT ALL ON PARAMETRI TO PUBLIC;\");\n await Orm.query(options, \"GRANT SELECT ON PARAMETRI TO TABX;\");\n }\n\n const versioneDb = await this.getDatabaseVersion(options);\n if (versioneDb !== null && versioneDb !== undefined) {\n return;\n }\n\n await Orm.execute(\n options,\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\n );\n } catch (error: any) {\n this.logger.error(\"Error creating table PARAMETRI:\", error);\n throw error;\n }\n\n\n }\n //#endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Orm } from \"./Orm\";\nimport { Logger } from \"./Logger\";\nimport { Options } from \"node-firebird\";\n\nexport abstract class DatabaseUpdater {\n //#region Fields and Options\n protected static options: Options;\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\n //#endregion\n\n //#region Utility Methods\n /**\n * Checks if a table exists.\n * @param options Database connection options.\n * @param table Table name.\n * @returns True if the table exists, false otherwise.\n */\n protected static async tableExists(\n options: Options,\n table: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$RELATIONS\n WHERE RDB$RELATION_NAME = ?\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\n const result = await Orm.query(options, query, [table.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking table ${table}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a column exists in a specific table.\n * @param options Database connection options.\n * @param table Table name.\n * @param column Column name.\n * @returns True if the column exists, false otherwise.\n */\n protected static async columnExists(\n options: Options,\n table: string,\n column: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1 \n FROM RDB$RELATION_FIELDS \n WHERE RDB$RELATION_NAME = ? \n AND RDB$FIELD_NAME = ?`;\n const result = await Orm.query(options, query, [\n table.toUpperCase(),\n column.toUpperCase(),\n ]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a generator/sequence exists.\n * @param options Database connection options.\n * @param generator Generator name.\n * @returns True if the generator exists, false otherwise.\n */\n protected static async generatorExists(\n options: Options,\n generator: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$GENERATORS\n WHERE RDB$GENERATOR_NAME = ?`;\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking generator ${generator}:`, error);\n throw error;\n }\n }\n\n /**\n * Checks if a trigger exists.\n * @param options Database connection options.\n * @param trigger Trigger name.\n * @returns True if the trigger exists, false otherwise.\n */\n protected static async triggerExists(\n options: Options,\n trigger: string\n ): Promise<boolean> {\n\n try {\n const query = `\n SELECT 1\n FROM RDB$TRIGGERS\n WHERE RDB$TRIGGER_NAME = ?\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\n return result.length > 0;\n } catch (error: any) {\n this.logger.error(`Error checking trigger ${trigger}:`, error);\n throw error;\n }\n }\n\n /**\n * Retrieves the current database version from the PARAMETRI table.\n * @param options Database connection options.\n * @returns The current database version or null if not found.\n */\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\n\n try {\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\n return null;\n }\n\n const parameters = (await Orm.query(\n options,\n `SELECT CODPAR, DESPAR\n FROM PARAMETRI\n WHERE CODPAR IN (?, ?)\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\n [\n this.versionParameterKeys[0],\n this.versionParameterKeys[1],\n this.versionParameterKeys[0],\n ]\n )) as any[];\n\n return parameters.length > 0 ? parameters[0].DESPAR : null;\n } catch (error: any) {\n this.logger.error(`Error getting database version:`, error);\n throw error;\n }\n }\n\n /**\n * Updates the database version in the PARAMETRI table.\n * @param options Database connection options.\n * @param version The new database version.\n */\n protected static async setDatabaseVersion(\n options: Options,\n version: string\n ): Promise<void> {\n\n try {\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\n await this.createParametersTable(options);\n }\n\n const existingRows = (await Orm.query(\n options,\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\n )) as any[];\n\n if (existingRows.length === 0) {\n await Orm.execute(\n options,\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\n [this.versionParameterKeys[0], version, \"versione\", null]\n );\n return;\n }\n\n for (const row of existingRows) {\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\n version,\n row.CODPAR?.trim?.() ?? row.CODPAR,\n ]);\n }\n } catch (error: any) {\n this.logger.error(`Error setting database version:`, error);\n throw error;\n }\n }\n //#endregion\n\n //#region Initialization Methods\n /**\n * Ensures the PARAMETRI table exists and initializes it if necessary.\n * @param options Database connection options.\n */\n protected static async createParametersTable(options: Options): Promise<void> {\n try {\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\n if (!tableAlreadyExists) {\n const createTableQuery = `\n CREATE TABLE PARAMETRI (\n CODPAR VARCHAR(15) NOT NULL,\n DESPAR VARCHAR(255),\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\n GRUPPO VARCHAR(20)\n );`;\n\n await Orm.query(options, createTableQuery);\n\n await Orm.query(\n options,\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\n );\n\n await Orm.query(options, \"GRANT ALL ON PARAMETRI TO PUBLIC;\");\n await Orm.query(options, \"GRANT SELECT ON PARAMETRI TO TABX;\");\n }\n\n const versioneDb = await this.getDatabaseVersion(options);\n if (versioneDb !== null && versioneDb !== undefined) {\n return;\n }\n\n await Orm.execute(\n options,\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\n );\n } catch (error: any) {\n this.logger.error(\"Error creating table PARAMETRI:\", error);\n throw error;\n }\n\n\n }\n //#endregion\n}\n"]}
|
package/dist/Orm.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { Database, Options, Transaction } from "
|
|
1
|
+
import { Database, Options, Transaction } from "node-firebird";
|
|
2
2
|
export declare class Orm {
|
|
3
3
|
private static logger;
|
|
4
4
|
static quote(value: string): string;
|
|
5
|
+
private static getTimeoutMs;
|
|
6
|
+
private static createTimeoutError;
|
|
7
|
+
private static detachQuietly;
|
|
8
|
+
private static attachWithTimeout;
|
|
5
9
|
static testConnection(options: Options): Promise<boolean>;
|
|
6
10
|
static query(options: Options, query: string, parameters?: any[], logQuery?: boolean): Promise<any>;
|
|
7
11
|
static execute(options: Options, query: string, parameters?: any, logQuery?: boolean): Promise<any>;
|
package/dist/Orm.js
CHANGED
|
@@ -43,25 +43,81 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.Orm = void 0;
|
|
46
|
-
const Firebird = __importStar(require("
|
|
46
|
+
const Firebird = __importStar(require("node-firebird"));
|
|
47
47
|
const Logger_1 = require("./Logger");
|
|
48
48
|
const Utilities_1 = require("./Utilities");
|
|
49
|
+
const firebird_compat_1 = require("./firebird-compat");
|
|
49
50
|
class Orm {
|
|
50
51
|
static quote(value) {
|
|
51
52
|
return "\"" + value + "\"";
|
|
52
53
|
}
|
|
54
|
+
static getTimeoutMs(options) {
|
|
55
|
+
var _a;
|
|
56
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
57
|
+
const candidate = (_a = normalizedOptions.connectTimeout) !== null && _a !== void 0 ? _a : 15000;
|
|
58
|
+
return Number.isFinite(candidate) && candidate > 0 ? Math.trunc(candidate) : 15000;
|
|
59
|
+
}
|
|
60
|
+
static createTimeoutError(stage, timeoutMs, options, query) {
|
|
61
|
+
var _a, _b, _c;
|
|
62
|
+
const target = `${(_a = options.host) !== null && _a !== void 0 ? _a : "?"}:${(_b = options.port) !== null && _b !== void 0 ? _b : "?"} -> ${(_c = options.database) !== null && _c !== void 0 ? _c : "?"}`;
|
|
63
|
+
const suffix = query ? ` | sql=${query.replace(/\s+/g, " ").trim()}` : "";
|
|
64
|
+
return new Error(`Timeout during Firebird ${stage} after ${timeoutMs} ms on ${target}${suffix}`);
|
|
65
|
+
}
|
|
66
|
+
static detachQuietly(db) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
if (!db) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
yield new Promise((resolve) => {
|
|
72
|
+
try {
|
|
73
|
+
db.detach(() => resolve());
|
|
74
|
+
}
|
|
75
|
+
catch (_a) {
|
|
76
|
+
resolve();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
static attachWithTimeout(options) {
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
84
|
+
const timeoutMs = this.getTimeoutMs(normalizedOptions);
|
|
85
|
+
let settled = false;
|
|
86
|
+
const timeoutId = setTimeout(() => {
|
|
87
|
+
if (settled) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
settled = true;
|
|
91
|
+
reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("attach", timeoutMs, normalizedOptions), normalizedOptions, { stage: "attach" }));
|
|
92
|
+
}, timeoutMs);
|
|
93
|
+
this.logger.info(`Firebird attach using ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(normalizedOptions)}`);
|
|
94
|
+
Firebird.attach(normalizedOptions, (err, db) => __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
if (settled) {
|
|
96
|
+
yield this.detachQuietly(db);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
settled = true;
|
|
100
|
+
clearTimeout(timeoutId);
|
|
101
|
+
if (err) {
|
|
102
|
+
return reject((0, firebird_compat_1.enhanceFirebirdError)(err, normalizedOptions, { stage: "attach" }));
|
|
103
|
+
}
|
|
104
|
+
return resolve(db);
|
|
105
|
+
}));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
53
108
|
static testConnection(options) {
|
|
54
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
110
|
return new Promise((resolve) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.logger.error('La connessione con il DATABASE non è andata a buon fine.');
|
|
59
|
-
return resolve(false);
|
|
60
|
-
}
|
|
111
|
+
this.attachWithTimeout(options)
|
|
112
|
+
.then((db) => __awaiter(this, void 0, void 0, function* () {
|
|
61
113
|
this.logger.info("DATABASE connesso.");
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
114
|
+
yield this.detachQuietly(db);
|
|
115
|
+
resolve(true);
|
|
116
|
+
}))
|
|
117
|
+
.catch((err) => {
|
|
118
|
+
this.logger.error("La connessione con il DATABASE non e andata a buon fine.");
|
|
119
|
+
this.logger.error(err);
|
|
120
|
+
resolve(false);
|
|
65
121
|
});
|
|
66
122
|
});
|
|
67
123
|
});
|
|
@@ -69,58 +125,82 @@ class Orm {
|
|
|
69
125
|
static query(options_1, query_1) {
|
|
70
126
|
return __awaiter(this, arguments, void 0, function* (options, query, parameters = [], logQuery = true) {
|
|
71
127
|
try {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
128
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
129
|
+
const db = yield this.attachWithTimeout(normalizedOptions);
|
|
130
|
+
return yield new Promise((resolve, reject) => {
|
|
131
|
+
const timeoutMs = this.getTimeoutMs(normalizedOptions);
|
|
132
|
+
let settled = false;
|
|
133
|
+
const timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
if (settled) {
|
|
135
|
+
return;
|
|
77
136
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
137
|
+
settled = true;
|
|
138
|
+
yield this.detachQuietly(db);
|
|
139
|
+
reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("query", timeoutMs, normalizedOptions, query), normalizedOptions, { stage: "query", sql: query }));
|
|
140
|
+
}), timeoutMs);
|
|
141
|
+
if (logQuery) {
|
|
142
|
+
this.logger.info(Utilities_1.RestUtilities.printQueryWithParams(query, parameters));
|
|
143
|
+
}
|
|
144
|
+
db.query(query, parameters, (error, result) => __awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
if (settled) {
|
|
146
|
+
yield this.detachQuietly(db);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
settled = true;
|
|
150
|
+
clearTimeout(timeoutId);
|
|
151
|
+
yield this.detachQuietly(db);
|
|
152
|
+
if (error) {
|
|
153
|
+
return reject((0, firebird_compat_1.enhanceFirebirdError)(error, normalizedOptions, { stage: "query", sql: query }));
|
|
154
|
+
}
|
|
155
|
+
return resolve(result);
|
|
156
|
+
}));
|
|
90
157
|
});
|
|
91
158
|
}
|
|
92
159
|
catch (error) {
|
|
93
|
-
|
|
94
|
-
|
|
160
|
+
const normalizedError = (0, firebird_compat_1.enhanceFirebirdError)(error, options, { stage: "query", sql: query });
|
|
161
|
+
this.logger.error(normalizedError);
|
|
162
|
+
throw normalizedError;
|
|
95
163
|
}
|
|
96
164
|
});
|
|
97
165
|
}
|
|
98
166
|
static execute(options_1, query_1) {
|
|
99
167
|
return __awaiter(this, arguments, void 0, function* (options, query, parameters = [], logQuery = true) {
|
|
100
168
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
169
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
170
|
+
const db = yield this.attachWithTimeout(normalizedOptions);
|
|
171
|
+
return yield new Promise((resolve, reject) => {
|
|
172
|
+
const timeoutMs = this.getTimeoutMs(normalizedOptions);
|
|
173
|
+
let settled = false;
|
|
174
|
+
const timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
175
|
+
if (settled) {
|
|
176
|
+
return;
|
|
106
177
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
178
|
+
settled = true;
|
|
179
|
+
yield this.detachQuietly(db);
|
|
180
|
+
reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("execute", timeoutMs, normalizedOptions, query), normalizedOptions, { stage: "execute", sql: query }));
|
|
181
|
+
}), timeoutMs);
|
|
182
|
+
if (logQuery) {
|
|
183
|
+
this.logger.info(Utilities_1.RestUtilities.printQueryWithParams(query, parameters));
|
|
184
|
+
}
|
|
185
|
+
db.execute(query, parameters, (error, result) => __awaiter(this, void 0, void 0, function* () {
|
|
186
|
+
if (settled) {
|
|
187
|
+
yield this.detachQuietly(db);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
settled = true;
|
|
191
|
+
clearTimeout(timeoutId);
|
|
192
|
+
yield this.detachQuietly(db);
|
|
193
|
+
if (error) {
|
|
194
|
+
return reject((0, firebird_compat_1.enhanceFirebirdError)(error, normalizedOptions, { stage: "execute", sql: query }));
|
|
195
|
+
}
|
|
196
|
+
return resolve(result);
|
|
197
|
+
}));
|
|
119
198
|
});
|
|
120
199
|
}
|
|
121
200
|
catch (error) {
|
|
122
|
-
|
|
123
|
-
|
|
201
|
+
const normalizedError = (0, firebird_compat_1.enhanceFirebirdError)(error, options, { stage: "execute", sql: query });
|
|
202
|
+
this.logger.error(normalizedError);
|
|
203
|
+
throw normalizedError;
|
|
124
204
|
}
|
|
125
205
|
});
|
|
126
206
|
}
|
|
@@ -132,24 +212,17 @@ class Orm {
|
|
|
132
212
|
}
|
|
133
213
|
static connect(options) {
|
|
134
214
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
return
|
|
136
|
-
Firebird.attach(options, function (err, db) {
|
|
137
|
-
if (err)
|
|
138
|
-
return reject(err);
|
|
139
|
-
else
|
|
140
|
-
return resolve(db);
|
|
141
|
-
});
|
|
142
|
-
});
|
|
215
|
+
return this.attachWithTimeout(options);
|
|
143
216
|
});
|
|
144
217
|
}
|
|
145
218
|
static startTransaction(db) {
|
|
146
219
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
220
|
return new Promise((resolve, reject) => {
|
|
148
221
|
db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err, transaction) {
|
|
149
|
-
if (err)
|
|
222
|
+
if (err) {
|
|
150
223
|
return reject(err);
|
|
151
|
-
|
|
152
|
-
|
|
224
|
+
}
|
|
225
|
+
return resolve(transaction);
|
|
153
226
|
});
|
|
154
227
|
});
|
|
155
228
|
});
|
|
@@ -158,10 +231,10 @@ class Orm {
|
|
|
158
231
|
return __awaiter(this, void 0, void 0, function* () {
|
|
159
232
|
return new Promise((resolve, reject) => {
|
|
160
233
|
transaction.commit((err) => {
|
|
161
|
-
if (err)
|
|
234
|
+
if (err) {
|
|
162
235
|
return reject(err);
|
|
163
|
-
|
|
164
|
-
|
|
236
|
+
}
|
|
237
|
+
return resolve("Transaction committed successfully.");
|
|
165
238
|
});
|
|
166
239
|
});
|
|
167
240
|
});
|
|
@@ -170,10 +243,10 @@ class Orm {
|
|
|
170
243
|
return __awaiter(this, void 0, void 0, function* () {
|
|
171
244
|
return new Promise((resolve, reject) => {
|
|
172
245
|
transaction.rollback((err) => {
|
|
173
|
-
if (err)
|
|
246
|
+
if (err) {
|
|
174
247
|
return reject(err);
|
|
175
|
-
|
|
176
|
-
|
|
248
|
+
}
|
|
249
|
+
return resolve("Transaction rolled back successfully.");
|
|
177
250
|
});
|
|
178
251
|
});
|
|
179
252
|
});
|
|
@@ -188,24 +261,22 @@ class Orm {
|
|
|
188
261
|
for (const qwp of queriesWithParams) {
|
|
189
262
|
yield new Promise((resolve, reject) => {
|
|
190
263
|
transaction.query(qwp.query, qwp.params, (err, result) => {
|
|
191
|
-
if (err)
|
|
264
|
+
if (err) {
|
|
192
265
|
return reject(err);
|
|
193
|
-
|
|
194
|
-
|
|
266
|
+
}
|
|
267
|
+
return resolve(result);
|
|
195
268
|
});
|
|
196
269
|
});
|
|
197
270
|
}
|
|
198
271
|
yield Orm.commitTransaction(transaction);
|
|
199
|
-
|
|
200
|
-
return
|
|
272
|
+
yield Orm.detachQuietly(db);
|
|
273
|
+
return "OK";
|
|
201
274
|
}
|
|
202
275
|
catch (error) {
|
|
203
276
|
if (transaction) {
|
|
204
277
|
yield Orm.rollbackTransaction(transaction);
|
|
205
278
|
}
|
|
206
|
-
|
|
207
|
-
db.detach();
|
|
208
|
-
}
|
|
279
|
+
yield Orm.detachQuietly(db);
|
|
209
280
|
throw error;
|
|
210
281
|
}
|
|
211
282
|
});
|
|
@@ -216,10 +287,10 @@ class Orm {
|
|
|
216
287
|
return yield queries.reduce((promiseChain, currentQuery, index) => {
|
|
217
288
|
return promiseChain.then(() => new Promise((resolve, reject) => {
|
|
218
289
|
transaction.query(currentQuery, params[index], (err, result) => {
|
|
219
|
-
if (err)
|
|
290
|
+
if (err) {
|
|
220
291
|
return reject(err);
|
|
221
|
-
|
|
222
|
-
|
|
292
|
+
}
|
|
293
|
+
return resolve(result);
|
|
223
294
|
});
|
|
224
295
|
}));
|
|
225
296
|
}, Promise.resolve());
|
|
@@ -230,9 +301,7 @@ class Orm {
|
|
|
230
301
|
if (rollbackErr) {
|
|
231
302
|
return reject(rollbackErr);
|
|
232
303
|
}
|
|
233
|
-
|
|
234
|
-
return reject(error);
|
|
235
|
-
}
|
|
304
|
+
return reject(error);
|
|
236
305
|
});
|
|
237
306
|
});
|
|
238
307
|
}
|
package/dist/Orm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Orm.js","sourceRoot":"","sources":["../src/Orm.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"es-node-firebird\";\nimport { Logger } from \"./Logger\";\nimport { Database, Options, Transaction } from \"es-node-firebird\";\nimport { RestUtilities } from \"./Utilities\";\n\nexport class Orm {\n private static logger: Logger = new Logger(Orm.name);\n\n public static quote(value: string): string {\n return \"\\\"\" + value + \"\\\"\";\n }\n\n public static async testConnection(options: Options): Promise<boolean> {\n return new Promise((resolve): void => {\n Firebird.attach(options, (err: Error, db: Database): void => {\n if (err) {\n this.logger.error('La connessione con il DATABASE non è andata a buon fine.');\n return resolve(false);\n }\n this.logger.info(\"DATABASE connesso.\");\n if (db) db.detach();\n return resolve(true);\n });\n });\n }\n\n public static async query(options: Options, query: string, parameters: any[] = [], logQuery = true): Promise<any> {\n try {\n return new Promise((resolve, reject): void => {\n Firebird.attach(options, (err: any, db: Database) => {\n if (err) {\n this.logger.error(err);\n return reject(err);\n }\n\n if(logQuery) this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n db.query(query, parameters, (error: any, result: any) => {\n if (error) {\n this.logger.error(error);\n db.detach();\n return reject(error);\n }\n db.detach();\n return resolve(result);\n });\n });\n });\n } catch (error) {\n this.logger.error(error);\n throw error;\n }\n }\n\n public static async execute(options: Options, query: string, parameters: any = [], logQuery = true): Promise<any> {\n try {\n return new Promise((resolve, reject): void => {\n Firebird.attach(options, (err: any, db: Database) => {\n if (err) {\n this.logger.error(err);\n return reject(err);\n }\n\n if(logQuery) this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n db.execute(query, parameters, (error: any, result: any) => {\n if (error) {\n this.logger.error(error);\n db.detach();\n return reject(error);\n }\n db.detach();\n return resolve(result);\n });\n });\n });\n } catch (error) {\n this.logger.error(error);\n throw error;\n }\n }\n\n public static trimParam(param: any): string {\n if (typeof param === \"string\" || param instanceof String) {\n return param.trim();\n }\n return param;\n }\n\n public static async connect(options: Options): Promise<Database> {\n return new Promise((resolve, reject): void => {\n Firebird.attach(options, function (err: any, db: Database): void {\n if (err) return reject(err); else return resolve(db);\n });\n });\n }\n\n public static async startTransaction(db: Database): Promise<Transaction> {\n return new Promise((resolve, reject): void => {\n db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err: any, transaction: Transaction): void {\n if (err) return reject(err); else return resolve(transaction);\n });\n });\n }\n\n public static async commitTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.commit((err: any): void => {\n if (err) return reject(err); else return resolve('Transaction committed successfully.');\n });\n });\n }\n\n public static async rollbackTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.rollback((err: any): void => {\n if (err) return reject(err); else return resolve('Transaction rolled back successfully.');\n });\n });\n }\n\n public static async executeMultiple(options: Options, queriesWithParams: { query: string, params: any[] }[]): Promise<string> {\n let db: Database | undefined;\n let transaction: Transaction | undefined;\n\n try {\n db = await Orm.connect(options);\n transaction = await Orm.startTransaction(db);\n\n for (const qwp of queriesWithParams) {\n await new Promise((resolve, reject) => {\n transaction.query(qwp.query, qwp.params, (err: any, result: any): void => {\n if (err) return reject(err);\n else return resolve(result);\n });\n });\n }\n\n await Orm.commitTransaction(transaction);\n db.detach();\n return 'OK';\n\n } catch (error) {\n if (transaction) {\n await Orm.rollbackTransaction(transaction);\n }\n if (db) {\n db.detach();\n }\n throw error;\n }\n }\n\n public static async executeQueries(transaction: Transaction, queries: string[], params: any[]): Promise<any> {\n try {\n return await queries.reduce((promiseChain: Promise<any>, currentQuery: string, index: number) => {\n return promiseChain.then(() => new Promise((resolve, reject) => {\n transaction.query(currentQuery, params[index], (err: any, result: any): void => {\n if (err) return reject(err);\n else return resolve(result);\n });\n }));\n }, Promise.resolve());\n } catch (error) {\n return await new Promise((resolve, reject) => {\n transaction.rollback((rollbackErr: any): void => {\n if (rollbackErr) {\n return reject(rollbackErr);\n } else {\n return reject(error);\n }\n });\n });\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Orm.js","sourceRoot":"","sources":["../src/Orm.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"node-firebird\";\nimport { Database, Options, Transaction } from \"node-firebird\";\nimport { Logger } from \"./Logger\";\nimport { RestUtilities } from \"./Utilities\";\nimport {\n describeFirebirdCompatibilityOptions,\n enhanceFirebirdError,\n FirebirdOptions,\n normalizeFirebirdOptions,\n} from \"./firebird-compat\";\n\nexport class Orm {\n private static logger: Logger = new Logger(Orm.name);\n\n public static quote(value: string): string {\n return \"\\\"\" + value + \"\\\"\";\n }\n\n private static getTimeoutMs(options: Options): number {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const candidate = normalizedOptions.connectTimeout ?? 15000;\n return Number.isFinite(candidate) && candidate > 0 ? Math.trunc(candidate) : 15000;\n }\n\n private static createTimeoutError(stage: string, timeoutMs: number, options: Options, query?: string): Error {\n const target = `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\n const suffix = query ? ` | sql=${query.replace(/\\s+/g, \" \").trim()}` : \"\";\n return new Error(`Timeout during Firebird ${stage} after ${timeoutMs} ms on ${target}${suffix}`);\n }\n\n private static async detachQuietly(db: Database | undefined): Promise<void> {\n if (!db) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n try {\n db.detach(() => resolve());\n } catch {\n resolve();\n }\n });\n }\n\n private static attachWithTimeout(options: Options): Promise<Database> {\n return new Promise((resolve, reject): void => {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const timeoutMs = this.getTimeoutMs(normalizedOptions);\n let settled = false;\n const timeoutId = setTimeout(() => {\n if (settled) {\n return;\n }\n\n settled = true;\n reject(\n enhanceFirebirdError(\n this.createTimeoutError(\"attach\", timeoutMs, normalizedOptions),\n normalizedOptions,\n { stage: \"attach\" },\n ),\n );\n }, timeoutMs);\n\n this.logger.info(`Firebird attach using ${describeFirebirdCompatibilityOptions(normalizedOptions)}`);\n\n Firebird.attach(normalizedOptions, async (err: any, db: Database): Promise<void> => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n\n if (err) {\n return reject(enhanceFirebirdError(err, normalizedOptions, { stage: \"attach\" }));\n }\n\n return resolve(db);\n });\n });\n }\n\n public static async testConnection(options: Options): Promise<boolean> {\n return new Promise((resolve): void => {\n this.attachWithTimeout(options)\n .then(async (db: Database): Promise<void> => {\n this.logger.info(\"DATABASE connesso.\");\n await this.detachQuietly(db);\n resolve(true);\n })\n .catch((err: Error): void => {\n this.logger.error(\"La connessione con il DATABASE non e andata a buon fine.\");\n this.logger.error(err);\n resolve(false);\n });\n });\n }\n\n public static async query(options: Options, query: string, parameters: any[] = [], logQuery = true): Promise<any> {\n try {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const db = await this.attachWithTimeout(normalizedOptions);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(normalizedOptions);\n let settled = false;\n const timeoutId = setTimeout(async () => {\n if (settled) {\n return;\n }\n\n settled = true;\n await this.detachQuietly(db);\n reject(\n enhanceFirebirdError(\n this.createTimeoutError(\"query\", timeoutMs, normalizedOptions, query),\n normalizedOptions,\n { stage: \"query\", sql: query },\n ),\n );\n }, timeoutMs);\n\n if (logQuery) {\n this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n }\n\n db.query(query, parameters, async (error: any, result: any) => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n await this.detachQuietly(db);\n\n if (error) {\n return reject(enhanceFirebirdError(error, normalizedOptions, { stage: \"query\", sql: query }));\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n const normalizedError = enhanceFirebirdError(error, options, { stage: \"query\", sql: query });\n this.logger.error(normalizedError);\n throw normalizedError;\n }\n }\n\n public static async execute(options: Options, query: string, parameters: any = [], logQuery = true): Promise<any> {\n try {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const db = await this.attachWithTimeout(normalizedOptions);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(normalizedOptions);\n let settled = false;\n const timeoutId = setTimeout(async () => {\n if (settled) {\n return;\n }\n\n settled = true;\n await this.detachQuietly(db);\n reject(\n enhanceFirebirdError(\n this.createTimeoutError(\"execute\", timeoutMs, normalizedOptions, query),\n normalizedOptions,\n { stage: \"execute\", sql: query },\n ),\n );\n }, timeoutMs);\n\n if (logQuery) {\n this.logger.info(RestUtilities.printQueryWithParams(query, parameters));\n }\n\n db.execute(query, parameters, async (error: any, result: any) => {\n if (settled) {\n await this.detachQuietly(db);\n return;\n }\n\n settled = true;\n clearTimeout(timeoutId);\n await this.detachQuietly(db);\n\n if (error) {\n return reject(enhanceFirebirdError(error, normalizedOptions, { stage: \"execute\", sql: query }));\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n const normalizedError = enhanceFirebirdError(error, options, { stage: \"execute\", sql: query });\n this.logger.error(normalizedError);\n throw normalizedError;\n }\n }\n\n public static trimParam(param: any): string {\n if (typeof param === \"string\" || param instanceof String) {\n return param.trim();\n }\n return param;\n }\n\n public static async connect(options: Options): Promise<Database> {\n return this.attachWithTimeout(options);\n }\n\n public static async startTransaction(db: Database): Promise<Transaction> {\n return new Promise((resolve, reject): void => {\n db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err: any, transaction: Transaction): void {\n if (err) {\n return reject(err);\n }\n\n return resolve(transaction);\n });\n });\n }\n\n public static async commitTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.commit((err: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(\"Transaction committed successfully.\");\n });\n });\n }\n\n public static async rollbackTransaction(transaction: Transaction): Promise<string> {\n return new Promise((resolve, reject): void => {\n transaction.rollback((err: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(\"Transaction rolled back successfully.\");\n });\n });\n }\n\n public static async executeMultiple(options: Options, queriesWithParams: { query: string, params: any[] }[]): Promise<string> {\n let db: Database | undefined;\n let transaction: Transaction | undefined;\n\n try {\n db = await Orm.connect(options);\n transaction = await Orm.startTransaction(db);\n\n for (const qwp of queriesWithParams) {\n await new Promise((resolve, reject) => {\n transaction!.query(qwp.query, qwp.params, (err: any, result: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(result);\n });\n });\n }\n\n await Orm.commitTransaction(transaction);\n await Orm.detachQuietly(db);\n return \"OK\";\n } catch (error) {\n if (transaction) {\n await Orm.rollbackTransaction(transaction);\n }\n\n await Orm.detachQuietly(db);\n throw error;\n }\n }\n\n public static async executeQueries(transaction: Transaction, queries: string[], params: any[]): Promise<any> {\n try {\n return await queries.reduce((promiseChain: Promise<any>, currentQuery: string, index: number) => {\n return promiseChain.then(() => new Promise((resolve, reject) => {\n transaction.query(currentQuery, params[index], (err: any, result: any): void => {\n if (err) {\n return reject(err);\n }\n\n return resolve(result);\n });\n }));\n }, Promise.resolve());\n } catch (error) {\n return await new Promise((resolve, reject) => {\n transaction.rollback((rollbackErr: any): void => {\n if (rollbackErr) {\n return reject(rollbackErr);\n }\n\n return reject(error);\n });\n });\n }\n }\n}\n"]}
|
package/dist/Utilities.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Response } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { FirebirdOptions } from "./firebird-compat";
|
|
3
3
|
export declare enum StatusCode {
|
|
4
4
|
Ok = 0,
|
|
5
5
|
Warning = 1,
|
|
@@ -152,6 +152,6 @@ export declare class DatabaseUtilities {
|
|
|
152
152
|
* );
|
|
153
153
|
* ```
|
|
154
154
|
*/
|
|
155
|
-
static createOption(host: string, port: number, database: string, username?: string, password?: string):
|
|
155
|
+
static createOption(host: string, port: number, database: string, username?: string, password?: string): FirebirdOptions;
|
|
156
156
|
}
|
|
157
157
|
export declare function Deprecated(message: string): (target: any, key?: string, descriptor?: PropertyDescriptor) => void;
|
package/dist/Utilities.js
CHANGED
|
@@ -403,6 +403,8 @@ class DatabaseUtilities {
|
|
|
403
403
|
pageSize: 100000, // The page size for database transactions. Default: 100,000.
|
|
404
404
|
retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.
|
|
405
405
|
blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.
|
|
406
|
+
connectTimeout: 15000,
|
|
407
|
+
connectTimeoutMs: 15000,
|
|
406
408
|
};
|
|
407
409
|
}
|
|
408
410
|
}
|