typeorm 0.2.45-dev.33b2bd7 → 0.2.45-dev.6523526
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/driver/Driver.d.ts +4 -0
- package/browser/driver/Driver.js.map +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiDriver.d.ts +4 -0
- package/browser/driver/aurora-data-api/AuroraDataApiDriver.js +4 -0
- package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +45 -14
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.d.ts +4 -0
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +4 -0
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +43 -11
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.d.ts +4 -0
- package/browser/driver/cockroachdb/CockroachDriver.js +4 -0
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +79 -48
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.js +42 -10
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoDriver.d.ts +4 -0
- package/browser/driver/mongodb/MongoDriver.js +4 -0
- package/browser/driver/mongodb/MongoDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.d.ts +4 -0
- package/browser/driver/mysql/MysqlDriver.js +4 -0
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +50 -23
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.d.ts +4 -0
- package/browser/driver/oracle/OracleDriver.js +4 -0
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +41 -14
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.d.ts +4 -0
- package/browser/driver/postgres/PostgresDriver.js +4 -0
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +50 -19
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.d.ts +4 -0
- package/browser/driver/sap/SapDriver.js +4 -0
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.js +1 -1
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +4 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +57 -21
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.d.ts +4 -0
- package/browser/driver/sqlserver/SqlServerDriver.js +4 -0
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +109 -80
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.js +19 -30
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +5 -0
- package/browser/query-runner/BaseQueryRunner.js +5 -0
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/driver/Driver.d.ts +4 -0
- package/driver/Driver.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiDriver.d.ts +4 -0
- package/driver/aurora-data-api/AuroraDataApiDriver.js +4 -0
- package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +45 -14
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.d.ts +4 -0
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +4 -0
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -1
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +43 -11
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.d.ts +4 -0
- package/driver/cockroachdb/CockroachDriver.js +4 -0
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +79 -48
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +42 -10
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoDriver.d.ts +4 -0
- package/driver/mongodb/MongoDriver.js +4 -0
- package/driver/mongodb/MongoDriver.js.map +1 -1
- package/driver/mysql/MysqlDriver.d.ts +4 -0
- package/driver/mysql/MysqlDriver.js +4 -0
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +50 -23
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/oracle/OracleDriver.d.ts +4 -0
- package/driver/oracle/OracleDriver.js +4 -0
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.js +41 -14
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.d.ts +4 -0
- package/driver/postgres/PostgresDriver.js +4 -0
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +50 -19
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.d.ts +4 -0
- package/driver/sap/SapDriver.js +4 -0
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.js +1 -1
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +4 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -0
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +57 -21
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.d.ts +4 -0
- package/driver/sqlserver/SqlServerDriver.js +4 -0
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +109 -80
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.js +19 -30
- package/entity-manager/EntityManager.js.map +1 -1
- package/package.json +1 -1
- package/query-runner/BaseQueryRunner.d.ts +5 -0
- package/query-runner/BaseQueryRunner.js +5 -0
- package/query-runner/BaseQueryRunner.js.map +1 -1
|
@@ -10,7 +10,6 @@ import { PlainObjectToDatabaseEntityTransformer } from "../query-builder/transfo
|
|
|
10
10
|
import { CustomRepositoryNotFoundError } from "../error/CustomRepositoryNotFoundError";
|
|
11
11
|
import { AbstractRepository } from "../repository/AbstractRepository";
|
|
12
12
|
import { CustomRepositoryCannotInheritRepositoryError } from "../error/CustomRepositoryCannotInheritRepositoryError";
|
|
13
|
-
import { MongoDriver } from "../driver/mongodb/MongoDriver";
|
|
14
13
|
import { RepositoryNotFoundError } from "../error/RepositoryNotFoundError";
|
|
15
14
|
import { RepositoryNotTreeError } from "../error/RepositoryNotTreeError";
|
|
16
15
|
import { RepositoryFactory } from "../repository/RepositoryFactory";
|
|
@@ -62,53 +61,43 @@ var EntityManager = /** @class */ (function () {
|
|
|
62
61
|
if (!runInTransaction) {
|
|
63
62
|
throw new TypeORMError("Transaction method requires callback in second paramter if isolation level is supplied.");
|
|
64
63
|
}
|
|
65
|
-
if (this.connection.driver instanceof MongoDriver)
|
|
66
|
-
throw new TypeORMError("Transactions aren't supported by MongoDB.");
|
|
67
64
|
if (this.queryRunner && this.queryRunner.isReleased)
|
|
68
65
|
throw new QueryRunnerProviderAlreadyReleasedError();
|
|
69
|
-
if (this.queryRunner && this.queryRunner.isTransactionActive)
|
|
70
|
-
throw new TypeORMError("Cannot start transaction because its already started");
|
|
71
66
|
queryRunner = this.queryRunner || this.connection.createQueryRunner();
|
|
72
67
|
_a.label = 1;
|
|
73
68
|
case 1:
|
|
74
|
-
_a.trys.push([1,
|
|
75
|
-
if (!isolation) return [3 /*break*/, 3];
|
|
69
|
+
_a.trys.push([1, 5, 10, 13]);
|
|
76
70
|
return [4 /*yield*/, queryRunner.startTransaction(isolation)];
|
|
77
71
|
case 2:
|
|
78
72
|
_a.sent();
|
|
79
|
-
return [
|
|
80
|
-
case 3:
|
|
81
|
-
case 4:
|
|
82
|
-
_a.sent();
|
|
83
|
-
_a.label = 5;
|
|
84
|
-
case 5: return [4 /*yield*/, runInTransaction(queryRunner.manager)];
|
|
85
|
-
case 6:
|
|
73
|
+
return [4 /*yield*/, runInTransaction(queryRunner.manager)];
|
|
74
|
+
case 3:
|
|
86
75
|
result = _a.sent();
|
|
87
76
|
return [4 /*yield*/, queryRunner.commitTransaction()];
|
|
88
|
-
case
|
|
77
|
+
case 4:
|
|
89
78
|
_a.sent();
|
|
90
79
|
return [2 /*return*/, result];
|
|
91
|
-
case
|
|
80
|
+
case 5:
|
|
92
81
|
err_1 = _a.sent();
|
|
93
|
-
_a.label =
|
|
94
|
-
case
|
|
95
|
-
_a.trys.push([
|
|
82
|
+
_a.label = 6;
|
|
83
|
+
case 6:
|
|
84
|
+
_a.trys.push([6, 8, , 9]);
|
|
96
85
|
return [4 /*yield*/, queryRunner.rollbackTransaction()];
|
|
97
|
-
case
|
|
86
|
+
case 7:
|
|
98
87
|
_a.sent();
|
|
99
|
-
return [3 /*break*/,
|
|
100
|
-
case
|
|
88
|
+
return [3 /*break*/, 9];
|
|
89
|
+
case 8:
|
|
101
90
|
rollbackError_1 = _a.sent();
|
|
102
|
-
return [3 /*break*/,
|
|
103
|
-
case
|
|
104
|
-
case
|
|
105
|
-
if (!!this.queryRunner) return [3 /*break*/,
|
|
91
|
+
return [3 /*break*/, 9];
|
|
92
|
+
case 9: throw err_1;
|
|
93
|
+
case 10:
|
|
94
|
+
if (!!this.queryRunner) return [3 /*break*/, 12];
|
|
106
95
|
return [4 /*yield*/, queryRunner.release()];
|
|
107
|
-
case
|
|
96
|
+
case 11:
|
|
108
97
|
_a.sent();
|
|
109
|
-
_a.label =
|
|
110
|
-
case
|
|
111
|
-
case
|
|
98
|
+
_a.label = 12;
|
|
99
|
+
case 12: return [7 /*endfinally*/];
|
|
100
|
+
case 13: return [2 /*return*/];
|
|
112
101
|
}
|
|
113
102
|
});
|
|
114
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/entity-manager/EntityManager.ts"],"names":[],"mappings":"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","file":"EntityManager.js","sourcesContent":["import {Connection} from \"../connection/Connection\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {EntityNotFoundError} from \"../error/EntityNotFoundError\";\nimport {QueryRunnerProviderAlreadyReleasedError} from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport {FindOneOptions} from \"../find-options/FindOneOptions\";\nimport {DeepPartial} from \"../common/DeepPartial\";\nimport {RemoveOptions} from \"../repository/RemoveOptions\";\nimport {SaveOptions} from \"../repository/SaveOptions\";\nimport {NoNeedToReleaseEntityManagerError} from \"../error/NoNeedToReleaseEntityManagerError\";\nimport {MongoRepository} from \"../repository/MongoRepository\";\nimport {TreeRepository} from \"../repository/TreeRepository\";\nimport {Repository} from \"../repository/Repository\";\nimport {FindOptionsUtils} from \"../find-options/FindOptionsUtils\";\nimport {PlainObjectToNewEntityTransformer} from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\";\nimport {PlainObjectToDatabaseEntityTransformer} from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\";\nimport {CustomRepositoryNotFoundError} from \"../error/CustomRepositoryNotFoundError\";\nimport {AbstractRepository} from \"../repository/AbstractRepository\";\nimport {CustomRepositoryCannotInheritRepositoryError} from \"../error/CustomRepositoryCannotInheritRepositoryError\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {RepositoryNotFoundError} from \"../error/RepositoryNotFoundError\";\nimport {RepositoryNotTreeError} from \"../error/RepositoryNotTreeError\";\nimport {RepositoryFactory} from \"../repository/RepositoryFactory\";\nimport {TreeRepositoryNotSupportedError} from \"../error/TreeRepositoryNotSupportedError\";\nimport {QueryDeepPartialEntity} from \"../query-builder/QueryPartialEntity\";\nimport {EntityPersistExecutor} from \"../persistence/EntityPersistExecutor\";\nimport {ObjectID} from \"../driver/mongodb/typings\";\nimport {InsertResult} from \"../query-builder/result/InsertResult\";\nimport {UpdateResult} from \"../query-builder/result/UpdateResult\";\nimport {DeleteResult} from \"../query-builder/result/DeleteResult\";\nimport {FindConditions} from \"../find-options/FindConditions\";\nimport {IsolationLevel} from \"../driver/types/IsolationLevel\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {getMetadataArgsStorage} from \"../globals\";\nimport {TypeORMError} from \"../error\";\nimport {UpsertOptions} from \"../repository/UpsertOptions\";\n\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nexport class EntityManager {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this entity manager.\n */\n readonly connection: Connection;\n\n /**\n * Custom query runner to be used for operations in this entity manager.\n * Used only in non-global entity manager.\n */\n readonly queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Once created and then reused by en repositories.\n */\n protected repositories: Repository<any>[] = [];\n\n /**\n * Plain to object transformer used in create and merge operations.\n */\n protected plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection, queryRunner?: QueryRunner) {\n this.connection = connection;\n if (queryRunner) {\n this.queryRunner = queryRunner;\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this });\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(isolationLevel: IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n isolationOrRunInTransaction: IsolationLevel | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>\n ): Promise<T> {\n\n const isolation = typeof isolationOrRunInTransaction === \"string\" ? isolationOrRunInTransaction : undefined;\n const runInTransaction = typeof isolationOrRunInTransaction === \"function\" ? isolationOrRunInTransaction : runInTransactionParam;\n\n if (!runInTransaction) {\n throw new TypeORMError(`Transaction method requires callback in second paramter if isolation level is supplied.`);\n }\n\n if (this.connection.driver instanceof MongoDriver)\n throw new TypeORMError(`Transactions aren't supported by MongoDB.`);\n\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n\n if (this.queryRunner && this.queryRunner.isTransactionActive)\n throw new TypeORMError(`Cannot start transaction because its already started`);\n\n // if query runner is already defined in this class, it means this entity manager was already created for a single connection\n // if its not defined we create a new query runner - single connection where we'll execute all our operations\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n if (isolation) {\n await queryRunner.startTransaction(isolation);\n } else {\n await queryRunner.startTransaction();\n }\n const result = await runInTransaction(queryRunner.manager);\n await queryRunner.commitTransaction();\n return result;\n\n } catch (err) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n throw err;\n\n } finally {\n if (!this.queryRunner) // if we used a new query runner provider then release it\n await queryRunner.release();\n }\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n */\n async query(query: string, parameters?: any[]): Promise<any> {\n return this.connection.query(query, parameters, this.queryRunner);\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityClass: EntityTarget<Entity>, alias: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityClass?: EntityTarget<Entity>|QueryRunner, alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity> {\n if (alias) {\n return this.connection.createQueryBuilder(entityClass as EntityTarget<Entity>, alias, queryRunner || this.queryRunner);\n\n } else {\n return this.connection.createQueryBuilder(entityClass as QueryRunner|undefined || queryRunner || this.queryRunner);\n }\n }\n\n /**\n * Checks if entity has an id.\n */\n hasId(entity: any): boolean;\n\n /**\n * Checks if entity of given schema name has an id.\n */\n hasId(target: Function|string, entity: any): boolean;\n\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n hasId(targetOrEntity: any|Function|string, maybeEntity?: any): boolean {\n const target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n const metadata = this.connection.getMetadata(target);\n return metadata.hasId(entity);\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: any): any;\n\n /**\n * Gets entity mixed id.\n */\n getId(target: EntityTarget<any>, entity: any): any;\n\n /**\n * Gets entity mixed id.\n */\n getId(targetOrEntity: any|EntityTarget<any>, maybeEntity?: any): any {\n const target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n const metadata = this.connection.getMetadata(target);\n return metadata.getEntityIdMixedMap(entity);\n }\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(entityClass: EntityTarget<Entity>, plainObject?: DeepPartial<Entity>): Entity;\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(entityClass: EntityTarget<Entity>, plainObjects?: DeepPartial<Entity>[]): Entity[];\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create<Entity>(entityClass: EntityTarget<Entity>, plainObjectOrObjects?: DeepPartial<Entity>|DeepPartial<Entity>[]): Entity|Entity[] {\n const metadata = this.connection.getMetadata(entityClass);\n\n if (!plainObjectOrObjects)\n return metadata.create(this.queryRunner);\n\n if (Array.isArray(plainObjectOrObjects))\n return (plainObjectOrObjects as DeepPartial<Entity>[]).map(plainEntityLike => this.create(entityClass, plainEntityLike));\n\n const mergeIntoEntity = metadata.create(this.queryRunner);\n this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);\n return mergeIntoEntity;\n }\n\n /**\n * Merges two entities into one new entity.\n */\n merge<Entity>(entityClass: EntityTarget<Entity>, mergeIntoEntity: Entity, ...entityLikes: DeepPartial<Entity>[]): Entity { // todo: throw exception if entity manager is released\n const metadata = this.connection.getMetadata(entityClass);\n entityLikes.forEach(object => this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata));\n return mergeIntoEntity;\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n async preload<Entity>(entityClass: EntityTarget<Entity>, entityLike: DeepPartial<Entity>): Promise<Entity|undefined> {\n const metadata = this.connection.getMetadata(entityClass);\n const plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);\n const transformedEntity = await plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata);\n if (transformedEntity)\n return this.merge(entityClass as any, transformedEntity as Entity, entityLike);\n\n return undefined;\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Saves a given entity in the database.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: (T|T[])|EntityTarget<Entity>, maybeEntityOrOptions?: T|T[], maybeOptions?: SaveOptions): Promise<T|T[]> {\n\n // normalize mixed parameters\n let target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: T|T[] = target ? maybeEntityOrOptions as T|T[] : targetOrEntity as T|T[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n if (target instanceof EntitySchema)\n target = target.options.name;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"save\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity, options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(targetOrEntity: EntityTarget<Entity>, entity: Entity, options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity[], options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(targetOrEntity: EntityTarget<Entity>, entity: Entity[], options?: RemoveOptions): Promise<Entity[]>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(targetOrEntity: (Entity|Entity[])|EntityTarget<Entity>, maybeEntityOrOptions?: Entity|Entity[], maybeOptions?: RemoveOptions): Promise<Entity|Entity[]> {\n\n // normalize mixed parameters\n const target = (arguments.length > 1 && (targetOrEntity instanceof Function || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: Entity|Entity[] = target ? maybeEntityOrOptions as Entity|Entity[] : targetOrEntity as Entity|Entity[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"remove\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>;\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(targetOrEntity: (T|T[])|EntityTarget<Entity>, maybeEntityOrOptions?: T|T[], maybeOptions?: SaveOptions): Promise<T|T[]> {\n\n // normalize mixed parameters\n let target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: T|T[] = target ? maybeEntityOrOptions as T|T[] : targetOrEntity as T|T[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n if (target instanceof EntitySchema)\n target = target.options.name;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute soft-remove operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"soft-remove\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Recovers all given entities.\n */\n recover<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>;\n\n /**\n * Recovers a given entity.\n */\n recover<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>;\n\n /**\n * Recovers all given entities.\n */\n recover<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Recovers a given entity.\n */\n recover<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Recovers one or many given entities.\n */\n recover<Entity, T extends DeepPartial<Entity>>(targetOrEntity: (T|T[])|EntityTarget<Entity>, maybeEntityOrOptions?: T|T[], maybeOptions?: SaveOptions): Promise<T|T[]> {\n\n // normalize mixed parameters\n let target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: T|T[] = target ? maybeEntityOrOptions as T|T[] : targetOrEntity as T|T[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n if (target instanceof EntitySchema)\n target = target.options.name;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute recover operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"recover\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n async insert<Entity>(target: EntityTarget<Entity>, entity: QueryDeepPartialEntity<Entity>|(QueryDeepPartialEntity<Entity>[])): Promise<InsertResult> {\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute();\n }\n\n async upsert<Entity>(\n target: EntityTarget<Entity>,\n entityOrEntities: QueryDeepPartialEntity<Entity> | (QueryDeepPartialEntity<Entity>[]),\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>): Promise<InsertResult> {\n const metadata = this.connection.getMetadata(target);\n\n let options: UpsertOptions<Entity>;\n\n if (Array.isArray(conflictPathsOrOptions)) {\n options = {\n conflictPaths: conflictPathsOrOptions\n };\n } else {\n options = conflictPathsOrOptions;\n }\n\n let entities: QueryDeepPartialEntity<Entity>[];\n\n if (!Array.isArray(entityOrEntities)) {\n entities = [entityOrEntities];\n } else {\n entities = entityOrEntities;\n }\n\n const conflictColumns = metadata.mapPropertyPathsToColumns(options.conflictPaths);\n\n const overwriteColumns = metadata.columns\n .filter((col) => (!conflictColumns.includes(col)) && entities.some(entity => typeof col.getEntityValue(entity) !== \"undefined\"));\n\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entities)\n .orUpdate(\n [...conflictColumns, ...overwriteColumns].map((col) => col.databaseName),\n conflictColumns.map((col) => col.databaseName),\n {\n skipUpdateIfNoValuesChanged: options.skipUpdateIfNoValuesChanged\n }\n )\n .execute();\n }\n\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n update<Entity>(target: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any, partialEntity: QueryDeepPartialEntity<Entity>): Promise<UpdateResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the update method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n delete<Entity>(targetOrEntity: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any): Promise<DeleteResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n softDelete<Entity>(targetOrEntity: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any): Promise<UpdateResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n restore<Entity>(targetOrEntity: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any): Promise<UpdateResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count<Entity>(entityClass: EntityTarget<Entity>, options?: FindOneOptions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count<Entity>(entityClass: EntityTarget<Entity>, options?: FindManyOptions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n count<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given find options or conditions.\n * Useful for pagination.\n */\n async count<Entity>(entityClass: EntityTarget<Entity>, optionsOrConditions?: FindConditions<Entity>|FindOneOptions<Entity>|FindManyOptions<Entity>): Promise<number> {\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n return FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getCount();\n }\n\n /**\n * Finds entities that match given options.\n */\n find<Entity>(entityClass: EntityTarget<Entity>, options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given conditions.\n */\n find<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given find options or conditions.\n */\n async find<Entity>(entityClass: EntityTarget<Entity>, optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<Entity[]> {\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder<Entity>(entityClass as any, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n\n return qb.getMany();\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount<Entity>(entityClass: EntityTarget<Entity>, options?: FindManyOptions<Entity>): Promise<[Entity[], number]>;\n\n /**\n * Finds entities that match given conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>): Promise<[Entity[], number]>;\n\n /**\n * Finds entities that match given find options and conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n async findAndCount<Entity>(entityClass: EntityTarget<Entity>, optionsOrConditions?: FindConditions<Entity>|FindManyOptions<Entity>): Promise<[Entity[], number]> {\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder<Entity>(entityClass as any, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n\n return qb.getManyAndCount();\n }\n\n /**\n * Finds entities with ids.\n * Optionally find options can be applied.\n */\n findByIds<Entity>(entityClass: EntityTarget<Entity>, ids: any[], options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities with ids.\n * Optionally conditions can be applied.\n */\n findByIds<Entity>(entityClass: EntityTarget<Entity>, ids: any[], conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n */\n async findByIds<Entity>(entityClass: EntityTarget<Entity>, ids: any[], optionsOrConditions?: FindConditions<Entity>|FindManyOptions<Entity>): Promise<Entity[]> {\n\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length)\n return Promise.resolve([]);\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder<Entity>(entityClass as any, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n\n return qb.andWhereInIds(ids).getMany();\n }\n\n /**\n * Finds first entity that matches given find options.\n */\n findOne<Entity>(entityClass: EntityTarget<Entity>, id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given find options.\n */\n findOne<Entity>(entityClass: EntityTarget<Entity>, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOne<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n async findOne<Entity>(entityClass: EntityTarget<Entity>, idOrOptionsOrConditions?: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity|undefined> {\n\n let findOptions: FindManyOptions<any>|FindOneOptions<any>|undefined = undefined;\n if (FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions)) {\n findOptions = idOrOptionsOrConditions;\n } else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions)) {\n findOptions = maybeOptions;\n }\n\n let options: ObjectLiteral|undefined = undefined;\n if (idOrOptionsOrConditions instanceof Object && !FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions))\n options = idOrOptionsOrConditions as ObjectLiteral;\n\n const metadata = this.connection.getMetadata(entityClass);\n let alias: string = metadata.name;\n if (findOptions && findOptions.join) {\n alias = findOptions.join.alias;\n\n } else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions) && maybeOptions.join) {\n alias = maybeOptions.join.alias;\n }\n const qb = this.createQueryBuilder<Entity>(entityClass as any, alias);\n\n const passedId = typeof idOrOptionsOrConditions === \"string\" || typeof idOrOptionsOrConditions === \"number\" || (idOrOptionsOrConditions as any) instanceof Date;\n\n if (!passedId) {\n findOptions = {\n ...(findOptions || {}),\n take: 1,\n };\n }\n\n FindOptionsUtils.applyOptionsToQueryBuilder(qb, findOptions);\n\n if (!findOptions || findOptions.loadEagerRelations !== false) {\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n }\n\n if (options) {\n qb.where(options);\n\n } else if (passedId) {\n qb.andWhereInIds(metadata.ensureEntityIdMap(idOrOptionsOrConditions));\n }\n\n return qb.getOne();\n }\n\n /**\n * Finds first entity that matches given find options or rejects the returned promise on error.\n */\n findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given find options or rejects the returned promise on error.\n */\n findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n async findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, idOrOptionsOrConditions?: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity> {\n return this.findOne<Entity>(entityClass as any, idOrOptionsOrConditions as any, maybeOptions).then((value) => {\n if (value === undefined) {\n return Promise.reject(new EntityNotFoundError(entityClass, idOrOptionsOrConditions));\n }\n return Promise.resolve(value);\n });\n }\n\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n async clear<Entity>(entityClass: EntityTarget<Entity>): Promise<void> {\n const metadata = this.connection.getMetadata(entityClass);\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n try {\n return await queryRunner.clearTable(metadata.tablePath); // await is needed here because we are using finally\n\n } finally {\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n async increment<Entity>(entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string): Promise<UpdateResult> {\n\n const metadata = this.connection.getMetadata(entityClass);\n const column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new TypeORMError(`Column ${propertyPath} was not found in ${metadata.targetName} entity.`);\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`);\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value }) as any,\n () => this.connection.driver.escape(column.databaseName) + \" + \" + value\n );\n\n return this\n .createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute();\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n async decrement<Entity>(entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string): Promise<UpdateResult> {\n\n const metadata = this.connection.getMetadata(entityClass);\n const column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new TypeORMError(`Column ${propertyPath} was not found in ${metadata.targetName} entity.`);\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`);\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value }) as any,\n () => this.connection.driver.escape(column.databaseName) + \" - \" + value\n );\n\n return this\n .createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute();\n }\n\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity> {\n\n // throw exception if there is no repository with this target registered\n if (!this.connection.hasMetadata(target))\n throw new RepositoryNotFoundError(this.connection.name, target);\n\n // find already created repository instance and return it if found\n const metadata = this.connection.getMetadata(target);\n const repository = this.repositories.find(repository => repository.metadata === metadata);\n if (repository)\n return repository;\n\n // if repository was not found then create it, store its instance and return it\n const newRepository = new RepositoryFactory().create(this, metadata, this.queryRunner);\n this.repositories.push(newRepository);\n return newRepository;\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getTreeRepository<Entity>(target: EntityTarget<Entity>): TreeRepository<Entity> {\n\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver);\n\n // check if repository is real tree repository\n const repository = this.getRepository(target);\n if (!(repository instanceof TreeRepository))\n throw new RepositoryNotTreeError(target);\n\n return repository;\n }\n\n /**\n * Gets mongodb repository for the given entity class.\n */\n getMongoRepository<Entity>(target: EntityTarget<Entity>): MongoRepository<Entity> {\n return this.connection.getMongoRepository<Entity>(target);\n }\n\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n getCustomRepository<T>(customRepository: ObjectType<T>): T {\n const entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(repository => {\n return repository.target === (customRepository instanceof Function ? customRepository : (customRepository as any).constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n\n const entityMetadata = entityRepositoryMetadataArgs.entity ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity) : undefined;\n const entityRepositoryInstance = new (entityRepositoryMetadataArgs.target as any)(this, entityMetadata);\n\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!(entityRepositoryInstance as any)[\"manager\"])\n (entityRepositoryInstance as any)[\"manager\"] = this;\n }\n if (entityRepositoryInstance instanceof Repository) {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n\n (entityRepositoryInstance as any)[\"manager\"] = this;\n (entityRepositoryInstance as any)[\"metadata\"] = entityMetadata;\n }\n\n return entityRepositoryInstance;\n }\n\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n async release(): Promise<void> {\n if (!this.queryRunner)\n throw new NoNeedToReleaseEntityManagerError();\n\n return this.queryRunner.release();\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/entity-manager/EntityManager.ts"],"names":[],"mappings":"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","file":"EntityManager.js","sourcesContent":["import {Connection} from \"../connection/Connection\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {EntityNotFoundError} from \"../error/EntityNotFoundError\";\nimport {QueryRunnerProviderAlreadyReleasedError} from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport {FindOneOptions} from \"../find-options/FindOneOptions\";\nimport {DeepPartial} from \"../common/DeepPartial\";\nimport {RemoveOptions} from \"../repository/RemoveOptions\";\nimport {SaveOptions} from \"../repository/SaveOptions\";\nimport {NoNeedToReleaseEntityManagerError} from \"../error/NoNeedToReleaseEntityManagerError\";\nimport {MongoRepository} from \"../repository/MongoRepository\";\nimport {TreeRepository} from \"../repository/TreeRepository\";\nimport {Repository} from \"../repository/Repository\";\nimport {FindOptionsUtils} from \"../find-options/FindOptionsUtils\";\nimport {PlainObjectToNewEntityTransformer} from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\";\nimport {PlainObjectToDatabaseEntityTransformer} from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\";\nimport {CustomRepositoryNotFoundError} from \"../error/CustomRepositoryNotFoundError\";\nimport {AbstractRepository} from \"../repository/AbstractRepository\";\nimport {CustomRepositoryCannotInheritRepositoryError} from \"../error/CustomRepositoryCannotInheritRepositoryError\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {RepositoryNotFoundError} from \"../error/RepositoryNotFoundError\";\nimport {RepositoryNotTreeError} from \"../error/RepositoryNotTreeError\";\nimport {RepositoryFactory} from \"../repository/RepositoryFactory\";\nimport {TreeRepositoryNotSupportedError} from \"../error/TreeRepositoryNotSupportedError\";\nimport {QueryDeepPartialEntity} from \"../query-builder/QueryPartialEntity\";\nimport {EntityPersistExecutor} from \"../persistence/EntityPersistExecutor\";\nimport {ObjectID} from \"../driver/mongodb/typings\";\nimport {InsertResult} from \"../query-builder/result/InsertResult\";\nimport {UpdateResult} from \"../query-builder/result/UpdateResult\";\nimport {DeleteResult} from \"../query-builder/result/DeleteResult\";\nimport {FindConditions} from \"../find-options/FindConditions\";\nimport {IsolationLevel} from \"../driver/types/IsolationLevel\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {getMetadataArgsStorage} from \"../globals\";\nimport {TypeORMError} from \"../error\";\nimport {UpsertOptions} from \"../repository/UpsertOptions\";\n\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nexport class EntityManager {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this entity manager.\n */\n readonly connection: Connection;\n\n /**\n * Custom query runner to be used for operations in this entity manager.\n * Used only in non-global entity manager.\n */\n readonly queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Once created and then reused by en repositories.\n */\n protected repositories: Repository<any>[] = [];\n\n /**\n * Plain to object transformer used in create and merge operations.\n */\n protected plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection, queryRunner?: QueryRunner) {\n this.connection = connection;\n if (queryRunner) {\n this.queryRunner = queryRunner;\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this });\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(isolationLevel: IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;\n\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n isolationOrRunInTransaction: IsolationLevel | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>\n ): Promise<T> {\n\n const isolation = typeof isolationOrRunInTransaction === \"string\" ? isolationOrRunInTransaction : undefined;\n const runInTransaction = typeof isolationOrRunInTransaction === \"function\" ? isolationOrRunInTransaction : runInTransactionParam;\n\n if (!runInTransaction) {\n throw new TypeORMError(`Transaction method requires callback in second paramter if isolation level is supplied.`);\n }\n\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n\n // if query runner is already defined in this class, it means this entity manager was already created for a single connection\n // if its not defined we create a new query runner - single connection where we'll execute all our operations\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n await queryRunner.startTransaction(isolation);\n const result = await runInTransaction(queryRunner.manager);\n await queryRunner.commitTransaction();\n return result;\n\n } catch (err) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n throw err;\n\n } finally {\n if (!this.queryRunner) // if we used a new query runner provider then release it\n await queryRunner.release();\n }\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n */\n async query(query: string, parameters?: any[]): Promise<any> {\n return this.connection.query(query, parameters, this.queryRunner);\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityClass: EntityTarget<Entity>, alias: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>;\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity>(entityClass?: EntityTarget<Entity>|QueryRunner, alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity> {\n if (alias) {\n return this.connection.createQueryBuilder(entityClass as EntityTarget<Entity>, alias, queryRunner || this.queryRunner);\n\n } else {\n return this.connection.createQueryBuilder(entityClass as QueryRunner|undefined || queryRunner || this.queryRunner);\n }\n }\n\n /**\n * Checks if entity has an id.\n */\n hasId(entity: any): boolean;\n\n /**\n * Checks if entity of given schema name has an id.\n */\n hasId(target: Function|string, entity: any): boolean;\n\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n hasId(targetOrEntity: any|Function|string, maybeEntity?: any): boolean {\n const target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n const metadata = this.connection.getMetadata(target);\n return metadata.hasId(entity);\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: any): any;\n\n /**\n * Gets entity mixed id.\n */\n getId(target: EntityTarget<any>, entity: any): any;\n\n /**\n * Gets entity mixed id.\n */\n getId(targetOrEntity: any|EntityTarget<any>, maybeEntity?: any): any {\n const target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n const entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n const metadata = this.connection.getMetadata(target);\n return metadata.getEntityIdMixedMap(entity);\n }\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(entityClass: EntityTarget<Entity>, plainObject?: DeepPartial<Entity>): Entity;\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n create<Entity>(entityClass: EntityTarget<Entity>, plainObjects?: DeepPartial<Entity>[]): Entity[];\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create<Entity>(entityClass: EntityTarget<Entity>, plainObjectOrObjects?: DeepPartial<Entity>|DeepPartial<Entity>[]): Entity|Entity[] {\n const metadata = this.connection.getMetadata(entityClass);\n\n if (!plainObjectOrObjects)\n return metadata.create(this.queryRunner);\n\n if (Array.isArray(plainObjectOrObjects))\n return (plainObjectOrObjects as DeepPartial<Entity>[]).map(plainEntityLike => this.create(entityClass, plainEntityLike));\n\n const mergeIntoEntity = metadata.create(this.queryRunner);\n this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);\n return mergeIntoEntity;\n }\n\n /**\n * Merges two entities into one new entity.\n */\n merge<Entity>(entityClass: EntityTarget<Entity>, mergeIntoEntity: Entity, ...entityLikes: DeepPartial<Entity>[]): Entity { // todo: throw exception if entity manager is released\n const metadata = this.connection.getMetadata(entityClass);\n entityLikes.forEach(object => this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata));\n return mergeIntoEntity;\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n async preload<Entity>(entityClass: EntityTarget<Entity>, entityLike: DeepPartial<Entity>): Promise<Entity|undefined> {\n const metadata = this.connection.getMetadata(entityClass);\n const plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);\n const transformedEntity = await plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata);\n if (transformedEntity)\n return this.merge(entityClass as any, transformedEntity as Entity, entityLike);\n\n return undefined;\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Saves a given entity in the database.\n */\n save<Entity, T extends DeepPartial<Entity>>(targetOrEntity: (T|T[])|EntityTarget<Entity>, maybeEntityOrOptions?: T|T[], maybeOptions?: SaveOptions): Promise<T|T[]> {\n\n // normalize mixed parameters\n let target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: T|T[] = target ? maybeEntityOrOptions as T|T[] : targetOrEntity as T|T[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n if (target instanceof EntitySchema)\n target = target.options.name;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"save\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity, options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(targetOrEntity: EntityTarget<Entity>, entity: Entity, options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(entity: Entity[], options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(targetOrEntity: EntityTarget<Entity>, entity: Entity[], options?: RemoveOptions): Promise<Entity[]>;\n\n /**\n * Removes a given entity from the database.\n */\n remove<Entity>(targetOrEntity: (Entity|Entity[])|EntityTarget<Entity>, maybeEntityOrOptions?: Entity|Entity[], maybeOptions?: RemoveOptions): Promise<Entity|Entity[]> {\n\n // normalize mixed parameters\n const target = (arguments.length > 1 && (targetOrEntity instanceof Function || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: Entity|Entity[] = target ? maybeEntityOrOptions as Entity|Entity[] : targetOrEntity as Entity|Entity[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"remove\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>;\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<Entity, T extends DeepPartial<Entity>>(targetOrEntity: (T|T[])|EntityTarget<Entity>, maybeEntityOrOptions?: T|T[], maybeOptions?: SaveOptions): Promise<T|T[]> {\n\n // normalize mixed parameters\n let target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: T|T[] = target ? maybeEntityOrOptions as T|T[] : targetOrEntity as T|T[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n if (target instanceof EntitySchema)\n target = target.options.name;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute soft-remove operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"soft-remove\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Recovers all given entities.\n */\n recover<Entity>(entities: Entity[], options?: SaveOptions): Promise<Entity[]>;\n\n /**\n * Recovers a given entity.\n */\n recover<Entity>(entity: Entity, options?: SaveOptions): Promise<Entity>;\n\n /**\n * Recovers all given entities.\n */\n recover<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Recovers a given entity.\n */\n recover<Entity, T extends DeepPartial<Entity>>(targetOrEntity: EntityTarget<Entity>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Recovers one or many given entities.\n */\n recover<Entity, T extends DeepPartial<Entity>>(targetOrEntity: (T|T[])|EntityTarget<Entity>, maybeEntityOrOptions?: T|T[], maybeOptions?: SaveOptions): Promise<T|T[]> {\n\n // normalize mixed parameters\n let target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity as Function|string : undefined;\n const entity: T|T[] = target ? maybeEntityOrOptions as T|T[] : targetOrEntity as T|T[];\n const options = target ? maybeOptions : maybeEntityOrOptions as SaveOptions;\n\n if (target instanceof EntitySchema)\n target = target.options.name;\n\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n\n // execute recover operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"recover\", target, entity, options)\n .execute()\n .then(() => entity);\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n async insert<Entity>(target: EntityTarget<Entity>, entity: QueryDeepPartialEntity<Entity>|(QueryDeepPartialEntity<Entity>[])): Promise<InsertResult> {\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute();\n }\n\n async upsert<Entity>(\n target: EntityTarget<Entity>,\n entityOrEntities: QueryDeepPartialEntity<Entity> | (QueryDeepPartialEntity<Entity>[]),\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>): Promise<InsertResult> {\n const metadata = this.connection.getMetadata(target);\n\n let options: UpsertOptions<Entity>;\n\n if (Array.isArray(conflictPathsOrOptions)) {\n options = {\n conflictPaths: conflictPathsOrOptions\n };\n } else {\n options = conflictPathsOrOptions;\n }\n\n let entities: QueryDeepPartialEntity<Entity>[];\n\n if (!Array.isArray(entityOrEntities)) {\n entities = [entityOrEntities];\n } else {\n entities = entityOrEntities;\n }\n\n const conflictColumns = metadata.mapPropertyPathsToColumns(options.conflictPaths);\n\n const overwriteColumns = metadata.columns\n .filter((col) => (!conflictColumns.includes(col)) && entities.some(entity => typeof col.getEntityValue(entity) !== \"undefined\"));\n\n return this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entities)\n .orUpdate(\n [...conflictColumns, ...overwriteColumns].map((col) => col.databaseName),\n conflictColumns.map((col) => col.databaseName),\n {\n skipUpdateIfNoValuesChanged: options.skipUpdateIfNoValuesChanged\n }\n )\n .execute();\n }\n\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n update<Entity>(target: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any, partialEntity: QueryDeepPartialEntity<Entity>): Promise<UpdateResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the update method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n delete<Entity>(targetOrEntity: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any): Promise<DeleteResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n softDelete<Entity>(targetOrEntity: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any): Promise<UpdateResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n restore<Entity>(targetOrEntity: EntityTarget<Entity>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|any): Promise<UpdateResult> {\n\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n\n return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));\n }\n\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n\n } else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n }\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count<Entity>(entityClass: EntityTarget<Entity>, options?: FindOneOptions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count<Entity>(entityClass: EntityTarget<Entity>, options?: FindManyOptions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n count<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given find options or conditions.\n * Useful for pagination.\n */\n async count<Entity>(entityClass: EntityTarget<Entity>, optionsOrConditions?: FindConditions<Entity>|FindOneOptions<Entity>|FindManyOptions<Entity>): Promise<number> {\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n return FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getCount();\n }\n\n /**\n * Finds entities that match given options.\n */\n find<Entity>(entityClass: EntityTarget<Entity>, options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given conditions.\n */\n find<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given find options or conditions.\n */\n async find<Entity>(entityClass: EntityTarget<Entity>, optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<Entity[]> {\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder<Entity>(entityClass as any, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n\n return qb.getMany();\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount<Entity>(entityClass: EntityTarget<Entity>, options?: FindManyOptions<Entity>): Promise<[Entity[], number]>;\n\n /**\n * Finds entities that match given conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>): Promise<[Entity[], number]>;\n\n /**\n * Finds entities that match given find options and conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n async findAndCount<Entity>(entityClass: EntityTarget<Entity>, optionsOrConditions?: FindConditions<Entity>|FindManyOptions<Entity>): Promise<[Entity[], number]> {\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder<Entity>(entityClass as any, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n\n return qb.getManyAndCount();\n }\n\n /**\n * Finds entities with ids.\n * Optionally find options can be applied.\n */\n findByIds<Entity>(entityClass: EntityTarget<Entity>, ids: any[], options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities with ids.\n * Optionally conditions can be applied.\n */\n findByIds<Entity>(entityClass: EntityTarget<Entity>, ids: any[], conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n */\n async findByIds<Entity>(entityClass: EntityTarget<Entity>, ids: any[], optionsOrConditions?: FindConditions<Entity>|FindManyOptions<Entity>): Promise<Entity[]> {\n\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length)\n return Promise.resolve([]);\n const metadata = this.connection.getMetadata(entityClass);\n const qb = this.createQueryBuilder<Entity>(entityClass as any, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n\n return qb.andWhereInIds(ids).getMany();\n }\n\n /**\n * Finds first entity that matches given find options.\n */\n findOne<Entity>(entityClass: EntityTarget<Entity>, id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given find options.\n */\n findOne<Entity>(entityClass: EntityTarget<Entity>, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOne<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n async findOne<Entity>(entityClass: EntityTarget<Entity>, idOrOptionsOrConditions?: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity|undefined> {\n\n let findOptions: FindManyOptions<any>|FindOneOptions<any>|undefined = undefined;\n if (FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions)) {\n findOptions = idOrOptionsOrConditions;\n } else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions)) {\n findOptions = maybeOptions;\n }\n\n let options: ObjectLiteral|undefined = undefined;\n if (idOrOptionsOrConditions instanceof Object && !FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions))\n options = idOrOptionsOrConditions as ObjectLiteral;\n\n const metadata = this.connection.getMetadata(entityClass);\n let alias: string = metadata.name;\n if (findOptions && findOptions.join) {\n alias = findOptions.join.alias;\n\n } else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions) && maybeOptions.join) {\n alias = maybeOptions.join.alias;\n }\n const qb = this.createQueryBuilder<Entity>(entityClass as any, alias);\n\n const passedId = typeof idOrOptionsOrConditions === \"string\" || typeof idOrOptionsOrConditions === \"number\" || (idOrOptionsOrConditions as any) instanceof Date;\n\n if (!passedId) {\n findOptions = {\n ...(findOptions || {}),\n take: 1,\n };\n }\n\n FindOptionsUtils.applyOptionsToQueryBuilder(qb, findOptions);\n\n if (!findOptions || findOptions.loadEagerRelations !== false) {\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);\n }\n\n if (options) {\n qb.where(options);\n\n } else if (passedId) {\n qb.andWhereInIds(metadata.ensureEntityIdMap(idOrOptionsOrConditions));\n }\n\n return qb.getOne();\n }\n\n /**\n * Finds first entity that matches given find options or rejects the returned promise on error.\n */\n findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given find options or rejects the returned promise on error.\n */\n findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n async findOneOrFail<Entity>(entityClass: EntityTarget<Entity>, idOrOptionsOrConditions?: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity> {\n return this.findOne<Entity>(entityClass as any, idOrOptionsOrConditions as any, maybeOptions).then((value) => {\n if (value === undefined) {\n return Promise.reject(new EntityNotFoundError(entityClass, idOrOptionsOrConditions));\n }\n return Promise.resolve(value);\n });\n }\n\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n async clear<Entity>(entityClass: EntityTarget<Entity>): Promise<void> {\n const metadata = this.connection.getMetadata(entityClass);\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n try {\n return await queryRunner.clearTable(metadata.tablePath); // await is needed here because we are using finally\n\n } finally {\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n async increment<Entity>(entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string): Promise<UpdateResult> {\n\n const metadata = this.connection.getMetadata(entityClass);\n const column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new TypeORMError(`Column ${propertyPath} was not found in ${metadata.targetName} entity.`);\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`);\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value }) as any,\n () => this.connection.driver.escape(column.databaseName) + \" + \" + value\n );\n\n return this\n .createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute();\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n async decrement<Entity>(entityClass: EntityTarget<Entity>,\n conditions: any,\n propertyPath: string,\n value: number | string): Promise<UpdateResult> {\n\n const metadata = this.connection.getMetadata(entityClass);\n const column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new TypeORMError(`Column ${propertyPath} was not found in ${metadata.targetName} entity.`);\n\n if (isNaN(Number(value)))\n throw new TypeORMError(`Value \"${value}\" is not a number.`);\n\n // convert possible embeded path \"social.likes\" into object { social: { like: () => value } }\n const values: QueryDeepPartialEntity<Entity> = propertyPath\n .split(\".\")\n .reduceRight(\n (value, key) => ({ [key]: value }) as any,\n () => this.connection.driver.escape(column.databaseName) + \" - \" + value\n );\n\n return this\n .createQueryBuilder<Entity>(entityClass as any, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute();\n }\n\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity> {\n\n // throw exception if there is no repository with this target registered\n if (!this.connection.hasMetadata(target))\n throw new RepositoryNotFoundError(this.connection.name, target);\n\n // find already created repository instance and return it if found\n const metadata = this.connection.getMetadata(target);\n const repository = this.repositories.find(repository => repository.metadata === metadata);\n if (repository)\n return repository;\n\n // if repository was not found then create it, store its instance and return it\n const newRepository = new RepositoryFactory().create(this, metadata, this.queryRunner);\n this.repositories.push(newRepository);\n return newRepository;\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n getTreeRepository<Entity>(target: EntityTarget<Entity>): TreeRepository<Entity> {\n\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver);\n\n // check if repository is real tree repository\n const repository = this.getRepository(target);\n if (!(repository instanceof TreeRepository))\n throw new RepositoryNotTreeError(target);\n\n return repository;\n }\n\n /**\n * Gets mongodb repository for the given entity class.\n */\n getMongoRepository<Entity>(target: EntityTarget<Entity>): MongoRepository<Entity> {\n return this.connection.getMongoRepository<Entity>(target);\n }\n\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n getCustomRepository<T>(customRepository: ObjectType<T>): T {\n const entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(repository => {\n return repository.target === (customRepository instanceof Function ? customRepository : (customRepository as any).constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n\n const entityMetadata = entityRepositoryMetadataArgs.entity ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity) : undefined;\n const entityRepositoryInstance = new (entityRepositoryMetadataArgs.target as any)(this, entityMetadata);\n\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!(entityRepositoryInstance as any)[\"manager\"])\n (entityRepositoryInstance as any)[\"manager\"] = this;\n }\n if (entityRepositoryInstance instanceof Repository) {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n\n (entityRepositoryInstance as any)[\"manager\"] = this;\n (entityRepositoryInstance as any)[\"metadata\"] = entityMetadata;\n }\n\n return entityRepositoryInstance;\n }\n\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n async release(): Promise<void> {\n if (!this.queryRunner)\n throw new NoNeedToReleaseEntityManagerError();\n\n return this.queryRunner.release();\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -63,6 +63,11 @@ export declare abstract class BaseQueryRunner {
|
|
|
63
63
|
* If replication is not setup its value is ignored.
|
|
64
64
|
*/
|
|
65
65
|
protected mode: ReplicationMode;
|
|
66
|
+
/**
|
|
67
|
+
* current depth of transaction.
|
|
68
|
+
* for transactionDepth > 0 will use SAVEPOINT to start and commit/rollback transaction blocks
|
|
69
|
+
*/
|
|
70
|
+
protected transactionDepth: number;
|
|
66
71
|
private cachedTablePaths;
|
|
67
72
|
/**
|
|
68
73
|
* Executes a given SQL query.
|
|
@@ -38,6 +38,11 @@ var BaseQueryRunner = /** @class */ (function () {
|
|
|
38
38
|
* Sql-s stored if "sql in memory" mode is enabled.
|
|
39
39
|
*/
|
|
40
40
|
this.sqlInMemory = new SqlInMemory();
|
|
41
|
+
/**
|
|
42
|
+
* current depth of transaction.
|
|
43
|
+
* for transactionDepth > 0 will use SAVEPOINT to start and commit/rollback transaction blocks
|
|
44
|
+
*/
|
|
45
|
+
this.transactionDepth = 0;
|
|
41
46
|
this.cachedTablePaths = {};
|
|
42
47
|
}
|
|
43
48
|
// -------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/query-runner/BaseQueryRunner.ts"],"names":[],"mappings":"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","file":"BaseQueryRunner.js","sourcesContent":["import {PostgresConnectionOptions} from \"../driver/postgres/PostgresConnectionOptions\";\nimport {Query} from \"../driver/Query\";\nimport {SqlInMemory} from \"../driver/SqlInMemory\";\nimport {SqlServerConnectionOptions} from \"../driver/sqlserver/SqlServerConnectionOptions\";\nimport {View} from \"../schema-builder/view/View\";\nimport {Connection} from \"../connection/Connection\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {TableColumn} from \"../schema-builder/table/TableColumn\";\nimport {Broadcaster} from \"../subscriber/Broadcaster\";\nimport {ReplicationMode} from \"../driver/types/ReplicationMode\";\nimport { TypeORMError } from \"../error/TypeORMError\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { TableForeignKey } from \"../schema-builder/table/TableForeignKey\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport {MetadataTableType} from \"../driver/types/MetadataTableType\";\n\nexport abstract class BaseQueryRunner {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this query runner.\n */\n connection: Connection;\n\n /**\n * Entity manager working only with current query runner.\n */\n manager: EntityManager;\n\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n isReleased = false;\n\n /**\n * Indicates if transaction is in progress.\n */\n isTransactionActive = false;\n\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n data = {};\n\n /**\n * All synchronized tables in the database.\n */\n loadedTables: Table[] = [];\n\n /**\n * All synchronized views in the database.\n */\n loadedViews: View[] = [];\n\n /**\n * Broadcaster used on this query runner to broadcast entity events.\n */\n broadcaster: Broadcaster;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Real database connection from a connection pool used to perform queries.\n */\n protected databaseConnection: any;\n\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n protected sqlMemoryMode: boolean = false;\n\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n protected sqlInMemory: SqlInMemory = new SqlInMemory();\n\n /**\n * Mode in which query runner executes.\n * Used for replication.\n * If replication is not setup its value is ignored.\n */\n protected mode: ReplicationMode;\n\n private cachedTablePaths: Record<string, string> = {};\n\n // -------------------------------------------------------------------------\n // Public Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes a given SQL query.\n */\n abstract query(query: string, parameters?: any[], useStructuredResult?: boolean): Promise<any>;\n\n // -------------------------------------------------------------------------\n // Protected Abstract Methods\n // -------------------------------------------------------------------------\n\n protected abstract loadTables(tablePaths?: string[]): Promise<Table[]>;\n\n protected abstract loadViews(tablePaths?: string[]): Promise<View[]>;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Loads given table's data from the database.\n */\n async getTable(tablePath: string): Promise<Table|undefined> {\n this.loadedTables = await this.loadTables([tablePath]);\n return this.loadedTables.length > 0 ? this.loadedTables[0] : undefined;\n }\n\n /**\n * Loads all tables (with given names) from the database.\n */\n async getTables(tableNames?: string[]): Promise<Table[]> {\n if (!tableNames) {\n // Don't cache in this case.\n // This is the new case & isn't used anywhere else anyway.\n return await this.loadTables(tableNames);\n }\n\n this.loadedTables = await this.loadTables(tableNames);\n return this.loadedTables;\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getView(viewPath: string): Promise<View|undefined> {\n this.loadedViews = await this.loadViews([viewPath]);\n return this.loadedViews.length > 0 ? this.loadedViews[0] : undefined;\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getViews(viewPaths?: string[]): Promise<View[]> {\n this.loadedViews = await this.loadViews(viewPaths);\n return this.loadedViews;\n }\n\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n enableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = true;\n }\n\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n disableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = false;\n }\n\n /**\n * Flushes all memorized sqls.\n */\n clearSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory();\n }\n\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n getMemorySql(): SqlInMemory {\n return this.sqlInMemory;\n }\n\n /**\n * Executes up sql queries.\n */\n async executeMemoryUpSql(): Promise<void> {\n for (const {query, parameters} of this.sqlInMemory.upQueries) {\n await this.query(query, parameters);\n }\n }\n\n /**\n * Executes down sql queries.\n */\n async executeMemoryDownSql(): Promise<void> {\n for (const {query, parameters} of this.sqlInMemory.downQueries.reverse()) {\n await this.query(query, parameters);\n }\n }\n\n getReplicationMode(): ReplicationMode {\n return this.mode;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n protected async getCachedView(viewName: string): Promise<View> {\n const view = this.loadedViews.find(view => view.name === viewName);\n if (view) return view;\n\n const foundViews = await this.loadViews([viewName]);\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0]);\n return foundViews[0];\n } else {\n throw new TypeORMError(`View \"${viewName}\" does not exist.`);\n }\n }\n\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n protected async getCachedTable(tableName: string): Promise<Table> {\n if (tableName in this.cachedTablePaths) {\n const tablePath = this.cachedTablePaths[tableName];\n const table = this.loadedTables.find(table => this.getTablePath(table) === tablePath);\n\n if (table) {\n return table;\n }\n }\n\n const foundTables = await this.loadTables([tableName]);\n\n if (foundTables.length > 0) {\n const foundTablePath = this.getTablePath(foundTables[0]);\n\n const cachedTable = this.loadedTables.find((table) => this.getTablePath(table) === foundTablePath);\n\n if (!cachedTable) {\n this.cachedTablePaths[tableName] = this.getTablePath(foundTables[0]);\n this.loadedTables.push(foundTables[0]);\n return foundTables[0];\n } else {\n return cachedTable;\n }\n } else {\n throw new TypeORMError(`Table \"${tableName}\" does not exist.`);\n }\n }\n\n /**\n * Replaces loaded table with given changed table.\n */\n protected replaceCachedTable(table: Table, changedTable: Table): void {\n const oldTablePath = this.getTablePath(table);\n const foundTable = this.loadedTables.find(loadedTable => this.getTablePath(loadedTable) === oldTablePath);\n\n // Clean up the lookup cache..\n for (const [key, cachedPath] of Object.entries(this.cachedTablePaths)) {\n if (cachedPath === oldTablePath) {\n this.cachedTablePaths[key] = this.getTablePath(changedTable);\n }\n }\n\n if (foundTable) {\n foundTable.database = changedTable.database;\n foundTable.schema = changedTable.schema;\n foundTable.name = changedTable.name;\n foundTable.columns = changedTable.columns;\n foundTable.indices = changedTable.indices;\n foundTable.foreignKeys = changedTable.foreignKeys;\n foundTable.uniques = changedTable.uniques;\n foundTable.checks = changedTable.checks;\n foundTable.justCreated = changedTable.justCreated;\n foundTable.engine = changedTable.engine;\n }\n }\n\n protected getTablePath(target: EntityMetadata | Table | View | TableForeignKey | string): string {\n const parsed = this.connection.driver.parseTableName(target);\n\n return this.connection.driver.buildTableName(\n parsed.tableName,\n parsed.schema,\n parsed.database\n );\n }\n\n protected getTypeormMetadataTableName(): string {\n const options = <SqlServerConnectionOptions|PostgresConnectionOptions>this.connection.driver.options;\n return this.connection.driver.buildTableName(this.connection.metadataTableName, options.schema, options.database);\n }\n\n /**\n * Generates SQL query to insert a record into typeorm metadata table.\n */\n protected insertTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n value\n }: {\n database?: string,\n schema?: string,\n table?: string,\n type: MetadataTableType\n name: string,\n value?: string\n }): Query {\n const [query, parameters] = this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ database: database, schema: schema, table: table, type: type, name: name, value: value })\n .getQueryAndParameters();\n\n return new Query(query, parameters);\n }\n\n /**\n * Generates SQL query to delete a record from typeorm metadata table.\n */\n protected deleteTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name\n }: {\n database?: string,\n schema?: string,\n table?: string,\n type: MetadataTableType,\n name: string\n }): Query {\n\n const qb = this.connection.createQueryBuilder();\n const deleteQb = qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(`${qb.escape(\"type\")} = :type`, { type })\n .andWhere(`${qb.escape(\"name\")} = :name`, { name });\n\n if (database) {\n deleteQb.andWhere(`${qb.escape(\"database\")} = :database`, { database });\n }\n\n if (schema) {\n deleteQb.andWhere(`${qb.escape(\"schema\")} = :schema`, { schema });\n }\n\n if (table) {\n deleteQb.andWhere(`${qb.escape(\"table\")} = :table`, { table });\n }\n\n const [query, parameters] = deleteQb.getQueryAndParameters();\n return new Query(query, parameters);\n }\n\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n protected isColumnChanged(oldColumn: TableColumn, newColumn: TableColumn, checkDefault?: boolean, checkComment?: boolean): boolean {\n // this logs need to debug issues in column change detection. Do not delete it!\n\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(!OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []));\n // console.log(oldColumn.enum, newColumn.enum);\n\n return oldColumn.charset !== newColumn.charset\n || oldColumn.collation !== newColumn.collation\n || oldColumn.precision !== newColumn.precision\n || oldColumn.scale !== newColumn.scale\n || oldColumn.width !== newColumn.width // MySQL only\n || oldColumn.zerofill !== newColumn.zerofill // MySQL only\n || oldColumn.unsigned !== newColumn.unsigned // MySQL only\n || oldColumn.asExpression !== newColumn.asExpression // MySQL only\n || (checkDefault && oldColumn.default !== newColumn.default)\n || oldColumn.onUpdate !== newColumn.onUpdate // MySQL only\n || oldColumn.isNullable !== newColumn.isNullable\n || (checkComment && oldColumn.comment !== newColumn.comment)\n || !OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []);\n }\n\n /**\n * Checks if column length is by default.\n */\n protected isDefaultColumnLength(table: Table, column: TableColumn, length: string): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name);\n const columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n\n if (columnMetadata) {\n const columnMetadataLength = this.connection.driver.getColumnLength(columnMetadata);\n if (columnMetadataLength)\n return false;\n }\n }\n\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].length) {\n return this.connection.driver.dataTypeDefaults[column.type].length!.toString() === length.toString();\n }\n\n return false;\n }\n\n /**\n * Checks if column precision is by default.\n */\n protected isDefaultColumnPrecision(table: Table, column: TableColumn, precision: number): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name);\n const columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.precision !== null && columnMetadata.precision !== undefined)\n return false;\n }\n\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].precision !== null\n && this.connection.driver.dataTypeDefaults[column.type].precision !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].precision === precision;\n\n return false;\n }\n\n /**\n * Checks if column scale is by default.\n */\n protected isDefaultColumnScale(table: Table, column: TableColumn, scale: number): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name);\n const columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.scale !== null && columnMetadata.scale !== undefined)\n return false;\n }\n\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].scale !== null\n && this.connection.driver.dataTypeDefaults[column.type].scale !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].scale === scale;\n\n return false;\n }\n\n /**\n * Executes sql used special for schema build.\n */\n protected async executeQueries(upQueries: Query|Query[], downQueries: Query|Query[]): Promise<void> {\n if (upQueries instanceof Query)\n upQueries = [upQueries];\n if (downQueries instanceof Query)\n downQueries = [downQueries];\n\n this.sqlInMemory.upQueries.push(...upQueries);\n this.sqlInMemory.downQueries.push(...downQueries);\n\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return Promise.resolve() as Promise<any>;\n\n for (const {query, parameters} of upQueries) {\n await this.query(query, parameters);\n }\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/query-runner/BaseQueryRunner.ts"],"names":[],"mappings":"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","file":"BaseQueryRunner.js","sourcesContent":["import {PostgresConnectionOptions} from \"../driver/postgres/PostgresConnectionOptions\";\nimport {Query} from \"../driver/Query\";\nimport {SqlInMemory} from \"../driver/SqlInMemory\";\nimport {SqlServerConnectionOptions} from \"../driver/sqlserver/SqlServerConnectionOptions\";\nimport {View} from \"../schema-builder/view/View\";\nimport {Connection} from \"../connection/Connection\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {TableColumn} from \"../schema-builder/table/TableColumn\";\nimport {Broadcaster} from \"../subscriber/Broadcaster\";\nimport {ReplicationMode} from \"../driver/types/ReplicationMode\";\nimport { TypeORMError } from \"../error/TypeORMError\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { TableForeignKey } from \"../schema-builder/table/TableForeignKey\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport {MetadataTableType} from \"../driver/types/MetadataTableType\";\n\nexport abstract class BaseQueryRunner {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by this query runner.\n */\n connection: Connection;\n\n /**\n * Entity manager working only with current query runner.\n */\n manager: EntityManager;\n\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n isReleased = false;\n\n /**\n * Indicates if transaction is in progress.\n */\n isTransactionActive = false;\n\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n data = {};\n\n /**\n * All synchronized tables in the database.\n */\n loadedTables: Table[] = [];\n\n /**\n * All synchronized views in the database.\n */\n loadedViews: View[] = [];\n\n /**\n * Broadcaster used on this query runner to broadcast entity events.\n */\n broadcaster: Broadcaster;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Real database connection from a connection pool used to perform queries.\n */\n protected databaseConnection: any;\n\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n protected sqlMemoryMode: boolean = false;\n\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n protected sqlInMemory: SqlInMemory = new SqlInMemory();\n\n /**\n * Mode in which query runner executes.\n * Used for replication.\n * If replication is not setup its value is ignored.\n */\n protected mode: ReplicationMode;\n\n /**\n * current depth of transaction.\n * for transactionDepth > 0 will use SAVEPOINT to start and commit/rollback transaction blocks\n */\n protected transactionDepth = 0;\n\n private cachedTablePaths: Record<string, string> = {};\n\n // -------------------------------------------------------------------------\n // Public Abstract Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes a given SQL query.\n */\n abstract query(query: string, parameters?: any[], useStructuredResult?: boolean): Promise<any>;\n\n // -------------------------------------------------------------------------\n // Protected Abstract Methods\n // -------------------------------------------------------------------------\n\n protected abstract loadTables(tablePaths?: string[]): Promise<Table[]>;\n\n protected abstract loadViews(tablePaths?: string[]): Promise<View[]>;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n // Do nothing\n }\n\n /**\n * Loads given table's data from the database.\n */\n async getTable(tablePath: string): Promise<Table|undefined> {\n this.loadedTables = await this.loadTables([tablePath]);\n return this.loadedTables.length > 0 ? this.loadedTables[0] : undefined;\n }\n\n /**\n * Loads all tables (with given names) from the database.\n */\n async getTables(tableNames?: string[]): Promise<Table[]> {\n if (!tableNames) {\n // Don't cache in this case.\n // This is the new case & isn't used anywhere else anyway.\n return await this.loadTables(tableNames);\n }\n\n this.loadedTables = await this.loadTables(tableNames);\n return this.loadedTables;\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getView(viewPath: string): Promise<View|undefined> {\n this.loadedViews = await this.loadViews([viewPath]);\n return this.loadedViews.length > 0 ? this.loadedViews[0] : undefined;\n }\n\n /**\n * Loads given view's data from the database.\n */\n async getViews(viewPaths?: string[]): Promise<View[]> {\n this.loadedViews = await this.loadViews(viewPaths);\n return this.loadedViews;\n }\n\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n enableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = true;\n }\n\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n disableSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = false;\n }\n\n /**\n * Flushes all memorized sqls.\n */\n clearSqlMemory(): void {\n this.sqlInMemory = new SqlInMemory();\n }\n\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n getMemorySql(): SqlInMemory {\n return this.sqlInMemory;\n }\n\n /**\n * Executes up sql queries.\n */\n async executeMemoryUpSql(): Promise<void> {\n for (const {query, parameters} of this.sqlInMemory.upQueries) {\n await this.query(query, parameters);\n }\n }\n\n /**\n * Executes down sql queries.\n */\n async executeMemoryDownSql(): Promise<void> {\n for (const {query, parameters} of this.sqlInMemory.downQueries.reverse()) {\n await this.query(query, parameters);\n }\n }\n\n getReplicationMode(): ReplicationMode {\n return this.mode;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n protected async getCachedView(viewName: string): Promise<View> {\n const view = this.loadedViews.find(view => view.name === viewName);\n if (view) return view;\n\n const foundViews = await this.loadViews([viewName]);\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0]);\n return foundViews[0];\n } else {\n throw new TypeORMError(`View \"${viewName}\" does not exist.`);\n }\n }\n\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n protected async getCachedTable(tableName: string): Promise<Table> {\n if (tableName in this.cachedTablePaths) {\n const tablePath = this.cachedTablePaths[tableName];\n const table = this.loadedTables.find(table => this.getTablePath(table) === tablePath);\n\n if (table) {\n return table;\n }\n }\n\n const foundTables = await this.loadTables([tableName]);\n\n if (foundTables.length > 0) {\n const foundTablePath = this.getTablePath(foundTables[0]);\n\n const cachedTable = this.loadedTables.find((table) => this.getTablePath(table) === foundTablePath);\n\n if (!cachedTable) {\n this.cachedTablePaths[tableName] = this.getTablePath(foundTables[0]);\n this.loadedTables.push(foundTables[0]);\n return foundTables[0];\n } else {\n return cachedTable;\n }\n } else {\n throw new TypeORMError(`Table \"${tableName}\" does not exist.`);\n }\n }\n\n /**\n * Replaces loaded table with given changed table.\n */\n protected replaceCachedTable(table: Table, changedTable: Table): void {\n const oldTablePath = this.getTablePath(table);\n const foundTable = this.loadedTables.find(loadedTable => this.getTablePath(loadedTable) === oldTablePath);\n\n // Clean up the lookup cache..\n for (const [key, cachedPath] of Object.entries(this.cachedTablePaths)) {\n if (cachedPath === oldTablePath) {\n this.cachedTablePaths[key] = this.getTablePath(changedTable);\n }\n }\n\n if (foundTable) {\n foundTable.database = changedTable.database;\n foundTable.schema = changedTable.schema;\n foundTable.name = changedTable.name;\n foundTable.columns = changedTable.columns;\n foundTable.indices = changedTable.indices;\n foundTable.foreignKeys = changedTable.foreignKeys;\n foundTable.uniques = changedTable.uniques;\n foundTable.checks = changedTable.checks;\n foundTable.justCreated = changedTable.justCreated;\n foundTable.engine = changedTable.engine;\n }\n }\n\n protected getTablePath(target: EntityMetadata | Table | View | TableForeignKey | string): string {\n const parsed = this.connection.driver.parseTableName(target);\n\n return this.connection.driver.buildTableName(\n parsed.tableName,\n parsed.schema,\n parsed.database\n );\n }\n\n protected getTypeormMetadataTableName(): string {\n const options = <SqlServerConnectionOptions|PostgresConnectionOptions>this.connection.driver.options;\n return this.connection.driver.buildTableName(this.connection.metadataTableName, options.schema, options.database);\n }\n\n /**\n * Generates SQL query to insert a record into typeorm metadata table.\n */\n protected insertTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name,\n value\n }: {\n database?: string,\n schema?: string,\n table?: string,\n type: MetadataTableType\n name: string,\n value?: string\n }): Query {\n const [query, parameters] = this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ database: database, schema: schema, table: table, type: type, name: name, value: value })\n .getQueryAndParameters();\n\n return new Query(query, parameters);\n }\n\n /**\n * Generates SQL query to delete a record from typeorm metadata table.\n */\n protected deleteTypeormMetadataSql({\n database,\n schema,\n table,\n type,\n name\n }: {\n database?: string,\n schema?: string,\n table?: string,\n type: MetadataTableType,\n name: string\n }): Query {\n\n const qb = this.connection.createQueryBuilder();\n const deleteQb = qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(`${qb.escape(\"type\")} = :type`, { type })\n .andWhere(`${qb.escape(\"name\")} = :name`, { name });\n\n if (database) {\n deleteQb.andWhere(`${qb.escape(\"database\")} = :database`, { database });\n }\n\n if (schema) {\n deleteQb.andWhere(`${qb.escape(\"schema\")} = :schema`, { schema });\n }\n\n if (table) {\n deleteQb.andWhere(`${qb.escape(\"table\")} = :table`, { table });\n }\n\n const [query, parameters] = deleteQb.getQueryAndParameters();\n return new Query(query, parameters);\n }\n\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n protected isColumnChanged(oldColumn: TableColumn, newColumn: TableColumn, checkDefault?: boolean, checkComment?: boolean): boolean {\n // this logs need to debug issues in column change detection. Do not delete it!\n\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(!OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []));\n // console.log(oldColumn.enum, newColumn.enum);\n\n return oldColumn.charset !== newColumn.charset\n || oldColumn.collation !== newColumn.collation\n || oldColumn.precision !== newColumn.precision\n || oldColumn.scale !== newColumn.scale\n || oldColumn.width !== newColumn.width // MySQL only\n || oldColumn.zerofill !== newColumn.zerofill // MySQL only\n || oldColumn.unsigned !== newColumn.unsigned // MySQL only\n || oldColumn.asExpression !== newColumn.asExpression // MySQL only\n || (checkDefault && oldColumn.default !== newColumn.default)\n || oldColumn.onUpdate !== newColumn.onUpdate // MySQL only\n || oldColumn.isNullable !== newColumn.isNullable\n || (checkComment && oldColumn.comment !== newColumn.comment)\n || !OrmUtils.isArraysEqual(oldColumn.enum || [], newColumn.enum || []);\n }\n\n /**\n * Checks if column length is by default.\n */\n protected isDefaultColumnLength(table: Table, column: TableColumn, length: string): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name);\n const columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n\n if (columnMetadata) {\n const columnMetadataLength = this.connection.driver.getColumnLength(columnMetadata);\n if (columnMetadataLength)\n return false;\n }\n }\n\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].length) {\n return this.connection.driver.dataTypeDefaults[column.type].length!.toString() === length.toString();\n }\n\n return false;\n }\n\n /**\n * Checks if column precision is by default.\n */\n protected isDefaultColumnPrecision(table: Table, column: TableColumn, precision: number): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name);\n const columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.precision !== null && columnMetadata.precision !== undefined)\n return false;\n }\n\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].precision !== null\n && this.connection.driver.dataTypeDefaults[column.type].precision !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].precision === precision;\n\n return false;\n }\n\n /**\n * Checks if column scale is by default.\n */\n protected isDefaultColumnScale(table: Table, column: TableColumn, scale: number): boolean {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n const metadata = this.connection.getMetadata(table.name);\n const columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.scale !== null && columnMetadata.scale !== undefined)\n return false;\n }\n\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].scale !== null\n && this.connection.driver.dataTypeDefaults[column.type].scale !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].scale === scale;\n\n return false;\n }\n\n /**\n * Executes sql used special for schema build.\n */\n protected async executeQueries(upQueries: Query|Query[], downQueries: Query|Query[]): Promise<void> {\n if (upQueries instanceof Query)\n upQueries = [upQueries];\n if (downQueries instanceof Query)\n downQueries = [downQueries];\n\n this.sqlInMemory.upQueries.push(...upQueries);\n this.sqlInMemory.downQueries.push(...downQueries);\n\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return Promise.resolve() as Promise<any>;\n\n for (const {query, parameters} of upQueries) {\n await this.query(query, parameters);\n }\n }\n\n}\n"],"sourceRoot":".."}
|