typeorm
Version:
Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.
95 lines (93 loc) • 3.73 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NativescriptDriver = void 0;
const AbstractSqliteDriver_1 = require("../sqlite-abstract/AbstractSqliteDriver");
const NativescriptQueryRunner_1 = require("./NativescriptQueryRunner");
const DriverPackageNotInstalledError_1 = require("../../error/DriverPackageNotInstalledError");
/**
* Organizes communication with sqlite DBMS within Nativescript.
*/
class NativescriptDriver extends AbstractSqliteDriver_1.AbstractSqliteDriver {
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
constructor(connection) {
super(connection);
this.connection = connection;
this.options = connection.options;
this.database = this.options.database;
this.driver = this.options.driver;
// load sqlite package
this.loadDependencies();
}
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
/**
* Closes connection with database.
*/
async disconnect() {
return new Promise((ok, fail) => {
this.queryRunner = undefined;
this.databaseConnection.close().then(ok).catch(fail);
});
}
/**
* Creates a query runner used to execute database queries.
*/
createQueryRunner(mode) {
if (!this.queryRunner) {
this.queryRunner = new NativescriptQueryRunner_1.NativescriptQueryRunner(this);
}
return this.queryRunner;
}
normalizeType(column) {
if (column.type === Buffer) {
return "blob";
}
return super.normalizeType(column);
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------
/**
* Creates connection with the database.
*/
createDatabaseConnection() {
return new Promise((ok, fail) => {
const options = Object.assign({}, {
readOnly: this.options.readOnly,
key: this.options.key,
multithreading: this.options.multithreading,
migrate: this.options.migrate,
iosFlags: this.options.iosFlags,
androidFlags: this.options.androidFlags,
}, this.options.extra || {});
new this.sqlite(this.options.database, options, (err, db) => {
if (err)
return fail(err);
// use object mode to work with TypeORM
db.resultType(this.sqlite.RESULTSASOBJECT);
// we need to enable foreign keys in sqlite to make sure all foreign key related features
// working properly. this also makes onDelete work with sqlite.
db.execSQL(`PRAGMA foreign_keys = ON`, [], (err, result) => {
if (err)
return fail(err);
// We are all set
ok(db);
});
});
});
}
/**
* If driver dependency is not given explicitly, then try to load it via "require".
*/
loadDependencies() {
this.sqlite = this.driver;
if (!this.driver) {
throw new DriverPackageNotInstalledError_1.DriverPackageNotInstalledError("Nativescript", "nativescript-sqlite");
}
}
}
exports.NativescriptDriver = NativescriptDriver;
//# sourceMappingURL=NativescriptDriver.js.map