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
JavaScript
;
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;