Skip to content

Commit

Permalink
move deferrable to after on update/on delete (#4976)
Browse files Browse the repository at this point in the history
Thank you!
  • Loading branch information
bflyblue committed Jan 28, 2022
1 parent 2e1016e commit 4f0f0ab
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 4 deletions.
8 changes: 4 additions & 4 deletions lib/schema/tablecompiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,9 @@ class TableCompiler {
' (' +
references +
')' +
deferrable +
onUpdate +
onDelete
onDelete +
deferrable
);
} else {
this.pushQuery(
Expand All @@ -144,9 +144,9 @@ class TableCompiler {
' (' +
references +
')' +
deferrable +
onUpdate +
onDelete
onDelete +
deferrable
);
}
}
Expand Down
76 changes: 76 additions & 0 deletions test/integration2/query/insert/on-conflict-deferred.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
const {
getAllDbs,
getKnexForDb,
} = require('../../util/knex-instance-provider');
const { isPostgreSQL } = require('../../../util/db-helpers');

describe('Insert', () => {
describe('onConflict deferred', () => {
getAllDbs().forEach((db) => {
describe(db, () => {
let knex;
before(function () {
knex = getKnexForDb(db);
if (!isPostgreSQL(knex)) {
this.skip('This test is PostgreSQL only');
}
});

after(() => {
return knex.destroy();
});

beforeEach(async () => {
await knex.schema.createTable('table_a', (table) => {
table.integer('id').primary().notNull();
table.integer('b_id').notNull();
table.integer('value').notNull();
});
await knex.schema.createTable('table_b', (table) => {
table.integer('id').primary().notNull();
table.integer('a_id').notNull();
table.integer('value').notNull();
});
await knex.schema.table('table_a', (table) => {
table
.foreign('b_id')
.references('table_b.id')
.onDelete('cascade')
.onUpdate('cascade')
.deferrable('deferred');
});
await knex.schema.table('table_b', (table) => {
table
.foreign('a_id')
.references('table_a.id')
.onDelete('cascade')
.onUpdate('cascade')
.deferrable('deferred');
});
});

afterEach(async () => {
await knex.schema.raw('drop table table_a cascade');
await knex.schema.raw('drop table table_b cascade');
});

it('inserts entries with delayed checks correctly', async function () {
for (let i = 0; i < 10; i++) {
await knex.transaction(async function (txn) {
await txn
.table('table_a')
.insert({ id: i, b_id: i, value: i })
.onConflict('id')
.merge();
await txn
.table('table_b')
.insert({ id: i, a_id: i, value: i })
.onConflict('id')
.merge();
});
}
});
});
});
});
});

0 comments on commit 4f0f0ab

Please sign in to comment.