From 58ec7a50b0c49ee1065b0f61d5fbaa409f9d2853 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Wed, 19 Jun 2024 17:51:11 +0100 Subject: [PATCH] Implementing row counting for in-memory, also updating the in memory search function. --- packages/server/src/api/routes/tests/search.spec.ts | 5 ++--- packages/shared-core/src/filters.ts | 13 +++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/server/src/api/routes/tests/search.spec.ts b/packages/server/src/api/routes/tests/search.spec.ts index 7b7eb5000f..be66253090 100644 --- a/packages/server/src/api/routes/tests/search.spec.ts +++ b/packages/server/src/api/routes/tests/search.spec.ts @@ -95,7 +95,7 @@ describe.each([ private async performSearch(): Promise> { if (isInMemory) { - return { rows: dataFilters.search(_.cloneDeep(rows), this.query) } + return dataFilters.search(_.cloneDeep(rows), this.query) } else { return config.api.row.search(table._id!, { ...this.query, @@ -1822,9 +1822,8 @@ describe.each([ ])) }) - // lucene can't count, and in memory there is no point + // lucene can't count the total rows !isLucene && - !isInMemory && describe("row counting", () => { beforeAll(async () => { table = await createTable({ diff --git a/packages/shared-core/src/filters.ts b/packages/shared-core/src/filters.ts index 52ab3ed626..bd75406e26 100644 --- a/packages/shared-core/src/filters.ts +++ b/packages/shared-core/src/filters.ts @@ -12,6 +12,7 @@ import { SortOrder, RowSearchParams, EmptyFilterOption, + SearchResponse, } from "@budibase/types" import dayjs from "dayjs" import { OperatorOptions, SqlNumberTypeRangeMap } from "./constants" @@ -262,15 +263,23 @@ export const buildQuery = (filter: SearchFilter[]) => { return query } -export const search = (docs: Record[], query: RowSearchParams) => { +export const search = ( + docs: Record[], + query: RowSearchParams +): SearchResponse> => { let result = runQuery(docs, query.query) if (query.sort) { result = sort(result, query.sort, query.sortOrder || SortOrder.ASCENDING) } + let totalRows = result.length if (query.limit) { result = limit(result, query.limit.toString()) } - return result + const response: SearchResponse> = { rows: result } + if (query.countRows) { + response.totalRows = totalRows + } + return response } /**