UNPKG

ts-sql-query

Version:

Type-safe SQL query builder like QueryDSL or JOOQ in Java or Linq in .Net for TypeScript with MariaDB, MySql, Oracle, PostgreSql, Sqlite and SqlServer support.

695 lines (694 loc) 28.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LoggingQueryRunner = void 0; const ChainedQueryRunner_1 = require("./ChainedQueryRunner"); function now() { if (typeof process !== 'undefined') { // NodeJS process module available return process.hrtime.bigint(); } else { // NodeJS process module not available return BigInt(Math.floor(performance.now() * 1000 * 1000)); } } class LoggingQueryRunner extends ChainedQueryRunner_1.ChainedQueryRunner { constructor(logger, queryRunner) { super(queryRunner); this.logger = logger; } executeSelectOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('selectOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeSelectOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('selectOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('selectOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeSelectManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('selectManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeSelectManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('selectManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('selectManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeSelectOneColumnOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('selectOneColumnOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeSelectOneColumnOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('selectOneColumnOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('selectOneColumnOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeSelectOneColumnManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('selectOneColumnManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeSelectOneColumnManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('selectOneColumnManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('selectOneColumnManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsert(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insert', query, params, { startedAt }); } let result = this.queryRunner.executeInsert(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insert', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insert', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsertReturningLastInsertedId(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insertReturningLastInsertedId', query, params, { startedAt }); } let result = this.queryRunner.executeInsertReturningLastInsertedId(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insertReturningLastInsertedId', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insertReturningLastInsertedId', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsertReturningMultipleLastInsertedId(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insertReturningMultipleLastInsertedId', query, params, { startedAt }); } let result = this.queryRunner.executeInsertReturningMultipleLastInsertedId(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insertReturningMultipleLastInsertedId', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insertReturningMultipleLastInsertedId', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsertReturningOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insertReturningOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeInsertReturningOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insertReturningOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insertReturningOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsertReturningManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insertReturningManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeInsertReturningManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insertReturningManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insertReturningManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsertReturningOneColumnOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insertReturningOneColumnOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeInsertReturningOneColumnOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insertReturningOneColumnOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insertReturningOneColumnOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInsertReturningOneColumnManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('insertReturningOneColumnManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeInsertReturningOneColumnManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('insertReturningOneColumnManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('insertReturningOneColumnManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeUpdate(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('update', query, params, { startedAt }); } let result = this.queryRunner.executeUpdate(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('update', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('update', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeUpdateReturningOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('updateReturningOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeUpdateReturningOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('updateReturningOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('updateReturningOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeUpdateReturningManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('updateReturningManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeUpdateReturningManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('updateReturningManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('updateReturningManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeUpdateReturningOneColumnOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('updateReturningOneColumnOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeUpdateReturningOneColumnOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('updateReturningOneColumnOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('updateReturningOneColumnOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeUpdateReturningOneColumnManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('updateReturningOneColumnManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeUpdateReturningOneColumnManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('updateReturningOneColumnManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('updateReturningOneColumnManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeDelete(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('delete', query, params, { startedAt }); } let result = this.queryRunner.executeDelete(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('delete', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('delete', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeDeleteReturningOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('deleteReturningOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeDeleteReturningOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('deleteReturningOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('deleteReturningOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeDeleteReturningManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('deleteReturningManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeDeleteReturningManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('deleteReturningManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('deleteReturningManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeDeleteReturningOneColumnOneRow(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('deleteReturningOneColumnOneRow', query, params, { startedAt }); } let result = this.queryRunner.executeDeleteReturningOneColumnOneRow(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('deleteReturningOneColumnOneRow', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('deleteReturningOneColumnOneRow', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeDeleteReturningOneColumnManyRows(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('deleteReturningOneColumnManyRows', query, params, { startedAt }); } let result = this.queryRunner.executeDeleteReturningOneColumnManyRows(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('deleteReturningOneColumnManyRows', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('deleteReturningOneColumnManyRows', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeProcedure(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('executeProcedure', query, params, { startedAt }); } let result = this.queryRunner.executeProcedure(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('executeProcedure', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('executeProcedure', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeFunction(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('executeFunction', query, params, { startedAt }); } let result = this.queryRunner.executeFunction(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('executeFunction', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('executeFunction', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeInTransaction(fn, outermostQueryRunner) { if (!this.queryRunner.lowLevelTransactionManagementSupported()) { // Emulate beginTransaction, commit and rollback to see in logs return this.queryRunner.executeInTransaction(() => { const query = ''; const params = []; const logger = this.logger; if (logger.onQuery) { logger.onQuery('beginTransaction', query, params, { startedAt: 0n }); } if (logger.onQueryResult) { logger.onQueryResult('beginTransaction', query, params, undefined, { startedAt: 0n, endedAt: 0n }); } return fn(); }, outermostQueryRunner).then((r) => { try { const query = ''; const params = []; const logger = this.logger; if (logger.onQuery) { logger.onQuery('commit', query, params, { startedAt: 0n }); } if (logger.onQueryResult) { logger.onQueryResult('commit', query, params, undefined, { startedAt: 0n, endedAt: 0n }); } } catch { // Keep same behaviour of the transaction } return r; }, (e) => { try { const query = ''; const params = []; const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('rollback', query, params, { startedAt }); } if (logger.onQueryResult) { logger.onQueryResult('rollback', query, params, undefined, { startedAt, endedAt: now() }); } } catch { // Throw the innermost error } throw e; }); } return this.queryRunner.executeInTransaction(fn, outermostQueryRunner); } executeBeginTransaction() { const query = ''; const params = []; const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('beginTransaction', query, params, { startedAt }); } let result = this.queryRunner.executeBeginTransaction(); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('beginTransaction', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('beginTransaction', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeCommit() { const query = ''; const params = []; const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('commit', query, params, { startedAt }); } let result = this.queryRunner.executeCommit(); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('commit', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('commit', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeRollback() { const query = ''; const params = []; const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('rollback', query, params, { startedAt }); } let result = this.queryRunner.executeRollback(); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('rollback', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('rollback', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeDatabaseSchemaModification(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('executeDatabaseSchemaModification', query, params, { startedAt }); } let result = this.queryRunner.executeDatabaseSchemaModification(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('executeDatabaseSchemaModification', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('executeDatabaseSchemaModification', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } executeConnectionConfiguration(query, params = []) { const logger = this.logger; const startedAt = now(); if (logger.onQuery) { logger.onQuery('executeConnectionConfiguration', query, params, { startedAt }); } let result = this.queryRunner.executeConnectionConfiguration(query, params); if (logger.onQueryResult || logger.onQueryError) { result = result.then(r => { if (logger.onQueryResult) { logger.onQueryResult('executeConnectionConfiguration', query, params, r, { startedAt, endedAt: now() }); } return r; }, e => { if (logger.onQueryError) { logger.onQueryError('executeConnectionConfiguration', query, params, e, { startedAt, endedAt: now() }); } throw e; }); } return result; } } exports.LoggingQueryRunner = LoggingQueryRunner;