From 3e1a0a60b4b5b5b66eb458e6b41896b2e0b859e1 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Fri, 9 Aug 2024 14:35:13 +0100 Subject: [PATCH] Checking the correct operation - also typeguarding the check. --- packages/backend-core/src/sql/sqlTable.ts | 7 ++++++- packages/server/src/api/controllers/row/ExternalRequest.ts | 7 +++---- packages/server/src/sdk/app/rows/utils.ts | 6 ++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/backend-core/src/sql/sqlTable.ts b/packages/backend-core/src/sql/sqlTable.ts index 55a6bfcaeb..35d7978449 100644 --- a/packages/backend-core/src/sql/sqlTable.ts +++ b/packages/backend-core/src/sql/sqlTable.ts @@ -70,7 +70,12 @@ function generateSchema( case FieldType.LONGFORM: case FieldType.BARCODEQR: case FieldType.BB_REFERENCE_SINGLE: - schema.text(key) + // primary key strings have to have a length in some DBs + if (primaryKeys.includes(key)) { + schema.string(key, 255) + } else { + schema.text(key) + } break case FieldType.NUMBER: // if meta is specified then this is a junction table entry diff --git a/packages/server/src/api/controllers/row/ExternalRequest.ts b/packages/server/src/api/controllers/row/ExternalRequest.ts index 14dd909edd..5ee2d0fe2b 100644 --- a/packages/server/src/api/controllers/row/ExternalRequest.ts +++ b/packages/server/src/api/controllers/row/ExternalRequest.ts @@ -1,6 +1,5 @@ import dayjs from "dayjs" import { - ArrayOperator, AutoFieldSubType, AutoReason, Datasource, @@ -196,13 +195,13 @@ export class ExternalRequest { if (filters) { // need to map over the filters and make sure the _id field isn't present let prefix = 1 - for (const operator of Object.values(filters)) { - const isArrayOperator = Object.values(ArrayOperator).includes(operator) + for (const [operatorType, operator] of Object.entries(filters)) { + const isArrayOp = sdk.rows.utils.isArrayFilter(operatorType) for (const field of Object.keys(operator || {})) { if (dbCore.removeKeyNumbering(field) === "_id") { if (primary) { const parts = breakRowIdField(operator[field]) - if (primary.length > 1 && isArrayOperator) { + if (primary.length > 1 && isArrayOp) { operator[InternalSearchFilterOperator.COMPLEX_ID_OPERATOR] = { id: primary, values: parts[0], diff --git a/packages/server/src/sdk/app/rows/utils.ts b/packages/server/src/sdk/app/rows/utils.ts index e463397ad9..0cae39f5a9 100644 --- a/packages/server/src/sdk/app/rows/utils.ts +++ b/packages/server/src/sdk/app/rows/utils.ts @@ -12,6 +12,7 @@ import { Table, TableSchema, SqlClient, + ArrayOperator, } from "@budibase/types" import { makeExternalQuery } from "../../../integrations/base/query" import { Format } from "../../../api/controllers/view/exporters" @@ -311,3 +312,8 @@ function validateTimeOnlyField( return res } + +// type-guard check +export function isArrayFilter(operator: any): operator is ArrayOperator { + return Object.values(ArrayOperator).includes(operator) +}