UNPKG

zing-orm

Version:
137 lines 10.6 kB
"use strict"; 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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