From 1d0c45d80e689d88b47061bb18479b435b63a117 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sat, 5 Feb 2022 21:16:13 +0530 Subject: [PATCH 1/4] fix: fetch column meta props from db on table create/update closes #1049 Signed-off-by: Pranav C --- .../nocodb/src/lib/noco/common/BaseApiBuilder.ts | 10 ++++++++-- packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts | 15 ++++++++++++--- .../nocodb/src/lib/noco/rest/RestApiBuilder.ts | 9 ++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts b/packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts index 147820db67..f3121b571d 100644 --- a/packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts +++ b/packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts @@ -726,6 +726,9 @@ export default abstract class BaseApiBuilder this.baseLog(`onTableUpdate : Getting old model meta for '%s'`, tn); XcCache.del([this.projectId, this.dbAlias, 'table', tn].join('::')); + // get columns list from db + const columnsFromDb = await this.getColumnList(tn); + const relationTableMetas: Set = new Set(); const oldModelRow = await this.xcMeta.metaGet( @@ -752,8 +755,11 @@ export default abstract class BaseApiBuilder const columns = changeObj.columns .filter(c => c.altered !== 4) - .map(({ altered: _al, ...rest }) => rest) || - (await this.getColumnList(tn)); + .map(({ altered: _al, ...rest }) => ({ + ...rest, + // find and overwrite column property from db + ...(columnsFromDb?.find(c => c.cn === rest.cn) || {}) + })) || (await this.getColumnList(tn)); /* Get all relations */ const relations = await this.relationsSyncAndGet(); diff --git a/packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts b/packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts index 192e67cd77..111b3635bb 100644 --- a/packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts +++ b/packages/nocodb/src/lib/noco/gql/GqlApiBuilder.ts @@ -190,9 +190,18 @@ export class GqlApiBuilder extends BaseApiBuilder implements XcMetaMgr { await super.onTableCreate(tn, args); - const columns = { - [tn]: args?.columns?.map(({ altered: _al, ...rest }) => rest) - }; + // get columns list from db + const columnsFromDb = await this.getColumnList(tn); + + const columns = args.columns + ? { + [tn]: args.columns?.map(({ altered: _al, ...rest }) => ({ + ...rest, + // find and overwrite column property from db + ...columnsFromDb?.find(c => c.cn === rest.cn) + })) + } + : {}; await this.xcTablesPopulate({ tableNames: [{ tn, _tn: args._tn }], diff --git a/packages/nocodb/src/lib/noco/rest/RestApiBuilder.ts b/packages/nocodb/src/lib/noco/rest/RestApiBuilder.ts index ee0b0d383d..6468e277a1 100644 --- a/packages/nocodb/src/lib/noco/rest/RestApiBuilder.ts +++ b/packages/nocodb/src/lib/noco/rest/RestApiBuilder.ts @@ -876,9 +876,16 @@ export class RestApiBuilder extends BaseApiBuilder { ): Promise { await super.onTableCreate(tn, args); + // get columns list from db + const columnsFromDb = await this.getColumnList(tn); + const columns = args.columns ? { - [tn]: args.columns?.map(({ altered: _al, ...rest }) => rest) + [tn]: args.columns?.map(({ altered: _al, ...rest }) => ({ + ...rest, + // find and overwrite column property from db + ...(columnsFromDb?.find(c => c.cn === rest.cn) || {}) + })) } : {}; From fd419fca9bf35360398693c34c9d1930307b8a1b Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sat, 5 Feb 2022 23:04:57 +0530 Subject: [PATCH 2/4] fix: handle meta sync properly even if there is no change - hide meta sync button if there is no change - ignore invoking populate function if there is no change re #1047 Signed-off-by: Pranav C --- .../projectMetadata/sync/disableOrEnableTables.vue | 11 ++++------- .../src/lib/noco/common/handlers/xcMetaDiffSync.ts | 9 +++++++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue b/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue index 2f856a8b8c..ea4aaf4842 100644 --- a/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue +++ b/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue @@ -251,6 +251,7 @@ --> import { mapGetters } from 'vuex' -// import { isMetaTable } from '@/helpers/xutils' -import XIcon from '@/components/global/xIcon' -import XBtn from '@/components/global/xBtn' import viewIcons from '~/helpers/viewIcons' export default { name: 'DisableOrEnableTables', - components: { - XBtn, - XIcon - }, props: ['nodes', 'db'], data: () => ({ viewIcons, @@ -425,6 +419,9 @@ export default { ...mapGetters({ dbAliasList: 'project/GtrDbAliasList' }), + isChanged() { + return this.diff && this.diff.some(d => d && d.detectedChanges && d.detectedChanges.length) + }, prefix() { return this.$store.getters['project/GtrProjectPrefix'] || '' } diff --git a/packages/nocodb/src/lib/noco/common/handlers/xcMetaDiffSync.ts b/packages/nocodb/src/lib/noco/common/handlers/xcMetaDiffSync.ts index 395d1bb43e..bcc5166061 100644 --- a/packages/nocodb/src/lib/noco/common/handlers/xcMetaDiffSync.ts +++ b/packages/nocodb/src/lib/noco/common/handlers/xcMetaDiffSync.ts @@ -785,8 +785,13 @@ if (sIndex > -1) { populateParams.tableNames = populateParams.tableNames?.filter(t => { return t === populateParams.tableNames.find(t1 => t1.tn === t.tn); }); - await this.xcTablesPopulate(populateParams); - await this.xcTablesPopulate(populateViewsParams); + + // invoke only if there is change in at least one table + if (populateParams.tableNames?.length) { + await this.xcTablesPopulate(populateParams); + } else if (populateViewsParams.tableNames?.length) { + await this.xcTablesPopulate(populateViewsParams); + } if (this instanceof GqlApiBuilder) { await (this as GqlApiBuilder).reInitializeGraphqlEndpoint(); From 46d62ca02d42b6642d743b6a562039ba27dbbd44 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sun, 6 Feb 2022 10:47:17 +0530 Subject: [PATCH 3/4] refactor: show alert if there is no meta change Signed-off-by: Pranav C --- .../sync/disableOrEnableTables.vue | 52 +++++++++++++------ 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue b/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue index ea4aaf4842..d3f34d1bce 100644 --- a/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue +++ b/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue @@ -200,8 +200,8 @@
- - + - +
@@ -249,19 +249,41 @@ Sync Now
--> + + + + + + Metadata for API creation & management isn't sync with + '{{ dbAliasList[dbsTab].connection.database }}' Database. + + From c7067435d98e4ef2149e4a4534e663d085e96dc8 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Sun, 6 Feb 2022 15:18:56 +0530 Subject: [PATCH 4/4] refactor: remove tooltip for meta sync button Signed-off-by: Pranav C --- .../sync/disableOrEnableTables.vue | 54 ++++++------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue b/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue index d3f34d1bce..84929e5dc5 100644 --- a/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue +++ b/packages/nc-gui/components/project/projectMetadata/sync/disableOrEnableTables.vue @@ -238,52 +238,26 @@
- - - + - - - Metadata for API creation & management isn't sync with - '{{ dbAliasList[dbsTab].connection.database }}' Database. - - + + Tables metadata is in sync +
@@ -294,9 +268,11 @@