diff --git a/lib/dialects/db2/query.js b/lib/dialects/db2/query.js index 32cfe171f5d8..8a14ddcaab50 100644 --- a/lib/dialects/db2/query.js +++ b/lib/dialects/db2/query.js @@ -35,12 +35,14 @@ class Query extends AbstractQuery { this.sequelize.log(`Executing (${this.connection.uuid || 'default'}): ${this.sql}`, this.options); } + const errStack = new Error().stack; + return new Promise((resolve, reject) => { // TRANSACTION SUPPORT if (_.startsWith(this.sql, 'BEGIN TRANSACTION')) { connection.beginTransaction(err => { if (err) { - reject(this.formatError(err)); + reject(this.formatError(err, errStack)); } else { resolve(this.formatResults()); } @@ -48,7 +50,7 @@ class Query extends AbstractQuery { } else if (_.startsWith(this.sql, 'COMMIT TRANSACTION')) { connection.commitTransaction(err => { if (err) { - reject(this.formatError(err)); + reject(this.formatError(err, errStack)); } else { resolve(this.formatResults()); } @@ -56,7 +58,7 @@ class Query extends AbstractQuery { } else if (_.startsWith(this.sql, 'ROLLBACK TRANSACTION')) { connection.rollbackTransaction(err => { if (err) { - reject(this.formatError(err)); + reject(this.formatError(err, errStack)); } else { resolve(this.formatResults()); } @@ -64,11 +66,11 @@ class Query extends AbstractQuery { } else if (_.startsWith(this.sql, 'SAVE TRANSACTION')) { connection.commitTransaction(err => { if (err) { - reject(this.formatError(err)); + reject(this.formatError(err, errStack)); } else { connection.beginTransaction(err => { if (err) { - reject(this.formatError(err)); + reject(this.formatError(err, errStack)); } else { resolve(this.formatResults()); } @@ -97,7 +99,7 @@ class Query extends AbstractQuery { connection.prepare(newSql, (err, stmt) => { if (err) { - reject(this.formatError(err)); + reject(this.formatError(err, errStack)); } stmt.execute(params, (err, result, outparams) => { @@ -118,7 +120,7 @@ class Query extends AbstractQuery { if (err) { err.sql = sql; stmt.closeSync(); - reject(this.formatError(err, connection, parameters)); + reject(this.formatError(err, errStack, connection, parameters)); } else { let data = []; let metadata = []; @@ -355,7 +357,7 @@ class Query extends AbstractQuery { }); } - formatError(err, conn, parameters) { + formatError(err, errStack, conn, parameters) { let match; if (!(err && err.message)) { @@ -411,7 +413,7 @@ class Query extends AbstractQuery { )); }); - return new sequelizeErrors.UniqueConstraintError({ message, errors, parent: err, fields }); + return new sequelizeErrors.UniqueConstraintError({ message, errors, parent: err, fields, stack: errStack }); } match = err.message.match(/SQL0532N {2}A parent row cannot be deleted because the relationship "(.*)" restricts the deletion/) @@ -422,6 +424,7 @@ class Query extends AbstractQuery { fields: null, index: match[1], parent: err, + stack: errStack, }); } @@ -436,10 +439,11 @@ class Query extends AbstractQuery { constraint, table, parent: err, + stack: errStack, }); } - return new sequelizeErrors.DatabaseError(err); + return new sequelizeErrors.DatabaseError(err, { stack: errStack }); } isDropSchemaQuery() {