1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var OrmUtils_1 = require("../util/OrmUtils");
|
5 | var OracleDriver_1 = require("../driver/oracle/OracleDriver");
|
6 |
|
7 |
|
8 |
|
9 | var ReturningResultsEntityUpdator = (function () {
|
10 |
|
11 |
|
12 |
|
13 | function ReturningResultsEntityUpdator(queryRunner, expressionMap) {
|
14 | this.queryRunner = queryRunner;
|
15 | this.expressionMap = expressionMap;
|
16 | }
|
17 |
|
18 |
|
19 |
|
20 | |
21 |
|
22 |
|
23 | ReturningResultsEntityUpdator.prototype.update = function (updateResult, entities) {
|
24 | return tslib_1.__awaiter(this, void 0, void 0, function () {
|
25 | var metadata;
|
26 | var _this = this;
|
27 | return tslib_1.__generator(this, function (_a) {
|
28 | switch (_a.label) {
|
29 | case 0:
|
30 | metadata = this.expressionMap.mainAlias.metadata;
|
31 | return [4 , Promise.all(entities.map(function (entity, entityIndex) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
32 | var result, returningColumns, updationColumns, entityId, loadedReturningColumns;
|
33 | var _this = this;
|
34 | return tslib_1.__generator(this, function (_a) {
|
35 | switch (_a.label) {
|
36 | case 0:
|
37 | if (!this.queryRunner.connection.driver.isReturningSqlSupported()) return [3 , 1];
|
38 | if (this.queryRunner.connection.driver instanceof OracleDriver_1.OracleDriver && updateResult.raw instanceof Array && this.expressionMap.extraReturningColumns.length > 0) {
|
39 | updateResult.raw = updateResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {
|
40 | newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];
|
41 | return newRaw;
|
42 | }, {});
|
43 | }
|
44 | result = updateResult.raw instanceof Array ? updateResult.raw[entityIndex] : updateResult.raw;
|
45 | returningColumns = this.queryRunner.connection.driver.createGeneratedMap(metadata, result);
|
46 | if (returningColumns) {
|
47 | this.queryRunner.manager.merge(metadata.target, entity, returningColumns);
|
48 | updateResult.generatedMaps.push(returningColumns);
|
49 | }
|
50 | return [3 , 3];
|
51 | case 1:
|
52 | updationColumns = this.getUpdationReturningColumns();
|
53 | if (!(updationColumns.length > 0)) return [3 , 3];
|
54 | entityId = this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);
|
55 | if (!entityId)
|
56 | throw new Error("Cannot update entity because entity id is not set in the entity.");
|
57 | return [4 , this.queryRunner.manager
|
58 | .createQueryBuilder()
|
59 | .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + "." + column.propertyPath; }))
|
60 | .addSelect(this.getUpdationReturningColumns().map(function (column) { return metadata.targetName + "." + column.propertyPath; }))
|
61 | .from(metadata.target, metadata.targetName)
|
62 | .where(entityId)
|
63 | .setOption("create-pojo")
|
64 | .getOne()];
|
65 | case 2:
|
66 | loadedReturningColumns = _a.sent();
|
67 | if (loadedReturningColumns) {
|
68 | this.queryRunner.manager.merge(metadata.target, entity, loadedReturningColumns);
|
69 | updateResult.generatedMaps.push(loadedReturningColumns);
|
70 | }
|
71 | _a.label = 3;
|
72 | case 3: return [2 ];
|
73 | }
|
74 | });
|
75 | }); }))];
|
76 | case 1:
|
77 | _a.sent();
|
78 | return [2 ];
|
79 | }
|
80 | });
|
81 | });
|
82 | };
|
83 | |
84 |
|
85 |
|
86 | ReturningResultsEntityUpdator.prototype.insert = function (insertResult, entities) {
|
87 | return tslib_1.__awaiter(this, void 0, void 0, function () {
|
88 | var metadata, insertionColumns, generatedMaps;
|
89 | var _this = this;
|
90 | return tslib_1.__generator(this, function (_a) {
|
91 | switch (_a.label) {
|
92 | case 0:
|
93 | metadata = this.expressionMap.mainAlias.metadata;
|
94 | insertionColumns = this.getInsertionReturningColumns();
|
95 | generatedMaps = entities.map(function (entity, entityIndex) {
|
96 | if (_this.queryRunner.connection.driver instanceof OracleDriver_1.OracleDriver && insertResult.raw instanceof Array && _this.expressionMap.extraReturningColumns.length > 0) {
|
97 | insertResult.raw = insertResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {
|
98 | newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];
|
99 | return newRaw;
|
100 | }, {});
|
101 | }
|
102 |
|
103 | var result = insertResult.raw instanceof Array ? insertResult.raw[entityIndex] : insertResult.raw;
|
104 | var generatedMap = _this.queryRunner.connection.driver.createGeneratedMap(metadata, result) || {};
|
105 |
|
106 |
|
107 | if (_this.queryRunner.connection.driver.isUUIDGenerationSupported() === false) {
|
108 | metadata.generatedColumns.forEach(function (generatedColumn) {
|
109 | if (generatedColumn.generationStrategy === "uuid") {
|
110 |
|
111 | var uuid = generatedColumn.getEntityValue(entity);
|
112 | if (!uuid)
|
113 | uuid = _this.expressionMap.nativeParameters["uuid_" + generatedColumn.databaseName + entityIndex];
|
114 | OrmUtils_1.OrmUtils.mergeDeep(generatedMap, generatedColumn.createValueMap(uuid));
|
115 | }
|
116 | });
|
117 | }
|
118 | _this.queryRunner.manager.merge(metadata.target, entity, generatedMap);
|
119 | return generatedMap;
|
120 | });
|
121 | if (!(this.queryRunner.connection.driver.isReturningSqlSupported() === false && insertionColumns.length > 0)) return [3 , 2];
|
122 | return [4 , Promise.all(entities.map(function (entity, entityIndex) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
123 | var entityId, returningResult;
|
124 | return tslib_1.__generator(this, function (_a) {
|
125 | switch (_a.label) {
|
126 | case 0:
|
127 | entityId = metadata.getEntityIdMap(entity);
|
128 | return [4 , this.queryRunner.manager
|
129 | .createQueryBuilder()
|
130 | .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + "." + column.propertyPath; }))
|
131 | .addSelect(insertionColumns.map(function (column) { return metadata.targetName + "." + column.propertyPath; }))
|
132 | .from(metadata.target, metadata.targetName)
|
133 | .where(entityId)
|
134 | .setOption("create-pojo")
|
135 | .getOne()];
|
136 | case 1:
|
137 | returningResult = _a.sent();
|
138 | this.queryRunner.manager.merge(metadata.target, generatedMaps[entityIndex], returningResult);
|
139 | return [2 ];
|
140 | }
|
141 | });
|
142 | }); }))];
|
143 | case 1:
|
144 | _a.sent();
|
145 | _a.label = 2;
|
146 | case 2:
|
147 | entities.forEach(function (entity, entityIndex) {
|
148 | var entityId = metadata.getEntityIdMap(entity);
|
149 | insertResult.identifiers.push(entityId);
|
150 | insertResult.generatedMaps.push(generatedMaps[entityIndex]);
|
151 | _this.queryRunner.manager.merge(_this.expressionMap.mainAlias.metadata.target, entity, generatedMaps[entityIndex], generatedMaps[entityIndex]);
|
152 | });
|
153 | return [2 ];
|
154 | }
|
155 | });
|
156 | });
|
157 | };
|
158 | |
159 |
|
160 |
|
161 | ReturningResultsEntityUpdator.prototype.getInsertionReturningColumns = function () {
|
162 |
|
163 |
|
164 | var needToCheckGenerated = this.queryRunner.connection.driver.isReturningSqlSupported();
|
165 |
|
166 | return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {
|
167 | return column.default !== undefined ||
|
168 | (needToCheckGenerated && column.isGenerated) ||
|
169 | column.isCreateDate ||
|
170 | column.isUpdateDate ||
|
171 | column.isVersion;
|
172 | });
|
173 | };
|
174 | |
175 |
|
176 |
|
177 | ReturningResultsEntityUpdator.prototype.getUpdationReturningColumns = function () {
|
178 | return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {
|
179 | return column.isUpdateDate || column.isVersion;
|
180 | });
|
181 | };
|
182 | return ReturningResultsEntityUpdator;
|
183 | }());
|
184 | exports.ReturningResultsEntityUpdator = ReturningResultsEntityUpdator;
|
185 |
|
186 |
|