Fixing an issue where searching on a relationship column which is in a broken state would break in SQS (previously this was allowed and would return empty relationships).

This commit is contained in:
mike12345567 2024-08-20 07:38:23 +01:00
parent c0ad7d6f16
commit bbcb77c738
3 changed files with 29 additions and 15 deletions

View File

@ -151,7 +151,10 @@ export function buildExternalRelationships(
return relationships
}
export function buildInternalRelationships(table: Table): RelationshipsJson[] {
export function buildInternalRelationships(
table: Table,
allTables: Table[]
): RelationshipsJson[] {
const relationships: RelationshipsJson[] = []
const links = Object.values(table.schema).filter(
column => column.type === FieldType.LINK
@ -164,6 +167,10 @@ export function buildInternalRelationships(table: Table): RelationshipsJson[] {
const linkTableId = link.tableId!
const junctionTableId = generateJunctionTableID(tableId, linkTableId)
const isFirstTable = tableId > linkTableId
// skip relationships with missing table definitions
if (!allTables.find(table => table._id === linkTableId)) {
continue
}
relationships.push({
through: junctionTableId,
column: link.name,

View File

@ -71,20 +71,27 @@ export const getQueryableFields = async (
// avoid circular loops
continue
}
const relatedTable = await sdk.tables.getTable(subSchema.tableId)
const relatedFields = await extractTableFields(
relatedTable,
Object.keys(relatedTable.schema),
[...fromTables, subSchema.tableId]
)
try {
const relatedTable = await sdk.tables.getTable(subSchema.tableId)
const relatedFields = await extractTableFields(
relatedTable,
Object.keys(relatedTable.schema),
[...fromTables, subSchema.tableId]
)
result.push(
...relatedFields.flatMap(f => [
`${subSchema.name}.${f}`,
// should be able to filter by relationship using table name
`${relatedTable.name}.${f}`,
])
)
result.push(
...relatedFields.flatMap(f => [
`${subSchema.name}.${f}`,
// should be able to filter by relationship using table name
`${relatedTable.name}.${f}`,
])
)
} catch (err: any) {
// if related table is removed, ignore
if (err.status !== 404) {
throw err
}
}
} else {
result.push(field)
}

View File

@ -297,7 +297,7 @@ export async function search(
throw new Error("Unable to find table")
}
const relationships = buildInternalRelationships(table)
const relationships = buildInternalRelationships(table, allTables)
const searchFilters: SearchFilters = {
...cleanupFilters(query, table, allTables),