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.

135 lines (134 loc) 4.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MySqlQueryRunner = void 0; const PromiseBasedQueryRunner_1 = require("./PromiseBasedQueryRunner"); /** * @deprecated https://www.npmjs.com/package/mysql is not maintained anymore. Use another QueryRunner for MySql instead. */ class MySqlQueryRunner extends PromiseBasedQueryRunner_1.PromiseBasedQueryRunner { constructor(connection, database = 'mySql') { super(); this.transactionLevel = 0; this.connection = connection; this.database = database; } useDatabase(database) { if (database !== 'mariaDB' && database !== 'mySql') { throw new Error('Unsupported database: ' + database + '. MySqlQueryRunner only supports mySql or mariaDB databases'); } else { // @ts-ignore this.database = database; } } getNativeRunner() { return this.connection; } getCurrentNativeTransaction() { return undefined; } execute(fn) { return fn(this.connection); } executeQueryReturning(query, params) { return new Promise((resolve, reject) => { this.connection.query(query, params, (error, results) => { if (error) { reject(error); } else { resolve(results); } }); }); } executeMutation(query, params) { return new Promise((resolve, reject) => { this.connection.query(query, params, (error, results) => { if (error) { reject(error); } else { resolve(results.affectedRows); } }); }); } executeInsertReturningLastInsertedId(query, params = []) { if (this.containsInsertReturningClause(query, params)) { return super.executeInsertReturningLastInsertedId(query, params); } return new Promise((resolve, reject) => { this.connection.query(query, params, (error, results) => { if (error) { reject(error); } else { resolve(results.insertId); } }); }); } executeBeginTransaction() { if (this.transactionLevel >= 1) { throw new Error("MySql doesn't support nested transactions. This error is thrown to avoid MariaDB silently finishing the previous transaction"); } return new Promise((resolve, reject) => { this.connection.beginTransaction((error) => { if (error) { reject(error); } else { this.transactionLevel++; if (this.transactionLevel >= 2) { reject(new Error("MySql doesn't support nested transactions. The previous transaction was silently finished")); } else { resolve(); } } }); }); } executeCommit() { return new Promise((resolve, reject) => { this.connection.commit((error) => { if (error) { // Transaction count only modified when commit successful, in case of error there is still an open transaction reject(error); } else { this.transactionLevel--; if (this.transactionLevel < 0) { this.transactionLevel = 0; } resolve(); } }); }); } executeRollback() { return new Promise((resolve, reject) => { this.connection.rollback((error) => { this.transactionLevel--; if (this.transactionLevel < 0) { this.transactionLevel = 0; } if (error) { reject(error); } else { resolve(); } }); }); } isTransactionActive() { return this.transactionLevel > 0; } addParam(params, value) { params.push(value); return '?'; } } exports.MySqlQueryRunner = MySqlQueryRunner;