Merge pull request #14413 from Budibase/fix/missing-table-definition-search
SQS - broken relationship fix
This commit is contained in:
commit
cb67a24a13
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue