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.
71 lines (70 loc) • 2.26 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BetterSqlite3QueryRunner = void 0;
const SqlTransactionQueryRunner_1 = require("./SqlTransactionQueryRunner");
class BetterSqlite3QueryRunner extends SqlTransactionQueryRunner_1.SqlTransactionQueryRunner {
constructor(connection, config) {
super();
this.connection = connection;
this.database = 'sqlite';
this.promise = config?.promise || Promise;
}
useDatabase(database) {
if (database !== 'sqlite') {
throw new Error('Unsupported database: ' + database + '. BetterSqlite3QueryRunner only supports sqlite databases');
}
}
getNativeRunner() {
return this.connection;
}
getCurrentNativeTransaction() {
return undefined;
}
execute(fn) {
return fn(this.connection);
}
executeQueryReturning(query, params) {
try {
const rows = this.connection.prepare(query).safeIntegers(true).all(params);
return this.promise.resolve(rows);
}
catch (e) {
return this.promise.reject(e);
}
}
executeMutation(query, params) {
try {
return this.promise.resolve(this.connection.prepare(query).run(params).changes);
}
catch (e) {
return this.promise.reject(e);
}
}
executeInsertReturningLastInsertedId(query, params = []) {
if (this.containsInsertReturningClause(query, params)) {
return super.executeInsertReturningLastInsertedId(query, params);
}
try {
return this.promise.resolve(this.connection.prepare(query).safeIntegers(true).run(params).lastInsertRowid);
}
catch (e) {
return this.promise.reject(e);
}
}
addParam(params, value) {
if (typeof value === 'boolean') {
params.push(Number(value));
}
else {
params.push(value);
}
return '?';
}
createResolvedPromise(result) {
return this.promise.resolve(result);
}
createAllPromise(promises) {
return this.promise.all(promises);
}
}
exports.BetterSqlite3QueryRunner = BetterSqlite3QueryRunner;