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.

86 lines (85 loc) 3.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MariaDBQueryRunner = void 0; const PromiseBasedQueryRunner_1 = require("./PromiseBasedQueryRunner"); class MariaDBQueryRunner extends PromiseBasedQueryRunner_1.PromiseBasedQueryRunner { constructor(connection, database = 'mariaDB') { super(); this.transactionLevel = 0; this.connection = connection; this.database = database; } useDatabase(database) { if (database !== 'mariaDB' && database !== 'mySql') { throw new Error('Unsupported database: ' + database + '. MariaDBQueryRunner only supports mariaDB or mySql databases'); } else { // @ts-ignore this.database = database; } } getNativeRunner() { return this.connection; } getCurrentNativeTransaction() { return undefined; } execute(fn) { return fn(this.connection); } executeQueryReturning(query, params) { return this.connection.query({ sql: query, bigNumberStrings: true }, params); } executeMutation(query, params) { return this.connection.query({ sql: query, bigNumberStrings: true }, params).then((result) => result.affectedRows); } executeInsertReturningLastInsertedId(query, params = []) { if (this.containsInsertReturningClause(query, params)) { return super.executeInsertReturningLastInsertedId(query, params); } return this.connection.query({ sql: query, bigNumberStrings: true }, params).then((result) => result.insertId); } executeBeginTransaction() { if (this.transactionLevel >= 1) { throw new Error("MariaDB doesn't support nested transactions. This error is thrown to avoid MariaDB silently finishing the previous transaction"); } return this.connection.beginTransaction().then(() => { this.transactionLevel++; if (this.transactionLevel >= 2) { throw new Error("MariaDB doesn't support nested transactions. The previous transaction was silently finished"); } return undefined; }); } 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() { return this.connection.rollback().then(() => { this.transactionLevel--; if (this.transactionLevel < 0) { this.transactionLevel = 0; } }, (error) => { this.transactionLevel--; if (this.transactionLevel < 0) { this.transactionLevel = 0; } throw error; }); } isTransactionActive() { return this.transactionLevel > 0; } addParam(params, value) { params.push(value); return '?'; } } exports.MariaDBQueryRunner = MariaDBQueryRunner;