emilsoftware-utilities 2.0.0-dev.6 → 2.0.0-dev.7
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 +1 -7
- package/dist/Orm.js +43 -131
- package/dist/Orm.js.map +1 -1
- package/dist/Utilities.js +1 -1
- 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/index.d.ts +1 -0
- 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/firebird-compat.d.ts +13 -6
- package/dist/firebird-compat.js +149 -140
- package/dist/firebird-compat.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseUpdater.js","sourceRoot":"","sources":["../src/DatabaseUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA4B;AAC5B,qCAAkC;AAGlC,MAAsB,eAAe;IAKnC,YAAY;IAEZ,yBAAyB;IACzB;;;;;OAKG;IACO,MAAM,CAAO,WAAW,CAChC,OAAgB,EAChB,KAAa;;YAGb,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;;6CAIyB,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACtE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACO,MAAM,CAAO,YAAY,CACjC,OAAgB,EAChB,KAAa,EACb,MAAc;;YAGd,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;;+BAIW,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE;oBAC7C,KAAK,CAAC,WAAW,EAAE;oBACnB,MAAM,CAAC,WAAW,EAAE;iBACrB,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,aAAa,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/E,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;OAKG;IACO,MAAM,CAAO,eAAe,CACpC,OAAgB,EAChB,SAAiB;;YAGjB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;mCAGe,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC1E,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;OAKG;IACO,MAAM,CAAO,aAAa,CAClC,OAAgB,EAChB,OAAe;;YAGf,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG;;;;6CAIyB,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACxE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;OAIG;IACO,MAAM,CAAO,kBAAkB,CAAC,OAAgB;;YAExD,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;oBACpD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,UAAU,GAAG,CAAC,MAAM,SAAG,CAAC,KAAK,CACjC,OAAO,EACP;;;yDAGiD,EACjD;oBACE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;iBAC7B,CACF,CAAU,CAAC;gBAEZ,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;OAIG;IACO,MAAM,CAAO,kBAAkB,CACvC,OAAgB,EAChB,OAAe;;;YAGf,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC5C,CAAC;gBAED,MAAM,YAAY,GAAG,CAAC,MAAM,SAAG,CAAC,KAAK,CACnC,OAAO,EACP,qDAAqD,EACrD,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAU,CAAC;gBAEZ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,EACP,0EAA0E,EAC1E,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAC1D,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,MAAM,SAAG,CAAC,OAAO,CAAC,OAAO,EAAE,kDAAkD,EAAE;wBAC7E,OAAO;wBACP,MAAA,MAAA,MAAA,GAAG,CAAC,MAAM,0CAAE,IAAI,kDAAI,mCAAI,GAAG,CAAC,MAAM;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IACD,YAAY;IAEZ,gCAAgC;IAChC;;;OAGG;IACO,MAAM,CAAO,qBAAqB,CAAC,OAAgB;;YAC3D,IAAI,CAAC;gBACH,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxE,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,MAAM,gBAAgB,GAAG;;;;;;aAMpB,CAAC;oBAEN,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;oBAE3C,MAAM,SAAG,CAAC,KAAK,CACb,OAAO,EACP,yEAAyE,CAC1E,CAAC;oBAEF,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC;oBAC9D,MAAM,SAAG,CAAC,KAAK,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;gBACjE,CAAC;gBAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBACpD,OAAO;gBACT,CAAC;gBAED,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,EACP,uEAAuE,EACvE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CACzD,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACd,CAAC;QAGH,CAAC;KAAA;;AAvOH,0CAyOC;AAtOkB,sBAAM,GAAW,IAAI,eAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACzC,oCAAoB,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import { Orm } from \"./Orm\";\r\nimport { Logger } from \"./Logger\";\r\nimport { Options } from \"es-node-firebird\";\r\n\r\nexport abstract class DatabaseUpdater {\r\n //#region Fields and Options\r\n protected static options: Options;\r\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\r\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\r\n //#endregion\r\n\r\n //#region Utility Methods\r\n /**\r\n * Checks if a table exists.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @returns True if the table exists, false otherwise.\r\n */\r\n protected static async tableExists(\r\n options: Options,\r\n table: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$RELATIONS\r\n WHERE RDB$RELATION_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [table.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a column exists in a specific table.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @param column Column name.\r\n * @returns True if the column exists, false otherwise.\r\n */\r\n protected static async columnExists(\r\n options: Options,\r\n table: string,\r\n column: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1 \r\n FROM RDB$RELATION_FIELDS \r\n WHERE RDB$RELATION_NAME = ? \r\n AND RDB$FIELD_NAME = ?`;\r\n const result = await Orm.query(options, query, [\r\n table.toUpperCase(),\r\n column.toUpperCase(),\r\n ]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a generator/sequence exists.\r\n * @param options Database connection options.\r\n * @param generator Generator name.\r\n * @returns True if the generator exists, false otherwise.\r\n */\r\n protected static async generatorExists(\r\n options: Options,\r\n generator: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$GENERATORS\r\n WHERE RDB$GENERATOR_NAME = ?`;\r\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking generator ${generator}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a trigger exists.\r\n * @param options Database connection options.\r\n * @param trigger Trigger name.\r\n * @returns True if the trigger exists, false otherwise.\r\n */\r\n protected static async triggerExists(\r\n options: Options,\r\n trigger: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$TRIGGERS\r\n WHERE RDB$TRIGGER_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking trigger ${trigger}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the current database version from the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @returns The current database version or null if not found.\r\n */\r\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n return null;\r\n }\r\n\r\n const parameters = (await Orm.query(\r\n options,\r\n `SELECT CODPAR, DESPAR\r\n FROM PARAMETRI\r\n WHERE CODPAR IN (?, ?)\r\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\r\n [\r\n this.versionParameterKeys[0],\r\n this.versionParameterKeys[1],\r\n this.versionParameterKeys[0],\r\n ]\r\n )) as any[];\r\n\r\n return parameters.length > 0 ? parameters[0].DESPAR : null;\r\n } catch (error: any) {\r\n this.logger.error(`Error getting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the database version in the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @param version The new database version.\r\n */\r\n protected static async setDatabaseVersion(\r\n options: Options,\r\n version: string\r\n ): Promise<void> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n await this.createParametersTable(options);\r\n }\r\n\r\n const existingRows = (await Orm.query(\r\n options,\r\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\r\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\r\n )) as any[];\r\n\r\n if (existingRows.length === 0) {\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\r\n [this.versionParameterKeys[0], version, \"versione\", null]\r\n );\r\n return;\r\n }\r\n\r\n for (const row of existingRows) {\r\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\r\n version,\r\n row.CODPAR?.trim?.() ?? row.CODPAR,\r\n ]);\r\n }\r\n } catch (error: any) {\r\n this.logger.error(`Error setting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Initialization Methods\r\n /**\r\n * Ensures the PARAMETRI table exists and initializes it if necessary.\r\n * @param options Database connection options.\r\n */\r\n protected static async createParametersTable(options: Options): Promise<void> {\r\n try {\r\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\r\n if (!tableAlreadyExists) {\r\n const createTableQuery = `\r\n CREATE TABLE PARAMETRI (\r\n CODPAR VARCHAR(15) NOT NULL,\r\n DESPAR VARCHAR(255),\r\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\r\n GRUPPO VARCHAR(20)\r\n );`;\r\n\r\n await Orm.query(options, createTableQuery);\r\n\r\n await Orm.query(\r\n options,\r\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\r\n );\r\n\r\n await Orm.query(options, \"GRANT ALL ON PARAMETRI TO PUBLIC;\");\r\n await Orm.query(options, \"GRANT SELECT ON PARAMETRI TO TABX;\");\r\n }\r\n\r\n const versioneDb = await this.getDatabaseVersion(options);\r\n if (versioneDb !== null && versioneDb !== undefined) {\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\r\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\r\n );\r\n } catch (error: any) {\r\n this.logger.error(\"Error creating table PARAMETRI:\", error);\r\n throw error;\r\n }\r\n\r\n\r\n }\r\n //#endregion\r\n}\r\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\r\nexport abstract class DatabaseUpdater {\r\n //#region Fields and Options\r\n protected static options: Options;\r\n protected static logger: Logger = new Logger(DatabaseUpdater.name);\r\n protected static readonly versionParameterKeys = [\"VersioneDB\", \"DBVERSION\"];\r\n //#endregion\r\n\r\n //#region Utility Methods\r\n /**\r\n * Checks if a table exists.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @returns True if the table exists, false otherwise.\r\n */\r\n protected static async tableExists(\r\n options: Options,\r\n table: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$RELATIONS\r\n WHERE RDB$RELATION_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [table.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a column exists in a specific table.\r\n * @param options Database connection options.\r\n * @param table Table name.\r\n * @param column Column name.\r\n * @returns True if the column exists, false otherwise.\r\n */\r\n protected static async columnExists(\r\n options: Options,\r\n table: string,\r\n column: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1 \r\n FROM RDB$RELATION_FIELDS \r\n WHERE RDB$RELATION_NAME = ? \r\n AND RDB$FIELD_NAME = ?`;\r\n const result = await Orm.query(options, query, [\r\n table.toUpperCase(),\r\n column.toUpperCase(),\r\n ]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking column ${column} on table ${table}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a generator/sequence exists.\r\n * @param options Database connection options.\r\n * @param generator Generator name.\r\n * @returns True if the generator exists, false otherwise.\r\n */\r\n protected static async generatorExists(\r\n options: Options,\r\n generator: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$GENERATORS\r\n WHERE RDB$GENERATOR_NAME = ?`;\r\n const result = await Orm.query(options, query, [generator.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking generator ${generator}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Checks if a trigger exists.\r\n * @param options Database connection options.\r\n * @param trigger Trigger name.\r\n * @returns True if the trigger exists, false otherwise.\r\n */\r\n protected static async triggerExists(\r\n options: Options,\r\n trigger: string\r\n ): Promise<boolean> {\r\n\r\n try {\r\n const query = `\r\n SELECT 1\r\n FROM RDB$TRIGGERS\r\n WHERE RDB$TRIGGER_NAME = ?\r\n AND COALESCE(RDB$SYSTEM_FLAG, 0) = 0`;\r\n const result = await Orm.query(options, query, [trigger.toUpperCase()]);\r\n return result.length > 0;\r\n } catch (error: any) {\r\n this.logger.error(`Error checking trigger ${trigger}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the current database version from the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @returns The current database version or null if not found.\r\n */\r\n protected static async getDatabaseVersion(options: Options): Promise<string | null> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n return null;\r\n }\r\n\r\n const parameters = (await Orm.query(\r\n options,\r\n `SELECT CODPAR, DESPAR\r\n FROM PARAMETRI\r\n WHERE CODPAR IN (?, ?)\r\n ORDER BY CASE WHEN CODPAR = ? THEN 0 ELSE 1 END`,\r\n [\r\n this.versionParameterKeys[0],\r\n this.versionParameterKeys[1],\r\n this.versionParameterKeys[0],\r\n ]\r\n )) as any[];\r\n\r\n return parameters.length > 0 ? parameters[0].DESPAR : null;\r\n } catch (error: any) {\r\n this.logger.error(`Error getting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the database version in the PARAMETRI table.\r\n * @param options Database connection options.\r\n * @param version The new database version.\r\n */\r\n protected static async setDatabaseVersion(\r\n options: Options,\r\n version: string\r\n ): Promise<void> {\r\n\r\n try {\r\n if (!(await this.tableExists(options, \"PARAMETRI\"))) {\r\n await this.createParametersTable(options);\r\n }\r\n\r\n const existingRows = (await Orm.query(\r\n options,\r\n \"SELECT CODPAR FROM PARAMETRI WHERE CODPAR IN (?, ?)\",\r\n [this.versionParameterKeys[0], this.versionParameterKeys[1]]\r\n )) as any[];\r\n\r\n if (existingRows.length === 0) {\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?, ?, ?, ?)\",\r\n [this.versionParameterKeys[0], version, \"versione\", null]\r\n );\r\n return;\r\n }\r\n\r\n for (const row of existingRows) {\r\n await Orm.execute(options, \"UPDATE PARAMETRI SET DESPAR = ? WHERE CODPAR = ?\", [\r\n version,\r\n row.CODPAR?.trim?.() ?? row.CODPAR,\r\n ]);\r\n }\r\n } catch (error: any) {\r\n this.logger.error(`Error setting database version:`, error);\r\n throw error;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region Initialization Methods\r\n /**\r\n * Ensures the PARAMETRI table exists and initializes it if necessary.\r\n * @param options Database connection options.\r\n */\r\n protected static async createParametersTable(options: Options): Promise<void> {\r\n try {\r\n const tableAlreadyExists = await this.tableExists(options, \"PARAMETRI\");\r\n if (!tableAlreadyExists) {\r\n const createTableQuery = `\r\n CREATE TABLE PARAMETRI (\r\n CODPAR VARCHAR(15) NOT NULL,\r\n DESPAR VARCHAR(255),\r\n NOTE BLOB SUB_TYPE 1 SEGMENT SIZE 80,\r\n GRUPPO VARCHAR(20)\r\n );`;\r\n\r\n await Orm.query(options, createTableQuery);\r\n\r\n await Orm.query(\r\n options,\r\n \"ALTER TABLE PARAMETRI ADD CONSTRAINT PK_PARAMETRI PRIMARY KEY (CODPAR);\"\r\n );\r\n\r\n await Orm.query(options, \"GRANT ALL ON PARAMETRI TO PUBLIC;\");\r\n await Orm.query(options, \"GRANT SELECT ON PARAMETRI TO TABX;\");\r\n }\r\n\r\n const versioneDb = await this.getDatabaseVersion(options);\r\n if (versioneDb !== null && versioneDb !== undefined) {\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options,\r\n \"INSERT INTO PARAMETRI (CODPAR, DESPAR, NOTE, GRUPPO) VALUES (?,?,?,?)\",\r\n [this.versionParameterKeys[0], \"0.0a\", \"versione\", null]\r\n );\r\n } catch (error: any) {\r\n this.logger.error(\"Error creating table PARAMETRI:\", error);\r\n throw error;\r\n }\r\n\r\n\r\n }\r\n //#endregion\r\n}\r\n"]}
|
package/dist/Orm.d.ts
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
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
|
-
private static compatibilityProfileCache;
|
|
5
4
|
static quote(value: string): string;
|
|
6
5
|
private static getTimeoutMs;
|
|
7
6
|
private static createTimeoutError;
|
|
8
|
-
private static createCompatibilityCacheKey;
|
|
9
|
-
private static getProbeTimeoutMs;
|
|
10
|
-
private static reorderCandidatesWithCache;
|
|
11
|
-
private static createCompatibilitySummaryError;
|
|
12
7
|
private static detachQuietly;
|
|
13
|
-
private static attachOnceWithTimeout;
|
|
14
8
|
private static attachWithTimeout;
|
|
15
9
|
static testConnection(options: Options): Promise<boolean>;
|
|
16
10
|
static query(options: Options, query: string, parameters?: any[], logQuery?: boolean): Promise<any>;
|
package/dist/Orm.js
CHANGED
|
@@ -43,18 +43,18 @@ 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
49
|
const firebird_compat_1 = require("./firebird-compat");
|
|
50
|
-
(0, firebird_compat_1.ensureEsNodeFirebirdCompatibilityPatch)();
|
|
51
50
|
class Orm {
|
|
52
51
|
static quote(value) {
|
|
53
52
|
return "\"" + value + "\"";
|
|
54
53
|
}
|
|
55
54
|
static getTimeoutMs(options) {
|
|
56
|
-
var _a
|
|
57
|
-
const
|
|
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
58
|
return Number.isFinite(candidate) && candidate > 0 ? Math.trunc(candidate) : 15000;
|
|
59
59
|
}
|
|
60
60
|
static createTimeoutError(stage, timeoutMs, options, query) {
|
|
@@ -63,54 +63,6 @@ class Orm {
|
|
|
63
63
|
const suffix = query ? ` | sql=${query.replace(/\s+/g, " ").trim()}` : "";
|
|
64
64
|
return new Error(`Timeout during Firebird ${stage} after ${timeoutMs} ms on ${target}${suffix}`);
|
|
65
65
|
}
|
|
66
|
-
static createCompatibilityCacheKey(options) {
|
|
67
|
-
var _a, _b, _c, _d;
|
|
68
|
-
return [
|
|
69
|
-
(_a = options.host) !== null && _a !== void 0 ? _a : "?",
|
|
70
|
-
(_b = options.port) !== null && _b !== void 0 ? _b : "?",
|
|
71
|
-
(_c = options.database) !== null && _c !== void 0 ? _c : "?",
|
|
72
|
-
(_d = options.user) !== null && _d !== void 0 ? _d : "?",
|
|
73
|
-
].join("|");
|
|
74
|
-
}
|
|
75
|
-
static getProbeTimeoutMs(options, candidateCount) {
|
|
76
|
-
const configured = options.compatibilityProbeTimeoutMs;
|
|
77
|
-
if (Number.isFinite(configured) && configured > 0) {
|
|
78
|
-
return Math.trunc(configured);
|
|
79
|
-
}
|
|
80
|
-
const totalTimeoutMs = this.getTimeoutMs(options);
|
|
81
|
-
if (candidateCount <= 1) {
|
|
82
|
-
return totalTimeoutMs;
|
|
83
|
-
}
|
|
84
|
-
return Math.max(2500, Math.min(5000, Math.trunc(totalTimeoutMs / candidateCount)));
|
|
85
|
-
}
|
|
86
|
-
static reorderCandidatesWithCache(options, candidates) {
|
|
87
|
-
const cacheKey = this.createCompatibilityCacheKey(options);
|
|
88
|
-
const cachedCandidate = this.compatibilityProfileCache.get(cacheKey);
|
|
89
|
-
if (!cachedCandidate) {
|
|
90
|
-
return candidates;
|
|
91
|
-
}
|
|
92
|
-
const ordered = [...candidates];
|
|
93
|
-
const cachedDescription = (0, firebird_compat_1.describeFirebirdCompatibilityOptions)(cachedCandidate);
|
|
94
|
-
const cachedIndex = ordered.findIndex((candidate) => (0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate) === cachedDescription);
|
|
95
|
-
if (cachedIndex <= 0) {
|
|
96
|
-
return ordered;
|
|
97
|
-
}
|
|
98
|
-
const [matchedCandidate] = ordered.splice(cachedIndex, 1);
|
|
99
|
-
ordered.unshift(matchedCandidate);
|
|
100
|
-
return ordered;
|
|
101
|
-
}
|
|
102
|
-
static createCompatibilitySummaryError(options, attempts) {
|
|
103
|
-
var _a, _b, _c;
|
|
104
|
-
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 : "?"}`;
|
|
105
|
-
const attemptsSummary = attempts
|
|
106
|
-
.map(({ candidate, error }) => {
|
|
107
|
-
var _a, _b;
|
|
108
|
-
const errorMessage = String((_b = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error) !== null && _b !== void 0 ? _b : "Unknown error");
|
|
109
|
-
return `[${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)} => ${errorMessage}]`;
|
|
110
|
-
})
|
|
111
|
-
.join("; ");
|
|
112
|
-
return new Error(`Unable to attach Firebird database after compatibility probing on ${target}. Attempts: ${attemptsSummary}`);
|
|
113
|
-
}
|
|
114
66
|
static detachQuietly(db) {
|
|
115
67
|
return __awaiter(this, void 0, void 0, function* () {
|
|
116
68
|
if (!db) {
|
|
@@ -126,17 +78,20 @@ class Orm {
|
|
|
126
78
|
});
|
|
127
79
|
});
|
|
128
80
|
}
|
|
129
|
-
static
|
|
81
|
+
static attachWithTimeout(options) {
|
|
130
82
|
return new Promise((resolve, reject) => {
|
|
83
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
84
|
+
const timeoutMs = this.getTimeoutMs(normalizedOptions);
|
|
131
85
|
let settled = false;
|
|
132
86
|
const timeoutId = setTimeout(() => {
|
|
133
87
|
if (settled) {
|
|
134
88
|
return;
|
|
135
89
|
}
|
|
136
90
|
settled = true;
|
|
137
|
-
reject(this.createTimeoutError("attach", timeoutMs,
|
|
91
|
+
reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("attach", timeoutMs, normalizedOptions), normalizedOptions, { stage: "attach" }));
|
|
138
92
|
}, timeoutMs);
|
|
139
|
-
|
|
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* () {
|
|
140
95
|
if (settled) {
|
|
141
96
|
yield this.detachQuietly(db);
|
|
142
97
|
return;
|
|
@@ -144,54 +99,12 @@ class Orm {
|
|
|
144
99
|
settled = true;
|
|
145
100
|
clearTimeout(timeoutId);
|
|
146
101
|
if (err) {
|
|
147
|
-
|
|
148
|
-
return reject(err);
|
|
102
|
+
return reject((0, firebird_compat_1.enhanceFirebirdError)(err, normalizedOptions, { stage: "attach" }));
|
|
149
103
|
}
|
|
150
104
|
return resolve(db);
|
|
151
105
|
}));
|
|
152
106
|
});
|
|
153
107
|
}
|
|
154
|
-
static attachWithTimeout(options) {
|
|
155
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
156
|
-
var _a;
|
|
157
|
-
const totalTimeoutMs = this.getTimeoutMs(options);
|
|
158
|
-
const candidates = this.reorderCandidatesWithCache(options, (0, firebird_compat_1.buildFirebirdCompatibilityCandidates)(options));
|
|
159
|
-
const probeTimeoutMs = this.getProbeTimeoutMs(options, candidates.length);
|
|
160
|
-
const startedAt = Date.now();
|
|
161
|
-
const attempts = [];
|
|
162
|
-
const cacheKey = this.createCompatibilityCacheKey(options);
|
|
163
|
-
for (let index = 0; index < candidates.length; index++) {
|
|
164
|
-
const candidate = candidates[index];
|
|
165
|
-
const elapsedMs = Date.now() - startedAt;
|
|
166
|
-
const remainingMs = totalTimeoutMs - elapsedMs;
|
|
167
|
-
if (remainingMs <= 0) {
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
|
-
const attemptTimeoutMs = index === 0 && candidates.length === 1
|
|
171
|
-
? remainingMs
|
|
172
|
-
: Math.min(probeTimeoutMs, remainingMs);
|
|
173
|
-
try {
|
|
174
|
-
if (candidates.length > 1) {
|
|
175
|
-
this.logger.info(`Firebird compatibility probe ${index + 1}/${candidates.length}: ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)} (timeout ${attemptTimeoutMs} ms)`);
|
|
176
|
-
}
|
|
177
|
-
const db = yield this.attachOnceWithTimeout(candidate, attemptTimeoutMs);
|
|
178
|
-
this.compatibilityProfileCache.set(cacheKey, candidate);
|
|
179
|
-
if (candidates.length > 1) {
|
|
180
|
-
this.logger.info(`Firebird compatibility profile selected: ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)}`);
|
|
181
|
-
}
|
|
182
|
-
return db;
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
attempts.push({ candidate, error });
|
|
186
|
-
if (!(0, firebird_compat_1.shouldRetryFirebirdCompatibility)(error) || index === candidates.length - 1) {
|
|
187
|
-
throw this.createCompatibilitySummaryError(options, attempts);
|
|
188
|
-
}
|
|
189
|
-
this.logger.warning(`Firebird attach failed with ${(0, firebird_compat_1.describeFirebirdCompatibilityOptions)(candidate)}. Trying next compatibility profile. Error: ${String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error)}`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
throw this.createCompatibilitySummaryError(options, attempts);
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
108
|
static testConnection(options) {
|
|
196
109
|
return __awaiter(this, void 0, void 0, function* () {
|
|
197
110
|
return new Promise((resolve) => {
|
|
@@ -212,9 +125,10 @@ class Orm {
|
|
|
212
125
|
static query(options_1, query_1) {
|
|
213
126
|
return __awaiter(this, arguments, void 0, function* (options, query, parameters = [], logQuery = true) {
|
|
214
127
|
try {
|
|
215
|
-
const
|
|
128
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
129
|
+
const db = yield this.attachWithTimeout(normalizedOptions);
|
|
216
130
|
return yield new Promise((resolve, reject) => {
|
|
217
|
-
const timeoutMs = this.getTimeoutMs(
|
|
131
|
+
const timeoutMs = this.getTimeoutMs(normalizedOptions);
|
|
218
132
|
let settled = false;
|
|
219
133
|
const timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
220
134
|
if (settled) {
|
|
@@ -222,7 +136,7 @@ class Orm {
|
|
|
222
136
|
}
|
|
223
137
|
settled = true;
|
|
224
138
|
yield this.detachQuietly(db);
|
|
225
|
-
reject(this.createTimeoutError("query", timeoutMs,
|
|
139
|
+
reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("query", timeoutMs, normalizedOptions, query), normalizedOptions, { stage: "query", sql: query }));
|
|
226
140
|
}), timeoutMs);
|
|
227
141
|
if (logQuery) {
|
|
228
142
|
this.logger.info(Utilities_1.RestUtilities.printQueryWithParams(query, parameters));
|
|
@@ -236,25 +150,26 @@ class Orm {
|
|
|
236
150
|
clearTimeout(timeoutId);
|
|
237
151
|
yield this.detachQuietly(db);
|
|
238
152
|
if (error) {
|
|
239
|
-
|
|
240
|
-
return reject(error);
|
|
153
|
+
return reject((0, firebird_compat_1.enhanceFirebirdError)(error, normalizedOptions, { stage: "query", sql: query }));
|
|
241
154
|
}
|
|
242
155
|
return resolve(result);
|
|
243
156
|
}));
|
|
244
157
|
});
|
|
245
158
|
}
|
|
246
159
|
catch (error) {
|
|
247
|
-
|
|
248
|
-
|
|
160
|
+
const normalizedError = (0, firebird_compat_1.enhanceFirebirdError)(error, options, { stage: "query", sql: query });
|
|
161
|
+
this.logger.error(normalizedError);
|
|
162
|
+
throw normalizedError;
|
|
249
163
|
}
|
|
250
164
|
});
|
|
251
165
|
}
|
|
252
166
|
static execute(options_1, query_1) {
|
|
253
167
|
return __awaiter(this, arguments, void 0, function* (options, query, parameters = [], logQuery = true) {
|
|
254
168
|
try {
|
|
255
|
-
const
|
|
169
|
+
const normalizedOptions = (0, firebird_compat_1.normalizeFirebirdOptions)(options);
|
|
170
|
+
const db = yield this.attachWithTimeout(normalizedOptions);
|
|
256
171
|
return yield new Promise((resolve, reject) => {
|
|
257
|
-
const timeoutMs = this.getTimeoutMs(
|
|
172
|
+
const timeoutMs = this.getTimeoutMs(normalizedOptions);
|
|
258
173
|
let settled = false;
|
|
259
174
|
const timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
260
175
|
if (settled) {
|
|
@@ -262,7 +177,7 @@ class Orm {
|
|
|
262
177
|
}
|
|
263
178
|
settled = true;
|
|
264
179
|
yield this.detachQuietly(db);
|
|
265
|
-
reject(this.createTimeoutError("execute", timeoutMs,
|
|
180
|
+
reject((0, firebird_compat_1.enhanceFirebirdError)(this.createTimeoutError("execute", timeoutMs, normalizedOptions, query), normalizedOptions, { stage: "execute", sql: query }));
|
|
266
181
|
}), timeoutMs);
|
|
267
182
|
if (logQuery) {
|
|
268
183
|
this.logger.info(Utilities_1.RestUtilities.printQueryWithParams(query, parameters));
|
|
@@ -276,16 +191,16 @@ class Orm {
|
|
|
276
191
|
clearTimeout(timeoutId);
|
|
277
192
|
yield this.detachQuietly(db);
|
|
278
193
|
if (error) {
|
|
279
|
-
|
|
280
|
-
return reject(error);
|
|
194
|
+
return reject((0, firebird_compat_1.enhanceFirebirdError)(error, normalizedOptions, { stage: "execute", sql: query }));
|
|
281
195
|
}
|
|
282
196
|
return resolve(result);
|
|
283
197
|
}));
|
|
284
198
|
});
|
|
285
199
|
}
|
|
286
200
|
catch (error) {
|
|
287
|
-
|
|
288
|
-
|
|
201
|
+
const normalizedError = (0, firebird_compat_1.enhanceFirebirdError)(error, options, { stage: "execute", sql: query });
|
|
202
|
+
this.logger.error(normalizedError);
|
|
203
|
+
throw normalizedError;
|
|
289
204
|
}
|
|
290
205
|
});
|
|
291
206
|
}
|
|
@@ -304,10 +219,10 @@ class Orm {
|
|
|
304
219
|
return __awaiter(this, void 0, void 0, function* () {
|
|
305
220
|
return new Promise((resolve, reject) => {
|
|
306
221
|
db.transaction(Firebird.ISOLATION_READ_COMMITTED, function (err, transaction) {
|
|
307
|
-
if (err)
|
|
222
|
+
if (err) {
|
|
308
223
|
return reject(err);
|
|
309
|
-
|
|
310
|
-
|
|
224
|
+
}
|
|
225
|
+
return resolve(transaction);
|
|
311
226
|
});
|
|
312
227
|
});
|
|
313
228
|
});
|
|
@@ -316,10 +231,10 @@ class Orm {
|
|
|
316
231
|
return __awaiter(this, void 0, void 0, function* () {
|
|
317
232
|
return new Promise((resolve, reject) => {
|
|
318
233
|
transaction.commit((err) => {
|
|
319
|
-
if (err)
|
|
234
|
+
if (err) {
|
|
320
235
|
return reject(err);
|
|
321
|
-
|
|
322
|
-
|
|
236
|
+
}
|
|
237
|
+
return resolve("Transaction committed successfully.");
|
|
323
238
|
});
|
|
324
239
|
});
|
|
325
240
|
});
|
|
@@ -328,10 +243,10 @@ class Orm {
|
|
|
328
243
|
return __awaiter(this, void 0, void 0, function* () {
|
|
329
244
|
return new Promise((resolve, reject) => {
|
|
330
245
|
transaction.rollback((err) => {
|
|
331
|
-
if (err)
|
|
246
|
+
if (err) {
|
|
332
247
|
return reject(err);
|
|
333
|
-
|
|
334
|
-
|
|
248
|
+
}
|
|
249
|
+
return resolve("Transaction rolled back successfully.");
|
|
335
250
|
});
|
|
336
251
|
});
|
|
337
252
|
});
|
|
@@ -346,10 +261,10 @@ class Orm {
|
|
|
346
261
|
for (const qwp of queriesWithParams) {
|
|
347
262
|
yield new Promise((resolve, reject) => {
|
|
348
263
|
transaction.query(qwp.query, qwp.params, (err, result) => {
|
|
349
|
-
if (err)
|
|
264
|
+
if (err) {
|
|
350
265
|
return reject(err);
|
|
351
|
-
|
|
352
|
-
|
|
266
|
+
}
|
|
267
|
+
return resolve(result);
|
|
353
268
|
});
|
|
354
269
|
});
|
|
355
270
|
}
|
|
@@ -372,10 +287,10 @@ class Orm {
|
|
|
372
287
|
return yield queries.reduce((promiseChain, currentQuery, index) => {
|
|
373
288
|
return promiseChain.then(() => new Promise((resolve, reject) => {
|
|
374
289
|
transaction.query(currentQuery, params[index], (err, result) => {
|
|
375
|
-
if (err)
|
|
290
|
+
if (err) {
|
|
376
291
|
return reject(err);
|
|
377
|
-
|
|
378
|
-
|
|
292
|
+
}
|
|
293
|
+
return resolve(result);
|
|
379
294
|
});
|
|
380
295
|
}));
|
|
381
296
|
}, Promise.resolve());
|
|
@@ -386,9 +301,7 @@ class Orm {
|
|
|
386
301
|
if (rollbackErr) {
|
|
387
302
|
return reject(rollbackErr);
|
|
388
303
|
}
|
|
389
|
-
|
|
390
|
-
return reject(error);
|
|
391
|
-
}
|
|
304
|
+
return reject(error);
|
|
392
305
|
});
|
|
393
306
|
});
|
|
394
307
|
}
|
|
@@ -397,5 +310,4 @@ class Orm {
|
|
|
397
310
|
}
|
|
398
311
|
exports.Orm = Orm;
|
|
399
312
|
Orm.logger = new Logger_1.Logger(Orm.name);
|
|
400
|
-
Orm.compatibilityProfileCache = new Map();
|
|
401
313
|
//# sourceMappingURL=Orm.js.map
|
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\";\nimport {\n buildFirebirdCompatibilityCandidates,\n describeFirebirdCompatibilityOptions,\n ensureEsNodeFirebirdCompatibilityPatch,\n FirebirdOptions,\n shouldRetryFirebirdCompatibility,\n} from \"./firebird-compat\";\n\nensureEsNodeFirebirdCompatibilityPatch();\n\nexport class Orm {\n private static logger: Logger = new Logger(Orm.name);\n private static compatibilityProfileCache: Map<string, FirebirdOptions> = new Map<string, FirebirdOptions>();\n\n public static quote(value: string): string {\n return \"\\\"\" + value + \"\\\"\";\n }\n\n private static getTimeoutMs(options: Options): number {\n const candidate = (options as FirebirdOptions).connectTimeoutMs\n ?? (options as FirebirdOptions).compatibilityTotalTimeoutMs\n ?? (options as FirebirdOptions).connectTimeout\n ?? 15000;\n\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 createCompatibilityCacheKey(options: Options): string {\n return [\n options.host ?? \"?\",\n options.port ?? \"?\",\n options.database ?? \"?\",\n options.user ?? \"?\",\n ].join(\"|\");\n }\n\n private static getProbeTimeoutMs(options: Options, candidateCount: number): number {\n const configured = (options as FirebirdOptions).compatibilityProbeTimeoutMs;\n if (Number.isFinite(configured) && configured! > 0) {\n return Math.trunc(configured!);\n }\n\n const totalTimeoutMs = this.getTimeoutMs(options);\n if (candidateCount <= 1) {\n return totalTimeoutMs;\n }\n\n return Math.max(2500, Math.min(5000, Math.trunc(totalTimeoutMs / candidateCount)));\n }\n\n private static reorderCandidatesWithCache(options: Options, candidates: FirebirdOptions[]): FirebirdOptions[] {\n const cacheKey = this.createCompatibilityCacheKey(options);\n const cachedCandidate = this.compatibilityProfileCache.get(cacheKey);\n if (!cachedCandidate) {\n return candidates;\n }\n\n const ordered = [...candidates];\n const cachedDescription = describeFirebirdCompatibilityOptions(cachedCandidate);\n const cachedIndex = ordered.findIndex((candidate) => describeFirebirdCompatibilityOptions(candidate) === cachedDescription);\n\n if (cachedIndex <= 0) {\n return ordered;\n }\n\n const [matchedCandidate] = ordered.splice(cachedIndex, 1);\n ordered.unshift(matchedCandidate);\n return ordered;\n }\n\n private static createCompatibilitySummaryError(options: Options, attempts: { candidate: FirebirdOptions, error: unknown }[]): Error {\n const target = `${options.host ?? \"?\"}:${options.port ?? \"?\"} -> ${options.database ?? \"?\"}`;\n const attemptsSummary = attempts\n .map(({ candidate, error }) => {\n const errorMessage = String((error as { message?: unknown })?.message ?? error ?? \"Unknown error\");\n return `[${describeFirebirdCompatibilityOptions(candidate)} => ${errorMessage}]`;\n })\n .join(\"; \");\n\n return new Error(`Unable to attach Firebird database after compatibility probing on ${target}. Attempts: ${attemptsSummary}`);\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 attachOnceWithTimeout(options: Options, timeoutMs = this.getTimeoutMs(options)): Promise<Database> {\n return new Promise((resolve, reject): void => {\n let settled = false;\n const timeoutId = setTimeout(() => {\n if (settled) {\n return;\n }\n\n settled = true;\n reject(this.createTimeoutError(\"attach\", timeoutMs, options));\n }, timeoutMs);\n\n Firebird.attach(options, 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 this.logger.error(err);\n return reject(err);\n }\n\n return resolve(db);\n });\n });\n }\n\n private static async attachWithTimeout(options: Options): Promise<Database> {\n const totalTimeoutMs = this.getTimeoutMs(options);\n const candidates = this.reorderCandidatesWithCache(options, buildFirebirdCompatibilityCandidates(options));\n const probeTimeoutMs = this.getProbeTimeoutMs(options, candidates.length);\n const startedAt = Date.now();\n const attempts: { candidate: FirebirdOptions, error: unknown }[] = [];\n const cacheKey = this.createCompatibilityCacheKey(options);\n\n for (let index = 0; index < candidates.length; index++) {\n const candidate = candidates[index];\n const elapsedMs = Date.now() - startedAt;\n const remainingMs = totalTimeoutMs - elapsedMs;\n\n if (remainingMs <= 0) {\n break;\n }\n\n const attemptTimeoutMs = index === 0 && candidates.length === 1\n ? remainingMs\n : Math.min(probeTimeoutMs, remainingMs);\n\n try {\n if (candidates.length > 1) {\n this.logger.info(\n `Firebird compatibility probe ${index + 1}/${candidates.length}: ${describeFirebirdCompatibilityOptions(candidate)} (timeout ${attemptTimeoutMs} ms)`\n );\n }\n\n const db = await this.attachOnceWithTimeout(candidate, attemptTimeoutMs);\n this.compatibilityProfileCache.set(cacheKey, candidate);\n\n if (candidates.length > 1) {\n this.logger.info(\n `Firebird compatibility profile selected: ${describeFirebirdCompatibilityOptions(candidate)}`\n );\n }\n\n return db;\n } catch (error) {\n attempts.push({ candidate, error });\n\n if (!shouldRetryFirebirdCompatibility(error) || index === candidates.length - 1) {\n throw this.createCompatibilitySummaryError(options, attempts);\n }\n\n this.logger.warning(\n `Firebird attach failed with ${describeFirebirdCompatibilityOptions(candidate)}. Trying next compatibility profile. Error: ${String((error as { message?: unknown })?.message ?? error)}`\n );\n }\n }\n\n throw this.createCompatibilitySummaryError(options, attempts);\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 db = await this.attachWithTimeout(options);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(options);\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(this.createTimeoutError(\"query\", timeoutMs, options, query));\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 this.logger.error(error);\n return reject(error);\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n this.logger.error(error as object);\n throw error;\n }\n }\n\n public static async execute(options: Options, query: string, parameters: any = [], logQuery = true): Promise<any> {\n try {\n const db = await this.attachWithTimeout(options);\n\n return await new Promise((resolve, reject): void => {\n const timeoutMs = this.getTimeoutMs(options);\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(this.createTimeoutError(\"execute\", timeoutMs, options, query));\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 this.logger.error(error);\n return reject(error);\n }\n\n return resolve(result);\n });\n });\n } catch (error) {\n this.logger.error(error as object);\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 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) 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 await Orm.detachQuietly(db);\n return \"OK\";\n\n } catch (error) {\n if (transaction) {\n await Orm.rollbackTransaction(transaction);\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) 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.js
CHANGED
|
@@ -403,7 +403,7 @@ 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
|
-
|
|
406
|
+
connectTimeout: 15000,
|
|
407
407
|
connectTimeoutMs: 15000,
|
|
408
408
|
};
|
|
409
409
|
}
|