diff --git a/packages/nocodb/src/services/columns.service.ts b/packages/nocodb/src/services/columns.service.ts index 10dcb764d0..df56c3f9ea 100644 --- a/packages/nocodb/src/services/columns.service.ts +++ b/packages/nocodb/src/services/columns.service.ts @@ -135,16 +135,39 @@ async function reuseOrSave( return res; } -function getJunctionTableName( +async function getJunctionTableName( param: { base: Base; }, parent: Model, child: Model, ) { - return `${param.base?.prefix ?? ''}_nc_m2m_${parent.table_name}_${ - child.table_name - }`; + const parentTable = param.base?.prefix + ? parent.table_name.replace(`${param.base?.prefix}_`, '') + : parent.table_name; + const childTable = param.base?.prefix + ? child.table_name.replace(`${param.base?.prefix}_`, '') + : child.table_name; + + const tableName = `${ + param.base?.prefix ?? '' + }_nc_m2m_${parentTable.slice(0, 15)}_${childTable.slice(0, 15)}`; + let suffix: number = null; + // check table name avail or not, if not then add incremental suffix + while ( + await Noco.ncMeta.metaGet2( + (parent as any).fk_workspace_id, + parent.base_id, + MetaTable.MODELS, + { + table_name: `${tableName}${suffix ?? ''}`, + source_id: parent.source_id, + }, + ) + ) { + suffix = suffix ? suffix + 1 : 1; + } + return `${tableName}${suffix ?? ''}`; } @Injectable() @@ -3278,7 +3301,7 @@ export class ColumnsService { param.colExtra, ); } else if ((param.column as LinkToAnotherColumnReqType).type === 'mm') { - const aTn = getJunctionTableName(param, parent, child); + const aTn = await getJunctionTableName(param, parent, child); const aTnAlias = aTn; const parentPK = parent.primaryKey; @@ -3286,8 +3309,8 @@ export class ColumnsService { const associateTableCols = []; - const parentCn = `${parent.table_name}_id`; - const childCn = `${child.table_name}_id`; + const parentCn = `${parent.table_name.slice(0, 30)}_id`; + const childCn = `${child.table_name.slice(0, 30)}_id`; associateTableCols.push( {