@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
113 lines (112 loc) • 2.35 kB
JavaScript
//#region src/database/migrations/20201105A-add-cascade-system-relations.ts
const updates = [
{
table: "directus_fields",
constraints: [{
column: "group",
references: "directus_fields.id"
}]
},
{
table: "directus_files",
constraints: [
{
column: "folder",
references: "directus_folders.id"
},
{
column: "uploaded_by",
references: "directus_users.id"
},
{
column: "modified_by",
references: "directus_users.id"
}
]
},
{
table: "directus_folders",
constraints: [{
column: "parent",
references: "directus_folders.id"
}]
},
{
table: "directus_permissions",
constraints: [{
column: "role",
references: "directus_roles.id"
}]
},
{
table: "directus_presets",
constraints: [{
column: "user",
references: "directus_users.id"
}, {
column: "role",
references: "directus_roles.id"
}]
},
{
table: "directus_revisions",
constraints: [{
column: "activity",
references: "directus_activity.id"
}, {
column: "parent",
references: "directus_revisions.id"
}]
},
{
table: "directus_sessions",
constraints: [{
column: "user",
references: "directus_users.id"
}]
},
{
table: "directus_settings",
constraints: [
{
column: "project_logo",
references: "directus_files.id"
},
{
column: "public_foreground",
references: "directus_files.id"
},
{
column: "public_background",
references: "directus_files.id"
}
]
},
{
table: "directus_users",
constraints: [{
column: "role",
references: "directus_roles.id"
}]
}
];
/**
* NOTE:
* Not all databases allow (or support) recursive onUpdate/onDelete triggers. MS SQL / Oracle flat out deny creating them,
* Postgres behaves erratic on those triggers, not sure if MySQL / Maria plays nice either.
*/
async function up(knex) {
for (const update of updates) await knex.schema.alterTable(update.table, (table) => {
for (const constraint of update.constraints) {
table.dropForeign([constraint.column]);
table.foreign(constraint.column).references(constraint.references);
}
});
}
async function down(knex) {
for (const update of updates) await knex.schema.alterTable(update.table, (table) => {
for (const constraint of update.constraints) table.dropForeign([constraint.column]);
});
}
//#endregion
export { down, up };