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