diff --git a/packages/server/src/sdk/app/rows/search/sqs.ts b/packages/server/src/sdk/app/rows/search/sqs.ts index 4745aee7fb..7042d6fa2c 100644 --- a/packages/server/src/sdk/app/rows/search/sqs.ts +++ b/packages/server/src/sdk/app/rows/search/sqs.ts @@ -45,13 +45,10 @@ import { getTableIDList, } from "./filters" import { dataFilters } from "@budibase/shared-core" -import { DEFAULT_TABLE_IDS } from "../../../../constants" const builder = new sql.Sql(SqlClient.SQL_LITE) const MISSING_COLUMN_REGEX = new RegExp(`no such column: .+`) -const USER_COLUMN_PREFIX_REGEX = new RegExp( - `no such column: .+${USER_COLUMN_PREFIX}` -) +const MISSING_TABLE_REGX = new RegExp(`no such table: .+`) function buildInternalFieldList( table: Table, @@ -240,10 +237,10 @@ async function runSqlQuery( function resyncDefinitionsRequired(status: number, message: string) { // pre data_ prefix on column names, need to resync return ( - (status === 400 && message?.match(USER_COLUMN_PREFIX_REGEX)) || - // default tables aren't included in definition - (status === 400 && - DEFAULT_TABLE_IDS.find(tableId => message?.includes(tableId))) || + // there are tables missing - try a resync + (status === 400 && message.match(MISSING_TABLE_REGX)) || + // there are columns missing - try a resync + (status === 400 && message.match(MISSING_COLUMN_REGEX)) || // no design document found, needs a full sync (status === 404 && message?.includes(SQLITE_DESIGN_DOC_ID)) ) @@ -251,7 +248,8 @@ function resyncDefinitionsRequired(status: number, message: string) { export async function search( options: RowSearchParams, - table: Table + table: Table, + opts?: { retrying?: boolean } ): Promise> { let { paginate, query, ...params } = options @@ -376,9 +374,9 @@ export async function search( return response } catch (err: any) { const msg = typeof err === "string" ? err : err.message - if (resyncDefinitionsRequired(err.status, msg)) { + if (!opts?.retrying && resyncDefinitionsRequired(err.status, msg)) { await sdk.tables.sqs.syncDefinition() - return search(options, table) + return search(options, table, { retrying: true }) } // previously the internal table didn't error when a column didn't exist in search if (err.status === 400 && msg?.match(MISSING_COLUMN_REGEX)) {