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