mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-06 22:40:14 -05:00
💡 Enabled foreign key checks on sqlite3
issue https://github.com/TryGhost/Team/issues/476
This commit is contained in:
parent
c8af2d4a04
commit
874ccaef53
2 changed files with 24 additions and 1 deletions
|
@ -13,6 +13,13 @@ function configure(dbConfig) {
|
||||||
// Backwards compatibility with old knex behaviour
|
// Backwards compatibility with old knex behaviour
|
||||||
dbConfig.useNullAsDefault = Object.prototype.hasOwnProperty.call(dbConfig, 'useNullAsDefault') ? dbConfig.useNullAsDefault : true;
|
dbConfig.useNullAsDefault = Object.prototype.hasOwnProperty.call(dbConfig, 'useNullAsDefault') ? dbConfig.useNullAsDefault : true;
|
||||||
|
|
||||||
|
// Enables foreign key checks and delete on cascade
|
||||||
|
dbConfig.pool = {
|
||||||
|
afterCreate(conn, cb) {
|
||||||
|
conn.run('PRAGMA foreign_keys = ON', cb);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Force bthreads to use child_process backend until a worker_thread-compatible version of sqlite3 is published
|
// Force bthreads to use child_process backend until a worker_thread-compatible version of sqlite3 is published
|
||||||
// https://github.com/mapbox/node-sqlite3/issues/1386
|
// https://github.com/mapbox/node-sqlite3/issues/1386
|
||||||
process.env.BTHREADS_BACKEND = 'child_process';
|
process.env.BTHREADS_BACKEND = 'child_process';
|
||||||
|
|
|
@ -24,7 +24,14 @@ module.exports.initData = async () => {
|
||||||
|
|
||||||
module.exports.truncate = async (tableName) => {
|
module.exports.truncate = async (tableName) => {
|
||||||
if (config.get('database:client') === 'sqlite3') {
|
if (config.get('database:client') === 'sqlite3') {
|
||||||
|
const [foreignKeysEnabled] = await db.knex.raw('PRAGMA foreign_keys;');
|
||||||
|
if (foreignKeysEnabled.foreign_keys) {
|
||||||
|
await db.knex.raw('PRAGMA foreign_keys = OFF;');
|
||||||
|
}
|
||||||
await db.knex(tableName).truncate();
|
await db.knex(tableName).truncate();
|
||||||
|
if (foreignKeysEnabled.foreign_keys) {
|
||||||
|
await db.knex.raw('PRAGMA foreign_keys = ON;');
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +60,16 @@ module.exports.teardown = () => {
|
||||||
if (config.get('database:client') === 'sqlite3') {
|
if (config.get('database:client') === 'sqlite3') {
|
||||||
return Promise
|
return Promise
|
||||||
.mapSeries(tables, function createTable(table) {
|
.mapSeries(tables, function createTable(table) {
|
||||||
return db.knex.raw('DELETE FROM ' + table + ';');
|
return (async function () {
|
||||||
|
const [foreignKeysEnabled] = await db.knex.raw('PRAGMA foreign_keys;');
|
||||||
|
if (foreignKeysEnabled.foreign_keys) {
|
||||||
|
await db.knex.raw('PRAGMA foreign_keys = OFF;');
|
||||||
|
}
|
||||||
|
await db.knex.raw('DELETE FROM ' + table + ';');
|
||||||
|
if (foreignKeysEnabled.foreign_keys) {
|
||||||
|
await db.knex.raw('PRAGMA foreign_keys = ON;');
|
||||||
|
}
|
||||||
|
})();
|
||||||
})
|
})
|
||||||
.catch(function (err) {
|
.catch(function (err) {
|
||||||
// CASE: table does not exist
|
// CASE: table does not exist
|
||||||
|
|
Loading…
Reference in a new issue