diff --git a/packages/nocodb/src/db/BaseModelSqlv2.ts b/packages/nocodb/src/db/BaseModelSqlv2.ts index 720b57620a..53f69b6a7a 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/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/modules/jobs/jobs/export-import/export.service.ts b/packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts index 15b383663c..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 @@ -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) { @@ -613,6 +611,7 @@ export class ExportService { query: { limit, offset, fields }, baseModel, ignoreViewFilterAndSort: true, + limitOverride: limit, }) .then((result) => { try { @@ -634,7 +633,9 @@ export class ExportService { offset + limit, limit, fields, - ).then(resolve); + ) + .then(resolve) + .catch(reject); } } catch (e) { reject(e); @@ -663,6 +664,7 @@ export class ExportService { query: { limit, offset, fields }, baseModel, ignoreViewFilterAndSort: true, + limitOverride: limit, }) .then((result) => { try { @@ -683,7 +685,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..dac753df80 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, @@ -210,6 +210,7 @@ export class DatasService { ]); return new PagedResponseImpl(data, { ...query, + ...(param.limitOverride ? { limitOverride: param.limitOverride } : {}), count, }); }