1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var CockroachDriver_1 = require("../driver/cockroachdb/CockroachDriver");
|
5 | var OracleDriver_1 = require("../driver/oracle/OracleDriver");
|
6 | var QueryBuilder_1 = require("./QueryBuilder");
|
7 | var SqlServerDriver_1 = require("../driver/sqlserver/SqlServerDriver");
|
8 | var PostgresDriver_1 = require("../driver/postgres/PostgresDriver");
|
9 | var DeleteResult_1 = require("./result/DeleteResult");
|
10 | var ReturningStatementNotSupportedError_1 = require("../error/ReturningStatementNotSupportedError");
|
11 | var SqljsDriver_1 = require("../driver/sqljs/SqljsDriver");
|
12 | var MysqlDriver_1 = require("../driver/mysql/MysqlDriver");
|
13 | var BroadcasterResult_1 = require("../subscriber/BroadcasterResult");
|
14 | var index_1 = require("../index");
|
15 |
|
16 |
|
17 |
|
18 | var DeleteQueryBuilder = (function (_super) {
|
19 | tslib_1.__extends(DeleteQueryBuilder, _super);
|
20 |
|
21 |
|
22 |
|
23 | function DeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {
|
24 | var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;
|
25 | _this.expressionMap.aliasNamePrefixingEnabled = false;
|
26 | return _this;
|
27 | }
|
28 |
|
29 |
|
30 |
|
31 | |
32 |
|
33 |
|
34 | DeleteQueryBuilder.prototype.getQuery = function () {
|
35 | var sql = this.createDeleteExpression();
|
36 | return sql.trim();
|
37 | };
|
38 | |
39 |
|
40 |
|
41 | DeleteQueryBuilder.prototype.execute = function () {
|
42 | return tslib_1.__awaiter(this, void 0, void 0, function () {
|
43 | var _a, sql, parameters, queryRunner, transactionStartedByUs, broadcastResult, deleteResult, result, driver, broadcastResult, error_1, rollbackError_1;
|
44 | return tslib_1.__generator(this, function (_b) {
|
45 | switch (_b.label) {
|
46 | case 0:
|
47 | _a = tslib_1.__read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];
|
48 | queryRunner = this.obtainQueryRunner();
|
49 | transactionStartedByUs = false;
|
50 | _b.label = 1;
|
51 | case 1:
|
52 | _b.trys.push([1, 11, 16, 21]);
|
53 | if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 , 3];
|
54 | return [4 , queryRunner.startTransaction()];
|
55 | case 2:
|
56 | _b.sent();
|
57 | transactionStartedByUs = true;
|
58 | _b.label = 3;
|
59 | case 3:
|
60 | if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 , 5];
|
61 | broadcastResult = new BroadcasterResult_1.BroadcasterResult();
|
62 | queryRunner.broadcaster.broadcastBeforeRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);
|
63 | if (!(broadcastResult.promises.length > 0)) return [3 , 5];
|
64 | return [4 , Promise.all(broadcastResult.promises)];
|
65 | case 4:
|
66 | _b.sent();
|
67 | _b.label = 5;
|
68 | case 5:
|
69 | deleteResult = new DeleteResult_1.DeleteResult();
|
70 | return [4 , queryRunner.query(sql, parameters)];
|
71 | case 6:
|
72 | result = _b.sent();
|
73 | driver = queryRunner.connection.driver;
|
74 | if (driver instanceof MysqlDriver_1.MysqlDriver) {
|
75 | deleteResult.raw = result;
|
76 | deleteResult.affected = result.affectedRows;
|
77 | }
|
78 | else if (driver instanceof SqlServerDriver_1.SqlServerDriver || driver instanceof PostgresDriver_1.PostgresDriver || driver instanceof CockroachDriver_1.CockroachDriver) {
|
79 | deleteResult.raw = result[0] ? result[0] : null;
|
80 |
|
81 | deleteResult.affected = typeof result[1] === "number" ? result[1] : null;
|
82 | }
|
83 | else if (driver instanceof OracleDriver_1.OracleDriver) {
|
84 | deleteResult.affected = result;
|
85 | }
|
86 | else {
|
87 | deleteResult.raw = result;
|
88 | }
|
89 | if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 , 8];
|
90 | broadcastResult = new BroadcasterResult_1.BroadcasterResult();
|
91 | queryRunner.broadcaster.broadcastAfterRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);
|
92 | if (!(broadcastResult.promises.length > 0)) return [3 , 8];
|
93 | return [4 , Promise.all(broadcastResult.promises)];
|
94 | case 7:
|
95 | _b.sent();
|
96 | _b.label = 8;
|
97 | case 8:
|
98 | if (!transactionStartedByUs) return [3 , 10];
|
99 | return [4 , queryRunner.commitTransaction()];
|
100 | case 9:
|
101 | _b.sent();
|
102 | _b.label = 10;
|
103 | case 10: return [2 , deleteResult];
|
104 | case 11:
|
105 | error_1 = _b.sent();
|
106 | if (!transactionStartedByUs) return [3 , 15];
|
107 | _b.label = 12;
|
108 | case 12:
|
109 | _b.trys.push([12, 14, , 15]);
|
110 | return [4 , queryRunner.rollbackTransaction()];
|
111 | case 13:
|
112 | _b.sent();
|
113 | return [3 , 15];
|
114 | case 14:
|
115 | rollbackError_1 = _b.sent();
|
116 | return [3 , 15];
|
117 | case 15: throw error_1;
|
118 | case 16:
|
119 | if (!(queryRunner !== this.queryRunner)) return [3 , 18];
|
120 | return [4 , queryRunner.release()];
|
121 | case 17:
|
122 | _b.sent();
|
123 | _b.label = 18;
|
124 | case 18:
|
125 | if (!(this.connection.driver instanceof SqljsDriver_1.SqljsDriver && !queryRunner.isTransactionActive)) return [3 , 20];
|
126 | return [4 , this.connection.driver.autoSave()];
|
127 | case 19:
|
128 | _b.sent();
|
129 | _b.label = 20;
|
130 | case 20: return [7 ];
|
131 | case 21: return [2 ];
|
132 | }
|
133 | });
|
134 | });
|
135 | };
|
136 |
|
137 |
|
138 |
|
139 | |
140 |
|
141 |
|
142 |
|
143 | DeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {
|
144 | entityTarget = entityTarget instanceof index_1.EntitySchema ? entityTarget.options.name : entityTarget;
|
145 | var mainAlias = this.createFromAlias(entityTarget, aliasName);
|
146 | this.expressionMap.setMainAlias(mainAlias);
|
147 | return this;
|
148 | };
|
149 | |
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 | DeleteQueryBuilder.prototype.where = function (where, parameters) {
|
156 | this.expressionMap.wheres = [];
|
157 | var condition = this.computeWhereParameter(where);
|
158 | if (condition)
|
159 | this.expressionMap.wheres = [{ type: "simple", condition: condition }];
|
160 | if (parameters)
|
161 | this.setParameters(parameters);
|
162 | return this;
|
163 | };
|
164 | |
165 |
|
166 |
|
167 |
|
168 | DeleteQueryBuilder.prototype.andWhere = function (where, parameters) {
|
169 | this.expressionMap.wheres.push({ type: "and", condition: this.computeWhereParameter(where) });
|
170 | if (parameters)
|
171 | this.setParameters(parameters);
|
172 | return this;
|
173 | };
|
174 | |
175 |
|
176 |
|
177 |
|
178 | DeleteQueryBuilder.prototype.orWhere = function (where, parameters) {
|
179 | this.expressionMap.wheres.push({ type: "or", condition: this.computeWhereParameter(where) });
|
180 | if (parameters)
|
181 | this.setParameters(parameters);
|
182 | return this;
|
183 | };
|
184 | |
185 |
|
186 |
|
187 | DeleteQueryBuilder.prototype.whereInIds = function (ids) {
|
188 | return this.where(this.createWhereIdsExpression(ids));
|
189 | };
|
190 | |
191 |
|
192 |
|
193 | DeleteQueryBuilder.prototype.andWhereInIds = function (ids) {
|
194 | return this.andWhere(this.createWhereIdsExpression(ids));
|
195 | };
|
196 | |
197 |
|
198 |
|
199 | DeleteQueryBuilder.prototype.orWhereInIds = function (ids) {
|
200 | return this.orWhere(this.createWhereIdsExpression(ids));
|
201 | };
|
202 | |
203 |
|
204 |
|
205 | DeleteQueryBuilder.prototype.output = function (output) {
|
206 | return this.returning(output);
|
207 | };
|
208 | |
209 |
|
210 |
|
211 | DeleteQueryBuilder.prototype.returning = function (returning) {
|
212 |
|
213 | if (!this.connection.driver.isReturningSqlSupported())
|
214 | throw new ReturningStatementNotSupportedError_1.ReturningStatementNotSupportedError();
|
215 | this.expressionMap.returning = returning;
|
216 | return this;
|
217 | };
|
218 |
|
219 |
|
220 |
|
221 | |
222 |
|
223 |
|
224 | DeleteQueryBuilder.prototype.createDeleteExpression = function () {
|
225 | var tableName = this.getTableName(this.getMainTableName());
|
226 | var whereExpression = this.createWhereExpression();
|
227 | var returningExpression = this.createReturningExpression();
|
228 | if (returningExpression && (this.connection.driver instanceof PostgresDriver_1.PostgresDriver || this.connection.driver instanceof CockroachDriver_1.CockroachDriver)) {
|
229 | return "DELETE FROM " + tableName + whereExpression + " RETURNING " + returningExpression;
|
230 | }
|
231 | else if (returningExpression !== "" && this.connection.driver instanceof SqlServerDriver_1.SqlServerDriver) {
|
232 | return "DELETE FROM " + tableName + " OUTPUT " + returningExpression + whereExpression;
|
233 | }
|
234 | else {
|
235 | return "DELETE FROM " + tableName + whereExpression;
|
236 | }
|
237 | };
|
238 | return DeleteQueryBuilder;
|
239 | }(QueryBuilder_1.QueryBuilder));
|
240 | exports.DeleteQueryBuilder = DeleteQueryBuilder;
|
241 |
|
242 |
|