zing-orm
Version:
137 lines • 10.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Connection = void 0;
const DriverFactory_1 = require("../driver/DriverFactory");
const RepositoryFactory_1 = require("../repository/RepositoryFactory");
const JoiUtils_1 = require("../util/JoiUtils");
const AsyncConstructor_1 = require("../util/AsyncConstructor");
const DriverParams_1 = require("../driver/types/DriverParams");
const globals_1 = require("../util/globals");
const lodash_1 = require("lodash");
const OracleRepository_1 = require("../repository/oracle/OracleRepository");
const MssqlRepository_1 = require("../repository/mssql/MssqlRepository");
const ArangodbRepository_1 = require("../repository/arangodb/ArangodbRepository");
const RepositoryParams_1 = require("../repository/types/RepositoryParams");
/**
* Connection is a single database ORM connection to a specific database.
* Its not required to be a database connection, depend on database type it can create connection pool.
* You can have multiple connections to multiple databases in your application.
*/
class Connection extends AsyncConstructor_1.AsyncConstructor {
// -------------------------------------------------------------------------
// Constructor
// -------------------------------------------------------------------------
constructor(_options) {
super(async () => {
try {
await JoiUtils_1.JoiUtils.checkParams(DriverParams_1.OptionsParamsSchema, _options);
// this.name = "default";
this.options = _options;
this.driver = await DriverFactory_1.DriverFactory.create(_options);
this.connection = await this.driver.getConnection(_options);
this.repositories = {};
//todo connect to db and generate schema,
// use to check globalScope.tablesObj whether in the db or not when Connection Class init
await this.initRepositories();
this.metadata = {};
}
catch (err) {
//todo
console.error("初始化 Connection Class 失败!!!", err);
}
});
}
// -------------------------------------------------------------------------
// Public Accessors
// -------------------------------------------------------------------------
/**
* Gets the mongodb entity manager that allows to perform mongodb-specific repository operations
* with any entity in this connection.
*
* Available only in mongodb connections.
*/
// get mongoManager(): MongoEntityManager {
// if (!(this.manager instanceof MongoEntityManager))
// throw new TypeORMError(`MongoEntityManager is only available for MongoDB databases.`);
// return this.manager as MongoEntityManager;
// }
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------
/**
* Performs connection to the database.
* This method should be called once on application bootstrap.
* This method not necessarily creates database connection (depend on database type),
* but it also can setup a connection pool with database to use.
*/
async executeSqlRaw(params) {
try {
await JoiUtils_1.JoiUtils.checkParams(RepositoryParams_1.ExecuteSqlParamsSchema, params);
let type = this.options.type;
switch (type) {
case "mssql":
return await MssqlRepository_1.MssqlRepository.executeSqlRaw(this.connection, params);
case "oracle":
return await OracleRepository_1.OracleRepository.executeSqlRaw(this.connection, params);
case "arangodb":
return await ArangodbRepository_1.ArangodbRepository.executeSqlRaw(this.connection, params);
default:
throw new Error(`Connection ${type} executeSqlRaw is not found!`);
}
}
catch (err) {
console.log("Connection executeSqlRaw error:", err);
}
}
// getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity> {
getRepository(target) {
try {
// check target -> key: name, if not in <globalScope.tablesObj>, exit
let tableName = (0, globals_1.findTableName)(target);
// if allready have, direct return
if (!!this.repositories[tableName]) {
return this.repositories[tableName];
}
else {
// if repository was not found then create it, store its instance and return it
// const newRepository = await RepositoryFactory.create(this.options, this.connection, target);
// this.repositories[tableName] = newRepository;
// return newRepository;
throw Error(`${JSON.stringify(target)} is not found in Connection.repositories. check is it in the Entity?`);
}
}
catch (err) {
console.log(`Connection::getRepository error: ${err}`);
}
}
// getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity> {
async initRepositories() {
try {
console.log("getGlobalTablesObj(): ", (0, globals_1.getGlobalTablesObj)());
if ((0, lodash_1.keys)((0, globals_1.getGlobalTablesObj)()).length < 1) {
throw Error(`initRepositories error: globalScope.tablesObj is null !!!`);
}
(0, lodash_1.forOwn)((0, globals_1.getGlobalTablesObj)(), async (value, key) => {
//todo check whether the table in the databse metaDatas
this.repositories[key] = await RepositoryFactory_1.RepositoryFactory.create(this.options, this.connection, value.entityClass);
});
}
catch (err) {
console.log(`Connection::initRepositories error: ${err}`);
}
}
async closeConnection() {
try {
if (!!this.connection) {
await this.driver.closeConnection(this.connection);
}
}
catch (err) {
console.error(err);
//todo add union Error consturctor
throw Error(`Connection Class 关闭 connection 失败!!!, 错误: ${err}`);
}
}
}
exports.Connection = Connection;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsMkRBQXdEO0FBQ3hELHVFQUFvRTtBQUNwRSwrQ0FBNEM7QUFDNUMsK0RBQTREO0FBQzVELCtEQUFrRjtBQUNsRiw2Q0FBb0U7QUFDcEUsbUNBQXNDO0FBQ3RDLDRFQUF5RTtBQUN6RSx5RUFBc0U7QUFDdEUsa0ZBQStFO0FBQy9FLDJFQUc4QztBQUM5Qzs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsbUNBQWdCO0lBOEI1Qyw0RUFBNEU7SUFDNUUsY0FBYztJQUNkLDRFQUE0RTtJQUU1RSxZQUFZLFFBQXVCO1FBQy9CLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNiLElBQUk7Z0JBQ0EsTUFBTSxtQkFBUSxDQUFDLFdBQVcsQ0FBQyxrQ0FBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDMUQseUJBQXlCO2dCQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLDZCQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN2QiwwQ0FBMEM7Z0JBQzFDLHlGQUF5RjtnQkFDekYsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7YUFFckI7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDVixNQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDcEQ7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNO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