Browse Source

fix: removal of physical relationships on metadata recreate (#843)

Signed-off-by: vijayrathore8492 <professional.vijay8492@gmail.com>
pull/848/head
Vijay Rathore 3 years ago committed by GitHub
parent
commit
ecc932337f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 72
      packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts
  2. 4
      packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts
  3. 5
      packages/nocodb/src/lib/noco/rest/RestApiBuilder.ts

72
packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts

@ -2125,6 +2125,78 @@ export default abstract class BaseApiBuilder<T extends Noco>
return relations;
}
protected async syncRelations(): Promise<boolean> {
const [relations, missingRelations] = await this.getRelationsAndMissingRelations()
if(!missingRelations) return false;
this.relationsCount = relations.length + missingRelations.length;
for (const relation of missingRelations) {
await this.xcMeta.metaInsert(
this.projectId,
this.dbAlias,
'nc_relations',
{
tn: relation.tn,
_tn: this.getTableNameAlias(relation.tn),
cn: relation.cn,
_cn: this.getColumnNameAlias({ cn: relation.cn }, relation.tn),
rtn: relation.rtn,
_rtn: this.getTableNameAlias(relation.rtn),
rcn: relation.rcn,
_rcn: this.getColumnNameAlias({ cn: relation.rcn }, relation.rtn),
type: 'real',
db_type: this.connectionConfig?.client,
dr: relation?.dr,
ur: relation?.ur,
fkn: relation?.cstn
}
);
}
return true;
}
protected async getRelationsAndMissingRelations(): Promise<[any, any]> {
// Relations in metadata
let relations = await this.xcMeta.metaList(
this.projectId,
this.dbAlias,
'nc_relations',
{
fields: [
'ur',
'tn',
'_tn',
'cn',
'_cn',
'rtn',
'rcn',
'_rcn',
'_rtn',
'type',
'db_type',
'dr',
'fkn'
]
}
);
// Relations in DB
const dbRelations = (await this.sqlClient.relationListAll())?.data?.list;
// Relations missing in metadata
const missingRelations = dbRelations.filter(dbRelation => {
return relations.every(relation => relation?.fkn !== dbRelation?.cstn)
}).map(relation => {
relation.enabled = true;
relation.fkn = relation?.cstn;
return relation
});
return [relations, missingRelations];
}
protected async renameTableNameInXcRelations(
oldTableName: string,
newTableName: string

4
packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts

@ -727,7 +727,8 @@ export class GqlApiBuilder extends BaseApiBuilder<Noco> implements XcMetaMgr {
);
let tables;
/* Get all relations */
const relations = await this.relationsSyncAndGet();
let [relations, missingRelations] = await this.getRelationsAndMissingRelations()
relations = relations.concat(missingRelations);
// set table name alias
relations.forEach(r => {
@ -838,6 +839,7 @@ export class GqlApiBuilder extends BaseApiBuilder<Noco> implements XcMetaMgr {
}
this.tablesCount = tables.length;
this.syncRelations()
if (tables.length) {
relations.forEach(rel => (rel.enabled = true));

5
packages/nocodb/src/lib/noco/rest/RestApiBuilder.ts

@ -368,7 +368,8 @@ export class RestApiBuilder extends BaseApiBuilder<Noco> {
)?.max || 0;
/* Get all relations */
const relations = await this.relationsSyncAndGet();
let [relations, missingRelations] = await this.getRelationsAndMissingRelations()
relations = relations.concat(missingRelations);
// set table name alias
relations.forEach(r => {
@ -451,6 +452,8 @@ export class RestApiBuilder extends BaseApiBuilder<Noco> {
r._rtn = this.getTableNameAlias(r.rtn);
});
this.syncRelations()
const tableRoutes = tables.map(table => {
return async () => {
swaggerRefs[table.tn] = [];

Loading…
Cancel
Save