Skip to content

Commit

Permalink
fix(increment): fix key value broken query (sequelize#12985)
Browse files Browse the repository at this point in the history
Co-authored-by: Sascha Depold <sdepold@users.noreply.github.com>
  • Loading branch information
2 people authored and aliatsis committed Jun 2, 2022
1 parent 34db558 commit 52073bd
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
9 changes: 9 additions & 0 deletions lib/model.js
Expand Up @@ -3315,6 +3315,15 @@ class Model {
}
return f;
});
} else if (fields && typeof fields === 'object') {
fields = Object.keys(fields).reduce((rawFields, f) => {
if (this.rawAttributes[f] && this.rawAttributes[f].field && this.rawAttributes[f].field !== f) {
rawFields[this.rawAttributes[f].field] = fields[f];
} else {
rawFields[f] = fields[f];
}
return rawFields;
}, {});
}

this._injectScope(options);
Expand Down
24 changes: 23 additions & 1 deletion test/integration/instance/increment.test.js
Expand Up @@ -28,6 +28,7 @@ describe(Support.getTestDialectTeaser('Instance'), () => {
touchedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
aNumber: { type: DataTypes.INTEGER },
bNumber: { type: DataTypes.INTEGER },
cNumber: { type: DataTypes.INTEGER, field: 'CNumberColumn' },
aDate: { type: DataTypes.DATE },

validateTest: {
Expand Down Expand Up @@ -57,7 +58,7 @@ describe(Support.getTestDialectTeaser('Instance'), () => {

describe('increment', () => {
beforeEach(async function() {
await this.User.create({ id: 1, aNumber: 0, bNumber: 0 });
await this.User.create({ id: 1, aNumber: 0, bNumber: 0, cNumber: 0 });
});

if (current.dialect.supports.transactions) {
Expand Down Expand Up @@ -150,6 +151,27 @@ describe(Support.getTestDialectTeaser('Instance'), () => {
expect(user3.bNumber).to.be.equal(2);
});

it('single value should work when field name is different from database column name', async function() {
const user = await this.User.findByPk(1);
await user.increment('cNumber');
const user2 = await this.User.findByPk(1);
expect(user2.cNumber).to.be.equal(1);
});

it('array should work when field name is different from database column name', async function() {
const user = await this.User.findByPk(1);
await user.increment(['cNumber']);
const user2 = await this.User.findByPk(1);
expect(user2.cNumber).to.be.equal(1);
});

it('key value should work when field name is different from database column name', async function() {
const user = await this.User.findByPk(1);
await user.increment({ cNumber: 1 });
const user2 = await this.User.findByPk(1);
expect(user2.cNumber).to.be.equal(1);
});

it('with timestamps set to true', async function() {
const User = this.sequelize.define('IncrementUser', {
aNumber: DataTypes.INTEGER
Expand Down

0 comments on commit 52073bd

Please sign in to comment.