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.

82 lines (81 loc) 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OracleDBQueryRunner = void 0; const oracledb_1 = require("oracledb"); const PromiseBasedQueryRunner_1 = require("./PromiseBasedQueryRunner"); const OracleUtils_1 = require("./OracleUtils"); class OracleDBQueryRunner extends PromiseBasedQueryRunner_1.PromiseBasedQueryRunner { constructor(connection) { super(); this.transactionLevel = 0; this.connection = connection; this.database = 'oracle'; } useDatabase(database) { if (database !== 'oracle') { throw new Error('Unsupported database: ' + database + '. OracleDBQueryRunner only supports oracle databases'); } } getNativeRunner() { return this.connection; } getCurrentNativeTransaction() { return undefined; } execute(fn) { return fn(this.connection); } executeQueryReturning(query, params) { return this.connection.execute(query, params, { outFormat: oracledb_1.OUT_FORMAT_OBJECT }).then((result) => result.rows || []); } executeMutation(query, params) { return this.connection.execute(query, params).then((result) => result.rowsAffected || 0); } executeMutationReturning(query, params = []) { return this.connection.execute(query, params).then((result) => { return (0, OracleUtils_1.processOutBinds)(params, result.outBinds); }); } executeBeginTransaction() { this.transactionLevel++; // Oracle automatically begins the transaction return Promise.resolve(); } executeCommit() { return this.connection.commit().then(() => { // Transaction count only modified when commit successful, in case of error there is still an open transaction this.transactionLevel--; if (this.transactionLevel < 0) { this.transactionLevel = 0; } }); } executeRollback() { this.transactionLevel--; return this.connection.rollback().finally(() => { this.transactionLevel--; if (this.transactionLevel < 0) { this.transactionLevel = 0; } }); } isTransactionActive() { return this.transactionLevel > 0; } addParam(params, value) { const index = params.length; params.push(value); return ':' + index; } addOutParam(params, name) { const index = params.length; if (name) { params.push({ dir: oracledb_1.BIND_OUT, as: name }); } else { params.push({ dir: oracledb_1.BIND_OUT }); } return ':' + index; } } exports.OracleDBQueryRunner = OracleDBQueryRunner;