From d92ac512ac094160c9e375e78d1774f01c7b0161 Mon Sep 17 00:00:00 2001 From: mertmit Date: Sat, 9 Mar 2024 07:10:47 +0000 Subject: [PATCH 1/4] fix: use parseMetaProp on export service --- .../src/modules/jobs/jobs/export-import/export.service.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts index 15b383663c..78e450600b 100644 --- a/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts +++ b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts @@ -13,6 +13,7 @@ import NcPluginMgrv2 from '~/helpers/NcPluginMgrv2'; import { NcError } from '~/helpers/catchError'; import { DatasService } from '~/services/datas.service'; import { Base, Hook, Model, Source } from '~/models'; +import { parseMetaProp } from '~/utils/modelUtils'; @Injectable() export class ExportService { @@ -220,10 +221,7 @@ export class ExportService { break; case 'meta': if (view.type === ViewTypes.KANBAN) { - const meta = JSON.parse(view.view.meta as string) as Record< - string, - any - >; + const meta = parseMetaProp(view.view) as Record; for (const [k, v] of Object.entries(meta)) { const colId = idMap.get(k as string); for (const op of v) { From b0512625ec4c2ee0975bc3f082c7a808b5d4688f Mon Sep 17 00:00:00 2001 From: mertmit Date: Sat, 9 Mar 2024 07:10:47 +0000 Subject: [PATCH 2/4] fix: use limitOverride for export getDataList --- packages/nocodb/src/db/BaseModelSqlv2.ts | 12 ++++++------ .../jobs/jobs/export-import/export.service.ts | 6 +++++- .../nocodb/src/services/calendar-datas.service.ts | 2 +- packages/nocodb/src/services/datas.service.ts | 8 ++++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/nocodb/src/db/BaseModelSqlv2.ts b/packages/nocodb/src/db/BaseModelSqlv2.ts index c34a7ea961..1822934d17 100644 --- a/packages/nocodb/src/db/BaseModelSqlv2.ts +++ b/packages/nocodb/src/db/BaseModelSqlv2.ts @@ -318,14 +318,14 @@ class BaseModelSqlv2 { sortArr?: Sort[]; sort?: string | string[]; fieldsSet?: Set; - calendarLimitOverride?: number; + limitOverride?: number; } = {}, options: { ignoreViewFilterAndSort?: boolean; ignorePagination?: boolean; validateFormula?: boolean; throwErrorIfInvalidParams?: boolean; - calendarLimitOverride?: number; + limitOverride?: number; } = {}, ): Promise { const { @@ -333,7 +333,7 @@ class BaseModelSqlv2 { ignorePagination = false, validateFormula = false, throwErrorIfInvalidParams = false, - calendarLimitOverride, + limitOverride, } = options; const { where, fields, ...rest } = this._getListArgs(args as any); @@ -439,12 +439,12 @@ class BaseModelSqlv2 { }); } - // For calendar View, if calendarLimitOverride is provided, use it as limit for the query + // if limitOverride is provided, use it as limit for the query (for internal usage eg. calendar, export) if (!ignorePagination) { - if (!calendarLimitOverride) { + if (!limitOverride) { applyPaginate(qb, rest); } else { - applyPaginate(qb, { ...rest, limit: calendarLimitOverride }); + applyPaginate(qb, { ...rest, limit: limitOverride }); } } const proto = await this.getProto(); diff --git a/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts index 78e450600b..7c810c4a2b 100644 --- a/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts +++ b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts @@ -611,6 +611,7 @@ export class ExportService { query: { limit, offset, fields }, baseModel, ignoreViewFilterAndSort: true, + limitOverride: limit, }) .then((result) => { try { @@ -661,6 +662,7 @@ export class ExportService { query: { limit, offset, fields }, baseModel, ignoreViewFilterAndSort: true, + limitOverride: limit, }) .then((result) => { try { @@ -681,7 +683,9 @@ export class ExportService { offset + limit, limit, fields, - ).then(resolve); + ) + .then(resolve) + .catch(reject); } } catch (e) { reject(e); diff --git a/packages/nocodb/src/services/calendar-datas.service.ts b/packages/nocodb/src/services/calendar-datas.service.ts index 634dbca1ed..48480f7efa 100644 --- a/packages/nocodb/src/services/calendar-datas.service.ts +++ b/packages/nocodb/src/services/calendar-datas.service.ts @@ -56,7 +56,7 @@ export class CalendarDatasService { viewName: view.id, baseName: model.base_id, tableName: model.id, - calendarLimitOverride: 3000, // TODO: make this configurable in env + limitOverride: 3000, // TODO: make this configurable in env }); } diff --git a/packages/nocodb/src/services/datas.service.ts b/packages/nocodb/src/services/datas.service.ts index 676ed3428a..53cd4eb3b8 100644 --- a/packages/nocodb/src/services/datas.service.ts +++ b/packages/nocodb/src/services/datas.service.ts @@ -23,7 +23,7 @@ export class DatasService { query: any; disableOptimization?: boolean; ignorePagination?: boolean; - calendarLimitOverride?: number; + limitOverride?: number; throwErrorIfInvalidParams?: boolean; }, ) { @@ -43,7 +43,7 @@ export class DatasService { query: param.query, throwErrorIfInvalidParams: true, ignorePagination: param.ignorePagination, - calendarLimitOverride: param.calendarLimitOverride, + limitOverride: param.limitOverride, }); } @@ -153,7 +153,7 @@ export class DatasService { throwErrorIfInvalidParams?: boolean; ignoreViewFilterAndSort?: boolean; ignorePagination?: boolean; - calendarLimitOverride?: number; + limitOverride?: number; }) { const { model, view, query = {}, ignoreViewFilterAndSort = false } = param; @@ -193,7 +193,7 @@ export class DatasService { ignoreViewFilterAndSort, throwErrorIfInvalidParams: param.throwErrorIfInvalidParams, ignorePagination: param.ignorePagination, - calendarLimitOverride: param.calendarLimitOverride, + limitOverride: param.limitOverride, }), {}, listArgs, From 9de208ff6dfb8e62dac215ca2fc04000bb539ea3 Mon Sep 17 00:00:00 2001 From: mertmit Date: Sat, 9 Mar 2024 07:10:47 +0000 Subject: [PATCH 3/4] fix: missing catch for asynchronous op --- .../src/modules/jobs/jobs/export-import/export.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts index 7c810c4a2b..d69c9275f2 100644 --- a/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts +++ b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts @@ -633,7 +633,9 @@ export class ExportService { offset + limit, limit, fields, - ).then(resolve); + ) + .then(resolve) + .catch(reject); } } catch (e) { reject(e); From 4de1087d90bcad23edbefd0f29b7106e4e51b7c5 Mon Sep 17 00:00:00 2001 From: mertmit Date: Sat, 9 Mar 2024 07:10:47 +0000 Subject: [PATCH 4/4] fix: apply limit override to PagedResponseImpl --- packages/nocodb/src/helpers/PagedResponse.ts | 1 + packages/nocodb/src/helpers/extractLimitAndOffset.ts | 6 ++++++ packages/nocodb/src/services/datas.service.ts | 1 + 3 files changed, 8 insertions(+) diff --git a/packages/nocodb/src/helpers/PagedResponse.ts b/packages/nocodb/src/helpers/PagedResponse.ts index 09d4e35f82..09696b11a6 100644 --- a/packages/nocodb/src/helpers/PagedResponse.ts +++ b/packages/nocodb/src/helpers/PagedResponse.ts @@ -11,6 +11,7 @@ export class PagedResponseImpl { count?: number | string; l?: number; o?: number; + limitOverride?: number; } = {}, additionalProps?: Record, ) { diff --git a/packages/nocodb/src/helpers/extractLimitAndOffset.ts b/packages/nocodb/src/helpers/extractLimitAndOffset.ts index d995d14bc0..42df63224a 100644 --- a/packages/nocodb/src/helpers/extractLimitAndOffset.ts +++ b/packages/nocodb/src/helpers/extractLimitAndOffset.ts @@ -15,6 +15,7 @@ export function extractLimitAndOffset( offset?: number | string; l?: number | string; o?: number | string; + limitOverride?: number; } = {}, ) { const obj: { @@ -40,5 +41,10 @@ export function extractLimitAndOffset( const offset = +(args.offset || args.o) || 0; obj.offset = Math.max(Number.isInteger(offset) ? offset : 0, 0); + // override limit if provided + if (args.limitOverride) { + obj.limit = +args.limitOverride; + } + return obj; } diff --git a/packages/nocodb/src/services/datas.service.ts b/packages/nocodb/src/services/datas.service.ts index 53cd4eb3b8..dac753df80 100644 --- a/packages/nocodb/src/services/datas.service.ts +++ b/packages/nocodb/src/services/datas.service.ts @@ -210,6 +210,7 @@ export class DatasService { ]); return new PagedResponseImpl(data, { ...query, + ...(param.limitOverride ? { limitOverride: param.limitOverride } : {}), count, }); }