Skip to content

Commit

Permalink
fix(db2/formatError): added support for reporting stack that triggere…
Browse files Browse the repository at this point in the history
…d the query
  • Loading branch information
joaoe committed Jan 21, 2022
1 parent f968a21 commit f406fe8
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions lib/dialects/db2/query.js
Expand Up @@ -35,40 +35,42 @@ 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());
}
});
} 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());
}
});
} 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());
}
});
} 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());
}
Expand Down Expand Up @@ -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) => {
Expand All @@ -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 = [];
Expand Down Expand Up @@ -355,7 +357,7 @@ class Query extends AbstractQuery {
});
}

formatError(err, conn, parameters) {
formatError(err, errStack, conn, parameters) {
let match;

if (!(err && err.message)) {
Expand Down Expand Up @@ -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/)
Expand All @@ -422,6 +424,7 @@ class Query extends AbstractQuery {
fields: null,
index: match[1],
parent: err,
stack: errStack,
});
}

Expand All @@ -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() {
Expand Down

0 comments on commit f406fe8

Please sign in to comment.