fix(bulk-create): `ON CONFLICT` with unique index (#13345) · sequelize/sequelize@6dcb565

@@ -638,6 +638,67 @@ describe(Support.getTestDialectTeaser('Model'), () => {

638638

expect(people[1].name).to.equal('Bob');

639639

});

640640641+

it('[#12516] when the primary key column names and model field names are different and have composite unique index constraints', async function() {

642+

const Person = this.sequelize.define(

643+

'Person',

644+

{

645+

id: {

646+

type: DataTypes.INTEGER,

647+

allowNull: false,

648+

autoIncrement: true,

649+

primaryKey: true,

650+

field: 'id'

651+

},

652+

systemId: {

653+

type: DataTypes.INTEGER,

654+

allowNull: false,

655+

field: 'system_id'

656+

},

657+

system: {

658+

type: DataTypes.STRING,

659+

allowNull: false,

660+

field: 'system'

661+

},

662+

name: {

663+

type: DataTypes.STRING,

664+

allowNull: false,

665+

field: 'name'

666+

}

667+

},

668+

{

669+

indexes: [

670+

{

671+

unique: true,

672+

fields: ['system_id', 'system']

673+

}

674+

]

675+

}

676+

);

677+678+

await Person.sync({ force: true });

679+

const inserts = [{ systemId: 1, system: 'system1', name: 'Alice' }];

680+

const people0 = await Person.bulkCreate(inserts);

681+

expect(people0.length).to.equal(1);

682+

expect(people0[0].systemId).to.equal(1);

683+

expect(people0[0].system).to.equal('system1');

684+

expect(people0[0].name).to.equal('Alice');

685+686+

const updates = [

687+

{ systemId: 1, system: 'system1', name: 'CHANGED NAME' },

688+

{ systemId: 1, system: 'system2', name: 'Bob' }

689+

];

690+691+

const people = await Person.bulkCreate(updates, {

692+

updateOnDuplicate: ['systemId', 'system', 'name']

693+

});

694+

expect(people.length).to.equal(2);

695+

expect(people[0].systemId).to.equal(1);

696+

expect(people[0].system).to.equal('system1');

697+

expect(people[0].name).to.equal('CHANGED NAME');

698+

expect(people[1].systemId).to.equal(1);

699+

expect(people[1].system).to.equal('system2');

700+

expect(people[1].name).to.equal('Bob');

701+

});

641702

});

642703643704