typeorm 0.2.28 → 0.2.29
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/README.md +7 -2
- package/browser/connection/ConnectionOptionsReader.js +27 -27
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/decorator/entity/ChildEntity.js +1 -1
- package/browser/decorator/entity/ChildEntity.js.map +1 -1
- package/browser/driver/DriverUtils.js +20 -12
- package/browser/driver/DriverUtils.js.map +1 -1
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +53 -6
- package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +53 -6
- package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +3 -3
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +4 -0
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +112 -42
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.js +72 -14
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.d.ts +4 -0
- package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/browser/driver/mongodb/MongoDriver.d.ts +7 -3
- package/browser/driver/mongodb/MongoDriver.js +15 -14
- package/browser/driver/mongodb/MongoDriver.js.map +1 -1
- package/browser/driver/mongodb/MongoQueryRunner.d.ts +3 -3
- package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +4 -4
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +4 -0
- package/browser/driver/mysql/MysqlQueryRunner.js +107 -38
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +52 -6
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +7 -7
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +8 -0
- package/browser/driver/postgres/PostgresQueryRunner.js +107 -18
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeDriver.js +1 -2
- package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.js +56 -8
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.js +4 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +55 -7
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +133 -62
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-manager/MongoEntityManager.js +14 -3
- package/browser/entity-manager/MongoEntityManager.js.map +1 -1
- package/browser/find-options/FindOneOptions.d.ts +4 -0
- package/browser/find-options/FindOneOptions.js.map +1 -1
- package/browser/find-options/FindOperator.d.ts +20 -1
- package/browser/find-options/FindOperator.js +27 -1
- package/browser/find-options/FindOperator.js.map +1 -1
- package/browser/find-options/FindOperatorType.d.ts +1 -1
- package/browser/find-options/FindOperatorType.js.map +1 -1
- package/browser/find-options/FindOptionsUtils.js +5 -1
- package/browser/find-options/FindOptionsUtils.js.map +1 -1
- package/browser/find-options/operator/ILike.d.ts +6 -0
- package/browser/find-options/operator/ILike.js +10 -0
- package/browser/find-options/operator/ILike.js.map +1 -0
- package/browser/find-options/operator/Raw.d.ts +14 -2
- package/browser/find-options/operator/Raw.js +5 -6
- package/browser/find-options/operator/Raw.js.map +1 -1
- package/browser/index.d.ts +2 -0
- package/browser/index.js +1 -0
- package/browser/index.js.map +1 -1
- package/browser/logger/Logger.d.ts +1 -1
- package/browser/logger/Logger.js.map +1 -1
- package/browser/metadata/ColumnMetadata.js +14 -3
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/types/EventListenerTypes.d.ts +7 -7
- package/browser/metadata/types/EventListenerTypes.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +14 -8
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +8 -5
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/persistence/EntityPersistExecutor.js +1 -1
- package/browser/persistence/EntityPersistExecutor.js.map +1 -1
- package/browser/persistence/Subject.js +2 -1
- package/browser/persistence/Subject.js.map +1 -1
- package/browser/query-builder/DeleteQueryBuilder.js +2 -1
- package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +31 -8
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +7 -0
- package/browser/query-builder/QueryBuilder.js +125 -32
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryExpressionMap.d.ts +4 -0
- package/browser/query-builder/QueryExpressionMap.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.d.ts +5 -0
- package/browser/query-builder/SelectQueryBuilder.js +73 -40
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +2 -1
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +6 -3
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +1 -1
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/repository/TreeRepository.js +2 -2
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +24 -0
- package/browser/subscriber/Broadcaster.js +120 -0
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/EntitySubscriberInterface.d.ts +27 -0
- package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/browser/subscriber/event/TransactionCommitEvent.d.ts +22 -0
- package/browser/subscriber/event/TransactionCommitEvent.js +3 -0
- package/browser/subscriber/event/TransactionCommitEvent.js.map +1 -0
- package/browser/subscriber/event/TransactionRollbackEvent.d.ts +22 -0
- package/browser/subscriber/event/TransactionRollbackEvent.js +3 -0
- package/browser/subscriber/event/TransactionRollbackEvent.js.map +1 -0
- package/browser/subscriber/event/TransactionStartEvent.d.ts +22 -0
- package/browser/subscriber/event/TransactionStartEvent.js +3 -0
- package/browser/subscriber/event/TransactionStartEvent.js.map +1 -0
- package/browser/util/DateUtils.js +1 -7
- package/browser/util/DateUtils.js.map +1 -1
- package/commands/EntityCreateCommand.js +5 -2
- package/commands/EntityCreateCommand.js.map +1 -1
- package/commands/InitCommand.js +1 -1
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationCreateCommand.js +4 -1
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +26 -28
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/QueryCommand.d.ts +2 -0
- package/commands/QueryCommand.js +12 -3
- package/commands/QueryCommand.js.map +1 -1
- package/commands/SubscriberCreateCommand.js +5 -2
- package/commands/SubscriberCreateCommand.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +27 -27
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/decorator/entity/ChildEntity.js +1 -1
- package/decorator/entity/ChildEntity.js.map +1 -1
- package/driver/DriverUtils.js +19 -11
- package/driver/DriverUtils.js.map +1 -1
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +53 -6
- package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +53 -6
- package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +3 -3
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +4 -0
- package/driver/cockroachdb/CockroachQueryRunner.js +112 -42
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +72 -14
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoConnectionOptions.d.ts +4 -0
- package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/driver/mongodb/MongoDriver.d.ts +7 -3
- package/driver/mongodb/MongoDriver.js +15 -14
- package/driver/mongodb/MongoDriver.js.map +1 -1
- package/driver/mongodb/MongoQueryRunner.d.ts +3 -3
- package/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +4 -4
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +4 -0
- package/driver/mysql/MysqlQueryRunner.js +107 -38
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.js +52 -6
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +7 -7
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +8 -0
- package/driver/postgres/PostgresQueryRunner.js +107 -18
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeDriver.js +1 -2
- package/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.js +56 -8
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.js +4 -0
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +55 -7
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +133 -62
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/MongoEntityManager.js +14 -3
- package/entity-manager/MongoEntityManager.js.map +1 -1
- package/find-options/FindOneOptions.d.ts +4 -0
- package/find-options/FindOneOptions.js.map +1 -1
- package/find-options/FindOperator.d.ts +20 -1
- package/find-options/FindOperator.js +27 -1
- package/find-options/FindOperator.js.map +1 -1
- package/find-options/FindOperatorType.d.ts +1 -1
- package/find-options/FindOperatorType.js.map +1 -1
- package/find-options/FindOptionsUtils.js +5 -1
- package/find-options/FindOptionsUtils.js.map +1 -1
- package/find-options/operator/ILike.d.ts +6 -0
- package/find-options/operator/ILike.js +13 -0
- package/find-options/operator/ILike.js.map +1 -0
- package/find-options/operator/Raw.d.ts +14 -2
- package/find-options/operator/Raw.js +5 -6
- package/find-options/operator/Raw.js.map +1 -1
- package/index.d.ts +2 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/logger/Logger.d.ts +1 -1
- package/logger/Logger.js.map +1 -1
- package/metadata/ColumnMetadata.js +14 -3
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/types/EventListenerTypes.d.ts +7 -7
- package/metadata/types/EventListenerTypes.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +14 -8
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +8 -5
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/package.json +3 -2
- package/persistence/EntityPersistExecutor.js +1 -1
- package/persistence/EntityPersistExecutor.js.map +1 -1
- package/persistence/Subject.js +2 -1
- package/persistence/Subject.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.js +2 -1
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +31 -8
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +7 -0
- package/query-builder/QueryBuilder.js +124 -31
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/QueryExpressionMap.d.ts +4 -0
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/SelectQueryBuilder.d.ts +5 -0
- package/query-builder/SelectQueryBuilder.js +73 -40
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +2 -1
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +6 -3
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +1 -1
- package/query-runner/QueryRunner.js.map +1 -1
- package/repository/TreeRepository.js +2 -2
- package/repository/TreeRepository.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +24 -0
- package/subscriber/Broadcaster.js +120 -0
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/EntitySubscriberInterface.d.ts +27 -0
- package/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/subscriber/event/TransactionCommitEvent.d.ts +22 -0
- package/subscriber/event/TransactionCommitEvent.js +4 -0
- package/subscriber/event/TransactionCommitEvent.js.map +1 -0
- package/subscriber/event/TransactionRollbackEvent.d.ts +22 -0
- package/subscriber/event/TransactionRollbackEvent.js +4 -0
- package/subscriber/event/TransactionRollbackEvent.js.map +1 -0
- package/subscriber/event/TransactionStartEvent.d.ts +22 -0
- package/subscriber/event/TransactionStartEvent.js +4 -0
- package/subscriber/event/TransactionStartEvent.js.map +1 -0
- package/typeorm-model-shim.js +145 -128
- package/util/DateUtils.js +1 -7
- package/util/DateUtils.js.map +1 -1
|
@@ -40,7 +40,8 @@ var UpdateQueryBuilder = /** @class */ (function (_super) {
|
|
|
40
40
|
* Gets generated sql query without parameters being replaced.
|
|
41
41
|
*/
|
|
42
42
|
UpdateQueryBuilder.prototype.getQuery = function () {
|
|
43
|
-
var sql = this.
|
|
43
|
+
var sql = this.createComment();
|
|
44
|
+
sql += this.createUpdateExpression();
|
|
44
45
|
sql += this.createOrderByExpression();
|
|
45
46
|
sql += this.createLimitExpression();
|
|
46
47
|
return sql.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-builder/UpdateQueryBuilder.ts"],"names":[],"mappings":"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","file":"UpdateQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {SapDriver} from \"../driver/sap/SapDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {WhereExpression} from \"./WhereExpression\";\nimport {Brackets} from \"./Brackets\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {UpdateResult} from \"./result/UpdateResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {SqljsDriver} from \"../driver/sqljs/SqljsDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {LimitOnUpdateNotSupportedError} from \"../error/LimitOnUpdateNotSupportedError\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {UpdateValuesMissingError} from \"../error/UpdateValuesMissingError\";\nimport {EntityColumnNotFound} from \"../error/EntityColumnNotFound\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport {BetterSqlite3Driver} from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class UpdateQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpression {\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 const broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, this.expressionMap.valuesSet);\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\n }\n\n let declareSql: string | null = null;\n let selectOutputSql: string | null = null;\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.getUpdationReturningColumns();\n\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = `SELECT * FROM @OutputTable`;\n }\n }\n\n // execute update query\n const [updateSql, parameters] = this.getQueryAndParameters();\n const updateResult = new UpdateResult();\n const statements = [declareSql, updateSql, selectOutputSql];\n const result = await queryRunner.query(\n statements.filter(sql => sql != null).join(\";\\n\\n\"),\n parameters,\n );\n\n if (this.connection.driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else if (this.connection.driver instanceof MysqlDriver) {\n updateResult.raw = result;\n updateResult.affected = result.affectedRows;\n }\n else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n updateResult.raw = result;\n updateResult.affected = result.changes;\n }\n else {\n updateResult.raw = result;\n }\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 const broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias!.metadata);\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\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 if (this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive) {\n await this.connection.driver.autoSave();\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Values needs to be updated.\n */\n set(values: QueryDeepPartialEntity<Entity>): this {\n this.expressionMap.valuesSet = values;\n return this;\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.computeWhereParameter(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, parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(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, parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(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.createWhereIdsExpression(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.createWhereIdsExpression(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.createWhereIdsExpression(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 Error(`.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 Error(`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 valuesSet = this.getValueSet();\n const metadata = this.expressionMap.mainAlias!.hasMetadata ? this.expressionMap.mainAlias!.metadata : undefined;\n\n // prepare columns and values to be updated\n const updateColumnAndValues: string[] = [];\n const updatedColumns: ColumnMetadata[] = [];\n const newParameters: ObjectLiteral = {};\n let parametersCount = this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver\n ? 0 : Object.keys(this.expressionMap.nativeParameters).length;\n if (metadata) {\n EntityMetadata.createPropertyPath(metadata, valuesSet).forEach(propertyPath => {\n // todo: make this and other query builder to work with properly with tables without metadata\n const columns = metadata.findColumnsWithPropertyPath(propertyPath);\n\n if (columns.length <= 0) {\n throw new EntityColumnNotFound(propertyPath);\n }\n\n columns.forEach(column => {\n if (!column.isUpdate) { return; }\n updatedColumns.push(column);\n\n const paramName = \"upd_\" + column.databaseName;\n\n //\n let value = column.getEntityValue(valuesSet);\n if (column.referencedColumn && value instanceof Object) {\n value = column.referencedColumn.getEntityValue(value);\n }\n else if (!(value instanceof Function)) {\n value = this.connection.driver.preparePersistentValue(value, column);\n }\n\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(this.escape(column.databaseName) + \" = \" + value());\n } else if (this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(this.escape(column.databaseName) + \" = NULL\");\n } else {\n if (this.connection.driver instanceof SqlServerDriver) {\n value = this.connection.driver.parametrizeValue(column, value);\n\n // } else if (value instanceof Array) {\n // value = new ArrayParameter(value);\n }\n\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n newParameters[paramName] = value;\n } else {\n this.expressionMap.nativeParameters[paramName] = value;\n }\n\n let expression = null;\n if ((this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n const useLegacy = this.connection.driver.options.legacySpatialSupport;\n const geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression = `${geomFromText}(${this.connection.driver.createParameter(paramName, parametersCount)}, ${column.srid})`;\n } else {\n expression = `${geomFromText}(${this.connection.driver.createParameter(paramName, parametersCount)})`;\n }\n } else if (this.connection.driver instanceof PostgresDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression = `ST_SetSRID(ST_GeomFromGeoJSON(${this.connection.driver.createParameter(paramName, parametersCount)}), ${column.srid})::${column.type}`;\n } else {\n expression = `ST_GeomFromGeoJSON(${this.connection.driver.createParameter(paramName, parametersCount)})::${column.type}`;\n }\n } else if (this.connection.driver instanceof SqlServerDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression = column.type + \"::STGeomFromText(\" + this.connection.driver.createParameter(paramName, parametersCount) + \", \" + (column.srid || \"0\") + \")\";\n } else {\n expression = this.connection.driver.createParameter(paramName, parametersCount);\n }\n updateColumnAndValues.push(this.escape(column.databaseName) + \" = \" + expression);\n parametersCount++;\n }\n });\n });\n\n if (metadata.versionColumn && updatedColumns.indexOf(metadata.versionColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn && updatedColumns.indexOf(metadata.updateDateColumn) === -1)\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 } else {\n Object.keys(valuesSet).map(key => {\n let value = valuesSet[key];\n\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(this.escape(key) + \" = \" + value());\n } else if (this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(this.escape(key) + \" = NULL\");\n } else {\n\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n newParameters[key] = value;\n } else {\n this.expressionMap.nativeParameters[key] = value;\n }\n\n updateColumnAndValues.push(this.escape(key) + \" = \" + this.connection.driver.createParameter(key, parametersCount));\n parametersCount++;\n }\n });\n }\n\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\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 || this.connection.driver instanceof AuroraDataApiDriver) {\n return \" LIMIT \" + limit;\n } else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n\n return \"\";\n }\n\n /**\n * Gets array of values need to be inserted into the target table.\n */\n protected getValueSet(): ObjectLiteral {\n if (this.expressionMap.valuesSet instanceof Object)\n return this.expressionMap.valuesSet;\n\n throw new UpdateValuesMissingError();\n }\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-builder/UpdateQueryBuilder.ts"],"names":[],"mappings":"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","file":"UpdateQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {SapDriver} from \"../driver/sap/SapDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {Connection} from \"../connection/Connection\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {WhereExpression} from \"./WhereExpression\";\nimport {Brackets} from \"./Brackets\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {UpdateResult} from \"./result/UpdateResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {SqljsDriver} from \"../driver/sqljs/SqljsDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport {OrderByCondition} from \"../find-options/OrderByCondition\";\nimport {LimitOnUpdateNotSupportedError} from \"../error/LimitOnUpdateNotSupportedError\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {UpdateValuesMissingError} from \"../error/UpdateValuesMissingError\";\nimport {EntityColumnNotFound} from \"../error/EntityColumnNotFound\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport {BetterSqlite3Driver} from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class UpdateQueryBuilder<Entity> extends QueryBuilder<Entity> implements WhereExpression {\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.createComment();\n 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 const broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, this.expressionMap.valuesSet);\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\n }\n\n let declareSql: string | null = null;\n let selectOutputSql: string | null = null;\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.getUpdationReturningColumns();\n\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = `SELECT * FROM @OutputTable`;\n }\n }\n\n // execute update query\n const [updateSql, parameters] = this.getQueryAndParameters();\n const updateResult = new UpdateResult();\n const statements = [declareSql, updateSql, selectOutputSql];\n const result = await queryRunner.query(\n statements.filter(sql => sql != null).join(\";\\n\\n\"),\n parameters,\n );\n\n if (this.connection.driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else if (this.connection.driver instanceof MysqlDriver) {\n updateResult.raw = result;\n updateResult.affected = result.affectedRows;\n }\n else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n updateResult.raw = result;\n updateResult.affected = result.changes;\n }\n else {\n updateResult.raw = result;\n }\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 const broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias!.metadata);\n if (broadcastResult.promises.length > 0) await Promise.all(broadcastResult.promises);\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 if (this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive) {\n await this.connection.driver.autoSave();\n }\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Values needs to be updated.\n */\n set(values: QueryDeepPartialEntity<Entity>): this {\n this.expressionMap.valuesSet = values;\n return this;\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.computeWhereParameter(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, parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(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, parameters?: ObjectLiteral): this {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(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.createWhereIdsExpression(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.createWhereIdsExpression(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.createWhereIdsExpression(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 Error(`.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 Error(`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 valuesSet = this.getValueSet();\n const metadata = this.expressionMap.mainAlias!.hasMetadata ? this.expressionMap.mainAlias!.metadata : undefined;\n\n // prepare columns and values to be updated\n const updateColumnAndValues: string[] = [];\n const updatedColumns: ColumnMetadata[] = [];\n const newParameters: ObjectLiteral = {};\n let parametersCount = this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver\n ? 0 : Object.keys(this.expressionMap.nativeParameters).length;\n if (metadata) {\n EntityMetadata.createPropertyPath(metadata, valuesSet).forEach(propertyPath => {\n // todo: make this and other query builder to work with properly with tables without metadata\n const columns = metadata.findColumnsWithPropertyPath(propertyPath);\n\n if (columns.length <= 0) {\n throw new EntityColumnNotFound(propertyPath);\n }\n\n columns.forEach(column => {\n if (!column.isUpdate) { return; }\n updatedColumns.push(column);\n\n const paramName = \"upd_\" + column.databaseName;\n\n //\n let value = column.getEntityValue(valuesSet);\n if (column.referencedColumn && value instanceof Object) {\n value = column.referencedColumn.getEntityValue(value);\n }\n else if (!(value instanceof Function)) {\n value = this.connection.driver.preparePersistentValue(value, column);\n }\n\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(this.escape(column.databaseName) + \" = \" + value());\n } else if (this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(this.escape(column.databaseName) + \" = NULL\");\n } else {\n if (this.connection.driver instanceof SqlServerDriver) {\n value = this.connection.driver.parametrizeValue(column, value);\n\n // } else if (value instanceof Array) {\n // value = new ArrayParameter(value);\n }\n\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n newParameters[paramName] = value;\n } else {\n this.expressionMap.nativeParameters[paramName] = value;\n }\n\n let expression = null;\n if ((this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n const useLegacy = this.connection.driver.options.legacySpatialSupport;\n const geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression = `${geomFromText}(${this.connection.driver.createParameter(paramName, parametersCount)}, ${column.srid})`;\n } else {\n expression = `${geomFromText}(${this.connection.driver.createParameter(paramName, parametersCount)})`;\n }\n } else if (this.connection.driver instanceof PostgresDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression = `ST_SetSRID(ST_GeomFromGeoJSON(${this.connection.driver.createParameter(paramName, parametersCount)}), ${column.srid})::${column.type}`;\n } else {\n expression = `ST_GeomFromGeoJSON(${this.connection.driver.createParameter(paramName, parametersCount)})::${column.type}`;\n }\n } else if (this.connection.driver instanceof SqlServerDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression = column.type + \"::STGeomFromText(\" + this.connection.driver.createParameter(paramName, parametersCount) + \", \" + (column.srid || \"0\") + \")\";\n } else {\n expression = this.connection.driver.createParameter(paramName, parametersCount);\n }\n updateColumnAndValues.push(this.escape(column.databaseName) + \" = \" + expression);\n parametersCount++;\n }\n });\n });\n\n if (metadata.versionColumn && updatedColumns.indexOf(metadata.versionColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn && updatedColumns.indexOf(metadata.updateDateColumn) === -1)\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 } else {\n Object.keys(valuesSet).map(key => {\n let value = valuesSet[key];\n\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(this.escape(key) + \" = \" + value());\n } else if (this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(this.escape(key) + \" = NULL\");\n } else {\n\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n newParameters[key] = value;\n } else {\n this.expressionMap.nativeParameters[key] = value;\n }\n\n updateColumnAndValues.push(this.escape(key) + \" = \" + this.connection.driver.createParameter(key, parametersCount));\n parametersCount++;\n }\n });\n }\n\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\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 || this.connection.driver instanceof AuroraDataApiDriver) {\n return \" LIMIT \" + limit;\n } else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n\n return \"\";\n }\n\n /**\n * Gets array of values need to be inserted into the target table.\n */\n protected getValueSet(): ObjectLiteral {\n if (this.expressionMap.valuesSet instanceof Object)\n return this.expressionMap.valuesSet;\n\n throw new UpdateValuesMissingError();\n }\n\n}\n"],"sourceRoot":".."}
|
|
@@ -58,6 +58,9 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
58
58
|
if (Buffer.isBuffer(keyValue)) {
|
|
59
59
|
return keyValue.toString("hex");
|
|
60
60
|
}
|
|
61
|
+
if (typeof keyValue === "object") {
|
|
62
|
+
return JSON.stringify(keyValue);
|
|
63
|
+
}
|
|
61
64
|
return keyValue;
|
|
62
65
|
}).join("_"); // todo: check partial
|
|
63
66
|
var items = map.get(id);
|
|
@@ -80,7 +83,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
80
83
|
if (metadata.discriminatorColumn) {
|
|
81
84
|
var discriminatorValues_1 = rawResults.map(function (result) { return result[DriverUtils_1.DriverUtils.buildColumnAlias(_this.driver, alias.name, alias.metadata.discriminatorColumn.databaseName)]; });
|
|
82
85
|
var discriminatorMetadata = metadata.childEntityMetadatas.find(function (childEntityMetadata) {
|
|
83
|
-
return
|
|
86
|
+
return typeof discriminatorValues_1.find(function (value) { return value === childEntityMetadata.discriminatorValue; }) !== 'undefined';
|
|
84
87
|
});
|
|
85
88
|
if (discriminatorMetadata)
|
|
86
89
|
metadata = discriminatorMetadata;
|
|
@@ -203,7 +206,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
203
206
|
var idMap = columns.reduce(function (idMap, column) {
|
|
204
207
|
var value = result[column.databaseName];
|
|
205
208
|
if (relation.isOneToMany || relation.isOneToOneNotOwner) {
|
|
206
|
-
if (column.referencedColumn) // if column is a relation
|
|
209
|
+
if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation
|
|
207
210
|
value = column.referencedColumn.createValueMap(value);
|
|
208
211
|
return OrmUtils_1.OrmUtils.mergeDeep(idMap, column.createValueMap(value));
|
|
209
212
|
}
|
|
@@ -222,7 +225,7 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () {
|
|
|
222
225
|
}
|
|
223
226
|
}
|
|
224
227
|
return idMap;
|
|
225
|
-
}).filter(function (result) { return result; });
|
|
228
|
+
}).filter(function (result) { return result !== undefined; });
|
|
226
229
|
var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(".");
|
|
227
230
|
var mapToProperty = function (properties, map, value) {
|
|
228
231
|
var property = properties.shift();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-builder/transformer/RawSqlResultsToEntityTransformer.ts"],"names":[],"mappings":"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","file":"RawSqlResultsToEntityTransformer.js","sourcesContent":["import {Driver} from \"../../driver/Driver\";\nimport {RelationIdLoadResult} from \"../relation-id/RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {Alias} from \"../Alias\";\nimport {RelationCountLoadResult} from \"../relation-count/RelationCountLoadResult\";\nimport {RelationMetadata} from \"../../metadata/RelationMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {QueryExpressionMap} from \"../QueryExpressionMap\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {QueryRunner} from \"../..\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\n\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nexport class RawSqlResultsToEntityTransformer {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected expressionMap: QueryExpressionMap,\n protected driver: Driver,\n protected rawRelationIdResults: RelationIdLoadResult[],\n protected rawRelationCountResults: RelationCountLoadResult[],\n protected queryRunner?: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n transform(rawResults: any[], alias: Alias): any[] {\n const group = this.group(rawResults, alias);\n const entities: any[] = [];\n group.forEach(results => {\n const entity = this.transformRawResultsGroup(results, alias);\n if (entity !== undefined)\n entities.push(entity);\n });\n return entities;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Groups given raw results by ids of given alias.\n */\n protected group(rawResults: any[], alias: Alias): Map<string, any[]> {\n const map = new Map();\n const keys: string[] = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push(...alias.metadata.columns.map(column => DriverUtils.buildColumnAlias(this.driver, alias.name, column.databaseName)));\n } else {\n keys.push(...alias.metadata.primaryColumns.map(column => DriverUtils.buildColumnAlias(this.driver, alias.name, column.databaseName)));\n }\n rawResults.forEach(rawResult => {\n const id = keys.map(key => {\n const keyValue = rawResult[key];\n\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n\n return keyValue;\n }).join(\"_\"); // todo: check partial\n\n const items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n } else {\n items.push(rawResult);\n }\n });\n return map;\n }\n\n /**\n * Transforms set of data results into single entity.\n */\n protected transformRawResultsGroup(rawResults: any[], alias: Alias): ObjectLiteral|undefined {\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n let metadata = alias.metadata;\n\n if (metadata.discriminatorColumn) {\n const discriminatorValues = rawResults.map(result => result[DriverUtils.buildColumnAlias(this.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)]);\n const discriminatorMetadata = metadata.childEntityMetadatas.find(childEntityMetadata => {\n return !!discriminatorValues.find(value => value === childEntityMetadata.discriminatorValue);\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n let entity: any = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner);\n\n // get value from columns selections and put them into newly created entity\n const hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n const hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n const hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n const hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(column => column.isVirtual === false).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n\n return undefined;\n }\n\n // get value from columns selections and put them into object\n protected transformColumns(rawResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n metadata.columns.forEach(column => {\n\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(metadata => metadata.target).indexOf(column.target) !== -1)\n return;\n\n const value = rawResults[0][DriverUtils.buildColumnAlias(this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!this.expressionMap.selects.find(select => select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath))\n return;\n\n column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n }\n\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n protected transformJoins(rawResults: any[], entity: ObjectLiteral, alias: Alias, metadata: EntityMetadata) {\n let hasData = false;\n\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildColumnAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n\n this.expressionMap.joinAttributes.forEach(join => { // todo: we have problem here - when inner joins are used without selects it still create empty array\n\n // skip joins without metadata\n if (!join.metadata)\n return;\n\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(relation => relation === join.relation))\n return;\n\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n } else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation!.propertyPath)\n return;\n }\n\n // transform joined data into entities\n let result: any = this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n\n } else { // otherwise set to relation\n join.relation!.setEntityValue(entity, result);\n }\n\n hasData = true;\n });\n return hasData;\n }\n\n protected transformRelationIds(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n this.rawRelationIdResults.forEach(rawRelationIdResult => {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n\n const relation = rawRelationIdResult.relationIdAttribute.relation;\n const valueMap = this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n\n const idMaps = rawRelationIdResult.results.map(result => {\n const entityPrimaryIds = this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n }\n }\n\n const idMap = columns.reduce((idMap, column) => {\n let value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.referencedColumn) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n } else {\n if (column.referencedColumn!.referencedColumn) // if column is a relation\n value = column.referencedColumn!.referencedColumn!.createValueMap(value);\n\n return OrmUtils.mergeDeep(idMap, column.referencedColumn!.createValueMap(value));\n }\n }, {} as ObjectLiteral);\n\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n } else {\n return columns[0].referencedColumn!.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(result => result);\n\n const properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n const mapToProperty = (properties: string[], map: ObjectLiteral, value: any): any => {\n\n const property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n } else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n } else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n } else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n\n return hasData;\n }\n\n protected transformRelationCounts(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral): boolean {\n let hasData = false;\n this.rawRelationCountResults\n .filter(rawRelationCountResult => rawRelationCountResult.relationCountAttribute.parentAlias === alias.name)\n .forEach(rawRelationCountResult => {\n const relation = rawRelationCountResult.relationCountAttribute.relation;\n let referenceColumnName: string;\n\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName; // todo: fix joinColumns[0]\n\n } else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.databaseName : relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName;\n }\n\n const referenceColumnValue = rawSqlResults[0][DriverUtils.buildColumnAlias(this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(result => result[\"parentId\"] === referenceColumnValue)\n .forEach(result => {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n\n return hasData;\n }\n\n private createValueMapFromJoinColumns(relation: RelationMetadata, parentAlias: string, rawSqlResults: any[]): ObjectLiteral {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((valueMap, column) => {\n rawSqlResults.forEach(rawSqlResult => {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(this.driver, parentAlias, column.databaseName)], column);\n } else {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(this.driver, parentAlias, column.referencedColumn!.databaseName)], column);\n }\n });\n return valueMap;\n }, {} as ObjectLiteral);\n\n }\n\n private extractEntityPrimaryIds(relation: RelationMetadata, relationIdRawResult: any) {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((data, column) => {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {} as ObjectLiteral);\n }\n\n /*private removeVirtualColumns(entity: ObjectLiteral, alias: Alias) {\n const virtualColumns = this.expressionMap.selects\n .filter(select => select.virtual)\n .map(select => select.selection.replace(alias.name + \".\", \"\"));\n\n virtualColumns.forEach(virtualColumn => delete entity[virtualColumn]);\n }*/\n\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-builder/transformer/RawSqlResultsToEntityTransformer.ts"],"names":[],"mappings":"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","file":"RawSqlResultsToEntityTransformer.js","sourcesContent":["import {Driver} from \"../../driver/Driver\";\nimport {RelationIdLoadResult} from \"../relation-id/RelationIdLoadResult\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {Alias} from \"../Alias\";\nimport {RelationCountLoadResult} from \"../relation-count/RelationCountLoadResult\";\nimport {RelationMetadata} from \"../../metadata/RelationMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {QueryExpressionMap} from \"../QueryExpressionMap\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {QueryRunner} from \"../..\";\nimport {DriverUtils} from \"../../driver/DriverUtils\";\n\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nexport class RawSqlResultsToEntityTransformer {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected expressionMap: QueryExpressionMap,\n protected driver: Driver,\n protected rawRelationIdResults: RelationIdLoadResult[],\n protected rawRelationCountResults: RelationCountLoadResult[],\n protected queryRunner?: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n transform(rawResults: any[], alias: Alias): any[] {\n const group = this.group(rawResults, alias);\n const entities: any[] = [];\n group.forEach(results => {\n const entity = this.transformRawResultsGroup(results, alias);\n if (entity !== undefined)\n entities.push(entity);\n });\n return entities;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Groups given raw results by ids of given alias.\n */\n protected group(rawResults: any[], alias: Alias): Map<string, any[]> {\n const map = new Map();\n const keys: string[] = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push(...alias.metadata.columns.map(column => DriverUtils.buildColumnAlias(this.driver, alias.name, column.databaseName)));\n } else {\n keys.push(...alias.metadata.primaryColumns.map(column => DriverUtils.buildColumnAlias(this.driver, alias.name, column.databaseName)));\n }\n rawResults.forEach(rawResult => {\n const id = keys.map(key => {\n const keyValue = rawResult[key];\n\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n\n return keyValue;\n }).join(\"_\"); // todo: check partial\n\n const items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n } else {\n items.push(rawResult);\n }\n });\n return map;\n }\n\n /**\n * Transforms set of data results into single entity.\n */\n protected transformRawResultsGroup(rawResults: any[], alias: Alias): ObjectLiteral|undefined {\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n let metadata = alias.metadata;\n\n if (metadata.discriminatorColumn) {\n const discriminatorValues = rawResults.map(result => result[DriverUtils.buildColumnAlias(this.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)]);\n const discriminatorMetadata = metadata.childEntityMetadatas.find(childEntityMetadata => {\n return typeof discriminatorValues.find(value => value === childEntityMetadata.discriminatorValue) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n let entity: any = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner);\n\n // get value from columns selections and put them into newly created entity\n const hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n const hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n const hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n const hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n const hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(column => column.isVirtual === false).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n\n return undefined;\n }\n\n // get value from columns selections and put them into object\n protected transformColumns(rawResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n metadata.columns.forEach(column => {\n\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(metadata => metadata.target).indexOf(column.target) !== -1)\n return;\n\n const value = rawResults[0][DriverUtils.buildColumnAlias(this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!this.expressionMap.selects.find(select => select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath))\n return;\n\n column.setEntityValue(entity, this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n }\n\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n protected transformJoins(rawResults: any[], entity: ObjectLiteral, alias: Alias, metadata: EntityMetadata) {\n let hasData = false;\n\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildColumnAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n\n this.expressionMap.joinAttributes.forEach(join => { // todo: we have problem here - when inner joins are used without selects it still create empty array\n\n // skip joins without metadata\n if (!join.metadata)\n return;\n\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(relation => relation === join.relation))\n return;\n\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n } else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation!.propertyPath)\n return;\n }\n\n // transform joined data into entities\n let result: any = this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n\n } else { // otherwise set to relation\n join.relation!.setEntityValue(entity, result);\n }\n\n hasData = true;\n });\n return hasData;\n }\n\n protected transformRelationIds(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral, metadata: EntityMetadata): boolean {\n let hasData = false;\n this.rawRelationIdResults.forEach(rawRelationIdResult => {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n\n const relation = rawRelationIdResult.relationIdAttribute.relation;\n const valueMap = this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n\n const idMaps = rawRelationIdResult.results.map(result => {\n const entityPrimaryIds = this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n }\n }\n\n const idMap = columns.reduce((idMap, column) => {\n let value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n } else {\n if (column.referencedColumn!.referencedColumn) // if column is a relation\n value = column.referencedColumn!.referencedColumn!.createValueMap(value);\n\n return OrmUtils.mergeDeep(idMap, column.referencedColumn!.createValueMap(value));\n }\n }, {} as ObjectLiteral);\n\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n } else {\n return columns[0].referencedColumn!.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(result => result !== undefined);\n\n const properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n const mapToProperty = (properties: string[], map: ObjectLiteral, value: any): any => {\n\n const property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n } else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n } else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n } else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n\n return hasData;\n }\n\n protected transformRelationCounts(rawSqlResults: any[], alias: Alias, entity: ObjectLiteral): boolean {\n let hasData = false;\n this.rawRelationCountResults\n .filter(rawRelationCountResult => rawRelationCountResult.relationCountAttribute.parentAlias === alias.name)\n .forEach(rawRelationCountResult => {\n const relation = rawRelationCountResult.relationCountAttribute.relation;\n let referenceColumnName: string;\n\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName; // todo: fix joinColumns[0]\n\n } else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.databaseName : relation.inverseRelation!.joinColumns[0].referencedColumn!.databaseName;\n }\n\n const referenceColumnValue = rawSqlResults[0][DriverUtils.buildColumnAlias(this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(result => result[\"parentId\"] === referenceColumnValue)\n .forEach(result => {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n\n return hasData;\n }\n\n private createValueMapFromJoinColumns(relation: RelationMetadata, parentAlias: string, rawSqlResults: any[]): ObjectLiteral {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((valueMap, column) => {\n rawSqlResults.forEach(rawSqlResult => {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(this.driver, parentAlias, column.databaseName)], column);\n } else {\n valueMap[column.databaseName] = this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(this.driver, parentAlias, column.referencedColumn!.databaseName)], column);\n }\n });\n return valueMap;\n }, {} as ObjectLiteral);\n\n }\n\n private extractEntityPrimaryIds(relation: RelationMetadata, relationIdRawResult: any) {\n let columns: ColumnMetadata[];\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(joinColumn => joinColumn);\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn);\n } else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(joinColumn => joinColumn);\n } else {\n columns = relation.inverseRelation!.inverseJoinColumns.map(joinColumn => joinColumn);\n }\n }\n return columns.reduce((data, column) => {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {} as ObjectLiteral);\n }\n\n /*private removeVirtualColumns(entity: ObjectLiteral, alias: Alias) {\n const virtualColumns = this.expressionMap.selects\n .filter(select => select.virtual)\n .map(select => select.selection.replace(alias.name + \".\", \"\"));\n\n virtualColumns.forEach(virtualColumn => delete entity[virtualColumn]);\n }*/\n\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/query-runner/QueryRunner.ts"],"names":[],"mappings":"","file":"QueryRunner.js","sourcesContent":["import {TableColumn} from \"../schema-builder/table/TableColumn\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {TableForeignKey} from \"../schema-builder/table/TableForeignKey\";\nimport {TableIndex} from \"../schema-builder/table/TableIndex\";\nimport {Connection} from \"../connection/Connection\";\nimport {ReadStream} from \"../platform/PlatformTools\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {SqlInMemory} from \"../driver/SqlInMemory\";\nimport {TableUnique} from \"../schema-builder/table/TableUnique\";\nimport {View} from \"../schema-builder/view/View\";\nimport {Broadcaster} from \"../subscriber/Broadcaster\";\nimport {TableCheck} from \"../schema-builder/table/TableCheck\";\nimport {IsolationLevel} from \"../driver/types/IsolationLevel\";\nimport {TableExclusion} from \"../schema-builder/table/TableExclusion\";\n\n/**\n * Runs queries on a single database connection.\n */\nexport interface QueryRunner {\n\n /**\n * Connection used by this query runner.\n */\n readonly connection: Connection;\n\n /**\n * Broadcaster used on this query runner to broadcast entity events.\n */\n readonly broadcaster: Broadcaster;\n\n /**\n * Entity manager working only with this query runner.\n */\n readonly manager: EntityManager;\n\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n readonly isReleased: boolean;\n\n /**\n * Indicates if transaction is in progress.\n */\n readonly isTransactionActive: boolean;\n\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n data: ObjectLiteral;\n\n /**\n * All synchronized tables in the database.\n */\n loadedTables: Table[];\n\n /**\n * All synchronized views in the database.\n */\n loadedViews: View[];\n\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n connect(): Promise<any>;\n\n /**\n * Releases used database connection.\n * You cannot use query runner methods after connection is released.\n */\n release(): Promise<void>;\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful with using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n */\n clearDatabase(database?: string): Promise<void>;\n\n /**\n * Starts transaction.\n */\n startTransaction(isolationLevel?: IsolationLevel): Promise<void>;\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n commitTransaction(): Promise<void>;\n\n /**\n * Ends transaction.\n * Error will be thrown if transaction was not started.\n */\n rollbackTransaction(): Promise<void>;\n\n /**\n * Executes a given SQL query and returns raw database results.\n */\n query(query: string, parameters?: any[]): Promise<any>;\n\n /**\n * Returns raw data stream.\n */\n stream(query: string, parameters?: any[], onEnd?: Function, onError?: Function): Promise<ReadStream>;\n\n /**\n * Returns all available database names including system databases.\n */\n getDatabases(): Promise<string[]>;\n\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n * Useful for SQLServer and Postgres only.\n */\n getSchemas(database?: string): Promise<string[]>;\n\n /**\n * Loads a table by a given name from the database.\n */\n getTable(tablePath: string): Promise<Table|undefined>;\n\n /**\n * Loads all tables from the database and returns them.\n *\n * todo: make tablePaths optional\n */\n getTables(tablePaths: string[]): Promise<Table[]>;\n\n /**\n * Loads a view by a given name from the database.\n */\n getView(viewPath: string): Promise<View|undefined>;\n\n /**\n * Loads all views from the database and returns them.\n */\n getViews(viewPaths: string[]): Promise<View[]>;\n\n /**\n * Checks if a database with the given name exist.\n */\n hasDatabase(database: string): Promise<boolean>;\n\n /**\n * Checks if a schema with the given name exist.\n */\n hasSchema(schema: string): Promise<boolean>;\n\n /**\n * Checks if a table with the given name exist.\n */\n hasTable(table: Table|string): Promise<boolean>;\n\n /**\n * Checks if a column exist in the table.\n */\n hasColumn(table: Table|string, columnName: string): Promise<boolean>;\n\n /**\n * Creates a new database.\n */\n createDatabase(database: string, ifNotExist?: boolean): Promise<void>;\n\n /**\n * Drops database.\n */\n dropDatabase(database: string, ifExist?: boolean): Promise<void>;\n\n /**\n * Creates a new table schema.\n */\n createSchema(schemaPath: string, ifNotExist?: boolean): Promise<void>;\n\n /**\n * Drops table schema.\n * For SqlServer can accept schema path (e.g. 'dbName.schemaName') as parameter.\n * If schema path passed, it will drop schema in specified database.\n */\n dropSchema(schemaPath: string, ifExist?: boolean, isCascade?: boolean): Promise<void>;\n\n /**\n * Creates a new table.\n */\n createTable(table: Table, ifNotExist?: boolean, createForeignKeys?: boolean, createIndices?: boolean): Promise<void>;\n\n /**\n * Drops a table.\n */\n dropTable(table: Table|string, ifExist?: boolean, dropForeignKeys?: boolean, dropIndices?: boolean): Promise<void>;\n\n /**\n * Creates a new view.\n */\n createView(view: View, oldView?: View): Promise<void>;\n\n /**\n * Drops a view.\n */\n dropView(view: View|string): Promise<void>;\n\n /**\n * Renames a table.\n */\n renameTable(oldTableOrName: Table|string, newTableName: string): Promise<void>;\n\n /**\n * Adds a new column.\n */\n addColumn(table: Table|string, column: TableColumn): Promise<void>;\n\n /**\n * Adds new columns.\n */\n addColumns(table: Table|string, columns: TableColumn[]): Promise<void>;\n\n /**\n * Renames a column.\n */\n renameColumn(table: Table|string, oldColumnOrName: TableColumn|string, newColumnOrName: TableColumn|string): Promise<void>;\n\n /**\n * Changes a column in the table.\n */\n changeColumn(table: Table|string, oldColumn: TableColumn|string, newColumn: TableColumn): Promise<void>;\n\n /**\n * Changes columns in the table.\n */\n changeColumns(table: Table|string, changedColumns: { oldColumn: TableColumn, newColumn: TableColumn }[]): Promise<void>;\n\n /**\n * Drops a column in the table.\n */\n dropColumn(table: Table|string, column: TableColumn|string): Promise<void>;\n\n /**\n * Drops columns in the table.\n */\n dropColumns(table: Table|string, columns: TableColumn[]): Promise<void>;\n\n /**\n * Creates a new primary key.\n */\n createPrimaryKey(table: Table|string, columnNames: string[]): Promise<void>;\n\n /**\n * Updates composite primary keys.\n */\n updatePrimaryKeys(table: Table|string, columns: TableColumn[]): Promise<void>;\n\n /**\n * Drops a primary key.\n */\n dropPrimaryKey(table: Table|string): Promise<void>;\n\n /**\n * Creates a new unique constraint.\n */\n createUniqueConstraint(table: Table|string, uniqueConstraint: TableUnique): Promise<void>;\n\n /**\n * Creates new unique constraints.\n */\n createUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>;\n\n /**\n * Drops an unique constraint.\n */\n dropUniqueConstraint(table: Table|string, uniqueOrName: TableUnique|string): Promise<void>;\n\n /**\n * Drops unique constraints.\n */\n dropUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>;\n\n /**\n * Creates a new check constraint.\n */\n createCheckConstraint(table: Table|string, checkConstraint: TableCheck): Promise<void>;\n\n /**\n * Creates new check constraints.\n */\n createCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>;\n\n /**\n * Drops a check constraint.\n */\n dropCheckConstraint(table: Table|string, checkOrName: TableCheck|string): Promise<void>;\n\n /**\n * Drops check constraints.\n */\n dropCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>;\n\n /**\n * Creates a new exclusion constraint.\n */\n createExclusionConstraint(table: Table|string, exclusionConstraint: TableExclusion): Promise<void>;\n\n /**\n * Creates new exclusion constraints.\n */\n createExclusionConstraints(table: Table|string, exclusionConstraints: TableExclusion[]): Promise<void>;\n\n /**\n * Drops a exclusion constraint.\n */\n dropExclusionConstraint(table: Table|string, exclusionOrName: TableExclusion|string): Promise<void>;\n\n /**\n * Drops exclusion constraints.\n */\n dropExclusionConstraints(table: Table|string, exclusionConstraints: TableExclusion[]): Promise<void>;\n\n /**\n * Creates a new foreign key.\n */\n createForeignKey(table: Table|string, foreignKey: TableForeignKey): Promise<void>;\n\n /**\n * Creates new foreign keys.\n */\n createForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>;\n\n /**\n * Drops a foreign key.\n */\n dropForeignKey(table: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void>;\n\n /**\n * Drops foreign keys.\n */\n dropForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>;\n\n /**\n * Creates a new index.\n */\n createIndex(table: Table|string, index: TableIndex): Promise<void>;\n\n /**\n * Creates new indices.\n */\n createIndices(table: Table|string, indices: TableIndex[]): Promise<void>;\n\n /**\n * Drops an index.\n */\n dropIndex(table: Table|string, index: TableIndex|string): Promise<void>;\n\n /**\n * Drops indices.\n */\n dropIndices(table: Table|string, indices: TableIndex[]): Promise<void>;\n\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n clearTable(tableName: string): Promise<void>;\n\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n enableSqlMemory(): void;\n\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n disableSqlMemory(): void;\n\n /**\n * Flushes all memorized sqls.\n */\n clearSqlMemory(): void;\n\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n getMemorySql(): SqlInMemory;\n\n /**\n * Executes up sql queries.\n */\n executeMemoryUpSql(): Promise<void>;\n\n /**\n * Executes down sql queries.\n */\n executeMemoryDownSql(): Promise<void>;\n\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/query-runner/QueryRunner.ts"],"names":[],"mappings":"","file":"QueryRunner.js","sourcesContent":["import {TableColumn} from \"../schema-builder/table/TableColumn\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {TableForeignKey} from \"../schema-builder/table/TableForeignKey\";\nimport {TableIndex} from \"../schema-builder/table/TableIndex\";\nimport {Connection} from \"../connection/Connection\";\nimport {ReadStream} from \"../platform/PlatformTools\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {SqlInMemory} from \"../driver/SqlInMemory\";\nimport {TableUnique} from \"../schema-builder/table/TableUnique\";\nimport {View} from \"../schema-builder/view/View\";\nimport {Broadcaster} from \"../subscriber/Broadcaster\";\nimport {TableCheck} from \"../schema-builder/table/TableCheck\";\nimport {IsolationLevel} from \"../driver/types/IsolationLevel\";\nimport {TableExclusion} from \"../schema-builder/table/TableExclusion\";\n\n/**\n * Runs queries on a single database connection.\n */\nexport interface QueryRunner {\n\n /**\n * Connection used by this query runner.\n */\n readonly connection: Connection;\n\n /**\n * Broadcaster used on this query runner to broadcast entity events.\n */\n readonly broadcaster: Broadcaster;\n\n /**\n * Entity manager working only with this query runner.\n */\n readonly manager: EntityManager;\n\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n readonly isReleased: boolean;\n\n /**\n * Indicates if transaction is in progress.\n */\n readonly isTransactionActive: boolean;\n\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n data: ObjectLiteral;\n\n /**\n * All synchronized tables in the database.\n */\n loadedTables: Table[];\n\n /**\n * All synchronized views in the database.\n */\n loadedViews: View[];\n\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n connect(): Promise<any>;\n\n /**\n * Releases used database connection.\n * You cannot use query runner methods after connection is released.\n */\n release(): Promise<void>;\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful with using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n */\n clearDatabase(database?: string): Promise<void>;\n\n /**\n * Starts transaction.\n */\n startTransaction(isolationLevel?: IsolationLevel): Promise<void>;\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n commitTransaction(): Promise<void>;\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n rollbackTransaction(): Promise<void>;\n\n /**\n * Executes a given SQL query and returns raw database results.\n */\n query(query: string, parameters?: any[]): Promise<any>;\n\n /**\n * Returns raw data stream.\n */\n stream(query: string, parameters?: any[], onEnd?: Function, onError?: Function): Promise<ReadStream>;\n\n /**\n * Returns all available database names including system databases.\n */\n getDatabases(): Promise<string[]>;\n\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n * Useful for SQLServer and Postgres only.\n */\n getSchemas(database?: string): Promise<string[]>;\n\n /**\n * Loads a table by a given name from the database.\n */\n getTable(tablePath: string): Promise<Table|undefined>;\n\n /**\n * Loads all tables from the database and returns them.\n *\n * todo: make tablePaths optional\n */\n getTables(tablePaths: string[]): Promise<Table[]>;\n\n /**\n * Loads a view by a given name from the database.\n */\n getView(viewPath: string): Promise<View|undefined>;\n\n /**\n * Loads all views from the database and returns them.\n */\n getViews(viewPaths: string[]): Promise<View[]>;\n\n /**\n * Checks if a database with the given name exist.\n */\n hasDatabase(database: string): Promise<boolean>;\n\n /**\n * Checks if a schema with the given name exist.\n */\n hasSchema(schema: string): Promise<boolean>;\n\n /**\n * Checks if a table with the given name exist.\n */\n hasTable(table: Table|string): Promise<boolean>;\n\n /**\n * Checks if a column exist in the table.\n */\n hasColumn(table: Table|string, columnName: string): Promise<boolean>;\n\n /**\n * Creates a new database.\n */\n createDatabase(database: string, ifNotExist?: boolean): Promise<void>;\n\n /**\n * Drops database.\n */\n dropDatabase(database: string, ifExist?: boolean): Promise<void>;\n\n /**\n * Creates a new table schema.\n */\n createSchema(schemaPath: string, ifNotExist?: boolean): Promise<void>;\n\n /**\n * Drops table schema.\n * For SqlServer can accept schema path (e.g. 'dbName.schemaName') as parameter.\n * If schema path passed, it will drop schema in specified database.\n */\n dropSchema(schemaPath: string, ifExist?: boolean, isCascade?: boolean): Promise<void>;\n\n /**\n * Creates a new table.\n */\n createTable(table: Table, ifNotExist?: boolean, createForeignKeys?: boolean, createIndices?: boolean): Promise<void>;\n\n /**\n * Drops a table.\n */\n dropTable(table: Table|string, ifExist?: boolean, dropForeignKeys?: boolean, dropIndices?: boolean): Promise<void>;\n\n /**\n * Creates a new view.\n */\n createView(view: View, oldView?: View): Promise<void>;\n\n /**\n * Drops a view.\n */\n dropView(view: View|string): Promise<void>;\n\n /**\n * Renames a table.\n */\n renameTable(oldTableOrName: Table|string, newTableName: string): Promise<void>;\n\n /**\n * Adds a new column.\n */\n addColumn(table: Table|string, column: TableColumn): Promise<void>;\n\n /**\n * Adds new columns.\n */\n addColumns(table: Table|string, columns: TableColumn[]): Promise<void>;\n\n /**\n * Renames a column.\n */\n renameColumn(table: Table|string, oldColumnOrName: TableColumn|string, newColumnOrName: TableColumn|string): Promise<void>;\n\n /**\n * Changes a column in the table.\n */\n changeColumn(table: Table|string, oldColumn: TableColumn|string, newColumn: TableColumn): Promise<void>;\n\n /**\n * Changes columns in the table.\n */\n changeColumns(table: Table|string, changedColumns: { oldColumn: TableColumn, newColumn: TableColumn }[]): Promise<void>;\n\n /**\n * Drops a column in the table.\n */\n dropColumn(table: Table|string, column: TableColumn|string): Promise<void>;\n\n /**\n * Drops columns in the table.\n */\n dropColumns(table: Table|string, columns: TableColumn[]): Promise<void>;\n\n /**\n * Creates a new primary key.\n */\n createPrimaryKey(table: Table|string, columnNames: string[]): Promise<void>;\n\n /**\n * Updates composite primary keys.\n */\n updatePrimaryKeys(table: Table|string, columns: TableColumn[]): Promise<void>;\n\n /**\n * Drops a primary key.\n */\n dropPrimaryKey(table: Table|string): Promise<void>;\n\n /**\n * Creates a new unique constraint.\n */\n createUniqueConstraint(table: Table|string, uniqueConstraint: TableUnique): Promise<void>;\n\n /**\n * Creates new unique constraints.\n */\n createUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>;\n\n /**\n * Drops an unique constraint.\n */\n dropUniqueConstraint(table: Table|string, uniqueOrName: TableUnique|string): Promise<void>;\n\n /**\n * Drops unique constraints.\n */\n dropUniqueConstraints(table: Table|string, uniqueConstraints: TableUnique[]): Promise<void>;\n\n /**\n * Creates a new check constraint.\n */\n createCheckConstraint(table: Table|string, checkConstraint: TableCheck): Promise<void>;\n\n /**\n * Creates new check constraints.\n */\n createCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>;\n\n /**\n * Drops a check constraint.\n */\n dropCheckConstraint(table: Table|string, checkOrName: TableCheck|string): Promise<void>;\n\n /**\n * Drops check constraints.\n */\n dropCheckConstraints(table: Table|string, checkConstraints: TableCheck[]): Promise<void>;\n\n /**\n * Creates a new exclusion constraint.\n */\n createExclusionConstraint(table: Table|string, exclusionConstraint: TableExclusion): Promise<void>;\n\n /**\n * Creates new exclusion constraints.\n */\n createExclusionConstraints(table: Table|string, exclusionConstraints: TableExclusion[]): Promise<void>;\n\n /**\n * Drops a exclusion constraint.\n */\n dropExclusionConstraint(table: Table|string, exclusionOrName: TableExclusion|string): Promise<void>;\n\n /**\n * Drops exclusion constraints.\n */\n dropExclusionConstraints(table: Table|string, exclusionConstraints: TableExclusion[]): Promise<void>;\n\n /**\n * Creates a new foreign key.\n */\n createForeignKey(table: Table|string, foreignKey: TableForeignKey): Promise<void>;\n\n /**\n * Creates new foreign keys.\n */\n createForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>;\n\n /**\n * Drops a foreign key.\n */\n dropForeignKey(table: Table|string, foreignKeyOrName: TableForeignKey|string): Promise<void>;\n\n /**\n * Drops foreign keys.\n */\n dropForeignKeys(table: Table|string, foreignKeys: TableForeignKey[]): Promise<void>;\n\n /**\n * Creates a new index.\n */\n createIndex(table: Table|string, index: TableIndex): Promise<void>;\n\n /**\n * Creates new indices.\n */\n createIndices(table: Table|string, indices: TableIndex[]): Promise<void>;\n\n /**\n * Drops an index.\n */\n dropIndex(table: Table|string, index: TableIndex|string): Promise<void>;\n\n /**\n * Drops indices.\n */\n dropIndices(table: Table|string, indices: TableIndex[]): Promise<void>;\n\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n clearTable(tableName: string): Promise<void>;\n\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n enableSqlMemory(): void;\n\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n disableSqlMemory(): void;\n\n /**\n * Flushes all memorized sqls.\n */\n clearSqlMemory(): void;\n\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n getMemorySql(): SqlInMemory;\n\n /**\n * Executes up sql queries.\n */\n executeMemoryUpSql(): Promise<void>;\n\n /**\n * Executes down sql queries.\n */\n executeMemoryDownSql(): Promise<void>;\n\n}\n"],"sourceRoot":".."}
|
|
@@ -45,7 +45,7 @@ var TreeRepository = /** @class */ (function (_super) {
|
|
|
45
45
|
var _this = this;
|
|
46
46
|
var escapeAlias = function (alias) { return _this.manager.connection.driver.escape(alias); };
|
|
47
47
|
var escapeColumn = function (column) { return _this.manager.connection.driver.escape(column); };
|
|
48
|
-
var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName,
|
|
48
|
+
var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName, this.metadata.primaryColumns[0].propertyName);
|
|
49
49
|
return this.createQueryBuilder("treeEntity")
|
|
50
50
|
.where(escapeAlias("treeEntity") + "." + escapeColumn(parentPropertyName) + " IS NULL")
|
|
51
51
|
.getMany();
|
|
@@ -252,7 +252,7 @@ var TreeRepository = /** @class */ (function (_super) {
|
|
|
252
252
|
var parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);
|
|
253
253
|
var childRelationMaps = relationMaps.filter(function (relationMap) { return relationMap.parentId === parentEntityId; });
|
|
254
254
|
var childIds = new Set(childRelationMaps.map(function (relationMap) { return relationMap.id; }));
|
|
255
|
-
entity[childProperty] = entities.filter(function (entity) { return childIds.has(entity.
|
|
255
|
+
entity[childProperty] = entities.filter(function (entity) { return childIds.has(entity[_this.metadata.primaryColumns[0].propertyName]); });
|
|
256
256
|
entity[childProperty].forEach(function (childEntity) {
|
|
257
257
|
_this.buildChildrenEntityTree(childEntity, entities, relationMaps);
|
|
258
258
|
});
|