From cb99007a429d0b9803dbac5f79e382feba128213 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Tue, 28 May 2024 18:30:06 +0100 Subject: [PATCH] Fix for issue with templated apps - some template apps are *very* old and therefore don't necessarily abide by the rules that are generally followed for new apps, this is something we should resolve, but for now adding an option that allows searching for only a specific document type. --- packages/backend-core/src/sql/sql.ts | 25 ++++++++++++++++--- .../server/src/sdk/app/rows/search/sqs.ts | 2 ++ packages/types/src/sdk/search.ts | 3 ++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/backend-core/src/sql/sql.ts b/packages/backend-core/src/sql/sql.ts index 2d01c6a7ee..63103a0571 100644 --- a/packages/backend-core/src/sql/sql.ts +++ b/packages/backend-core/src/sql/sql.ts @@ -1,6 +1,11 @@ import { Knex, knex } from "knex" import * as dbCore from "../db" -import { isIsoDateString, isValidFilter, getNativeSql } from "./utils" +import { + isIsoDateString, + isValidFilter, + getNativeSql, + isExternalTable, +} from "./utils" import { SqlStatements } from "./sqlStatements" import SqlTableQueryBuilder from "./sqlTable" import { @@ -21,6 +26,7 @@ import { SqlClient, QueryOptions, JsonTypes, + prefixed, } from "@budibase/types" import environment from "../environment" import { helpers } from "@budibase/shared-core" @@ -556,8 +562,15 @@ class InternalBuilder { } read(knex: Knex, json: QueryJson, limit: number): Knex.QueryBuilder { - let { endpoint, resource, filters, paginate, relationships, tableAliases } = - json + let { + endpoint, + resource, + filters, + paginate, + relationships, + tableAliases, + meta, + } = json const tableName = endpoint.entityId // select all if not specified @@ -592,6 +605,12 @@ class InternalBuilder { query = this.addFilters(query, filters, json.meta.table, { aliases: tableAliases, }) + + // when searching internal tables make sure long looking for rows + if (meta.documentType && !isExternalTable(meta.table)) { + query.andWhereLike("_id", `${prefixed(meta.documentType)}%`) + } + // add sorting to pre-query query = this.addSorting(query, json) const alias = tableAliases?.[tableName] || tableName diff --git a/packages/server/src/sdk/app/rows/search/sqs.ts b/packages/server/src/sdk/app/rows/search/sqs.ts index 5083f9b79f..a21b3366ed 100644 --- a/packages/server/src/sdk/app/rows/search/sqs.ts +++ b/packages/server/src/sdk/app/rows/search/sqs.ts @@ -1,4 +1,5 @@ import { + DocumentType, FieldType, Operation, QueryJson, @@ -153,6 +154,7 @@ export async function search( meta: { table, tables: allTablesMap, + documentType: DocumentType.ROW, }, resource: { fields: buildInternalFieldList(table, allTables), diff --git a/packages/types/src/sdk/search.ts b/packages/types/src/sdk/search.ts index 62c5054c7a..a4221280bf 100644 --- a/packages/types/src/sdk/search.ts +++ b/packages/types/src/sdk/search.ts @@ -1,5 +1,5 @@ import { Operation, SortDirection } from "./datasources" -import { Row, Table } from "../documents" +import { Row, Table, DocumentType } from "../documents" import { SortType } from "../api" import { Knex } from "knex" @@ -117,6 +117,7 @@ export interface QueryJson { table: Table tables?: Record renamed?: RenameColumn + documentType?: DocumentType } extra?: { idFilter?: SearchFilters