long running queries
hi all, any idea how can i fix "This query or mutation function ran multiple paginated queries. Convex only supports a single paginated query in each function."?
export const queryItems = query({
args: {
pagination: paginationValidator,
},
handler: async (ctx, args) => {
let rawItemsA: {
category: string
label: string
value: number
quantity: number
imageUrl: string
}[] = []
let rawItemsB: {
category: string
name: string
value: number
logoUrl: string
}[] = []
for (const category of SUPPORTED_CATEGORIES) {
const itemsAChunk = await ctx.db
.query("itemsA")
.withIndex("by_category", (q) => q.eq("category", category))
.paginate(args.pagination)
const itemsBChunk = await ctx.db
.query("itemsB")
.withIndex("by_category", (q) => q.eq("category", category))
.paginate(args.pagination)
rawItemsA = [...rawItemsA, ...itemsAChunk.page]
rawItemsB = [...rawItemsB, ...itemsBChunk.page]
}
const groupedA = aggregateItemsA(rawItemsA)
const groupedB = aggregateItemsB(rawItemsB)
const combinedItems: CombinedItem[] = [
...Object.values(groupedA),
...Object.values(groupedB),
].sort((a, b) => {
const byValue = b.value - a.value
if (byValue !== 0) return byValue
return a.label.localeCompare(b.label)
})
return combinedItems
},
})export const queryItems = query({
args: {
pagination: paginationValidator,
},
handler: async (ctx, args) => {
let rawItemsA: {
category: string
label: string
value: number
quantity: number
imageUrl: string
}[] = []
let rawItemsB: {
category: string
name: string
value: number
logoUrl: string
}[] = []
for (const category of SUPPORTED_CATEGORIES) {
const itemsAChunk = await ctx.db
.query("itemsA")
.withIndex("by_category", (q) => q.eq("category", category))
.paginate(args.pagination)
const itemsBChunk = await ctx.db
.query("itemsB")
.withIndex("by_category", (q) => q.eq("category", category))
.paginate(args.pagination)
rawItemsA = [...rawItemsA, ...itemsAChunk.page]
rawItemsB = [...rawItemsB, ...itemsBChunk.page]
}
const groupedA = aggregateItemsA(rawItemsA)
const groupedB = aggregateItemsB(rawItemsB)
const combinedItems: CombinedItem[] = [
...Object.values(groupedA),
...Object.values(groupedB),
].sort((a, b) => {
const byValue = b.value - a.value
if (byValue !== 0) return byValue
return a.label.localeCompare(b.label)
})
return combinedItems
},
})