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.
76 lines (75 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PostgresQueryRunner = void 0;
const PromiseBasedAbstractQueryRunner_1 = require("./PromiseBasedAbstractQueryRunner");
class PostgresQueryRunner extends PromiseBasedAbstractQueryRunner_1.PromiseBasedAbstractQueryRunner {
constructor(connection) {
super();
this.connection = connection;
this.database = 'postgreSql';
}
useDatabase(database) {
if (database !== 'postgreSql') {
throw new Error('Unsupported database: ' + database + '. PostgresQueryRunner only supports postgreSql databases');
}
}
getNativeRunner() {
return this.connection;
}
getCurrentNativeTransaction() {
return this.transaction;
}
execute(fn) {
return fn(this.connection, this.transaction);
}
executeQueryReturning(query, params) {
return (this.transaction || this.connection).unsafe(query, params).then((result) => {
// then is called to ensure the query is executed
return result;
});
}
executeMutation(query, params) {
return (this.transaction || this.connection).unsafe(query, params).then((result) => {
// then is called to ensure the query is executed
return result.count;
});
}
executeBeginTransaction() {
return Promise.reject(new Error('Low level transaction management is not supported by PostgresQueryRunner'));
}
executeCommit() {
return Promise.reject(new Error('Low level transaction management is not supported by PostgresQueryRunner'));
}
executeRollback() {
return Promise.reject(new Error('Low level transaction management is not supported by PostgresQueryRunner'));
}
isTransactionActive() {
return !!this.transaction;
}
addParam(params, value) {
params.push(value);
return '$' + params.length;
}
executeInTransaction(fn, _outermostQueryRunner) {
if (this.transaction) {
throw new Error('Nested transactions is not supported by PostgresQueryRunner');
}
return this.connection.begin((transaction) => {
if (this.transaction) {
throw new Error('Forbidden concurrent usage of the query runner was detected when it tried to start a transaction');
}
this.transaction = transaction;
let result = fn();
if (Array.isArray(result)) {
result = this.createAllPromise(result);
}
return result.finally(() => {
this.transaction = undefined;
});
});
}
lowLevelTransactionManagementSupported() {
return false;
}
}
exports.PostgresQueryRunner = PostgresQueryRunner;