typeorm 0.2.42-dev.f224f24 → 0.2.42
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/common/DeepPartial.d.ts +3 -3
- package/browser/common/DeepPartial.js.map +1 -1
- package/browser/connection/BaseConnectionOptions.js.map +1 -1
- package/browser/connection/Connection.js +33 -24
- package/browser/connection/Connection.js.map +1 -1
- package/browser/connection/ConnectionOptionsReader.js +3 -1
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/decorator/listeners/AfterRecover.d.ts +4 -0
- package/browser/decorator/listeners/AfterRecover.js +16 -0
- package/browser/decorator/listeners/AfterRecover.js.map +1 -0
- package/browser/decorator/listeners/AfterSoftRemove.d.ts +4 -0
- package/browser/decorator/listeners/AfterSoftRemove.js +16 -0
- package/browser/decorator/listeners/AfterSoftRemove.js.map +1 -0
- package/browser/decorator/listeners/BeforeRecover.d.ts +4 -0
- package/browser/decorator/listeners/BeforeRecover.js +16 -0
- package/browser/decorator/listeners/BeforeRecover.js.map +1 -0
- package/browser/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
- package/browser/decorator/listeners/BeforeSoftRemove.js +16 -0
- package/browser/decorator/listeners/BeforeSoftRemove.js.map +1 -0
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +87 -4
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +64 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
- package/browser/driver/capacitor/CapacitorQueryRunner.js +30 -0
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.d.ts +8 -0
- package/browser/driver/cordova/CordovaQueryRunner.js +30 -0
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.d.ts +8 -0
- package/browser/driver/expo/ExpoQueryRunner.js +30 -0
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/browser/driver/mongodb/MongoQueryRunner.d.ts +8 -0
- package/browser/driver/mongodb/MongoQueryRunner.js +20 -0
- package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js +30 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js +30 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteDriver.d.ts +13 -0
- package/browser/driver/sqlite/SqliteDriver.js +84 -1
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js +30 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +118 -57
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js +30 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.js +1 -11
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/entity-manager/MongoEntityManager.d.ts +2 -0
- package/browser/entity-manager/MongoEntityManager.js +35 -4
- package/browser/entity-manager/MongoEntityManager.js.map +1 -1
- package/browser/index.d.ts +4 -0
- package/browser/index.js +4 -0
- package/browser/index.js.map +1 -1
- package/browser/metadata/EntityMetadata.d.ts +16 -0
- package/browser/metadata/EntityMetadata.js +16 -0
- package/browser/metadata/EntityMetadata.js.map +1 -1
- package/browser/metadata/types/EventListenerTypes.d.ts +5 -1
- package/browser/metadata/types/EventListenerTypes.js +4 -0
- package/browser/metadata/types/EventListenerTypes.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +4 -0
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +37 -25
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/persistence/SubjectExecutor.d.ts +4 -2
- package/browser/persistence/SubjectExecutor.js +105 -13
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/browser/platform/PlatformTools.d.ts +1 -0
- package/browser/platform/PlatformTools.js +5 -0
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +11 -2
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +44 -30
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +9 -9
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +8 -0
- package/browser/query-runner/BaseQueryRunner.js +20 -0
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +8 -0
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/repository/TreeRepository.js +2 -1
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +36 -30
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +40 -0
- package/browser/subscriber/Broadcaster.js +191 -31
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/EntitySubscriberInterface.d.ts +18 -0
- package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/browser/subscriber/event/RecoverEvent.d.ts +6 -0
- package/browser/subscriber/event/RecoverEvent.js +3 -0
- package/browser/subscriber/event/RecoverEvent.js.map +1 -0
- package/browser/subscriber/event/SoftRemoveEvent.d.ts +6 -0
- package/browser/subscriber/event/SoftRemoveEvent.js +3 -0
- package/browser/subscriber/event/SoftRemoveEvent.js.map +1 -0
- package/browser/util/PathUtils.d.ts +10 -0
- package/browser/util/PathUtils.js +28 -0
- package/browser/util/PathUtils.js.map +1 -0
- package/browser/util/RandomGenerator.d.ts +0 -4
- package/browser/util/RandomGenerator.js +0 -9
- package/browser/util/RandomGenerator.js.map +1 -1
- package/cli.js +0 -0
- package/commands/CacheClearCommand.js +3 -3
- package/commands/CacheClearCommand.js.map +1 -1
- package/commands/EntityCreateCommand.js +2 -2
- package/commands/EntityCreateCommand.js.map +1 -1
- package/commands/InitCommand.js +2 -2
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationCreateCommand.js +2 -2
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +2 -2
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/MigrationRevertCommand.js +2 -3
- package/commands/MigrationRevertCommand.js.map +1 -1
- package/commands/MigrationRunCommand.js +2 -3
- package/commands/MigrationRunCommand.js.map +1 -1
- package/commands/MigrationShowCommand.js +5 -7
- package/commands/MigrationShowCommand.js.map +1 -1
- package/commands/QueryCommand.js +1 -2
- package/commands/QueryCommand.js.map +1 -1
- package/commands/SchemaDropCommand.js +2 -2
- package/commands/SchemaDropCommand.js.map +1 -1
- package/commands/SchemaLogCommand.js +2 -2
- package/commands/SchemaLogCommand.js.map +1 -1
- package/commands/SchemaSyncCommand.js +2 -2
- package/commands/SchemaSyncCommand.js.map +1 -1
- package/commands/SubscriberCreateCommand.js +3 -3
- package/commands/SubscriberCreateCommand.js.map +1 -1
- package/common/DeepPartial.d.ts +3 -3
- package/common/DeepPartial.js.map +1 -1
- package/connection/BaseConnectionOptions.js.map +1 -1
- package/connection/Connection.js +33 -24
- package/connection/Connection.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +3 -1
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/decorator/listeners/AfterRecover.d.ts +4 -0
- package/decorator/listeners/AfterRecover.js +20 -0
- package/decorator/listeners/AfterRecover.js.map +1 -0
- package/decorator/listeners/AfterSoftRemove.d.ts +4 -0
- package/decorator/listeners/AfterSoftRemove.js +20 -0
- package/decorator/listeners/AfterSoftRemove.js.map +1 -0
- package/decorator/listeners/BeforeRecover.d.ts +4 -0
- package/decorator/listeners/BeforeRecover.js +20 -0
- package/decorator/listeners/BeforeRecover.js.map +1 -0
- package/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
- package/decorator/listeners/BeforeSoftRemove.js +20 -0
- package/decorator/listeners/BeforeSoftRemove.js.map +1 -0
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +1 -1
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +86 -3
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +63 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
- package/driver/capacitor/CapacitorQueryRunner.js +30 -0
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.d.ts +8 -0
- package/driver/cordova/CordovaQueryRunner.js +30 -0
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.d.ts +8 -0
- package/driver/expo/ExpoQueryRunner.js +30 -0
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
- package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/driver/mongodb/MongoQueryRunner.d.ts +8 -0
- package/driver/mongodb/MongoQueryRunner.js +20 -0
- package/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
- package/driver/nativescript/NativescriptQueryRunner.js +30 -0
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
- package/driver/react-native/ReactNativeQueryRunner.js +30 -0
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteDriver.d.ts +13 -0
- package/driver/sqlite/SqliteDriver.js +83 -0
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
- package/driver/sqlite/SqliteQueryRunner.js +30 -0
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +118 -57
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
- package/driver/sqljs/SqljsQueryRunner.js +30 -0
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.js +1 -11
- package/entity-manager/EntityManager.js.map +1 -1
- package/entity-manager/MongoEntityManager.d.ts +2 -0
- package/entity-manager/MongoEntityManager.js +35 -4
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/index.js.map +1 -1
- package/index.mjs +8 -0
- package/metadata/EntityMetadata.d.ts +16 -0
- package/metadata/EntityMetadata.js +16 -0
- package/metadata/EntityMetadata.js.map +1 -1
- package/metadata/types/EventListenerTypes.d.ts +5 -1
- package/metadata/types/EventListenerTypes.js +4 -0
- package/metadata/types/EventListenerTypes.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +4 -0
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +1 -1
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/migration/MigrationExecutor.js +37 -25
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +248 -1
- package/persistence/SubjectExecutor.d.ts +4 -2
- package/persistence/SubjectExecutor.js +105 -13
- package/persistence/SubjectExecutor.js.map +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.d.ts +1 -0
- package/platform/PlatformTools.js +5 -0
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +11 -2
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +44 -30
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js +9 -9
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/query-runner/BaseQueryRunner.d.ts +8 -0
- package/query-runner/BaseQueryRunner.js +20 -0
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +8 -0
- package/query-runner/QueryRunner.js.map +1 -1
- package/repository/TreeRepository.js +2 -1
- package/repository/TreeRepository.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +36 -30
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +40 -0
- package/subscriber/Broadcaster.js +191 -31
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/EntitySubscriberInterface.d.ts +18 -0
- package/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/subscriber/event/RecoverEvent.d.ts +6 -0
- package/subscriber/event/RecoverEvent.js +4 -0
- package/subscriber/event/RecoverEvent.js.map +1 -0
- package/subscriber/event/SoftRemoveEvent.d.ts +6 -0
- package/subscriber/event/SoftRemoveEvent.js +4 -0
- package/subscriber/event/SoftRemoveEvent.js.map +1 -0
- package/typeorm-class-transformer-shim.js +20 -0
- package/typeorm-model-shim.js +20 -0
- package/util/PathUtils.d.ts +10 -0
- package/util/PathUtils.js +34 -0
- package/util/PathUtils.js.map +1 -0
- package/util/RandomGenerator.d.ts +0 -4
- package/util/RandomGenerator.js +0 -9
- package/util/RandomGenerator.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-builder/SoftDeleteQueryBuilder.ts"],"names":[],"mappings":"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","file":"SoftDeleteQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {WhereExpressionBuilder} from \"./WhereExpressionBuilder\";\nimport {Brackets} from \"./Brackets\";\nimport {UpdateResult} from \"./result/UpdateResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {LimitOnUpdateNotSupportedError} from \"../error/LimitOnUpdateNotSupportedError\";\nimport {MissingDeleteDateColumnError} from \"../error/MissingDeleteDateColumnError\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {UpdateValuesMissingError} from \"../error/UpdateValuesMissingError\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class SoftDeleteQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpressionBuilder {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n super(connectionOrQueryBuilder as any, queryRunner);\n this.expressionMap.aliasNamePrefixingEnabled = false;\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated SQL query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<UpdateResult> {\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // call before updation methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n await queryRunner.broadcaster.broadcast(\"BeforeUpdate\", this.expressionMap.mainAlias!.metadata);\n }\n\n // if update entity mode is enabled we may need extra columns for the returning statement\n const returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias!.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getSoftDeletionReturningColumns();\n }\n\n // execute update query\n const [sql, parameters] = this.getQueryAndParameters();\n\n const queryResult = await queryRunner.query(sql, parameters, true);\n const updateResult = UpdateResult.from(queryResult);\n\n // if we are updating entities and entity updation is enabled we must update some of entity columns (like version, update date, etc.)\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias!.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n await returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities);\n }\n\n // call after updation methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n await queryRunner.broadcaster.broadcast(\"AfterUpdate\", this.expressionMap.mainAlias!.metadata);\n }\n\n // close transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n return updateResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Specifies FROM which entity's table select/update/delete/soft-delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n from<T>(entityTarget: EntityTarget<T>, aliasName?: string): SoftDeleteQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return (this as any) as SoftDeleteQueryBuilder<T>;\n }\n\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n where(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n const condition = this.getWhereCondition(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n andWhere(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n orWhere(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n whereInIds(ids: any|any[]): this {\n return this.where(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n andWhereInIds(ids: any|any[]): this {\n return this.andWhere(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n orWhereInIds(ids: any|any[]): this {\n return this.orWhere(this.getWhereInIdsCondition(ids));\n }\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n *\n * Calling order by without order set will remove all previously set order bys.\n */\n orderBy(): this;\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n orderBy(sort: string, order?: \"ASC\"|\"DESC\", nulls?: \"NULLS FIRST\"|\"NULLS LAST\"): this;\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n orderBy(order: OrderByCondition): this;\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n orderBy(sort?: string|OrderByCondition, order: \"ASC\"|\"DESC\" = \"ASC\", nulls?: \"NULLS FIRST\"|\"NULLS LAST\"): this {\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort as OrderByCondition;\n } else {\n if (nulls) {\n this.expressionMap.orderBys = { [sort as string]: { order, nulls } };\n } else {\n this.expressionMap.orderBys = { [sort as string]: order };\n }\n }\n } else {\n this.expressionMap.orderBys = {};\n }\n return this;\n }\n\n /**\n * Adds ORDER BY condition in the query builder.\n */\n addOrderBy(sort: string, order: \"ASC\"|\"DESC\" = \"ASC\", nulls?: \"NULLS FIRST\"|\"NULLS LAST\"): this {\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order, nulls };\n } else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n }\n\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n limit(limit?: number): this {\n this.expressionMap.limit = limit;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n whereEntity(entity: Entity|Entity[]): this {\n if (!this.expressionMap.mainAlias!.hasMetadata)\n throw new TypeORMError(`.whereEntity method can only be used on queries which update real entity table.`);\n\n this.expressionMap.wheres = [];\n const entities: Entity[] = Array.isArray(entity) ? entity : [entity];\n entities.forEach(entity => {\n\n const entityIdMap = this.expressionMap.mainAlias!.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new TypeORMError(`Provided entity does not have ids set, cannot perform operation.`);\n\n this.orWhereInIds(entityIdMap);\n });\n\n this.expressionMap.whereEntities = entities;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n updateEntity(enabled: boolean): this {\n this.expressionMap.updateEntity = enabled;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates UPDATE express used to perform insert query.\n */\n protected createUpdateExpression() {\n const metadata = this.expressionMap.mainAlias!.hasMetadata ? this.expressionMap.mainAlias!.metadata : undefined;\n if (!metadata)\n throw new TypeORMError(`Cannot get entity metadata for the given alias \"${this.expressionMap.mainAlias}\"`);\n if (!metadata.deleteDateColumn) {\n throw new MissingDeleteDateColumnError(metadata);\n }\n\n // prepare columns and values to be updated\n const updateColumnAndValues: string[] = [];\n\n switch (this.expressionMap.queryType) {\n case \"soft-delete\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\");\n break;\n case \"restore\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = NULL\");\n break;\n default:\n throw new TypeORMError(`The queryType must be \"soft-delete\" or \"restore\"`);\n }\n if (metadata.versionColumn)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n\n // get a table name and all column database names\n const whereExpression = this.createWhereExpression();\n const returningExpression = this.createReturningExpression();\n\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return `UPDATE ${this.getTableName(this.getMainTableName())} SET ${updateColumnAndValues.join(\", \")}${whereExpression} RETURNING ${returningExpression}`;\n\n } else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return `UPDATE ${this.getTableName(this.getMainTableName())} SET ${updateColumnAndValues.join(\", \")} OUTPUT ${returningExpression}${whereExpression}`;\n\n } else {\n return `UPDATE ${this.getTableName(this.getMainTableName())} SET ${updateColumnAndValues.join(\", \")}${whereExpression}`; // todo: how do we replace aliases in where to nothing?\n }\n }\n\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n protected createOrderByExpression() {\n const orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(columnName => {\n if (typeof orderBys[columnName] === \"string\") {\n return this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n } else {\n return this.replacePropertyNames(columnName) + \" \" + (orderBys[columnName] as any).order + \" \" + (orderBys[columnName] as any).nulls;\n }\n })\n .join(\", \");\n\n return \"\";\n }\n\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n protected createLimitExpression(): string {\n let limit: number|undefined = this.expressionMap.limit;\n\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver) {\n return \" LIMIT \" + limit;\n } else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n\n return \"\";\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-builder/SoftDeleteQueryBuilder.ts"],"names":[],"mappings":"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","file":"SoftDeleteQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {WhereExpressionBuilder} from \"./WhereExpressionBuilder\";\nimport {Brackets} from \"./Brackets\";\nimport {UpdateResult} from \"./result/UpdateResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {LimitOnUpdateNotSupportedError} from \"../error/LimitOnUpdateNotSupportedError\";\nimport {MissingDeleteDateColumnError} from \"../error/MissingDeleteDateColumnError\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {UpdateValuesMissingError} from \"../error/UpdateValuesMissingError\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class SoftDeleteQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpressionBuilder {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connectionOrQueryBuilder: Connection|QueryBuilder<any>, queryRunner?: QueryRunner) {\n super(connectionOrQueryBuilder as any, queryRunner);\n this.expressionMap.aliasNamePrefixingEnabled = false;\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated SQL query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<UpdateResult> {\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // call before soft remove and recover methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n if (this.expressionMap.queryType === \"soft-delete\")\n await queryRunner.broadcaster.broadcast(\"BeforeSoftRemove\", this.expressionMap.mainAlias!.metadata);\n else if (this.expressionMap.queryType === \"restore\")\n await queryRunner.broadcaster.broadcast(\"BeforeRecover\", this.expressionMap.mainAlias!.metadata);\n }\n\n // if update entity mode is enabled we may need extra columns for the returning statement\n const returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias!.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getSoftDeletionReturningColumns();\n }\n\n // execute update query\n const [sql, parameters] = this.getQueryAndParameters();\n\n const queryResult = await queryRunner.query(sql, parameters, true);\n const updateResult = UpdateResult.from(queryResult);\n\n // if we are updating entities and entity updation is enabled we must update some of entity columns (like version, update date, etc.)\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias!.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n await returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities);\n }\n\n // call after soft remove and recover methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n if (this.expressionMap.queryType === \"soft-delete\")\n await queryRunner.broadcaster.broadcast(\"AfterSoftRemove\", this.expressionMap.mainAlias!.metadata);\n else if (this.expressionMap.queryType === \"restore\")\n await queryRunner.broadcaster.broadcast(\"AfterRecover\", this.expressionMap.mainAlias!.metadata);\n }\n\n // close transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n return updateResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Specifies FROM which entity's table select/update/delete/soft-delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n from<T>(entityTarget: EntityTarget<T>, aliasName?: string): SoftDeleteQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return (this as any) as SoftDeleteQueryBuilder<T>;\n }\n\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n where(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n const condition = this.getWhereCondition(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n andWhere(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n orWhere(where: string|((qb: this) => string)|Brackets|ObjectLiteral|ObjectLiteral[], parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.getWhereCondition(where) });\n if (parameters) this.setParameters(parameters);\n return this;\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n whereInIds(ids: any|any[]): this {\n return this.where(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n andWhereInIds(ids: any|any[]): this {\n return this.andWhere(this.getWhereInIdsCondition(ids));\n }\n\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n orWhereInIds(ids: any|any[]): this {\n return this.orWhere(this.getWhereInIdsCondition(ids));\n }\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n *\n * Calling order by without order set will remove all previously set order bys.\n */\n orderBy(): this;\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n orderBy(sort: string, order?: \"ASC\"|\"DESC\", nulls?: \"NULLS FIRST\"|\"NULLS LAST\"): this;\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n orderBy(order: OrderByCondition): this;\n\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n orderBy(sort?: string|OrderByCondition, order: \"ASC\"|\"DESC\" = \"ASC\", nulls?: \"NULLS FIRST\"|\"NULLS LAST\"): this {\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort as OrderByCondition;\n } else {\n if (nulls) {\n this.expressionMap.orderBys = { [sort as string]: { order, nulls } };\n } else {\n this.expressionMap.orderBys = { [sort as string]: order };\n }\n }\n } else {\n this.expressionMap.orderBys = {};\n }\n return this;\n }\n\n /**\n * Adds ORDER BY condition in the query builder.\n */\n addOrderBy(sort: string, order: \"ASC\"|\"DESC\" = \"ASC\", nulls?: \"NULLS FIRST\"|\"NULLS LAST\"): this {\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order, nulls };\n } else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n }\n\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n limit(limit?: number): this {\n this.expressionMap.limit = limit;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n whereEntity(entity: Entity|Entity[]): this {\n if (!this.expressionMap.mainAlias!.hasMetadata)\n throw new TypeORMError(`.whereEntity method can only be used on queries which update real entity table.`);\n\n this.expressionMap.wheres = [];\n const entities: Entity[] = Array.isArray(entity) ? entity : [entity];\n entities.forEach(entity => {\n\n const entityIdMap = this.expressionMap.mainAlias!.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new TypeORMError(`Provided entity does not have ids set, cannot perform operation.`);\n\n this.orWhereInIds(entityIdMap);\n });\n\n this.expressionMap.whereEntities = entities;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n updateEntity(enabled: boolean): this {\n this.expressionMap.updateEntity = enabled;\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates UPDATE express used to perform insert query.\n */\n protected createUpdateExpression() {\n const metadata = this.expressionMap.mainAlias!.hasMetadata ? this.expressionMap.mainAlias!.metadata : undefined;\n if (!metadata)\n throw new TypeORMError(`Cannot get entity metadata for the given alias \"${this.expressionMap.mainAlias}\"`);\n if (!metadata.deleteDateColumn) {\n throw new MissingDeleteDateColumnError(metadata);\n }\n\n // prepare columns and values to be updated\n const updateColumnAndValues: string[] = [];\n\n switch (this.expressionMap.queryType) {\n case \"soft-delete\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\");\n break;\n case \"restore\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = NULL\");\n break;\n default:\n throw new TypeORMError(`The queryType must be \"soft-delete\" or \"restore\"`);\n }\n if (metadata.versionColumn)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n\n // get a table name and all column database names\n const whereExpression = this.createWhereExpression();\n const returningExpression = this.createReturningExpression();\n\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return `UPDATE ${this.getTableName(this.getMainTableName())} SET ${updateColumnAndValues.join(\", \")}${whereExpression} RETURNING ${returningExpression}`;\n\n } else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return `UPDATE ${this.getTableName(this.getMainTableName())} SET ${updateColumnAndValues.join(\", \")} OUTPUT ${returningExpression}${whereExpression}`;\n\n } else {\n return `UPDATE ${this.getTableName(this.getMainTableName())} SET ${updateColumnAndValues.join(\", \")}${whereExpression}`; // todo: how do we replace aliases in where to nothing?\n }\n }\n\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n protected createOrderByExpression() {\n const orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(columnName => {\n if (typeof orderBys[columnName] === \"string\") {\n return this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n } else {\n return this.replacePropertyNames(columnName) + \" \" + (orderBys[columnName] as any).order + \" \" + (orderBys[columnName] as any).nulls;\n }\n })\n .join(\", \");\n\n return \"\";\n }\n\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n protected createLimitExpression(): string {\n let limit: number|undefined = this.expressionMap.limit;\n\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver) {\n return \" LIMIT \" + limit;\n } else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n\n return \"\";\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -33,7 +33,7 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
33
33
|
// we expect it to load id of tag
|
|
34
34
|
if (relationIdAttr.queryBuilderFactory)
|
|
35
35
|
throw new TypeORMError_1.TypeORMError("Additional condition can not be used with ManyToOne or OneToOne owner relations.");
|
|
36
|
-
duplicates_1 =
|
|
36
|
+
duplicates_1 = {};
|
|
37
37
|
results = rawEntities.map(function (rawEntity) {
|
|
38
38
|
var result = {};
|
|
39
39
|
var duplicateParts = [];
|
|
@@ -53,10 +53,10 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
53
53
|
});
|
|
54
54
|
duplicateParts.sort();
|
|
55
55
|
var duplicate = duplicateParts.join("::");
|
|
56
|
-
if (duplicates_1
|
|
56
|
+
if (duplicates_1[duplicate]) {
|
|
57
57
|
return null;
|
|
58
58
|
}
|
|
59
|
-
duplicates_1
|
|
59
|
+
duplicates_1[duplicate] = true;
|
|
60
60
|
return result;
|
|
61
61
|
}).filter(function (v) { return v; });
|
|
62
62
|
return [2 /*return*/, {
|
|
@@ -70,7 +70,7 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
70
70
|
table = relation_1.inverseEntityMetadata.target;
|
|
71
71
|
tableName = relation_1.inverseEntityMetadata.tableName;
|
|
72
72
|
tableAlias_1 = relationIdAttr.alias || tableName;
|
|
73
|
-
duplicates_2 =
|
|
73
|
+
duplicates_2 = {};
|
|
74
74
|
parameters_1 = {};
|
|
75
75
|
condition = rawEntities.map(function (rawEntity, index) {
|
|
76
76
|
var duplicateParts = [];
|
|
@@ -88,10 +88,10 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
88
88
|
}).filter(function (v) { return v; }).join(" AND ");
|
|
89
89
|
duplicateParts.sort();
|
|
90
90
|
var duplicate = duplicateParts.join("::");
|
|
91
|
-
if (duplicates_2
|
|
91
|
+
if (duplicates_2[duplicate]) {
|
|
92
92
|
return "";
|
|
93
93
|
}
|
|
94
|
-
duplicates_2
|
|
94
|
+
duplicates_2[duplicate] = true;
|
|
95
95
|
Object.assign(parameters_1, parameterParts);
|
|
96
96
|
return queryPart;
|
|
97
97
|
}).filter(function (v) { return v; }).map(function (condition) { return "(" + condition + ")"; })
|
|
@@ -147,7 +147,7 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
147
147
|
if (mappedColumns.length === 0)
|
|
148
148
|
return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];
|
|
149
149
|
parameters_2 = {};
|
|
150
|
-
duplicates_3 =
|
|
150
|
+
duplicates_3 = {};
|
|
151
151
|
joinColumnConditions = mappedColumns.map(function (mappedColumn, index) {
|
|
152
152
|
var duplicateParts = [];
|
|
153
153
|
var parameterParts = {};
|
|
@@ -164,10 +164,10 @@ var RelationIdLoader = /** @class */ (function () {
|
|
|
164
164
|
}).filter(function (s) { return s; }).join(" AND ");
|
|
165
165
|
duplicateParts.sort();
|
|
166
166
|
var duplicate = duplicateParts.join("::");
|
|
167
|
-
if (duplicates_3
|
|
167
|
+
if (duplicates_3[duplicate]) {
|
|
168
168
|
return "";
|
|
169
169
|
}
|
|
170
|
-
duplicates_3
|
|
170
|
+
duplicates_3[duplicate] = true;
|
|
171
171
|
Object.assign(parameters_2, parameterParts);
|
|
172
172
|
return queryPart;
|
|
173
173
|
}).filter(function (s) { return s; });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-builder/relation-id/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import {RelationIdAttribute} from \"./RelationIdAttribute\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RelationIdLoadResult} from \"./RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\nimport { TypeORMError } from \"../../error/TypeORMError\";\n\nexport class RelationIdLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner: QueryRunner|undefined,\n protected relationIdAttributes: RelationIdAttribute[]) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async load(rawEntities: any[]): Promise<RelationIdLoadResult[]> {\n\n const promises = this.relationIdAttributes.map(async relationIdAttr => {\n\n if (relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner) {\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n\n if (relationIdAttr.queryBuilderFactory)\n throw new TypeORMError(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n\n const duplicates: Array<string> = [];\n const results = rawEntities.map(rawEntity => {\n const result: ObjectLiteral = {};\n const duplicateParts: Array<string> = [];\n relationIdAttr.relation.joinColumns.forEach(joinColumn => {\n result[joinColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn!);\n const duplicatePart = `${joinColumn.databaseName}:${result[joinColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(primaryColumn => {\n result[primaryColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n const duplicatePart = `${primaryColumn.databaseName}:${result[primaryColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates.indexOf(duplicate) !== -1) {\n return null;\n }\n duplicates.push(duplicate);\n return result;\n }).filter(v => v);\n\n return {\n relationIdAttribute: relationIdAttr,\n results: results\n };\n\n } else if (relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner) {\n // example: Post and Category\n // loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // we expect it to load array of category ids\n\n const relation = relationIdAttr.relation; // \"post.categories\"\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const table = relation.inverseEntityMetadata.target; // category\n const tableName = relation.inverseEntityMetadata.tableName; // category\n const tableAlias = relationIdAttr.alias || tableName; // if condition (custom query builder factory) is set then relationIdAttr.alias defined\n\n const duplicates: Array<string> = [];\n const parameters: ObjectLiteral = {};\n const condition = rawEntities.map((rawEntity, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = joinColumns.map(joinColumn => {\n const parameterName = joinColumn.databaseName + index;\n const parameterValue = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n const duplicatePart = `${tableAlias}:${joinColumn.propertyPath}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(v => v).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates.push(duplicate);\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(v => v).map(condition => \"(\" + condition + \")\")\n .join(\" OR \");\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n // generate query:\n // SELECT category.id, category.postId FROM category category ON category.postId = :postId\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(tableAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(primaryColumn => {\n qb.addSelect(tableAlias + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n\n qb.from(table, tableAlias)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n joinColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n\n } else {\n // many-to-many\n // example: Post and Category\n // owner side: loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // inverse side: loadRelationIdAndMap(\"category.postIds\", \"category.posts\")\n // we expect it to load array of post ids\n\n const relation = relationIdAttr.relation;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.inverseJoinColumns;\n const inverseJoinColumns = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation!.joinColumns;\n const junctionAlias = relationIdAttr.junctionAlias;\n const inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n const inverseSideTableAlias = relationIdAttr.alias || inverseSideTableName;\n const junctionTableName = relation.isOwning ? relation.junctionEntityMetadata!.tableName : relation.inverseRelation!.junctionEntityMetadata!.tableName;\n\n\n const mappedColumns = rawEntities.map(rawEntity => {\n return joinColumns.reduce((map, joinColumn) => {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n return map;\n }, {} as ObjectLiteral);\n });\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n const parameters: ObjectLiteral = {};\n const duplicates: Array<string> = [];\n const joinColumnConditions = mappedColumns.map((mappedColumn, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = Object.keys(mappedColumn).map(key => {\n const parameterName = key + index;\n const parameterValue = mappedColumn[key];\n const duplicatePart = `${junctionAlias}:${key}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias + \".\" + key + \" = :\" + parameterName;\n }).filter(s => s).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates.push(duplicate);\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(s => s);\n\n const inverseJoinColumnCondition = inverseJoinColumns.map(joinColumn => {\n return junctionAlias + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias + \".\" + joinColumn.referencedColumn!.propertyPath;\n }).join(\" AND \");\n\n const condition = joinColumnConditions.map(condition => {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition + \")\";\n }).join(\" OR \");\n\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n inverseJoinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n qb.from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n [...joinColumns, ...inverseJoinColumns].forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n }\n });\n\n return Promise.all(promises);\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-builder/relation-id/RelationIdLoader.ts"],"names":[],"mappings":"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","file":"RelationIdLoader.js","sourcesContent":["import {RelationIdAttribute} from \"./RelationIdAttribute\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RelationIdLoadResult} from \"./RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\nimport { TypeORMError } from \"../../error/TypeORMError\";\n\nexport class RelationIdLoader {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner: QueryRunner|undefined,\n protected relationIdAttributes: RelationIdAttribute[]) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async load(rawEntities: any[]): Promise<RelationIdLoadResult[]> {\n\n const promises = this.relationIdAttributes.map(async relationIdAttr => {\n\n if (relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner) {\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n\n if (relationIdAttr.queryBuilderFactory)\n throw new TypeORMError(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n\n const duplicates: {[duplicateKey: string]: boolean} = {};\n const results = rawEntities.map(rawEntity => {\n const result: ObjectLiteral = {};\n const duplicateParts: Array<string> = [];\n relationIdAttr.relation.joinColumns.forEach(joinColumn => {\n result[joinColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn!);\n const duplicatePart = `${joinColumn.databaseName}:${result[joinColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(primaryColumn => {\n result[primaryColumn.databaseName] = this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n const duplicatePart = `${primaryColumn.databaseName}:${result[primaryColumn.databaseName]}`;\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates[duplicate]) {\n return null;\n }\n duplicates[duplicate] = true;\n return result;\n }).filter(v => v);\n\n return {\n relationIdAttribute: relationIdAttr,\n results: results\n };\n\n } else if (relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner) {\n // example: Post and Category\n // loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // we expect it to load array of category ids\n\n const relation = relationIdAttr.relation; // \"post.categories\"\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.joinColumns;\n const table = relation.inverseEntityMetadata.target; // category\n const tableName = relation.inverseEntityMetadata.tableName; // category\n const tableAlias = relationIdAttr.alias || tableName; // if condition (custom query builder factory) is set then relationIdAttr.alias defined\n\n const duplicates: {[duplicateKey: string]: boolean} = {};\n const parameters: ObjectLiteral = {};\n const condition = rawEntities.map((rawEntity, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = joinColumns.map(joinColumn => {\n const parameterName = joinColumn.databaseName + index;\n const parameterValue = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n const duplicatePart = `${tableAlias}:${joinColumn.propertyPath}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(v => v).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates[duplicate]) {\n return \"\";\n }\n duplicates[duplicate] = true;\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(v => v).map(condition => \"(\" + condition + \")\")\n .join(\" OR \");\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n // generate query:\n // SELECT category.id, category.postId FROM category category ON category.postId = :postId\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(tableAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(primaryColumn => {\n qb.addSelect(tableAlias + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n\n qb.from(table, tableAlias)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n joinColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n relation.inverseRelation!.entityMetadata.primaryColumns.forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n\n } else {\n // many-to-many\n // example: Post and Category\n // owner side: loadRelationIdAndMap(\"post.categoryIds\", \"post.categories\")\n // inverse side: loadRelationIdAndMap(\"category.postIds\", \"category.posts\")\n // we expect it to load array of post ids\n\n const relation = relationIdAttr.relation;\n const joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation!.inverseJoinColumns;\n const inverseJoinColumns = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation!.joinColumns;\n const junctionAlias = relationIdAttr.junctionAlias;\n const inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n const inverseSideTableAlias = relationIdAttr.alias || inverseSideTableName;\n const junctionTableName = relation.isOwning ? relation.junctionEntityMetadata!.tableName : relation.inverseRelation!.junctionEntityMetadata!.tableName;\n\n\n const mappedColumns = rawEntities.map(rawEntity => {\n return joinColumns.reduce((map, joinColumn) => {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildAlias(this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn!.databaseName)];\n return map;\n }, {} as ObjectLiteral);\n });\n\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return { relationIdAttribute: relationIdAttr, results: [] };\n\n const parameters: ObjectLiteral = {};\n const duplicates: {[duplicateKey: string]: boolean} = {};\n const joinColumnConditions = mappedColumns.map((mappedColumn, index) => {\n const duplicateParts: Array<string> = [];\n const parameterParts: ObjectLiteral = {};\n const queryPart = Object.keys(mappedColumn).map(key => {\n const parameterName = key + index;\n const parameterValue = mappedColumn[key];\n const duplicatePart = `${junctionAlias}:${key}:${parameterValue}`;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias + \".\" + key + \" = :\" + parameterName;\n }).filter(s => s).join(\" AND \");\n duplicateParts.sort();\n const duplicate = duplicateParts.join(\"::\");\n if (duplicates[duplicate]) {\n return \"\";\n }\n duplicates[duplicate] = true;\n Object.assign(parameters, parameterParts);\n return queryPart;\n }).filter(s => s);\n\n const inverseJoinColumnCondition = inverseJoinColumns.map(joinColumn => {\n return junctionAlias + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias + \".\" + joinColumn.referencedColumn!.propertyPath;\n }).join(\" AND \");\n\n const condition = joinColumnConditions.map(condition => {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition + \")\";\n }).join(\" OR \");\n\n const qb = this.connection.createQueryBuilder(this.queryRunner);\n\n inverseJoinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n joinColumns.forEach(joinColumn => {\n qb.addSelect(junctionAlias + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias + \".\" + joinColumn.propertyPath);\n });\n\n qb.from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .setParameters(parameters);\n\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb);\n\n const results = await qb.getRawMany();\n results.forEach(result => {\n [...joinColumns, ...inverseJoinColumns].forEach(column => {\n result[column.databaseName] = this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn!);\n });\n });\n\n return {\n relationIdAttribute: relationIdAttr,\n results\n };\n }\n });\n\n return Promise.all(promises);\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -16,6 +16,11 @@ export declare class RawSqlResultsToEntityTransformer {
|
|
|
16
16
|
protected rawRelationIdResults: RelationIdLoadResult[];
|
|
17
17
|
protected rawRelationCountResults: RelationCountLoadResult[];
|
|
18
18
|
protected queryRunner?: QueryRunner | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Contains a hashmap for every rawRelationIdResults given.
|
|
21
|
+
* In the hashmap you will find the idMaps of a result under the hash of this.hashEntityIds for the result.
|
|
22
|
+
*/
|
|
23
|
+
private relationIdMaps;
|
|
19
24
|
constructor(expressionMap: QueryExpressionMap, driver: Driver, rawRelationIdResults: RelationIdLoadResult[], rawRelationCountResults: RelationCountLoadResult[], queryRunner?: QueryRunner | undefined);
|
|
20
25
|
/**
|
|
21
26
|
* Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated
|
|
@@ -39,4 +44,12 @@ export declare class RawSqlResultsToEntityTransformer {
|
|
|
39
44
|
protected transformRelationCounts(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral): boolean;
|
|
40
45
|
private createValueMapFromJoinColumns;
|
|
41
46
|
private extractEntityPrimaryIds;
|
|
47
|
+
/** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */
|
|
48
|
+
private prepareDataForTransformRelationIds;
|
|
49
|
+
/**
|
|
50
|
+
* Use a simple JSON.stringify to create a simple hash of the primary ids of an entity.
|
|
51
|
+
* As this.extractEntityPrimaryIds always creates the primary id object in the same order, if the same relation is
|
|
52
|
+
* given, a simple JSON.stringify should be enough to get a unique hash per entity!
|
|
53
|
+
*/
|
|
54
|
+
private hashEntityIds;
|
|
42
55
|
}
|
|
@@ -113,7 +113,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
113
113
|
var hasData = false;
|
|
114
114
|
metadata.columns.forEach(function (column) {
|
|
115
115
|
// if table inheritance is used make sure this column is not child's column
|
|
116
|
-
if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.
|
|
116
|
+
if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.findIndex(function (childMetadata) { return childMetadata.target === column.target; }) !== -1)
|
|
117
117
|
return;
|
|
118
118
|
var value = rawResults[0][DriverUtils_1.DriverUtils.buildAlias(_this.driver, alias.name, column.databaseName)];
|
|
119
119
|
if (value === undefined || column.isVirtual)
|
|
@@ -177,56 +177,20 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
177
177
|
RawSqlResultsToEntityTransformer.prototype.transformRelationIds = function (rawSqlResults, alias, entity, metadata) {
|
|
178
178
|
var _this = this;
|
|
179
179
|
var hasData = false;
|
|
180
|
-
this.rawRelationIdResults.forEach(function (rawRelationIdResult) {
|
|
180
|
+
this.rawRelationIdResults.forEach(function (rawRelationIdResult, index) {
|
|
181
181
|
if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)
|
|
182
182
|
return;
|
|
183
183
|
var relation = rawRelationIdResult.relationIdAttribute.relation;
|
|
184
184
|
var valueMap = _this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);
|
|
185
|
-
if (valueMap === undefined || valueMap === null)
|
|
185
|
+
if (valueMap === undefined || valueMap === null) {
|
|
186
186
|
return;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
else if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
196
|
-
columns = relation.inverseEntityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });
|
|
197
|
-
// columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);
|
|
198
|
-
}
|
|
199
|
-
else { // ManyToMany
|
|
200
|
-
if (relation.isOwning) {
|
|
201
|
-
columns = relation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
var idMap = columns.reduce(function (idMap, column) {
|
|
208
|
-
var value = result[column.databaseName];
|
|
209
|
-
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
210
|
-
if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation
|
|
211
|
-
value = column.referencedColumn.createValueMap(value);
|
|
212
|
-
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.createValueMap(value));
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
if (column.referencedColumn.referencedColumn) // if column is a relation
|
|
216
|
-
value = column.referencedColumn.referencedColumn.createValueMap(value);
|
|
217
|
-
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));
|
|
218
|
-
}
|
|
219
|
-
}, {});
|
|
220
|
-
if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {
|
|
221
|
-
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
222
|
-
return columns[0].getEntityValue(idMap);
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
return columns[0].referencedColumn.getEntityValue(idMap);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return idMap;
|
|
229
|
-
}).filter(function (result) { return result !== undefined; });
|
|
187
|
+
}
|
|
188
|
+
// prepare common data for this call
|
|
189
|
+
_this.prepareDataForTransformRelationIds();
|
|
190
|
+
// Extract idMaps from prepared data by hash
|
|
191
|
+
var hash = _this.hashEntityIds(relation, valueMap);
|
|
192
|
+
var idMaps = _this.relationIdMaps[index][hash] || [];
|
|
193
|
+
// Map data to properties
|
|
230
194
|
var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(".");
|
|
231
195
|
var mapToProperty = function (properties, map, value) {
|
|
232
196
|
var property = properties.shift();
|
|
@@ -234,7 +198,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
234
198
|
map[property] = value;
|
|
235
199
|
return map;
|
|
236
200
|
}
|
|
237
|
-
|
|
201
|
+
if (property && properties.length > 0) {
|
|
238
202
|
mapToProperty(properties, map[property], value);
|
|
239
203
|
}
|
|
240
204
|
else {
|
|
@@ -249,9 +213,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
249
213
|
}
|
|
250
214
|
else {
|
|
251
215
|
mapToProperty(properties, entity, idMaps);
|
|
252
|
-
|
|
253
|
-
hasData = true;
|
|
254
|
-
}
|
|
216
|
+
hasData = hasData || idMaps.length > 0;
|
|
255
217
|
}
|
|
256
218
|
});
|
|
257
219
|
return hasData;
|
|
@@ -333,6 +295,88 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
333
295
|
return data;
|
|
334
296
|
}, {});
|
|
335
297
|
};
|
|
298
|
+
/*private removeVirtualColumns(entity: ObjectLiteral, alias: Alias) {
|
|
299
|
+
const virtualColumns = this.expressionMap.selects
|
|
300
|
+
.filter(select => select.virtual)
|
|
301
|
+
.map(select => select.selection.replace(alias.name + ".", ""));
|
|
302
|
+
|
|
303
|
+
virtualColumns.forEach(virtualColumn => delete entity[virtualColumn]);
|
|
304
|
+
}*/
|
|
305
|
+
/** Prepare data to run #transformRelationIds, as a lot of result independent data is needed in every call */
|
|
306
|
+
RawSqlResultsToEntityTransformer.prototype.prepareDataForTransformRelationIds = function () {
|
|
307
|
+
var _this = this;
|
|
308
|
+
// Return early if the relationIdMaps were already calculated
|
|
309
|
+
if (this.relationIdMaps) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// Ensure this prepare function is only called once
|
|
313
|
+
this.relationIdMaps = this.rawRelationIdResults.map(function (rawRelationIdResult) {
|
|
314
|
+
var relation = rawRelationIdResult.relationIdAttribute.relation;
|
|
315
|
+
// Calculate column metadata
|
|
316
|
+
var columns;
|
|
317
|
+
if (relation.isManyToOne || relation.isOneToOneOwner) {
|
|
318
|
+
columns = relation.joinColumns;
|
|
319
|
+
}
|
|
320
|
+
else if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
321
|
+
columns = relation.inverseEntityMetadata.primaryColumns;
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
// ManyToMany
|
|
325
|
+
if (relation.isOwning) {
|
|
326
|
+
columns = relation.inverseJoinColumns;
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
columns = relation.inverseRelation.joinColumns;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Calculate the idMaps for the rawRelationIdResult
|
|
333
|
+
return rawRelationIdResult.results.reduce(function (agg, result) {
|
|
334
|
+
var idMap = columns.reduce(function (idMap, column) {
|
|
335
|
+
var value = result[column.databaseName];
|
|
336
|
+
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
337
|
+
if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) {
|
|
338
|
+
// if column is a relation
|
|
339
|
+
value = column.referencedColumn.createValueMap(value);
|
|
340
|
+
}
|
|
341
|
+
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.createValueMap(value));
|
|
342
|
+
}
|
|
343
|
+
if (column.referencedColumn.referencedColumn) {
|
|
344
|
+
// if column is a relation
|
|
345
|
+
value = column.referencedColumn.referencedColumn.createValueMap(value);
|
|
346
|
+
}
|
|
347
|
+
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));
|
|
348
|
+
}, {});
|
|
349
|
+
if (columns.length === 1 && !rawRelationIdResult.relationIdAttribute.disableMixedMap) {
|
|
350
|
+
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
351
|
+
idMap = columns[0].getEntityValue(idMap);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
idMap = columns[0].referencedColumn.getEntityValue(idMap);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// If an idMap is found, set it in the aggregator under the correct hash
|
|
358
|
+
if (idMap !== undefined) {
|
|
359
|
+
var hash = _this.hashEntityIds(relation, result);
|
|
360
|
+
if (agg[hash]) {
|
|
361
|
+
agg[hash].push(idMap);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
agg[hash] = [idMap];
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return agg;
|
|
368
|
+
}, {});
|
|
369
|
+
});
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* Use a simple JSON.stringify to create a simple hash of the primary ids of an entity.
|
|
373
|
+
* As this.extractEntityPrimaryIds always creates the primary id object in the same order, if the same relation is
|
|
374
|
+
* given, a simple JSON.stringify should be enough to get a unique hash per entity!
|
|
375
|
+
*/
|
|
376
|
+
RawSqlResultsToEntityTransformer.prototype.hashEntityIds = function (relation, data) {
|
|
377
|
+
var entityPrimaryIds = this.extractEntityPrimaryIds(relation, data);
|
|
378
|
+
return JSON.stringify(entityPrimaryIds);
|
|
379
|
+
};
|
|
336
380
|
return RawSqlResultsToEntityTransformer;
|
|
337
381
|
}());
|
|
338
382
|
exports.RawSqlResultsToEntityTransformer = RawSqlResultsToEntityTransformer;
|