UNPKG

11.3 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/query-builder/RelationUpdater.ts"],"names":[],"mappings":"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","file":"RelationUpdater.js","sourcesContent":["import {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryExpressionMap} from \"./QueryExpressionMap\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\n\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nexport class RelationUpdater {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected queryBuilder: QueryBuilder<any>,\n protected expressionMap: QueryExpressionMap) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs set or add operation on a relation.\n */\n async update(value: any|any[]): Promise<void> {\n const relation = this.expressionMap.relationMetadata;\n\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n\n const updateSet = relation.joinColumns.reduce((updateSet, joinColumn) => {\n const relationValue = value instanceof Object ? joinColumn.referencedColumn!.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {} as any);\n\n if (!this.expressionMap.of || (this.expressionMap.of instanceof Array && !this.expressionMap.of.length)) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute();\n\n } else if ((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null) { // we handle null a bit different way\n\n const updateSet: ObjectLiteral = {};\n relation.inverseRelation!.joinColumns.forEach(column => {\n updateSet[column.propertyName] = null;\n });\n\n const ofs = this.expressionMap.of instanceof Array ? this.expressionMap.of : [this.expressionMap.of];\n const parameters: ObjectLiteral = {};\n const conditions: string[] = [];\n ofs.forEach((of, ofIndex) => {\n relation.inverseRelation!.joinColumns.map((column, columnIndex) => {\n const parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters[parameterName] = of instanceof Object ? column.referencedColumn!.getEntityValue(of) : of;\n conditions.push(`${column.propertyPath} = :${parameterName}`);\n });\n });\n const condition = conditions.map(str => \"(\" + str + \")\").join(\" OR \");\n if (!condition) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .where(condition)\n .setParameters(parameters)\n .execute();\n\n } else if (relation.isOneToOneNotOwner || relation.isOneToMany) {\n\n if (this.expressionMap.of instanceof Array)\n throw new Error(`You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.`);\n\n const of = this.expressionMap.of;\n const updateSet = relation.inverseRelation!.joinColumns.reduce((updateSet, joinColumn) => {\n const relationValue = of instanceof Object ? joinColumn.referencedColumn!.getEntityValue(of) : of;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {} as any);\n\n if (!value || (value instanceof Array && !value.length)) return;\n\n await this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute();\n\n } else { // many to many\n const junctionMetadata = relation.junctionEntityMetadata!;\n const ofs = this.expressionMap.of instanceof Array ? this.expressionMap.of : [this.expressionMap.of];\n const values = value instanceof Array ? value : [value];\n const firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n const secondColumnValues = relation.isManyToManyOwner ? values : ofs;\n\n const bulkInserted: ObjectLiteral[] = [];\n firstColumnValues.forEach(firstColumnVal => {\n secondColumnValues.forEach(secondColumnVal => {\n const inserted: ObjectLiteral = {};\n junctionMetadata.ownerColumns.forEach(column => {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata.inverseColumns.forEach(column => {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn!.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted.push(inserted);\n });\n });\n\n if (!bulkInserted.length) return;\n\n if (this.queryBuilder.connection.driver instanceof OracleDriver) {\n await Promise.all(bulkInserted.map(value => {\n return this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata.tableName)\n .values(value)\n .execute();\n }));\n } else {\n await this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata.tableName)\n .values(bulkInserted)\n .execute();\n }\n }\n }\n\n}"],"sourceRoot":".."}
\No newline at end of file