typeorm 0.3.7-dev.ec23922 → 0.3.7
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/cache/DbQueryResultCache.d.ts +1 -1
- package/browser/cache/DbQueryResultCache.js +5 -1
- package/browser/cache/DbQueryResultCache.js.map +1 -1
- package/browser/cli-ts-node-commonjs.js +0 -0
- package/browser/cli-ts-node-esm.js +0 -0
- package/browser/data-source/DataSource.d.ts +4 -3
- package/browser/data-source/DataSource.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +4 -0
- package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +4 -3
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +7 -0
- package/browser/driver/sap/SapQueryRunner.js +24 -2
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.d.ts +9 -8
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/entity-manager/MongoEntityManager.d.ts +1 -1
- package/browser/entity-manager/MongoEntityManager.js.map +1 -1
- package/browser/globals.d.ts +5 -4
- package/browser/globals.js.map +1 -1
- package/browser/query-builder/RelationIdLoader.d.ts +1 -1
- package/browser/query-builder/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +2 -2
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.d.ts +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/transformer/DocumentToEntityTransformer.js +1 -1
- package/browser/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
- package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.d.ts +1 -1
- package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/repository/AbstractRepository.d.ts +3 -3
- package/browser/repository/AbstractRepository.js.map +1 -1
- package/browser/repository/TreeRepository.d.ts +2 -1
- package/browser/repository/TreeRepository.js.map +1 -1
- package/cache/DbQueryResultCache.d.ts +1 -1
- package/cache/DbQueryResultCache.js +5 -1
- package/cache/DbQueryResultCache.js.map +1 -1
- package/cli-ts-node-commonjs.js +0 -0
- package/cli-ts-node-esm.js +0 -0
- package/cli.js +0 -0
- package/commands/CacheClearCommand.js +1 -1
- package/commands/CacheClearCommand.js.map +1 -1
- package/commands/MigrationRevertCommand.js +1 -1
- package/commands/MigrationRevertCommand.js.map +1 -1
- package/commands/MigrationRunCommand.js +1 -1
- package/commands/MigrationRunCommand.js.map +1 -1
- package/commands/MigrationShowCommand.js +1 -1
- package/commands/MigrationShowCommand.js.map +1 -1
- package/commands/QueryCommand.js +1 -1
- package/commands/QueryCommand.js.map +1 -1
- package/commands/SchemaDropCommand.js +1 -1
- package/commands/SchemaDropCommand.js.map +1 -1
- package/commands/SchemaSyncCommand.js +1 -1
- package/commands/SchemaSyncCommand.js.map +1 -1
- package/data-source/DataSource.d.ts +4 -3
- package/data-source/DataSource.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +4 -0
- package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +6 -5
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/sap/SapQueryRunner.d.ts +7 -0
- package/driver/sap/SapQueryRunner.js +24 -2
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.d.ts +9 -8
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-manager/MongoEntityManager.d.ts +1 -1
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/globals.d.ts +5 -4
- package/globals.js.map +1 -1
- package/package.json +274 -1
- package/query-builder/RelationIdLoader.d.ts +1 -1
- package/query-builder/RelationIdLoader.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.d.ts +2 -2
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.d.ts +1 -1
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/transformer/DocumentToEntityTransformer.js +1 -1
- package/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
- package/query-builder/transformer/PlainObjectToNewEntityTransformer.d.ts +1 -1
- package/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +2 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/repository/AbstractRepository.d.ts +3 -3
- package/repository/AbstractRepository.js.map +1 -1
- package/repository/TreeRepository.d.ts +2 -1
- package/repository/TreeRepository.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/repository/AbstractRepository.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sCAAsC,EAAE,MAAM,iDAAiD,CAAA;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAA;AAGtF;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAU3B,4EAA4E;IAC5E,sBAAsB;IACtB,4EAA4E;IAE5E;;;OAGG;IACH,IAAc,UAAU;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAW,CAAC,CAAA;QAC1D,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAS,MAAM,CAAC,CAAA;IACrD,CAAC;IAED;;;OAGG;IACH,IAAc,cAAc;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAW,CAAC,CAAA;QAC1D,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAS,MAAM,CAAC,CAAA;IACzD,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;;OAGG;IACO,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/D,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,OAAO;aACd,aAAa,CAAS,MAAM,CAAC;aAC7B,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACO,qBAAqB,CAC3B,MAAqB,EACrB,KAAa;QAEb,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACO,gBAAgB,
|
|
1
|
+
{"version":3,"sources":["../browser/src/repository/AbstractRepository.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sCAAsC,EAAE,MAAM,iDAAiD,CAAA;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAA;AAGtF;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAU3B,4EAA4E;IAC5E,sBAAsB;IACtB,4EAA4E;IAE5E;;;OAGG;IACH,IAAc,UAAU;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAW,CAAC,CAAA;QAC1D,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAS,MAAM,CAAC,CAAA;IACrD,CAAC;IAED;;;OAGG;IACH,IAAc,cAAc;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAW,CAAC,CAAA;QAC1D,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAS,MAAM,CAAC,CAAA;IACzD,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;;OAGG;IACO,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/D,IAAI,CAAC,MAAM;YACP,MAAM,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAC,OAAO;aACd,aAAa,CAAS,MAAM,CAAC;aAC7B,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACO,qBAAqB,CAC3B,MAAqB,EACrB,KAAa;QAEb,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACO,gBAAgB,CACtB,MAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED;;OAEG;IACO,oBAAoB,CAC1B,MAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,4EAA4E;IAC5E,kBAAkB;IAClB,4EAA4E;IAE5E;;;OAGG;IACK,yBAAyB,CAC7B,gBAAqB;QAErB,MAAM,4BAA4B,GAC9B,sBAAsB,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC5D,OAAO,CACH,UAAU,CAAC,MAAM;gBACjB,CAAC,OAAO,gBAAgB,KAAK,UAAU;oBACnC,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAE,gBAAwB,CAAC,WAAW,CAAC,CAC/C,CAAA;QACL,CAAC,CAAC,CAAA;QACN,IAAI,CAAC,4BAA4B;YAC7B,MAAM,IAAI,6BAA6B,CAAC,gBAAgB,CAAC,CAAA;QAE7D,OAAO,4BAA4B,CAAC,MAAM,CAAA;IAC9C,CAAC;CACJ","file":"AbstractRepository.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { EntityManager } from \"../entity-manager/EntityManager\"\nimport { Repository } from \"./Repository\"\nimport { TreeRepository } from \"./TreeRepository\"\nimport { EntityTarget } from \"../common/EntityTarget\"\nimport { ObjectType } from \"../common/ObjectType\"\nimport { CustomRepositoryDoesNotHaveEntityError } from \"../error/CustomRepositoryDoesNotHaveEntityError\"\nimport { getMetadataArgsStorage } from \"../globals\"\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\n\n/**\n * Provides abstract class for custom repositories that do not inherit from original orm Repository.\n * Contains all most-necessary methods to simplify code in the custom repository.\n * All methods are protected thus not exposed and it allows to create encapsulated custom repository.\n *\n * @deprecated use Repository.extend function to create a custom repository\n */\nexport class AbstractRepository<Entity extends ObjectLiteral> {\n // -------------------------------------------------------------------------\n // Protected Methods Set Dynamically\n // -------------------------------------------------------------------------\n\n /**\n * Gets entity manager that allows to perform repository operations with any entity.\n */\n protected manager: EntityManager\n\n // -------------------------------------------------------------------------\n // Protected Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the original ORM repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n protected get repository(): Repository<Entity> {\n const target = this.getCustomRepositoryTarget(this as any)\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor)\n\n return this.manager.getRepository<Entity>(target)\n }\n\n /**\n * Gets the original ORM tree repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n protected get treeRepository(): TreeRepository<Entity> {\n const target = this.getCustomRepositoryTarget(this as any)\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor)\n\n return this.manager.getTreeRepository<Entity>(target)\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a new query builder for the repository's entity that can be used to build a SQL query.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n protected createQueryBuilder(alias: string): SelectQueryBuilder<Entity> {\n const target = this.getCustomRepositoryTarget(this.constructor)\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor)\n\n return this.manager\n .getRepository<Entity>(target)\n .createQueryBuilder(alias)\n }\n\n /**\n * Creates a new query builder for the given entity that can be used to build a SQL query.\n */\n protected createQueryBuilderFor<T extends ObjectLiteral>(\n entity: ObjectType<T>,\n alias: string,\n ): SelectQueryBuilder<T> {\n return this.getRepositoryFor(entity).createQueryBuilder(alias)\n }\n\n /**\n * Gets the original ORM repository for the given entity class.\n */\n protected getRepositoryFor<T extends ObjectLiteral>(\n entity: ObjectType<T>,\n ): Repository<T> {\n return this.manager.getRepository(entity)\n }\n\n /**\n * Gets the original ORM tree repository for the given entity class.\n */\n protected getTreeRepositoryFor<T extends ObjectLiteral>(\n entity: ObjectType<T>,\n ): TreeRepository<T> {\n return this.manager.getTreeRepository(entity)\n }\n\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets custom repository's managed entity.\n * If given custom repository does not manage any entity then undefined will be returned.\n */\n private getCustomRepositoryTarget(\n customRepository: any,\n ): EntityTarget<any> | undefined {\n const entityRepositoryMetadataArgs =\n getMetadataArgsStorage().entityRepositories.find((repository) => {\n return (\n repository.target ===\n (typeof customRepository === \"function\"\n ? customRepository\n : (customRepository as any).constructor)\n )\n })\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository)\n\n return entityRepositoryMetadataArgs.entity\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ObjectLiteral } from "../common/ObjectLiteral";
|
|
1
2
|
import { FindTreeOptions } from "../find-options/FindTreeOptions";
|
|
2
3
|
import { SelectQueryBuilder } from "../query-builder/SelectQueryBuilder";
|
|
3
4
|
import { Repository } from "./Repository";
|
|
@@ -6,7 +7,7 @@ import { Repository } from "./Repository";
|
|
|
6
7
|
*
|
|
7
8
|
* @see Repository
|
|
8
9
|
*/
|
|
9
|
-
export declare class TreeRepository<Entity> extends Repository<Entity> {
|
|
10
|
+
export declare class TreeRepository<Entity extends ObjectLiteral> extends Repository<Entity> {
|
|
10
11
|
/**
|
|
11
12
|
* Gets complete trees for all roots in the table.
|
|
12
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/repository/TreeRepository.ts"],"names":[],"mappings":"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","file":"TreeRepository.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\nimport { TypeORMError } from \"../error/TypeORMError\"\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\"\nimport { FindTreeOptions } from \"../find-options/FindTreeOptions\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { TreeRepositoryUtils } from \"../util/TreeRepositoryUtils\"\nimport { Repository } from \"./Repository\"\n\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nexport class TreeRepository<Entity> extends Repository<Entity> {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets complete trees for all roots in the table.\n */\n async findTrees(options?: FindTreeOptions): Promise<Entity[]> {\n const roots = await this.findRoots(options)\n await Promise.all(\n roots.map((root) => this.findDescendantsTree(root, options)),\n )\n return roots\n }\n\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n findRoots(options?: FindTreeOptions): Promise<Entity[]> {\n const escapeAlias = (alias: string) =>\n this.manager.connection.driver.escape(alias)\n const escapeColumn = (column: string) =>\n this.manager.connection.driver.escape(column)\n\n const joinColumn = this.metadata.treeParentRelation!.joinColumns[0]\n const parentPropertyName =\n joinColumn.givenDatabaseName || joinColumn.databaseName\n\n const qb = this.createQueryBuilder(\"treeEntity\")\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n\n return qb\n .where(\n `${escapeAlias(\"treeEntity\")}.${escapeColumn(\n parentPropertyName,\n )} IS NULL`,\n )\n .getMany()\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n findDescendants(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity[]> {\n const qb = this.createDescendantsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n return qb.getMany()\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n async findDescendantsTree(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n\n const qb: SelectQueryBuilder<Entity> =\n this.createDescendantsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n\n const entities = await qb.getRawAndEntities()\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n \"treeEntity\",\n entities.raw,\n )\n TreeRepositoryUtils.buildChildrenEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n {\n depth: -1,\n ...options,\n },\n )\n\n return entity\n }\n\n /**\n * Gets number of descendants of the entity.\n */\n countDescendants(entity: Entity): Promise<number> {\n return this.createDescendantsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n ).getCount()\n }\n\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n createDescendantsQueryBuilder(\n alias: string,\n closureTableAlias: string,\n entity: Entity,\n ): SelectQueryBuilder<Entity> {\n // create shortcuts for better readability\n const escape = (alias: string) =>\n this.manager.connection.driver.escape(alias)\n\n if (this.metadata.treeType === \"closure-table\") {\n const joinCondition =\n this.metadata.closureJunctionTable.descendantColumns\n .map((column) => {\n return (\n escape(closureTableAlias) +\n \".\" +\n escape(column.propertyPath) +\n \" = \" +\n escape(alias) +\n \".\" +\n escape(column.referencedColumn!.propertyPath)\n )\n })\n .join(\" AND \")\n\n const parameters: ObjectLiteral = {}\n const whereCondition =\n this.metadata.closureJunctionTable.ancestorColumns\n .map((column) => {\n parameters[column.referencedColumn!.propertyName] =\n column.referencedColumn!.getEntityValue(entity)\n return (\n escape(closureTableAlias) +\n \".\" +\n escape(column.propertyPath) +\n \" = :\" +\n column.referencedColumn!.propertyName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(\n this.metadata.closureJunctionTable.tableName,\n closureTableAlias,\n joinCondition,\n )\n .where(whereCondition)\n .setParameters(parameters)\n } else if (this.metadata.treeType === \"nested-set\") {\n const whereCondition =\n alias +\n \".\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" BETWEEN \" +\n \"joined.\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" AND joined.\" +\n this.metadata.nestedSetRightColumn!.propertyPath\n const parameters: ObjectLiteral = {}\n const joinCondition = this.metadata\n .treeParentRelation!.joinColumns.map((joinColumn) => {\n const parameterName =\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n parameters[parameterName] =\n joinColumn.referencedColumn!.getEntityValue(entity)\n return (\n \"joined.\" +\n joinColumn.referencedColumn!.propertyPath +\n \" = :\" +\n parameterName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters)\n } else if (this.metadata.treeType === \"materialized-path\") {\n return this.createQueryBuilder(alias).where((qb) => {\n const subQuery = qb\n .subQuery()\n .select(\n `${this.metadata.targetName}.${\n this.metadata.materializedPathColumn!.propertyPath\n }`,\n \"path\",\n )\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity))\n\n if (\n DriverUtils.isSQLiteFamily(this.manager.connection.driver)\n ) {\n return `${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n } LIKE ${subQuery.getQuery()} || '%'`\n } else {\n return `${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n } LIKE NULLIF(CONCAT(${subQuery.getQuery()}, '%'), '%')`\n }\n })\n }\n\n throw new TypeORMError(`Supported only in tree entities`)\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n findAncestors(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity[]> {\n const qb = this.createAncestorsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n return qb.getMany()\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n async findAncestorsTree(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n const qb = this.createAncestorsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n\n const entities = await qb.getRawAndEntities()\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n \"treeEntity\",\n entities.raw,\n )\n TreeRepositoryUtils.buildParentEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n )\n return entity\n }\n\n /**\n * Gets number of ancestors of the entity.\n */\n countAncestors(entity: Entity): Promise<number> {\n return this.createAncestorsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n ).getCount()\n }\n\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n createAncestorsQueryBuilder(\n alias: string,\n closureTableAlias: string,\n entity: Entity,\n ): SelectQueryBuilder<Entity> {\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n if (this.metadata.treeType === \"closure-table\") {\n const joinCondition =\n this.metadata.closureJunctionTable.ancestorColumns\n .map((column) => {\n return (\n closureTableAlias +\n \".\" +\n column.propertyPath +\n \" = \" +\n alias +\n \".\" +\n column.referencedColumn!.propertyPath\n )\n })\n .join(\" AND \")\n\n const parameters: ObjectLiteral = {}\n const whereCondition =\n this.metadata.closureJunctionTable.descendantColumns\n .map((column) => {\n parameters[column.referencedColumn!.propertyName] =\n column.referencedColumn!.getEntityValue(entity)\n return (\n closureTableAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n column.referencedColumn!.propertyName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(\n this.metadata.closureJunctionTable.tableName,\n closureTableAlias,\n joinCondition,\n )\n .where(whereCondition)\n .setParameters(parameters)\n } else if (this.metadata.treeType === \"nested-set\") {\n const joinCondition =\n \"joined.\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" BETWEEN \" +\n alias +\n \".\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" AND \" +\n alias +\n \".\" +\n this.metadata.nestedSetRightColumn!.propertyPath\n const parameters: ObjectLiteral = {}\n const whereCondition = this.metadata\n .treeParentRelation!.joinColumns.map((joinColumn) => {\n const parameterName =\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n parameters[parameterName] =\n joinColumn.referencedColumn!.getEntityValue(entity)\n return (\n \"joined.\" +\n joinColumn.referencedColumn!.propertyPath +\n \" = :\" +\n parameterName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters)\n } else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this.createQueryBuilder(alias).where((qb) => {\n const subQuery = qb\n .subQuery()\n .select(\n `${this.metadata.targetName}.${\n this.metadata.materializedPathColumn!.propertyPath\n }`,\n \"path\",\n )\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity))\n\n if (\n DriverUtils.isSQLiteFamily(this.manager.connection.driver)\n ) {\n return `${subQuery.getQuery()} LIKE ${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n } || '%'`\n } else {\n return `${subQuery.getQuery()} LIKE CONCAT(${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n }, '%')`\n }\n })\n }\n\n throw new TypeORMError(`Supported only in tree entities`)\n }\n\n /**\n * Extends tree repository with provided functions.\n */\n extend<CustomRepository>(\n custom: CustomRepository &\n ThisType<TreeRepository<Entity> & CustomRepository>,\n ): TreeRepository<Entity> & CustomRepository {\n const thisRepo = this.constructor as new (...args: any[]) => typeof this\n const { target, manager, queryRunner } = this\n const cls = new (class extends thisRepo {})(\n target,\n manager,\n queryRunner,\n )\n Object.assign(cls, custom)\n return cls as any\n }\n\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise<void> {\n return Promise.resolve();\n } */\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/repository/TreeRepository.ts"],"names":[],"mappings":"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","file":"TreeRepository.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\nimport { TypeORMError } from \"../error/TypeORMError\"\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\"\nimport { FindTreeOptions } from \"../find-options/FindTreeOptions\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { TreeRepositoryUtils } from \"../util/TreeRepositoryUtils\"\nimport { Repository } from \"./Repository\"\n\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nexport class TreeRepository<\n Entity extends ObjectLiteral,\n> extends Repository<Entity> {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets complete trees for all roots in the table.\n */\n async findTrees(options?: FindTreeOptions): Promise<Entity[]> {\n const roots = await this.findRoots(options)\n await Promise.all(\n roots.map((root) => this.findDescendantsTree(root, options)),\n )\n return roots\n }\n\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n findRoots(options?: FindTreeOptions): Promise<Entity[]> {\n const escapeAlias = (alias: string) =>\n this.manager.connection.driver.escape(alias)\n const escapeColumn = (column: string) =>\n this.manager.connection.driver.escape(column)\n\n const joinColumn = this.metadata.treeParentRelation!.joinColumns[0]\n const parentPropertyName =\n joinColumn.givenDatabaseName || joinColumn.databaseName\n\n const qb = this.createQueryBuilder(\"treeEntity\")\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n\n return qb\n .where(\n `${escapeAlias(\"treeEntity\")}.${escapeColumn(\n parentPropertyName,\n )} IS NULL`,\n )\n .getMany()\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n findDescendants(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity[]> {\n const qb = this.createDescendantsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n return qb.getMany()\n }\n\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n async findDescendantsTree(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n\n const qb: SelectQueryBuilder<Entity> =\n this.createDescendantsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n\n const entities = await qb.getRawAndEntities()\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n \"treeEntity\",\n entities.raw,\n )\n TreeRepositoryUtils.buildChildrenEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n {\n depth: -1,\n ...options,\n },\n )\n\n return entity\n }\n\n /**\n * Gets number of descendants of the entity.\n */\n countDescendants(entity: Entity): Promise<number> {\n return this.createDescendantsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n ).getCount()\n }\n\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n createDescendantsQueryBuilder(\n alias: string,\n closureTableAlias: string,\n entity: Entity,\n ): SelectQueryBuilder<Entity> {\n // create shortcuts for better readability\n const escape = (alias: string) =>\n this.manager.connection.driver.escape(alias)\n\n if (this.metadata.treeType === \"closure-table\") {\n const joinCondition =\n this.metadata.closureJunctionTable.descendantColumns\n .map((column) => {\n return (\n escape(closureTableAlias) +\n \".\" +\n escape(column.propertyPath) +\n \" = \" +\n escape(alias) +\n \".\" +\n escape(column.referencedColumn!.propertyPath)\n )\n })\n .join(\" AND \")\n\n const parameters: ObjectLiteral = {}\n const whereCondition =\n this.metadata.closureJunctionTable.ancestorColumns\n .map((column) => {\n parameters[column.referencedColumn!.propertyName] =\n column.referencedColumn!.getEntityValue(entity)\n return (\n escape(closureTableAlias) +\n \".\" +\n escape(column.propertyPath) +\n \" = :\" +\n column.referencedColumn!.propertyName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(\n this.metadata.closureJunctionTable.tableName,\n closureTableAlias,\n joinCondition,\n )\n .where(whereCondition)\n .setParameters(parameters)\n } else if (this.metadata.treeType === \"nested-set\") {\n const whereCondition =\n alias +\n \".\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" BETWEEN \" +\n \"joined.\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" AND joined.\" +\n this.metadata.nestedSetRightColumn!.propertyPath\n const parameters: ObjectLiteral = {}\n const joinCondition = this.metadata\n .treeParentRelation!.joinColumns.map((joinColumn) => {\n const parameterName =\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n parameters[parameterName] =\n joinColumn.referencedColumn!.getEntityValue(entity)\n return (\n \"joined.\" +\n joinColumn.referencedColumn!.propertyPath +\n \" = :\" +\n parameterName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters)\n } else if (this.metadata.treeType === \"materialized-path\") {\n return this.createQueryBuilder(alias).where((qb) => {\n const subQuery = qb\n .subQuery()\n .select(\n `${this.metadata.targetName}.${\n this.metadata.materializedPathColumn!.propertyPath\n }`,\n \"path\",\n )\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity))\n\n if (\n DriverUtils.isSQLiteFamily(this.manager.connection.driver)\n ) {\n return `${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n } LIKE ${subQuery.getQuery()} || '%'`\n } else {\n return `${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n } LIKE NULLIF(CONCAT(${subQuery.getQuery()}, '%'), '%')`\n }\n })\n }\n\n throw new TypeORMError(`Supported only in tree entities`)\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n findAncestors(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity[]> {\n const qb = this.createAncestorsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n return qb.getMany()\n }\n\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n async findAncestorsTree(\n entity: Entity,\n options?: FindTreeOptions,\n ): Promise<Entity> {\n // todo: throw exception if there is no column of this relation?\n const qb = this.createAncestorsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n )\n FindOptionsUtils.applyOptionsToTreeQueryBuilder(qb, options)\n\n const entities = await qb.getRawAndEntities()\n const relationMaps = TreeRepositoryUtils.createRelationMaps(\n this.manager,\n this.metadata,\n \"treeEntity\",\n entities.raw,\n )\n TreeRepositoryUtils.buildParentEntityTree(\n this.metadata,\n entity,\n entities.entities,\n relationMaps,\n )\n return entity\n }\n\n /**\n * Gets number of ancestors of the entity.\n */\n countAncestors(entity: Entity): Promise<number> {\n return this.createAncestorsQueryBuilder(\n \"treeEntity\",\n \"treeClosure\",\n entity,\n ).getCount()\n }\n\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n createAncestorsQueryBuilder(\n alias: string,\n closureTableAlias: string,\n entity: Entity,\n ): SelectQueryBuilder<Entity> {\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n\n if (this.metadata.treeType === \"closure-table\") {\n const joinCondition =\n this.metadata.closureJunctionTable.ancestorColumns\n .map((column) => {\n return (\n closureTableAlias +\n \".\" +\n column.propertyPath +\n \" = \" +\n alias +\n \".\" +\n column.referencedColumn!.propertyPath\n )\n })\n .join(\" AND \")\n\n const parameters: ObjectLiteral = {}\n const whereCondition =\n this.metadata.closureJunctionTable.descendantColumns\n .map((column) => {\n parameters[column.referencedColumn!.propertyName] =\n column.referencedColumn!.getEntityValue(entity)\n return (\n closureTableAlias +\n \".\" +\n column.propertyPath +\n \" = :\" +\n column.referencedColumn!.propertyName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(\n this.metadata.closureJunctionTable.tableName,\n closureTableAlias,\n joinCondition,\n )\n .where(whereCondition)\n .setParameters(parameters)\n } else if (this.metadata.treeType === \"nested-set\") {\n const joinCondition =\n \"joined.\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" BETWEEN \" +\n alias +\n \".\" +\n this.metadata.nestedSetLeftColumn!.propertyPath +\n \" AND \" +\n alias +\n \".\" +\n this.metadata.nestedSetRightColumn!.propertyPath\n const parameters: ObjectLiteral = {}\n const whereCondition = this.metadata\n .treeParentRelation!.joinColumns.map((joinColumn) => {\n const parameterName =\n joinColumn.referencedColumn!.propertyPath.replace(\n \".\",\n \"_\",\n )\n parameters[parameterName] =\n joinColumn.referencedColumn!.getEntityValue(entity)\n return (\n \"joined.\" +\n joinColumn.referencedColumn!.propertyPath +\n \" = :\" +\n parameterName\n )\n })\n .join(\" AND \")\n\n return this.createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters)\n } else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this.createQueryBuilder(alias).where((qb) => {\n const subQuery = qb\n .subQuery()\n .select(\n `${this.metadata.targetName}.${\n this.metadata.materializedPathColumn!.propertyPath\n }`,\n \"path\",\n )\n .from(this.metadata.target, this.metadata.targetName)\n .whereInIds(this.metadata.getEntityIdMap(entity))\n\n if (\n DriverUtils.isSQLiteFamily(this.manager.connection.driver)\n ) {\n return `${subQuery.getQuery()} LIKE ${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n } || '%'`\n } else {\n return `${subQuery.getQuery()} LIKE CONCAT(${alias}.${\n this.metadata.materializedPathColumn!.propertyPath\n }, '%')`\n }\n })\n }\n\n throw new TypeORMError(`Supported only in tree entities`)\n }\n\n /**\n * Extends tree repository with provided functions.\n */\n extend<CustomRepository>(\n custom: CustomRepository &\n ThisType<TreeRepository<Entity> & CustomRepository>,\n ): TreeRepository<Entity> & CustomRepository {\n const thisRepo = this.constructor as new (...args: any[]) => typeof this\n const { target, manager, queryRunner } = this\n const cls = new (class extends thisRepo {})(\n target,\n manager,\n queryRunner,\n )\n Object.assign(cls, custom)\n return cls as any\n }\n\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise<void> {\n return Promise.resolve();\n } */\n}\n"],"sourceRoot":".."}
|
|
@@ -48,5 +48,5 @@ export declare class DbQueryResultCache implements QueryResultCache {
|
|
|
48
48
|
/**
|
|
49
49
|
* Gets a query runner to work with.
|
|
50
50
|
*/
|
|
51
|
-
protected getQueryRunner(queryRunner
|
|
51
|
+
protected getQueryRunner(queryRunner?: QueryRunner): QueryRunner;
|
|
52
52
|
}
|
|
@@ -229,8 +229,9 @@ class DbQueryResultCache {
|
|
|
229
229
|
* Removes all cached results by given identifiers from cache.
|
|
230
230
|
*/
|
|
231
231
|
async remove(identifiers, queryRunner) {
|
|
232
|
+
let _queryRunner = queryRunner || this.getQueryRunner();
|
|
232
233
|
await Promise.all(identifiers.map((identifier) => {
|
|
233
|
-
const qb =
|
|
234
|
+
const qb = _queryRunner.manager.createQueryBuilder();
|
|
234
235
|
return qb
|
|
235
236
|
.delete()
|
|
236
237
|
.from(this.queryResultCacheTable)
|
|
@@ -239,6 +240,9 @@ class DbQueryResultCache {
|
|
|
239
240
|
})
|
|
240
241
|
.execute();
|
|
241
242
|
}));
|
|
243
|
+
if (!queryRunner) {
|
|
244
|
+
await _queryRunner.release();
|
|
245
|
+
}
|
|
242
246
|
}
|
|
243
247
|
// -------------------------------------------------------------------------
|
|
244
248
|
// Protected Methods
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cache/DbQueryResultCache.ts"],"names":[],"mappings":"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","file":"DbQueryResultCache.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { Table } from \"../schema-builder/table/Table\"\nimport { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { v4 as uuidv4 } from \"uuid\"\n\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nexport class DbQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Private properties\n // -------------------------------------------------------------------------\n\n private queryResultCacheTable: string\n\n private queryResultCacheDatabase?: string\n\n private queryResultCacheSchema?: string\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: DataSource) {\n const { schema } = this.connection.driver.options as any\n const database = this.connection.driver.database\n const cacheOptions =\n typeof this.connection.options.cache === \"object\"\n ? this.connection.options.cache\n : {}\n const cacheTableName = cacheOptions.tableName || \"query-result-cache\"\n\n this.queryResultCacheDatabase = database\n this.queryResultCacheSchema = schema\n this.queryResultCacheTable = this.connection.driver.buildTableName(\n cacheTableName,\n schema,\n database,\n )\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {}\n\n /**\n * Disconnects with given cache provider.\n */\n async disconnect(): Promise<void> {}\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner)\n const driver = this.connection.driver\n const tableExist = await queryRunner.hasTable(\n this.queryResultCacheTable,\n ) // todo: table name should be configurable\n if (tableExist) return\n\n await queryRunner.createTable(\n new Table({\n database: this.queryResultCacheDatabase,\n schema: this.queryResultCacheSchema,\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheId,\n }),\n generationStrategy:\n driver.options.type === \"spanner\"\n ? \"uuid\"\n : \"increment\",\n isGenerated: true,\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheIdentifier,\n }),\n isNullable: true,\n },\n {\n name: \"time\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheTime,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"duration\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheDuration,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"query\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheQuery,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"result\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheResult,\n }),\n isNullable: false,\n },\n ],\n }),\n )\n }\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n queryRunner = this.getQueryRunner(queryRunner)\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\")\n\n if (options.identifier) {\n return qb\n .where(\n `${qb.escape(\"cache\")}.${qb.escape(\n \"identifier\",\n )} = :identifier`,\n )\n .setParameters({\n identifier:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.identifier, \"nvarchar\")\n : options.identifier,\n })\n .getRawOne()\n } else if (options.query) {\n if (this.connection.driver.options.type === \"oracle\") {\n return qb\n .where(\n `dbms_lob.compare(${qb.escape(\"cache\")}.${qb.escape(\n \"query\",\n )}, :query) = 0`,\n { query: options.query },\n )\n .getRawOne()\n }\n\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"query\")} = :query`)\n .setParameters({\n query:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.query, \"nvarchar\")\n : options.query,\n })\n .getRawOne()\n }\n\n return Promise.resolve(undefined)\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n const duration =\n typeof savedCache.duration === \"string\"\n ? parseInt(savedCache.duration)\n : savedCache.duration\n return (\n (typeof savedCache.time === \"string\"\n ? parseInt(savedCache.time as any)\n : savedCache.time)! +\n duration <\n new Date().getTime()\n )\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions | undefined,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n const shouldCreateQueryRunner =\n queryRunner === undefined ||\n queryRunner?.getReplicationMode() === \"slave\"\n\n if (queryRunner === undefined || shouldCreateQueryRunner) {\n queryRunner = this.connection.createQueryRunner(\"master\")\n }\n\n let insertedValues: ObjectLiteral = options\n if (this.connection.driver.options.type === \"mssql\") {\n // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n }\n }\n\n if (savedCache && savedCache.identifier) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n qb.where(`${qb.escape(\"identifier\")} = :condition`, {\n condition: insertedValues.identifier,\n })\n await qb.execute()\n } else if (savedCache && savedCache.query) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n if (this.connection.driver.options.type === \"oracle\") {\n qb.where(`dbms_lob.compare(\"query\", :condition) = 0`, {\n condition: insertedValues.query,\n })\n } else {\n qb.where(`${qb.escape(\"query\")} = :condition`, {\n condition: insertedValues.query,\n })\n }\n\n await qb.execute()\n } else {\n // Spanner does not support auto-generated columns\n if (\n this.connection.driver.options.type === \"spanner\" &&\n !insertedValues.id\n ) {\n insertedValues.id = uuidv4()\n }\n\n // otherwise insert\n await queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()\n }\n\n if (shouldCreateQueryRunner) {\n await queryRunner.release()\n }\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner: QueryRunner): Promise<void> {\n return this.getQueryRunner(queryRunner).clearTable(\n this.queryResultCacheTable,\n )\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n const qb =\n this.getQueryRunner(\n queryRunner,\n ).manager.createQueryBuilder()\n return qb\n .delete()\n .from(this.queryResultCacheTable)\n .where(`${qb.escape(\"identifier\")} = :identifier`, {\n identifier,\n })\n .execute()\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets a query runner to work with.\n */\n protected getQueryRunner(\n queryRunner: QueryRunner | undefined,\n ): QueryRunner {\n if (queryRunner) return queryRunner\n\n return this.connection.createQueryRunner()\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/cache/DbQueryResultCache.ts"],"names":[],"mappings":";;;AAEA,uEAAmE;AAEnE,yDAAqD;AAGrD,+BAAmC;AAEnC;;GAEG;AACH,MAAa,kBAAkB;IAW3B,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAsB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAc,CAAA;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAA;QAChD,MAAM,YAAY,GACd,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;YAC7C,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;YAC/B,CAAC,CAAC,EAAE,CAAA;QACZ,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,IAAI,oBAAoB,CAAA;QAErE,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAA;QACxC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAA;QACpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAC9D,cAAc,EACd,MAAM,EACN,QAAQ,CACX,CAAA;IACL,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,OAAO,KAAmB,CAAC;IAEjC;;OAEG;IACH,KAAK,CAAC,UAAU,KAAmB,CAAC;IAEpC;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,WAAyB;QACvC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;QACrC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,CACzC,IAAI,CAAC,qBAAqB,CAC7B,CAAA,CAAC,0CAA0C;QAC5C,IAAI,UAAU;YAAE,OAAM;QAEtB,MAAM,WAAW,CAAC,WAAW,CACzB,IAAI,aAAK,CAAC;YACN,QAAQ,EAAE,IAAI,CAAC,wBAAwB;YACvC,MAAM,EAAE,IAAI,CAAC,sBAAsB;YACnC,IAAI,EAAE,IAAI,CAAC,qBAAqB;YAChC,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,IAAI;oBACV,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,KAAK;oBACjB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,OAAO;qBACvC,CAAC;oBACF,kBAAkB,EACd,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;wBAC7B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,WAAW;oBACrB,WAAW,EAAE,IAAI;iBACpB;gBACD;oBACI,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,eAAe;qBAC/C,CAAC;oBACF,UAAU,EAAE,IAAI;iBACnB;gBACD;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,SAAS;qBACzC,CAAC;oBACF,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,aAAa;qBAC7C,CAAC;oBACF,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU;qBAC1C,CAAC;oBACF,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBACpB;gBACD;oBACI,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;wBACvB,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,WAAW;qBAC3C,CAAC;oBACF,UAAU,EAAE,KAAK;iBACpB;aACJ;SACJ,CAAC,CACL,CAAA;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,CACR,OAAgC,EAChC,WAAyB;QAEzB,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU;aACrB,kBAAkB,CAAC,WAAW,CAAC;aAC/B,MAAM,EAAE;aACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAA;QAE9C,IAAI,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,EAAE;iBACJ,KAAK,CACF,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAC9B,YAAY,CACf,gBAAgB,CACpB;iBACA,aAAa,CAAC;gBACX,UAAU,EACN,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;oBAC3C,CAAC,CAAC,IAAI,+BAAc,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;oBACpD,CAAC,CAAC,OAAO,CAAC,UAAU;aAC/B,CAAC;iBACD,SAAS,EAAE,CAAA;SACnB;aAAM,IAAI,OAAO,CAAC,KAAK,EAAE;YACtB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClD,OAAO,EAAE;qBACJ,KAAK,CACF,oBAAoB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAC/C,OAAO,CACV,eAAe,EAChB,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAC3B;qBACA,SAAS,EAAE,CAAA;aACnB;YAED,OAAO,EAAE;iBACJ,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;iBAC7D,aAAa,CAAC;gBACX,KAAK,EACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;oBAC3C,CAAC,CAAC,IAAI,+BAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;oBAC/C,CAAC,CAAC,OAAO,CAAC,KAAK;aAC1B,CAAC;iBACD,SAAS,EAAE,CAAA;SACnB;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAmC;QACzC,MAAM,QAAQ,GACV,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;YACnC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAA;QAC7B,OAAO,CACH,CAAC,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YAChC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAW,CAAC;YAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAE;YACnB,QAAQ;YACZ,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CACvB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CACd,OAAgC,EAChC,UAA+C,EAC/C,WAAyB;QAEzB,MAAM,uBAAuB,GACzB,WAAW,KAAK,SAAS;YACzB,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,kBAAkB,EAAE,MAAK,OAAO,CAAA;QAEjD,IAAI,WAAW,KAAK,SAAS,IAAI,uBAAuB,EAAE;YACtD,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;SAC5D;QAED,IAAI,cAAc,GAAkB,OAAO,CAAA;QAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YACjD,iHAAiH;YACjH,cAAc,GAAG;gBACb,UAAU,EAAE,IAAI,+BAAc,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;gBAC9D,IAAI,EAAE,IAAI,+BAAc,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAChD,QAAQ,EAAE,IAAI,+BAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACrD,KAAK,EAAE,IAAI,+BAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;gBACpD,MAAM,EAAE,IAAI,+BAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC;aACzD,CAAA;SACJ;QAED,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,EAAE;YACrC,uBAAuB;YACvB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO;iBACzB,kBAAkB,EAAE;iBACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAClC,GAAG,CAAC,cAAc,CAAC,CAAA;YAExB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;gBAChD,SAAS,EAAE,cAAc,CAAC,UAAU;aACvC,CAAC,CAAA;YACF,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;SACrB;aAAM,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE;YACvC,uBAAuB;YACvB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO;iBACzB,kBAAkB,EAAE;iBACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAClC,GAAG,CAAC,cAAc,CAAC,CAAA;YAExB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClD,EAAE,CAAC,KAAK,CAAC,2CAA2C,EAAE;oBAClD,SAAS,EAAE,cAAc,CAAC,KAAK;iBAClC,CAAC,CAAA;aACL;iBAAM;gBACH,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE;oBAC3C,SAAS,EAAE,cAAc,CAAC,KAAK;iBAClC,CAAC,CAAA;aACL;YAED,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;SACrB;aAAM;YACH,kDAAkD;YAClD,IACI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;gBACjD,CAAC,cAAc,CAAC,EAAE,EACpB;gBACE,cAAc,CAAC,EAAE,GAAG,IAAA,SAAM,GAAE,CAAA;aAC/B;YAED,mBAAmB;YACnB,MAAM,WAAW,CAAC,OAAO;iBACpB,kBAAkB,EAAE;iBACpB,MAAM,EAAE;iBACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAChC,MAAM,CAAC,cAAc,CAAC;iBACtB,OAAO,EAAE,CAAA;SACjB;QAED,IAAI,uBAAuB,EAAE;YACzB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;SAC9B;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,WAAwB;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAC9C,IAAI,CAAC,qBAAqB,CAC7B,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACR,WAAqB,EACrB,WAAyB;QAEzB,IAAI,YAAY,GAAgB,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAA;QACpE,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YAC3B,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAA;YACpD,OAAO,EAAE;iBACJ,MAAM,EAAE;iBACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAChC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE;gBAC/C,UAAU;aACb,CAAC;iBACD,OAAO,EAAE,CAAA;QAClB,CAAC,CAAC,CACL,CAAA;QAED,IAAI,CAAC,WAAW,EAAE;YACd,MAAM,YAAY,CAAC,OAAO,EAAE,CAAA;SAC/B;IACL,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,cAAc,CAAC,WAAyB;QAC9C,IAAI,WAAW;YAAE,OAAO,WAAW,CAAA;QAEnC,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAA;IAC9C,CAAC;CACJ;AA/TD,gDA+TC","file":"DbQueryResultCache.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { Table } from \"../schema-builder/table/Table\"\nimport { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { v4 as uuidv4 } from \"uuid\"\n\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nexport class DbQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Private properties\n // -------------------------------------------------------------------------\n\n private queryResultCacheTable: string\n\n private queryResultCacheDatabase?: string\n\n private queryResultCacheSchema?: string\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: DataSource) {\n const { schema } = this.connection.driver.options as any\n const database = this.connection.driver.database\n const cacheOptions =\n typeof this.connection.options.cache === \"object\"\n ? this.connection.options.cache\n : {}\n const cacheTableName = cacheOptions.tableName || \"query-result-cache\"\n\n this.queryResultCacheDatabase = database\n this.queryResultCacheSchema = schema\n this.queryResultCacheTable = this.connection.driver.buildTableName(\n cacheTableName,\n schema,\n database,\n )\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {}\n\n /**\n * Disconnects with given cache provider.\n */\n async disconnect(): Promise<void> {}\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner)\n const driver = this.connection.driver\n const tableExist = await queryRunner.hasTable(\n this.queryResultCacheTable,\n ) // todo: table name should be configurable\n if (tableExist) return\n\n await queryRunner.createTable(\n new Table({\n database: this.queryResultCacheDatabase,\n schema: this.queryResultCacheSchema,\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheId,\n }),\n generationStrategy:\n driver.options.type === \"spanner\"\n ? \"uuid\"\n : \"increment\",\n isGenerated: true,\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheIdentifier,\n }),\n isNullable: true,\n },\n {\n name: \"time\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheTime,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"duration\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheDuration,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"query\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheQuery,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: \"result\",\n type: driver.normalizeType({\n type: driver.mappedDataTypes.cacheResult,\n }),\n isNullable: false,\n },\n ],\n }),\n )\n }\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n queryRunner = this.getQueryRunner(queryRunner)\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\")\n\n if (options.identifier) {\n return qb\n .where(\n `${qb.escape(\"cache\")}.${qb.escape(\n \"identifier\",\n )} = :identifier`,\n )\n .setParameters({\n identifier:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.identifier, \"nvarchar\")\n : options.identifier,\n })\n .getRawOne()\n } else if (options.query) {\n if (this.connection.driver.options.type === \"oracle\") {\n return qb\n .where(\n `dbms_lob.compare(${qb.escape(\"cache\")}.${qb.escape(\n \"query\",\n )}, :query) = 0`,\n { query: options.query },\n )\n .getRawOne()\n }\n\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"query\")} = :query`)\n .setParameters({\n query:\n this.connection.driver.options.type === \"mssql\"\n ? new MssqlParameter(options.query, \"nvarchar\")\n : options.query,\n })\n .getRawOne()\n }\n\n return Promise.resolve(undefined)\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n const duration =\n typeof savedCache.duration === \"string\"\n ? parseInt(savedCache.duration)\n : savedCache.duration\n return (\n (typeof savedCache.time === \"string\"\n ? parseInt(savedCache.time as any)\n : savedCache.time)! +\n duration <\n new Date().getTime()\n )\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions | undefined,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n const shouldCreateQueryRunner =\n queryRunner === undefined ||\n queryRunner?.getReplicationMode() === \"slave\"\n\n if (queryRunner === undefined || shouldCreateQueryRunner) {\n queryRunner = this.connection.createQueryRunner(\"master\")\n }\n\n let insertedValues: ObjectLiteral = options\n if (this.connection.driver.options.type === \"mssql\") {\n // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n }\n }\n\n if (savedCache && savedCache.identifier) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n qb.where(`${qb.escape(\"identifier\")} = :condition`, {\n condition: insertedValues.identifier,\n })\n await qb.execute()\n } else if (savedCache && savedCache.query) {\n // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues)\n\n if (this.connection.driver.options.type === \"oracle\") {\n qb.where(`dbms_lob.compare(\"query\", :condition) = 0`, {\n condition: insertedValues.query,\n })\n } else {\n qb.where(`${qb.escape(\"query\")} = :condition`, {\n condition: insertedValues.query,\n })\n }\n\n await qb.execute()\n } else {\n // Spanner does not support auto-generated columns\n if (\n this.connection.driver.options.type === \"spanner\" &&\n !insertedValues.id\n ) {\n insertedValues.id = uuidv4()\n }\n\n // otherwise insert\n await queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()\n }\n\n if (shouldCreateQueryRunner) {\n await queryRunner.release()\n }\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner: QueryRunner): Promise<void> {\n return this.getQueryRunner(queryRunner).clearTable(\n this.queryResultCacheTable,\n )\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n let _queryRunner: QueryRunner = queryRunner || this.getQueryRunner()\n await Promise.all(\n identifiers.map((identifier) => {\n const qb = _queryRunner.manager.createQueryBuilder()\n return qb\n .delete()\n .from(this.queryResultCacheTable)\n .where(`${qb.escape(\"identifier\")} = :identifier`, {\n identifier,\n })\n .execute()\n }),\n )\n\n if (!queryRunner) {\n await _queryRunner.release()\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets a query runner to work with.\n */\n protected getQueryRunner(queryRunner?: QueryRunner): QueryRunner {\n if (queryRunner) return queryRunner\n\n return this.connection.createQueryRunner()\n }\n}\n"],"sourceRoot":".."}
|
package/cli-ts-node-commonjs.js
CHANGED
|
File without changes
|
package/cli-ts-node-esm.js
CHANGED
|
File without changes
|
package/cli.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/CacheClearCommand.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AACzB,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QACI,YAAO,GAAG,aAAa,CAAA;QACvB,aAAQ,GAAG,+CAA+C,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/CacheClearCommand.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AACzB,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QACI,YAAO,GAAG,aAAa,CAAA;QACvB,aAAQ,GAAG,+CAA+C,CAAA;IA8C9D,CAAC;IA5CG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;QAC/B,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,iBAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,EAAE;gBACf,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,QAAQ,CAAC;aACtB,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAE7B,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;gBAC9B,6BAAa,CAAC,SAAS,CACnB,2EAA2E,CAC9E,CAAA;gBACD,OAAM;aACT;YAED,MAAM,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAA;YACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAA;YAE1D,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;SAC7B;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;YAEzD,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAO,UAAyB,CAAC,OAAO,EAAE,CAAA;YAE9C,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AAhDD,8CAgDC","file":"CacheClearCommand.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport * as yargs from \"yargs\"\nimport chalk from \"chalk\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport path from \"path\"\nimport process from \"process\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Clear cache command.\n */\nexport class CacheClearCommand implements yargs.CommandModule {\n command = \"cache:clear\"\n describe = \"Clears all data stored in query runner cache.\"\n\n builder(args: yargs.Argv) {\n return args.option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n }\n\n async handler(args: yargs.Arguments) {\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n subscribers: [],\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: [\"schema\"],\n })\n await dataSource.initialize()\n\n if (!dataSource.queryResultCache) {\n PlatformTools.logCmdErr(\n \"Cache is not enabled. To use cache enable it in connection configuration.\",\n )\n return\n }\n\n await dataSource.queryResultCache.clear()\n console.log(chalk.green(\"Cache was successfully cleared\"))\n\n await dataSource.destroy()\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during cache clear.\", err)\n\n if (dataSource && dataSource.isInitialized)\n await (dataSource as DataSource).destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -62,7 +62,7 @@ class MigrationRevertCommand {
|
|
|
62
62
|
}
|
|
63
63
|
catch (err) {
|
|
64
64
|
PlatformTools_1.PlatformTools.logCmdErr("Error during migration revert:", err);
|
|
65
|
-
if (dataSource)
|
|
65
|
+
if (dataSource && dataSource.isInitialized)
|
|
66
66
|
await dataSource.destroy();
|
|
67
67
|
process_1.default.exit(1);
|
|
68
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/MigrationRevertCommand.ts"],"names":[],"mappings":";;;;AAEA,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,sBAAsB;IAAnC;QACI,YAAO,GAAG,kBAAkB,CAAA;QAC5B,aAAQ,GAAG,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/MigrationRevertCommand.ts"],"names":[],"mappings":";;;;AAEA,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,sBAAsB;IAAnC;QACI,YAAO,GAAG,kBAAkB,CAAA;QAC5B,aAAQ,GAAG,kCAAkC,CAAA;IAiEjD,CAAC;IA/DG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI;aACN,MAAM,CAAC,YAAY,EAAE;YAClB,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC;aACD,MAAM,CAAC,aAAa,EAAE;YACnB,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,SAAS;YAClB,QAAQ,EACJ,0FAA0F;SACjG,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;;QAC/B,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,iBAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,EAAE;gBACf,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;aACxC,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAE7B,MAAM,OAAO,GAAG;gBACZ,WAAW,EACP,MAAA,UAAU,CAAC,OAAO,CAAC,yBAAyB,mCAC3C,KAAiC;aACzC,CAAA;YAED,QAAQ,IAAI,CAAC,CAAC,EAAE;gBACZ,KAAK,KAAK;oBACN,OAAO,CAAC,WAAW,GAAG,KAAK,CAAA;oBAC3B,MAAK;gBACT,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO;oBACR,OAAO,CAAC,WAAW,GAAG,MAAM,CAAA;oBAC5B,MAAK;gBACT,KAAK,MAAM;oBACP,OAAO,CAAC,WAAW,GAAG,MAAM,CAAA;oBAC5B,MAAK;gBACT,QAAQ;gBACR,OAAO;aACV;YAED,MAAM,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;SAC7B;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;YAE9D,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AAnED,wDAmEC","file":"MigrationRevertCommand.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport * as yargs from \"yargs\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport path from \"path\"\nimport process from \"process\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Reverts last migration command.\n */\nexport class MigrationRevertCommand implements yargs.CommandModule {\n command = \"migration:revert\"\n describe = \"Reverts last executed migration.\"\n\n builder(args: yargs.Argv) {\n return args\n .option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n .option(\"transaction\", {\n alias: \"t\",\n default: \"default\",\n describe:\n \"Indicates if transaction should be used or not for migration revert. Enabled by default.\",\n })\n }\n\n async handler(args: yargs.Arguments) {\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n subscribers: [],\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: [\"query\", \"error\", \"schema\"],\n })\n await dataSource.initialize()\n\n const options = {\n transaction:\n dataSource.options.migrationsTransactionMode ??\n (\"all\" as \"all\" | \"none\" | \"each\"),\n }\n\n switch (args.t) {\n case \"all\":\n options.transaction = \"all\"\n break\n case \"none\":\n case \"false\":\n options.transaction = \"none\"\n break\n case \"each\":\n options.transaction = \"each\"\n break\n default:\n // noop\n }\n\n await dataSource.undoLastMigration(options)\n await dataSource.destroy()\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during migration revert:\", err)\n\n if (dataSource && dataSource.isInitialized)\n await dataSource.destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/MigrationRunCommand.ts"],"names":[],"mappings":";;;;AAAA,wDAAuB;AACvB,yDAAkC;AAElC,6DAAyD;AAEzD,iDAA6C;AAE7C;;GAEG;AACH,MAAa,mBAAmB;IAAhC;QACI,YAAO,GAAG,eAAe,CAAA;QACzB,aAAQ,GAAG,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/MigrationRunCommand.ts"],"names":[],"mappings":";;;;AAAA,wDAAuB;AACvB,yDAAkC;AAElC,6DAAyD;AAEzD,iDAA6C;AAE7C;;GAEG;AACH,MAAa,mBAAmB;IAAhC;QACI,YAAO,GAAG,eAAe,CAAA;QACzB,aAAQ,GAAG,8BAA8B,CAAA;IAoE7C,CAAC;IAlEG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI;aACN,MAAM,CAAC,YAAY,EAAE;YAClB,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC;aACD,MAAM,CAAC,aAAa,EAAE;YACnB,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,SAAS;YAClB,QAAQ,EACJ,uFAAuF;SAC9F,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;;QAC/B,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,EAAE;gBACf,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;aACxC,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAE7B,MAAM,OAAO,GAAG;gBACZ,WAAW,EACP,MAAA,UAAU,CAAC,OAAO,CAAC,yBAAyB,mCAC3C,KAAiC;aACzC,CAAA;YAED,QAAQ,IAAI,CAAC,CAAC,EAAE;gBACZ,KAAK,KAAK;oBACN,OAAO,CAAC,WAAW,GAAG,KAAK,CAAA;oBAC3B,MAAK;gBACT,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO;oBACR,OAAO,CAAC,WAAW,GAAG,MAAM,CAAA;oBAC5B,MAAK;gBACT,KAAK,MAAM;oBACP,OAAO,CAAC,WAAW,GAAG,MAAM,CAAA;oBAC5B,MAAK;gBACT,QAAQ;gBACR,OAAO;aACV;YAED,MAAM,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACvC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE1B,4BAA4B;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;YAE3D,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AAtED,kDAsEC","file":"MigrationRunCommand.js","sourcesContent":["import path from \"path\"\nimport * as process from \"process\"\nimport * as yargs from \"yargs\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Runs migration command.\n */\nexport class MigrationRunCommand implements yargs.CommandModule {\n command = \"migration:run\"\n describe = \"Runs all pending migrations.\"\n\n builder(args: yargs.Argv) {\n return args\n .option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n .option(\"transaction\", {\n alias: \"t\",\n default: \"default\",\n describe:\n \"Indicates if transaction should be used or not for migration run. Enabled by default.\",\n })\n }\n\n async handler(args: yargs.Arguments) {\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n subscribers: [],\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: [\"query\", \"error\", \"schema\"],\n })\n await dataSource.initialize()\n\n const options = {\n transaction:\n dataSource.options.migrationsTransactionMode ??\n (\"all\" as \"all\" | \"none\" | \"each\"),\n }\n\n switch (args.t) {\n case \"all\":\n options.transaction = \"all\"\n break\n case \"none\":\n case \"false\":\n options.transaction = \"none\"\n break\n case \"each\":\n options.transaction = \"each\"\n break\n default:\n // noop\n }\n\n await dataSource.runMigrations(options)\n await dataSource.destroy()\n\n // exit process if no errors\n process.exit(0)\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during migration run:\", err)\n\n if (dataSource && dataSource.isInitialized)\n await dataSource.destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/MigrationShowCommand.ts"],"names":[],"mappings":";;;;AACA,yDAAkC;AAElC,6DAAyD;AACzD,wDAAuB;AACvB,iDAA6C;AAE7C;;GAEG;AACH,MAAa,oBAAoB;IAAjC;QACI,YAAO,GAAG,gBAAgB,CAAA;QAC1B,aAAQ,GAAG,2DAA2D,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/MigrationShowCommand.ts"],"names":[],"mappings":";;;;AACA,yDAAkC;AAElC,6DAAyD;AACzD,wDAAuB;AACvB,iDAA6C;AAE7C;;GAEG;AACH,MAAa,oBAAoB;IAAjC;QACI,YAAO,GAAG,gBAAgB,CAAA;QAC1B,aAAQ,GAAG,2DAA2D,CAAA;IAsC1E,CAAC;IApCG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;QAC/B,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,EAAE;gBACf,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,QAAQ,CAAC;aACtB,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAC7B,MAAM,UAAU,CAAC,cAAc,EAAE,CAAA;YACjC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;YAE5D,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AAxCD,oDAwCC","file":"MigrationShowCommand.js","sourcesContent":["import { DataSource } from \"../data-source\"\nimport * as process from \"process\"\nimport * as yargs from \"yargs\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport path from \"path\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Shows all migrations and whether they have been run or not.\n */\nexport class MigrationShowCommand implements yargs.CommandModule {\n command = \"migration:show\"\n describe = \"Show all migrations and whether they have been run or not\"\n\n builder(args: yargs.Argv) {\n return args.option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n }\n\n async handler(args: yargs.Arguments) {\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n subscribers: [],\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: [\"schema\"],\n })\n await dataSource.initialize()\n await dataSource.showMigrations()\n await dataSource.destroy()\n\n process.exit(0)\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during migration show:\", err)\n\n if (dataSource && dataSource.isInitialized)\n await dataSource.destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
package/commands/QueryCommand.js
CHANGED
|
@@ -59,7 +59,7 @@ class QueryCommand {
|
|
|
59
59
|
PlatformTools_1.PlatformTools.logCmdErr("Error during query execution:", err);
|
|
60
60
|
if (queryRunner)
|
|
61
61
|
await queryRunner.release();
|
|
62
|
-
if (dataSource)
|
|
62
|
+
if (dataSource && dataSource.isInitialized)
|
|
63
63
|
await dataSource.destroy();
|
|
64
64
|
process_1.default.exit(1);
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/QueryCommand.ts"],"names":[],"mappings":";;;;AAEA,6DAAyD;AAEzD,0DAAyB;AACzB,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,YAAY;IAAzB;QACI,YAAO,GAAG,eAAe,CAAA;QACzB,aAAQ,GACJ,kHAAkH,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/QueryCommand.ts"],"names":[],"mappings":";;;;AAEA,6DAAyD;AAEzD,0DAAyB;AACzB,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,YAAY;IAAzB;QACI,YAAO,GAAG,eAAe,CAAA;QACzB,aAAQ,GACJ,kHAAkH,CAAA;IAmE1H,CAAC;IAjEG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI;aACN,UAAU,CAAC,OAAO,EAAE;YACjB,QAAQ,EAAE,sBAAsB;YAChC,IAAI,EAAE,QAAQ;SACjB,CAAC;aACD,MAAM,CAAC,YAAY,EAAE;YAClB,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;QAC/B,IAAI,WAAW,GAA4B,SAAS,CAAA;QACpD,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,iBAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;aACjB,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAE7B,mDAAmD;YACnD,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAA;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAA;YAClC,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAC1B,6BAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CACxC,CAAA;YACD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAElD,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;gBACpC,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,KAAK,CACP,kDAAkD,CACrD,CACJ,CAAA;aACJ;iBAAM;gBACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAA;gBAC7D,OAAO,CAAC,GAAG,CACP,6BAAa,CAAC,aAAa,CACvB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAC5C,CACJ,CAAA;aACJ;YAED,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;YAC3B,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;SAC7B;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;YAE7D,IAAI,WAAW;gBAAE,MAAO,WAA2B,CAAC,OAAO,EAAE,CAAA;YAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AAtED,oCAsEC","file":"QueryCommand.js","sourcesContent":["import { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport * as yargs from \"yargs\"\nimport chalk from \"chalk\"\nimport path from \"path\"\nimport process from \"process\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Executes an SQL query on the given dataSource.\n */\nexport class QueryCommand implements yargs.CommandModule {\n command = \"query [query]\"\n describe =\n \"Executes given SQL query on a default dataSource. Specify connection name to run query on a specific dataSource.\"\n\n builder(args: yargs.Argv) {\n return args\n .positional(\"query\", {\n describe: \"The SQL Query to run\",\n type: \"string\",\n })\n .option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n }\n\n async handler(args: yargs.Arguments) {\n let queryRunner: QueryRunner | undefined = undefined\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: false,\n })\n await dataSource.initialize()\n\n // create a query runner and execute query using it\n queryRunner = dataSource.createQueryRunner()\n const query = args.query as string\n console.log(\n chalk.green(\"Running query: \") +\n PlatformTools.highlightSql(query),\n )\n const queryResult = await queryRunner.query(query)\n\n if (typeof queryResult === \"undefined\") {\n console.log(\n chalk.green(\n \"Query has been executed. No result was returned.\",\n ),\n )\n } else {\n console.log(chalk.green(\"Query has been executed. Result: \"))\n console.log(\n PlatformTools.highlightJson(\n JSON.stringify(queryResult, undefined, 2),\n ),\n )\n }\n\n await queryRunner.release()\n await dataSource.destroy()\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during query execution:\", err)\n\n if (queryRunner) await (queryRunner as QueryRunner).release()\n if (dataSource && dataSource.isInitialized)\n await dataSource.destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/SchemaDropCommand.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AACzB,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QACI,YAAO,GAAG,aAAa,CAAA;QACvB,aAAQ,GACJ,+DAA+D;YAC/D,kEAAkE,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/SchemaDropCommand.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AACzB,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QACI,YAAO,GAAG,aAAa,CAAA;QACvB,aAAQ,GACJ,+DAA+D;YAC/D,kEAAkE,CAAA;IAuC1E,CAAC;IArCG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;QAC/B,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,iBAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC/B,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAC7B,MAAM,UAAU,CAAC,YAAY,EAAE,CAAA;YAC/B,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE1B,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAChE,CAAA;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;YAEzD,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AA3CD,8CA2CC","file":"SchemaDropCommand.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport * as yargs from \"yargs\"\nimport chalk from \"chalk\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport path from \"path\"\nimport process from \"process\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Drops all tables of the database from the given dataSource.\n */\nexport class SchemaDropCommand implements yargs.CommandModule {\n command = \"schema:drop\"\n describe =\n \"Drops all tables in the database on your default dataSource. \" +\n \"To drop table of a concrete connection's database use -c option.\"\n\n builder(args: yargs.Argv) {\n return args.option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n }\n\n async handler(args: yargs.Arguments) {\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: [\"query\", \"schema\"],\n })\n await dataSource.initialize()\n await dataSource.dropDatabase()\n await dataSource.destroy()\n\n console.log(\n chalk.green(\"Database schema has been successfully dropped.\"),\n )\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during schema drop:\", err)\n\n if (dataSource && dataSource.isInitialized)\n await dataSource.destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -40,7 +40,7 @@ class SchemaSyncCommand {
|
|
|
40
40
|
}
|
|
41
41
|
catch (err) {
|
|
42
42
|
PlatformTools_1.PlatformTools.logCmdErr("Error during schema synchronization:", err);
|
|
43
|
-
if (dataSource)
|
|
43
|
+
if (dataSource && dataSource.isInitialized)
|
|
44
44
|
await dataSource.destroy();
|
|
45
45
|
process_1.default.exit(1);
|
|
46
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/SchemaSyncCommand.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AACzB,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QACI,YAAO,GAAG,aAAa,CAAA;QACvB,aAAQ,GACJ,8GAA8G;YAC9G,+DAA+D,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/commands/SchemaSyncCommand.ts"],"names":[],"mappings":";;;;AAEA,0DAAyB;AACzB,6DAAyD;AACzD,wDAAuB;AACvB,8DAA6B;AAC7B,iDAA6C;AAE7C;;GAEG;AACH,MAAa,iBAAiB;IAA9B;QACI,YAAO,GAAG,aAAa,CAAA;QACvB,aAAQ,GACJ,8GAA8G;YAC9G,+DAA+D,CAAA;IAuCvE,CAAC;IArCG,OAAO,CAAC,IAAgB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,KAAK,EAAE,GAAG;YACV,QAAQ,EACJ,6DAA6D;YACjE,YAAY,EAAE,IAAI;SACrB,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqB;QAC/B,IAAI,UAAU,GAA2B,SAAS,CAAA;QAClD,IAAI;YACA,UAAU,GAAG,MAAM,2BAAY,CAAC,cAAc,CAC1C,cAAI,CAAC,OAAO,CAAC,iBAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,UAAoB,CAAC,CACzD,CAAA;YACD,UAAU,CAAC,UAAU,CAAC;gBAClB,WAAW,EAAE,KAAK;gBAClB,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC/B,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,UAAU,EAAE,CAAA;YAC7B,MAAM,UAAU,CAAC,WAAW,EAAE,CAAA;YAC9B,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE1B,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAC/D,CAAA;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,6BAAa,CAAC,SAAS,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAA;YAEpE,IAAI,UAAU,IAAI,UAAU,CAAC,aAAa;gBACtC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAClB;IACL,CAAC;CACJ;AA3CD,8CA2CC","file":"SchemaSyncCommand.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport * as yargs from \"yargs\"\nimport chalk from \"chalk\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport path from \"path\"\nimport process from \"process\"\nimport { CommandUtils } from \"./CommandUtils\"\n\n/**\n * Synchronizes database schema with entities.\n */\nexport class SchemaSyncCommand implements yargs.CommandModule {\n command = \"schema:sync\"\n describe =\n \"Synchronizes your entities with database schema. It runs schema update queries on all connections you have. \" +\n \"To run update queries on a concrete connection use -c option.\"\n\n builder(args: yargs.Argv) {\n return args.option(\"dataSource\", {\n alias: \"d\",\n describe:\n \"Path to the file where your DataSource instance is defined.\",\n demandOption: true,\n })\n }\n\n async handler(args: yargs.Arguments) {\n let dataSource: DataSource | undefined = undefined\n try {\n dataSource = await CommandUtils.loadDataSource(\n path.resolve(process.cwd(), args.dataSource as string),\n )\n dataSource.setOptions({\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n logging: [\"query\", \"schema\"],\n })\n await dataSource.initialize()\n await dataSource.synchronize()\n await dataSource.destroy()\n\n console.log(\n chalk.green(\"Schema synchronization finished successfully.\"),\n )\n } catch (err) {\n PlatformTools.logCmdErr(\"Error during schema synchronization:\", err)\n\n if (dataSource && dataSource.isInitialized)\n await dataSource.destroy()\n\n process.exit(1)\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -21,6 +21,7 @@ import { RelationLoader } from "../query-builder/RelationLoader";
|
|
|
21
21
|
import { IsolationLevel } from "../driver/types/IsolationLevel";
|
|
22
22
|
import { ReplicationMode } from "../driver/types/ReplicationMode";
|
|
23
23
|
import { RelationIdLoader } from "../query-builder/RelationIdLoader";
|
|
24
|
+
import { ObjectLiteral } from "../common/ObjectLiteral";
|
|
24
25
|
/**
|
|
25
26
|
* DataSource is a pre-defined connection configuration to a specific database.
|
|
26
27
|
* You can have multiple data sources connected (with multiple connections in it),
|
|
@@ -181,17 +182,17 @@ export declare class DataSource {
|
|
|
181
182
|
/**
|
|
182
183
|
* Gets repository for the given entity.
|
|
183
184
|
*/
|
|
184
|
-
getRepository<Entity>(target: EntityTarget<Entity>): Repository<Entity>;
|
|
185
|
+
getRepository<Entity extends ObjectLiteral>(target: EntityTarget<Entity>): Repository<Entity>;
|
|
185
186
|
/**
|
|
186
187
|
* Gets tree repository for the given entity class or name.
|
|
187
188
|
* Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.
|
|
188
189
|
*/
|
|
189
|
-
getTreeRepository<Entity>(target: EntityTarget<Entity>): TreeRepository<Entity>;
|
|
190
|
+
getTreeRepository<Entity extends ObjectLiteral>(target: EntityTarget<Entity>): TreeRepository<Entity>;
|
|
190
191
|
/**
|
|
191
192
|
* Gets mongodb-specific repository for the given entity class or name.
|
|
192
193
|
* Works only if connection is mongodb-specific.
|
|
193
194
|
*/
|
|
194
|
-
getMongoRepository<Entity>(target: EntityTarget<Entity>): MongoRepository<Entity>;
|
|
195
|
+
getMongoRepository<Entity extends ObjectLiteral>(target: EntityTarget<Entity>): MongoRepository<Entity>;
|
|
195
196
|
/**
|
|
196
197
|
* Gets custom entity repository marked with @EntityRepository decorator.
|
|
197
198
|
*
|