Skip to content

Commit

Permalink
fix(core): Fix DropRoleMapping migration (#8521)
Browse files Browse the repository at this point in the history
  • Loading branch information
netroy committed Feb 2, 2024
1 parent 6385fb2 commit 731b305
Showing 1 changed file with 22 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ const idColumns: Record<Table, string> = {
shared_workflow: 'workflowId',
};

const uidColumns: Record<Table, string> = {
user: 'id',
shared_credentials: 'userId',
shared_workflow: 'userId',
};

const roleScopes: Record<Table, string> = {
user: 'global',
shared_credentials: 'credential',
Expand Down Expand Up @@ -48,24 +54,30 @@ export class DropRoleMapping1705429061930 implements ReversibleMigration {
const roleTable = escape.tableName('role');
const tableName = escape.tableName(table);
const idColumn = escape.columnName(idColumns[table]);
const uidColumn = escape.columnName(uidColumns[table]);
const roleColumnName = table === 'user' ? 'globalRoleId' : 'roleId';
const roleColumn = escape.columnName(roleColumnName);
const scope = roleScopes[table];
const isMySQL = ['mariadb', 'mysqldb'].includes(dbType);
const roleField = isMySQL ? `CONCAT('${scope}:', R.name)` : `'${scope}:' || R.name`;
const subQuery = `
SELECT ${roleField} as role, T.${idColumn} as id
SELECT ${roleField} as role, T.${idColumn} as id${
table !== 'user' ? `, T.${uidColumn} as uid` : ''
}
FROM ${tableName} T
LEFT JOIN ${roleTable} R
ON T.${roleColumn} = R.id and R.scope = '${scope}'`;
const where = `WHERE ${tableName}.${idColumn} = mapping.id${
table !== 'user' ? ` AND ${tableName}.${uidColumn} = mapping.uid` : ''
}`;
const swQuery = isMySQL
? `UPDATE ${tableName}, (${subQuery}) as mapping
SET ${tableName}.role = mapping.role
WHERE ${tableName}.${idColumn} = mapping.id`
${where}`
: `UPDATE ${tableName}
SET role = mapping.role
FROM (${subQuery}) as mapping
WHERE ${tableName}.${idColumn} = mapping.id`;
${where}`;
await runQuery(swQuery);

await addNotNull(table, 'role');
Expand Down Expand Up @@ -95,23 +107,27 @@ export class DropRoleMapping1705429061930 implements ReversibleMigration {
const roleTable = escape.tableName('role');
const tableName = escape.tableName(table);
const idColumn = escape.columnName(idColumns[table]);
const uidColumn = escape.columnName(uidColumns[table]);
const roleColumn = escape.columnName(roleColumnName);
const scope = roleScopes[table];
const isMySQL = ['mariadb', 'mysqldb'].includes(dbType);
const roleField = isMySQL ? `CONCAT('${scope}:', R.name)` : `'${scope}:' || R.name`;
const subQuery = `
SELECT R.id as role_id, T.${idColumn} as id
SELECT R.id as role_id, T.${idColumn} as id${table !== 'user' ? `, T.${uidColumn} as uid` : ''}
FROM ${tableName} T
LEFT JOIN ${roleTable} R
ON T.role = ${roleField} and R.scope = '${scope}'`;
const where = `WHERE ${tableName}.${idColumn} = mapping.id${
table !== 'user' ? ` AND ${tableName}.${uidColumn} = mapping.uid` : ''
}`;
const query = isMySQL
? `UPDATE ${tableName}, (${subQuery}) as mapping
SET ${tableName}.${roleColumn} = mapping.role_id
WHERE ${tableName}.${idColumn} = mapping.id`
${where}`
: `UPDATE ${tableName}
SET ${roleColumn} = mapping.role_id
FROM (${subQuery}) as mapping
WHERE ${tableName}.${idColumn} = mapping.id`;
${where}`;
await runQuery(query);

await addNotNull(table, roleColumnName);
Expand Down

0 comments on commit 731b305

Please sign in to comment.