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.
Files changed (69) hide show
  1. package/browser/driver/Driver.d.ts +2 -1
  2. package/browser/driver/Driver.js.map +1 -1
  3. package/browser/driver/expo/ExpoQueryRunner.js +69 -45
  4. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  5. package/browser/driver/mysql/MysqlDriver.d.ts +6 -2
  6. package/browser/driver/mysql/MysqlDriver.js +42 -6
  7. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  8. package/browser/entity-manager/EntityManager.js +3 -1
  9. package/browser/entity-manager/EntityManager.js.map +1 -1
  10. package/browser/error/ReturningStatementNotSupportedError.js +1 -1
  11. package/browser/error/ReturningStatementNotSupportedError.js.map +1 -1
  12. package/browser/persistence/SubjectExecutor.js +2 -1
  13. package/browser/persistence/SubjectExecutor.js.map +1 -1
  14. package/browser/query-builder/DeleteQueryBuilder.js +7 -10
  15. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  16. package/browser/query-builder/InsertOrUpdateOptions.d.ts +3 -0
  17. package/browser/query-builder/InsertOrUpdateOptions.js +3 -0
  18. package/browser/query-builder/InsertOrUpdateOptions.js.map +1 -0
  19. package/browser/query-builder/InsertQueryBuilder.d.ts +2 -1
  20. package/browser/query-builder/InsertQueryBuilder.js +19 -5
  21. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  22. package/browser/query-builder/QueryBuilder.d.ts +2 -1
  23. package/browser/query-builder/QueryBuilder.js +2 -2
  24. package/browser/query-builder/QueryBuilder.js.map +1 -1
  25. package/browser/query-builder/QueryExpressionMap.d.ts +1 -0
  26. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  27. package/browser/query-builder/ReturningResultsEntityUpdator.js +4 -3
  28. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  29. package/browser/query-builder/SoftDeleteQueryBuilder.js +7 -12
  30. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  31. package/browser/query-builder/UpdateQueryBuilder.js +7 -11
  32. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  33. package/browser/repository/UpsertOptions.d.ts +4 -0
  34. package/browser/repository/UpsertOptions.js.map +1 -1
  35. package/driver/Driver.d.ts +2 -1
  36. package/driver/Driver.js.map +1 -1
  37. package/driver/expo/ExpoQueryRunner.js +69 -45
  38. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  39. package/driver/mysql/MysqlDriver.d.ts +6 -2
  40. package/driver/mysql/MysqlDriver.js +42 -6
  41. package/driver/mysql/MysqlDriver.js.map +1 -1
  42. package/entity-manager/EntityManager.js +3 -1
  43. package/entity-manager/EntityManager.js.map +1 -1
  44. package/error/ReturningStatementNotSupportedError.js +1 -1
  45. package/error/ReturningStatementNotSupportedError.js.map +1 -1
  46. package/package.json +1 -1
  47. package/persistence/SubjectExecutor.js +2 -1
  48. package/persistence/SubjectExecutor.js.map +1 -1
  49. package/query-builder/DeleteQueryBuilder.js +7 -10
  50. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  51. package/query-builder/InsertOrUpdateOptions.d.ts +3 -0
  52. package/query-builder/InsertOrUpdateOptions.js +4 -0
  53. package/query-builder/InsertOrUpdateOptions.js.map +1 -0
  54. package/query-builder/InsertQueryBuilder.d.ts +2 -1
  55. package/query-builder/InsertQueryBuilder.js +19 -5
  56. package/query-builder/InsertQueryBuilder.js.map +1 -1
  57. package/query-builder/QueryBuilder.d.ts +2 -1
  58. package/query-builder/QueryBuilder.js +2 -2
  59. package/query-builder/QueryBuilder.js.map +1 -1
  60. package/query-builder/QueryExpressionMap.d.ts +1 -0
  61. package/query-builder/QueryExpressionMap.js.map +1 -1
  62. package/query-builder/ReturningResultsEntityUpdator.js +4 -3
  63. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  64. package/query-builder/SoftDeleteQueryBuilder.js +7 -12
  65. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  66. package/query-builder/UpdateQueryBuilder.js +7 -11
  67. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  68. package/repository/UpsertOptions.d.ts +4 -0
  69. 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.query("PRAGMA foreign_keys = OFF")];
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.query("PRAGMA foreign_keys = ON")];
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
- if (typeof _this.transaction === "undefined") {
165
- _this.startTransaction();
166
- _this.transaction = transaction;
167
- }
168
- _this.transaction.executeSql(query, parameters, function (t, raw) {
169
- // log slow queries if maxQueryExecution time is set
170
- var maxQueryExecutionTime = _this.driver.options.maxQueryExecutionTime;
171
- var queryEndTime = +new Date();
172
- var queryExecutionTime = queryEndTime - queryStartTime;
173
- if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {
174
- _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);
175
- }
176
- var result = new QueryResult_1.QueryResult();
177
- // return id of inserted row, if query was insert statement.
178
- if (query.substr(0, 11) === "INSERT INTO") {
179
- result.raw = raw.insertId;
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
- if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rowsAffected')) {
182
- result.affected = raw.rowsAffected;
183
- }
184
- if (raw === null || raw === void 0 ? void 0 : raw.hasOwnProperty('rows')) {
185
- var resultSet = [];
186
- for (var i = 0; i < raw.rows.length; i++) {
187
- resultSet.push(raw.rows.item(i));
188
- }
189
- result.raw = resultSet;
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 (err) {
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":"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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 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: return [2 /*return*/];
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 false;
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
- Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and
878
- cause the hosting app to crash.
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); });