From 0843ab6a379b45a4f105cdf2670d144a97513b4a Mon Sep 17 00:00:00 2001 From: Thibaut Patel Date: Mon, 1 Mar 2021 16:54:13 +0100 Subject: [PATCH] Added 'on delete cascade' to several foreign keys in sqlite issue https://github.com/TryGhost/Team/issues/476 blocked by https://github.com/TryGhost/Ghost/pull/12702 --- .../versions/4.0/26-add-cascade-on-delete.js | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js diff --git a/core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js b/core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js new file mode 100644 index 0000000000..8ac72d21cb --- /dev/null +++ b/core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js @@ -0,0 +1,75 @@ +const logging = require('../../../../../shared/logging'); +const {createIrreversibleMigration} = require('../../utils'); +const {addForeign, dropForeign} = require('../../../schema/commands'); + +module.exports = createIrreversibleMigration(async (knex) => { + if (knex.client.config.client !== 'sqlite3') { + return logging.warn('Skipping adding "on delete cascade" - database is not SQLite3'); + } + + logging.info('Adding on delete cascade for members_labels, members_stripe_customers and members_stripe_customers_subscriptions'); + + await dropForeign({ + fromTable: 'members_labels', + fromColumn: 'member_id', + toTable: 'members', + toColumn: 'id', + transaction: knex + }); + await addForeign({ + fromTable: 'members_labels', + fromColumn: 'member_id', + toTable: 'members', + toColumn: 'id', + cascade: true, + transaction: knex + }); + + await dropForeign({ + fromTable: 'members_labels', + fromColumn: 'label_id', + toTable: 'labels', + toColumn: 'id', + transaction: knex + }); + await addForeign({ + fromTable: 'members_labels', + fromColumn: 'label_id', + toTable: 'labels', + toColumn: 'id', + cascade: true, + transaction: knex + }); + + await dropForeign({ + fromTable: 'members_stripe_customers', + fromColumn: 'member_id', + toTable: 'members', + toColumn: 'id', + transaction: knex + }); + await addForeign({ + fromTable: 'members_stripe_customers', + fromColumn: 'member_id', + toTable: 'members', + toColumn: 'id', + cascade: true, + transaction: knex + }); + + await dropForeign({ + fromTable: 'members_stripe_customers_subscriptions', + fromColumn: 'customer_id', + toTable: 'members_stripe_customers', + toColumn: 'id', + transaction: knex + }); + await addForeign({ + fromTable: 'members_stripe_customers_subscriptions', + fromColumn: 'customer_id', + toTable: 'members_stripe_customers', + toColumn: 'id', + cascade: true, + transaction: knex + }); +});