Browse Source

fix: allow deletion of link columns with missing mm table

pull/7434/head
mertmit 11 months ago
parent
commit
438a9f554b
  1. 22
      packages/nocodb/src/services/columns.service.ts

22
packages/nocodb/src/services/columns.service.ts

@ -2179,9 +2179,11 @@ export class ColumnsService {
colOpt.type === 'mm' && colOpt.type === 'mm' &&
colOpt.fk_parent_column_id === childColumn.id && colOpt.fk_parent_column_id === childColumn.id &&
colOpt.fk_child_column_id === parentColumn.id && colOpt.fk_child_column_id === parentColumn.id &&
colOpt.fk_mm_model_id === mmTable.id && colOpt.fk_mm_model_id === relationColOpt.fk_mm_model_id &&
colOpt.fk_mm_parent_column_id === mmChildCol.id && colOpt.fk_mm_parent_column_id ===
colOpt.fk_mm_child_column_id === mmParentCol.id relationColOpt.fk_mm_child_column_id &&
colOpt.fk_mm_child_column_id ===
relationColOpt.fk_mm_parent_column_id
) { ) {
await Column.delete(c.id, ncMeta); await Column.delete(c.id, ncMeta);
break; break;
@ -2190,6 +2192,7 @@ export class ColumnsService {
await Column.delete(relationColOpt.fk_column_id, ncMeta); await Column.delete(relationColOpt.fk_column_id, ncMeta);
if (mmTable) {
// delete bt columns in m2m table // delete bt columns in m2m table
await mmTable.getColumns(ncMeta); await mmTable.getColumns(ncMeta);
for (const c of mmTable.columns) { for (const c of mmTable.columns) {
@ -2200,6 +2203,7 @@ export class ColumnsService {
await Column.delete(c.id, ncMeta); await Column.delete(c.id, ncMeta);
} }
} }
}
// delete hm columns in parent table // delete hm columns in parent table
await parentTable.getColumns(ncMeta); await parentTable.getColumns(ncMeta);
@ -2207,7 +2211,9 @@ export class ColumnsService {
if (!isLinksOrLTAR(c.uidt)) continue; if (!isLinksOrLTAR(c.uidt)) continue;
const colOpt = const colOpt =
await c.getColOptions<LinkToAnotherRecordColumn>(ncMeta); await c.getColOptions<LinkToAnotherRecordColumn>(ncMeta);
if (colOpt.fk_related_model_id === mmTable.id) { if (
colOpt.fk_related_model_id === relationColOpt.fk_mm_model_id
) {
await Column.delete(c.id, ncMeta); await Column.delete(c.id, ncMeta);
} }
} }
@ -2218,11 +2224,14 @@ export class ColumnsService {
if (!isLinksOrLTAR(c.uidt)) continue; if (!isLinksOrLTAR(c.uidt)) continue;
const colOpt = const colOpt =
await c.getColOptions<LinkToAnotherRecordColumn>(ncMeta); await c.getColOptions<LinkToAnotherRecordColumn>(ncMeta);
if (colOpt.fk_related_model_id === mmTable.id) { if (
colOpt.fk_related_model_id === relationColOpt.fk_mm_model_id
) {
await Column.delete(c.id, ncMeta); await Column.delete(c.id, ncMeta);
} }
} }
if (mmTable) {
// retrieve columns in m2m table again // retrieve columns in m2m table again
await mmTable.getColumns(ncMeta); await mmTable.getColumns(ncMeta);
@ -2234,6 +2243,7 @@ export class ColumnsService {
await mmTable.delete(ncMeta); await mmTable.delete(ncMeta);
} }
} }
}
break; break;
} }
} }
@ -2341,6 +2351,7 @@ export class ColumnsService {
}, },
ignoreFkDelete = false, ignoreFkDelete = false,
) => { ) => {
if (childTable) {
let foreignKeyName; let foreignKeyName;
// if relationColOpt is not provided, extract it from child table // if relationColOpt is not provided, extract it from child table
@ -2379,6 +2390,7 @@ export class ColumnsService {
console.log(e.message); console.log(e.message);
} }
} }
}
if (!relationColOpt) return; if (!relationColOpt) return;
const columnsInRelatedTable: Column[] = await relationColOpt const columnsInRelatedTable: Column[] = await relationColOpt

Loading…
Cancel
Save