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.

76 lines (75 loc) 2.83 kB
"use strict"; 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;