Rokoala
Rokoala

Reputation: 461

Sequelize transactions rollback on raw queries doesn't work

Sequelize rollback doesn't work on my transaction.

This is an example code:

    return sequelize.transaction({
      isolationLevel: "SERIALIZABLE",
      autocommit: false
    },function (t) {

      return sequelize.query('DELETE FROM Task WHERE id=:id',
      {
        replacements:{"id":id},
        type: sequelize.QueryTypes.SELECT
      })
      .then(function () {
        // the query was successful but I still want to roll back
        t.rollback();
      });
   });

I checked the console:

Executing (aaf94974-d646-4056-9cfa-0c53f1b1b3e3): START TRANSACTION;

Executing (aaf94974-d646-4056-9cfa-0c53f1b1b3e3): SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Executing (default): DELETE FROM Task WHERE id=6

Executing (aaf94974-d646-4056-9cfa-0c53f1b1b3e3): ROLLBACK;

But the rollback doesn't work.

Upvotes: 3

Views: 3554

Answers (1)

Daniel
Daniel

Reputation: 362

This not described in sequalize documentation, but I find usage example in sequalize tests.

return this.sequelize.query(query, { transaction: t }).bind(this).then(function() {
    return this.User.create({ name: 'foo' });
 })

So, you just need to pass transaction option into query call:

return sequelize.query('DELETE FROM Task WHERE id=:id',
{
    replacements:{"id":id},
    type: sequelize.QueryTypes.SELECT
})

Upvotes: 2

Related Questions