typeorm 0.2.44-dev.1f54c70 → 0.2.44-dev.5a71803
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/driver/Driver.d.ts +2 -1
- package/browser/driver/Driver.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.js +69 -45
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.d.ts +6 -2
- package/browser/driver/mysql/MysqlDriver.js +42 -6
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/entity-manager/EntityManager.js +3 -1
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/error/ReturningStatementNotSupportedError.js +1 -1
- package/browser/error/ReturningStatementNotSupportedError.js.map +1 -1
- package/browser/persistence/SubjectExecutor.js +2 -1
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/query-builder/DeleteQueryBuilder.js +7 -10
- package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/InsertOrUpdateOptions.d.ts +3 -0
- package/browser/query-builder/InsertOrUpdateOptions.js +3 -0
- package/browser/query-builder/InsertOrUpdateOptions.js.map +1 -0
- package/browser/query-builder/InsertQueryBuilder.d.ts +2 -1
- package/browser/query-builder/InsertQueryBuilder.js +19 -5
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +2 -1
- package/browser/query-builder/QueryBuilder.js +2 -2
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryExpressionMap.d.ts +1 -0
- package/browser/query-builder/QueryExpressionMap.js.map +1 -1
- package/browser/query-builder/ReturningResultsEntityUpdator.js +4 -3
- package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +7 -12
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +7 -11
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/repository/UpsertOptions.d.ts +4 -0
- package/browser/repository/UpsertOptions.js.map +1 -1
- package/driver/Driver.d.ts +2 -1
- package/driver/Driver.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +69 -45
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.d.ts +6 -2
- package/driver/mysql/MysqlDriver.js +42 -6
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/entity-manager/EntityManager.js +3 -1
- package/entity-manager/EntityManager.js.map +1 -1
- package/error/ReturningStatementNotSupportedError.js +1 -1
- package/error/ReturningStatementNotSupportedError.js.map +1 -1
- package/package.json +1 -1
- package/persistence/SubjectExecutor.js +2 -1
- package/persistence/SubjectExecutor.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.js +7 -10
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertOrUpdateOptions.d.ts +3 -0
- package/query-builder/InsertOrUpdateOptions.js +4 -0
- package/query-builder/InsertOrUpdateOptions.js.map +1 -0
- package/query-builder/InsertQueryBuilder.d.ts +2 -1
- package/query-builder/InsertQueryBuilder.js +19 -5
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +2 -1
- package/query-builder/QueryBuilder.js +2 -2
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/QueryExpressionMap.d.ts +1 -0
- package/query-builder/QueryExpressionMap.js.map +1 -1
- package/query-builder/ReturningResultsEntityUpdator.js +4 -3
- package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +7 -12
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +7 -11
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/repository/UpsertOptions.d.ts +4 -0
- package/repository/UpsertOptions.js.map +1 -1
|
@@ -114,12 +114,15 @@ var ExpoQueryRunner = /** @class */ (function (_super) {
|
|
|
114
114
|
*/
|
|
115
115
|
ExpoQueryRunner.prototype.beforeMigration = function () {
|
|
116
116
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
117
|
+
var databaseConnection;
|
|
117
118
|
return (0, tslib_1.__generator)(this, function (_a) {
|
|
118
119
|
switch (_a.label) {
|
|
119
|
-
case 0: return [4 /*yield*/, this.
|
|
120
|
+
case 0: return [4 /*yield*/, this.connect()];
|
|
120
121
|
case 1:
|
|
121
|
-
_a.sent();
|
|
122
|
-
return [2 /*return
|
|
122
|
+
databaseConnection = _a.sent();
|
|
123
|
+
return [2 /*return*/, new Promise(function (ok, fail) {
|
|
124
|
+
databaseConnection.exec([{ sql: 'PRAGMA foreign_keys = OFF;', args: [] }], false, function (err) { return err ? fail(err) : ok(); });
|
|
125
|
+
})];
|
|
123
126
|
}
|
|
124
127
|
});
|
|
125
128
|
});
|
|
@@ -129,12 +132,15 @@ var ExpoQueryRunner = /** @class */ (function (_super) {
|
|
|
129
132
|
*/
|
|
130
133
|
ExpoQueryRunner.prototype.afterMigration = function () {
|
|
131
134
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
135
|
+
var databaseConnection;
|
|
132
136
|
return (0, tslib_1.__generator)(this, function (_a) {
|
|
133
137
|
switch (_a.label) {
|
|
134
|
-
case 0: return [4 /*yield*/, this.
|
|
138
|
+
case 0: return [4 /*yield*/, this.connect()];
|
|
135
139
|
case 1:
|
|
136
|
-
_a.sent();
|
|
137
|
-
return [2 /*return
|
|
140
|
+
databaseConnection = _a.sent();
|
|
141
|
+
return [2 /*return*/, new Promise(function (ok, fail) {
|
|
142
|
+
databaseConnection.exec([{ sql: 'PRAGMA foreign_keys = ON;', args: [] }], false, function (err) { return err ? fail(err) : ok(); });
|
|
143
|
+
})];
|
|
138
144
|
}
|
|
139
145
|
});
|
|
140
146
|
});
|
|
@@ -160,48 +166,66 @@ var ExpoQueryRunner = /** @class */ (function (_super) {
|
|
|
160
166
|
this.driver.connection.logger.logQuery(query, parameters, this);
|
|
161
167
|
queryStartTime = +new Date();
|
|
162
168
|
// All Expo SQL queries are executed in a transaction context
|
|
163
|
-
databaseConnection.transaction(function (transaction) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
169
|
+
databaseConnection.transaction(function (transaction) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
|
|
170
|
+
var _this = this;
|
|
171
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
172
|
+
switch (_a.label) {
|
|
173
|
+
case 0:
|
|
174
|
+
if (!(typeof this.transaction === "undefined")) return [3 /*break*/, 2];
|
|
175
|
+
return [4 /*yield*/, this.startTransaction()];
|
|
176
|
+
case 1:
|
|
177
|
+
_a.sent();
|
|
178
|
+
this.transaction = transaction;
|
|
179
|
+
_a.label = 2;
|
|
180
|
+
case 2:
|
|
181
|
+
this.transaction.executeSql(query, parameters, function (t, raw) {
|
|
182
|
+
// log slow queries if maxQueryExecution time is set
|
|
183
|
+
var maxQueryExecutionTime = _this.driver.options.maxQueryExecutionTime;
|
|
184
|
+
var queryEndTime = +new Date();
|
|
185
|
+
var queryExecutionTime = queryEndTime - queryStartTime;
|
|
186
|
+
if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {
|
|
187
|
+
_this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);
|
|
188
|
+
}
|
|
189
|
+
var result = new QueryResult_1.QueryResult();
|
|
190
|
+
// return id of inserted row, if query was insert statement.
|
|
191
|
+
if (query.substr(0, 11) === "INSERT INTO") {
|
|
192
|
+
result.raw = raw.insertId;
|
|
193
|
+
}
|
|
194
|
+
if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rowsAffected')) {
|
|
195
|
+
result.affected = raw.rowsAffected;
|
|
196
|
+
}
|
|
197
|
+
if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rows')) {
|
|
198
|
+
var resultSet = [];
|
|
199
|
+
for (var i = 0; i < raw.rows.length; i++) {
|
|
200
|
+
resultSet.push(raw.rows.item(i));
|
|
201
|
+
}
|
|
202
|
+
result.raw = resultSet;
|
|
203
|
+
result.records = resultSet;
|
|
204
|
+
}
|
|
205
|
+
if (useStructuredResult) {
|
|
206
|
+
ok(result);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
ok(result.raw);
|
|
210
|
+
}
|
|
211
|
+
}, function (t, err) {
|
|
212
|
+
_this.driver.connection.logger.logQueryError(err, query, parameters, _this);
|
|
213
|
+
fail(new QueryFailedError_1.QueryFailedError(query, parameters, err));
|
|
214
|
+
});
|
|
215
|
+
return [2 /*return*/];
|
|
180
216
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
result.records = resultSet;
|
|
191
|
-
}
|
|
192
|
-
if (useStructuredResult) {
|
|
193
|
-
ok(result);
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
ok(result.raw);
|
|
217
|
+
});
|
|
218
|
+
}); }, function (err) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
|
|
219
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
220
|
+
switch (_a.label) {
|
|
221
|
+
case 0: return [4 /*yield*/, this.rollbackTransaction()];
|
|
222
|
+
case 1:
|
|
223
|
+
_a.sent();
|
|
224
|
+
fail(err);
|
|
225
|
+
return [2 /*return*/];
|
|
197
226
|
}
|
|
198
|
-
}, function (t, err) {
|
|
199
|
-
_this.driver.connection.logger.logQueryError(err, query, parameters, _this);
|
|
200
|
-
fail(new QueryFailedError_1.QueryFailedError(query, parameters, err));
|
|
201
227
|
});
|
|
202
|
-
}, function (
|
|
203
|
-
_this.rollbackTransaction();
|
|
204
|
-
}, function () {
|
|
228
|
+
}); }, function () {
|
|
205
229
|
_this.isTransactionActive = false;
|
|
206
230
|
_this.transaction = undefined;
|
|
207
231
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/expo/ExpoQueryRunner.ts"],"names":[],"mappings":"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","file":"ExpoQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {TransactionAlreadyStartedError} from \"../../error/TransactionAlreadyStartedError\";\nimport {TransactionNotStartedError} from \"../../error/TransactionNotStartedError\";\nimport {ExpoDriver} from \"./ExpoDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n// Needed to satisfy the Typescript compiler\ninterface IResultSet {\n insertId: number | undefined;\n rowsAffected: number;\n rows: {\n length: number;\n item: (idx: number) => any;\n _array: any[];\n };\n}\ninterface ITransaction {\n executeSql: (\n sql: string,\n args: any[] | undefined,\n ok: (tsx: ITransaction, resultSet: IResultSet) => void,\n fail: (tsx: ITransaction, err: any) => void\n ) => void;\n}\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class ExpoQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: ExpoDriver;\n\n /**\n * Database transaction object\n */\n private transaction?: ITransaction;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: ExpoDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n async startTransaction(): Promise<void> {\n if (this.isTransactionActive && typeof this.transaction !== \"undefined\")\n throw new TransactionAlreadyStartedError();\n\n await this.broadcaster.broadcast('BeforeTransactionStart');\n\n this.isTransactionActive = true;\n\n await this.broadcaster.broadcast('AfterTransactionStart');\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n async commitTransaction(): Promise<void> {\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n\n await this.broadcaster.broadcast('BeforeTransactionCommit');\n\n this.isTransactionActive = false;\n this.transaction = undefined;\n\n await this.broadcaster.broadcast('AfterTransactionCommit');\n }\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n async rollbackTransaction(): Promise<void> {\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n\n await this.broadcaster.broadcast('BeforeTransactionRollback');\n\n this.isTransactionActive = false;\n this.transaction = undefined;\n\n await this.broadcaster.broadcast('AfterTransactionRollback');\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`);\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`);\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n return new Promise<any>(async (ok, fail) => {\n const databaseConnection = await this.connect();\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction((transaction: ITransaction) => {\n if (typeof this.transaction === \"undefined\") {\n this.startTransaction();\n this.transaction = transaction;\n }\n this.transaction.executeSql(query, parameters, (t: ITransaction, raw: IResultSet) => {\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n }\n\n const result = new QueryResult();\n\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId;\n }\n\n if (raw?.hasOwnProperty('rowsAffected')) {\n result.affected = raw.rowsAffected;\n }\n\n if (raw?.hasOwnProperty('rows')) {\n let resultSet = [];\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i));\n }\n\n result.raw = resultSet;\n result.records = resultSet;\n }\n\n if (useStructuredResult) {\n ok(result);\n } else {\n ok(result.raw);\n }\n }, (t: ITransaction, err: any) => {\n this.driver.connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n });\n }, (err: any) => {\n this.rollbackTransaction();\n }, () => {\n this.isTransactionActive = false;\n this.transaction = undefined;\n });\n });\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/expo/ExpoQueryRunner.ts"],"names":[],"mappings":";;;;AAAA,+FAA4F;AAC5F,iEAA8D;AAC9D,0FAAuF;AACvF,6FAA0F;AAC1F,qFAAkF;AAElF,4DAAyD;AACzD,8DAA6D;AAqB7D;;GAEG;AACH;IAAqC,gDAAyB;IAY1D,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,yBAAY,MAAkB;QAA9B,YACI,iBAAO,SAIV;QAHG,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,KAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,KAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,KAAI,CAAC,CAAC;;IAC7C,CAAC;IAED;;;;;;;;;;OAUG;IACG,0CAAgB,GAAtB;;;;;wBACI,IAAI,IAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW;4BACnE,MAAM,IAAI,+DAA8B,EAAE,CAAC;wBAE/C,qBAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAA;;wBAA1D,SAA0D,CAAC;wBAE3D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;wBAEhC,qBAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAA;;wBAAzD,SAAyD,CAAC;;;;;KAC7D;IAED;;;;;;;OAOG;IACG,2CAAiB,GAAvB;;;;;wBACI,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW;4BACpE,MAAM,IAAI,uDAA0B,EAAE,CAAC;wBAE3C,qBAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAA;;wBAA3D,SAA2D,CAAC;wBAE5D,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBACjC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;wBAE7B,qBAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAA;;wBAA1D,SAA0D,CAAC;;;;;KAC9D;IAED;;;;;;OAMG;IACG,6CAAmB,GAAzB;;;;;wBACI,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW;4BACpE,MAAM,IAAI,uDAA0B,EAAE,CAAC;wBAE3C,qBAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAA;;wBAA7D,SAA6D,CAAC;wBAE9D,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBACjC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;wBAE7B,qBAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,0BAA0B,CAAC,EAAA;;wBAA5D,SAA4D,CAAC;;;;;KAChE;IAED;;OAEG;IACG,yCAAe,GAArB;;;;;4BAC+B,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAAzC,kBAAkB,GAAG,SAAoB;wBAC/C,sBAAO,IAAI,OAAO,CAAC,UAAC,EAAE,EAAE,IAAI;gCACxB,kBAAkB,CAAC,IAAI,CACnB,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EACjD,KAAK,EACL,UAAC,GAAQ,IAAK,OAAA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAtB,CAAsB,CACvC,CAAC;4BACN,CAAC,CAAC,EAAA;;;;KACL;IAED;;OAEG;IACG,wCAAc,GAApB;;;;;4BAC+B,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAAzC,kBAAkB,GAAG,SAAoB;wBAC/C,sBAAO,IAAI,OAAO,CAAC,UAAC,EAAE,EAAE,IAAI;gCACxB,kBAAkB,CAAC,IAAI,CACnB,CAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAChD,KAAK,EACL,UAAC,GAAQ,IAAK,OAAA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAtB,CAAsB,CACvC,CAAC;4BACN,CAAC,CAAC,EAAA;;;;KACL;IAED;;OAEG;IACG,+BAAK,GAAX,UAAY,KAAa,EAAE,UAAkB,EAAE,mBAA2B;QAA3B,oCAAA,EAAA,2BAA2B;;;;gBACtE,IAAI,IAAI,CAAC,UAAU;oBACf,MAAM,IAAI,iEAA+B,EAAE,CAAC;gBAEhD,sBAAO,IAAI,OAAO,CAAM,UAAO,EAAE,EAAE,IAAI;;;;;wCACR,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;oCAAzC,kBAAkB,GAAG,SAAoB;oCAC/C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;oCAC1D,cAAc,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oCACnC,6DAA6D;oCAC7D,kBAAkB,CAAC,WAAW,CAAC,UAAO,WAAyB;;;;;yDACvD,CAAA,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,CAAA,EAAvC,wBAAuC;oDACvC,qBAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA;;oDAA7B,SAA6B,CAAC;oDAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;;;oDAEnC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,UAAC,CAAe,EAAE,GAAe;wDAC5E,oDAAoD;wDACpD,IAAM,qBAAqB,GAAG,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;wDACxE,IAAM,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;wDACjC,IAAM,kBAAkB,GAAG,YAAY,GAAG,cAAc,CAAC;wDACzD,IAAI,qBAAqB,IAAI,kBAAkB,GAAG,qBAAqB,EAAE;4DACrE,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI,CAAC,CAAC;yDAC3F;wDAED,IAAM,MAAM,GAAG,IAAI,yBAAW,EAAE,CAAC;wDAEjC,4DAA4D;wDAC5D,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,aAAa,EAAE;4DACvC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;yDAC7B;wDAED,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,CAAC,cAAc,CAAC,EAAE;4DACrC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC;yDACtC;wDAED,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,CAAC,MAAM,CAAC,EAAE;4DAC7B,IAAI,SAAS,GAAG,EAAE,CAAC;4DACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gEACtC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;6DACpC;4DAED,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;4DACvB,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;yDAC9B;wDAED,IAAI,mBAAmB,EAAE;4DACrB,EAAE,CAAC,MAAM,CAAC,CAAC;yDACd;6DAAM;4DACH,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;yDAClB;oDACL,CAAC,EAAE,UAAC,CAAe,EAAE,GAAQ;wDACzB,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAI,CAAC,CAAC;wDAC1E,IAAI,CAAC,IAAI,mCAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;oDACvD,CAAC,CAAC,CAAC;;;;yCACN,EAAE,UAAO,GAAQ;;;wDACd,qBAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA;;oDAAhC,SAAgC,CAAC;oDACjC,IAAI,CAAC,GAAG,CAAC,CAAA;;;;yCACZ,EAAE;wCACC,KAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;wCACjC,KAAI,CAAC,WAAW,GAAG,SAAS,CAAC;oCACjC,CAAC,CAAC,CAAC;;;;yBACN,CAAC,EAAC;;;KACN;IACL,sBAAC;AAAD,CAjLA,AAiLC,CAjLoC,qDAAyB,GAiL7D;AAjLY,0CAAe","file":"ExpoQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {TransactionAlreadyStartedError} from \"../../error/TransactionAlreadyStartedError\";\nimport {TransactionNotStartedError} from \"../../error/TransactionNotStartedError\";\nimport {ExpoDriver} from \"./ExpoDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n// Needed to satisfy the Typescript compiler\ninterface IResultSet {\n insertId: number | undefined;\n rowsAffected: number;\n rows: {\n length: number;\n item: (idx: number) => any;\n _array: any[];\n };\n}\ninterface ITransaction {\n executeSql: (\n sql: string,\n args: any[] | undefined,\n ok: (tsx: ITransaction, resultSet: IResultSet) => void,\n fail: (tsx: ITransaction, err: any) => void\n ) => void;\n}\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class ExpoQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: ExpoDriver;\n\n /**\n * Database transaction object\n */\n private transaction?: ITransaction;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: ExpoDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n async startTransaction(): Promise<void> {\n if (this.isTransactionActive && typeof this.transaction !== \"undefined\")\n throw new TransactionAlreadyStartedError();\n\n await this.broadcaster.broadcast('BeforeTransactionStart');\n\n this.isTransactionActive = true;\n\n await this.broadcaster.broadcast('AfterTransactionStart');\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n async commitTransaction(): Promise<void> {\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n\n await this.broadcaster.broadcast('BeforeTransactionCommit');\n\n this.isTransactionActive = false;\n this.transaction = undefined;\n\n await this.broadcaster.broadcast('AfterTransactionCommit');\n }\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n async rollbackTransaction(): Promise<void> {\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n\n await this.broadcaster.broadcast('BeforeTransactionRollback');\n\n this.isTransactionActive = false;\n this.transaction = undefined;\n\n await this.broadcaster.broadcast('AfterTransactionRollback');\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n const databaseConnection = await this.connect();\n return new Promise((ok, fail) => {\n databaseConnection.exec(\n [{ sql: 'PRAGMA foreign_keys = OFF;', args: [] }],\n false,\n (err: any) => err ? fail(err) : ok()\n );\n })\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n const databaseConnection = await this.connect();\n return new Promise((ok, fail) => {\n databaseConnection.exec(\n [{ sql: 'PRAGMA foreign_keys = ON;', args: [] }],\n false,\n (err: any) => err ? fail(err) : ok()\n );\n })\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n return new Promise<any>(async (ok, fail) => {\n const databaseConnection = await this.connect();\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(async (transaction: ITransaction) => {\n if (typeof this.transaction === \"undefined\") {\n await this.startTransaction();\n this.transaction = transaction;\n }\n this.transaction.executeSql(query, parameters, (t: ITransaction, raw: IResultSet) => {\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n }\n\n const result = new QueryResult();\n\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId;\n }\n\n if (raw?.hasOwnProperty('rowsAffected')) {\n result.affected = raw.rowsAffected;\n }\n\n if (raw?.hasOwnProperty('rows')) {\n let resultSet = [];\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i));\n }\n\n result.raw = resultSet;\n result.records = resultSet;\n }\n\n if (useStructuredResult) {\n ok(result);\n } else {\n ok(result.raw);\n }\n }, (t: ITransaction, err: any) => {\n this.driver.connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n });\n }, async (err: any) => {\n await this.rollbackTransaction();\n fail(err)\n }, () => {\n this.isTransactionActive = false;\n this.transaction = undefined;\n });\n });\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Driver } from "../Driver";
|
|
1
|
+
import { Driver, ReturningType } from "../Driver";
|
|
2
2
|
import { MysqlQueryRunner } from "./MysqlQueryRunner";
|
|
3
3
|
import { ObjectLiteral } from "../../common/ObjectLiteral";
|
|
4
4
|
import { ColumnMetadata } from "../../metadata/ColumnMetadata";
|
|
@@ -102,6 +102,10 @@ export declare class MysqlDriver implements Driver {
|
|
|
102
102
|
* @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html
|
|
103
103
|
*/
|
|
104
104
|
maxAliasLength: number;
|
|
105
|
+
/**
|
|
106
|
+
* Supported returning types
|
|
107
|
+
*/
|
|
108
|
+
private readonly _isReturningSqlSupported;
|
|
105
109
|
constructor(connection: Connection);
|
|
106
110
|
/**
|
|
107
111
|
* Performs connection to the database.
|
|
@@ -202,7 +206,7 @@ export declare class MysqlDriver implements Driver {
|
|
|
202
206
|
/**
|
|
203
207
|
* Returns true if driver supports RETURNING / OUTPUT statement.
|
|
204
208
|
*/
|
|
205
|
-
isReturningSqlSupported(): boolean;
|
|
209
|
+
isReturningSqlSupported(returningType: ReturningType): boolean;
|
|
206
210
|
/**
|
|
207
211
|
* Returns true if driver supports uuid values generation on its own.
|
|
208
212
|
*/
|
|
@@ -16,6 +16,7 @@ var error_1 = require("../../error");
|
|
|
16
16
|
var Table_1 = require("../../schema-builder/table/Table");
|
|
17
17
|
var View_1 = require("../../schema-builder/view/View");
|
|
18
18
|
var TableForeignKey_1 = require("../../schema-builder/table/TableForeignKey");
|
|
19
|
+
var VersionUtils_1 = require("../../util/VersionUtils");
|
|
19
20
|
/**
|
|
20
21
|
* Organizes communication with MySQL DBMS.
|
|
21
22
|
*/
|
|
@@ -246,6 +247,14 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
246
247
|
* @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html
|
|
247
248
|
*/
|
|
248
249
|
this.maxAliasLength = 63;
|
|
250
|
+
/**
|
|
251
|
+
* Supported returning types
|
|
252
|
+
*/
|
|
253
|
+
this._isReturningSqlSupported = {
|
|
254
|
+
delete: false,
|
|
255
|
+
insert: false,
|
|
256
|
+
update: false,
|
|
257
|
+
};
|
|
249
258
|
this.connection = connection;
|
|
250
259
|
this.options = (0, tslib_1.__assign)({ legacySpatialSupport: true }, connection.options);
|
|
251
260
|
this.isReplicated = this.options.replication ? true : false;
|
|
@@ -271,7 +280,7 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
271
280
|
*/
|
|
272
281
|
MysqlDriver.prototype.connect = function () {
|
|
273
282
|
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
274
|
-
var _a, queryRunner, _b;
|
|
283
|
+
var _a, queryRunner, _b, result, dbVersion;
|
|
275
284
|
var _this = this;
|
|
276
285
|
return (0, tslib_1.__generator)(this, function (_c) {
|
|
277
286
|
switch (_c.label) {
|
|
@@ -302,7 +311,21 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
302
311
|
case 6:
|
|
303
312
|
_c.sent();
|
|
304
313
|
_c.label = 7;
|
|
305
|
-
case 7:
|
|
314
|
+
case 7:
|
|
315
|
+
if (!(this.options.type === "mariadb")) return [3 /*break*/, 9];
|
|
316
|
+
return [4 /*yield*/, this.createQueryRunner("master")
|
|
317
|
+
.query("SELECT VERSION() AS `version`")];
|
|
318
|
+
case 8:
|
|
319
|
+
result = _c.sent();
|
|
320
|
+
dbVersion = result[0].version;
|
|
321
|
+
if (VersionUtils_1.VersionUtils.isGreaterOrEqual(dbVersion, "10.0.5")) {
|
|
322
|
+
this._isReturningSqlSupported.delete = true;
|
|
323
|
+
}
|
|
324
|
+
if (VersionUtils_1.VersionUtils.isGreaterOrEqual(dbVersion, "10.5.0")) {
|
|
325
|
+
this._isReturningSqlSupported.insert = true;
|
|
326
|
+
}
|
|
327
|
+
_c.label = 9;
|
|
328
|
+
case 9: return [2 /*return*/];
|
|
306
329
|
}
|
|
307
330
|
});
|
|
308
331
|
});
|
|
@@ -695,6 +718,19 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
695
718
|
* Creates generated map of values generated or returned by database after INSERT query.
|
|
696
719
|
*/
|
|
697
720
|
MysqlDriver.prototype.createGeneratedMap = function (metadata, insertResult, entityIndex) {
|
|
721
|
+
if (!insertResult) {
|
|
722
|
+
return undefined;
|
|
723
|
+
}
|
|
724
|
+
if (insertResult.insertId === undefined) {
|
|
725
|
+
return Object.keys(insertResult).reduce(function (map, key) {
|
|
726
|
+
var column = metadata.findColumnWithDatabaseName(key);
|
|
727
|
+
if (column) {
|
|
728
|
+
OrmUtils_1.OrmUtils.mergeDeep(map, column.createValueMap(insertResult[key]));
|
|
729
|
+
// OrmUtils.mergeDeep(map, column.createValueMap(this.prepareHydratedValue(insertResult[key], column))); // TODO: probably should be like there, but fails on enums, fix later
|
|
730
|
+
}
|
|
731
|
+
return map;
|
|
732
|
+
}, {});
|
|
733
|
+
}
|
|
698
734
|
var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {
|
|
699
735
|
var value;
|
|
700
736
|
if (generatedColumn.generationStrategy === "increment" && insertResult.insertId) {
|
|
@@ -768,8 +804,8 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
768
804
|
/**
|
|
769
805
|
* Returns true if driver supports RETURNING / OUTPUT statement.
|
|
770
806
|
*/
|
|
771
|
-
MysqlDriver.prototype.isReturningSqlSupported = function () {
|
|
772
|
-
return
|
|
807
|
+
MysqlDriver.prototype.isReturningSqlSupported = function (returningType) {
|
|
808
|
+
return this._isReturningSqlSupported[returningType];
|
|
773
809
|
};
|
|
774
810
|
/**
|
|
775
811
|
* Returns true if driver supports uuid values generation on its own.
|
|
@@ -874,8 +910,8 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
874
910
|
MysqlDriver.prototype.prepareDbConnection = function (connection) {
|
|
875
911
|
var logger = this.connection.logger;
|
|
876
912
|
/*
|
|
877
|
-
|
|
878
|
-
|
|
913
|
+
* Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and
|
|
914
|
+
* cause the hosting app to crash.
|
|
879
915
|
*/
|
|
880
916
|
if (connection.listeners("error").length === 0) {
|
|
881
917
|
connection.on("error", function (error) { return logger.log("warn", "MySQL connection raised an error. " + error); });
|