Skip to content

Commit f5c980a

Browse files
committed
fix: FragmentDO now includes filter/sort/groupBy/aggregate columns in scan
When projections were set, FragmentDO only fetched projected columns — missing filter, filterGroup, sort, groupBy, and aggregate columns. WASM couldn't apply filters on unfetched columns. Now uses the same neededNames pattern as query-do.ts and local-executor.ts.
1 parent 3358d94 commit f5c980a

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/fragment-do.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,20 @@ export class FragmentDO extends DurableObject<Env> {
7474
this.ctx.storage.put(`frag:${r2Key}`, meta);
7575
}
7676

77-
let cols = query.projections.length > 0
78-
? effectiveMeta.columns.filter(c => query.projections.includes(c.name))
79-
: effectiveMeta.columns;
80-
81-
// Ensure vector search column is included even if not in projections
82-
if (query.vectorSearch) {
83-
const vc = query.vectorSearch.column;
84-
if (!cols.some(c => c.name === vc)) {
85-
const ec = effectiveMeta.columns.find(c => c.name === vc);
86-
if (ec) cols = [...cols, ec];
87-
}
77+
let neededNames: Set<string>;
78+
if (query.projections.length > 0) {
79+
neededNames = new Set(query.projections);
80+
for (const f of query.filters) neededNames.add(f.column);
81+
if (query.filterGroups) for (const g of query.filterGroups) for (const f of g) neededNames.add(f.column);
82+
if (query.sortColumn) neededNames.add(query.sortColumn);
83+
if (query.groupBy) for (const g of query.groupBy) neededNames.add(g);
84+
if (query.aggregates) for (const a of query.aggregates) if (a.column !== "*") neededNames.add(a.column);
85+
} else {
86+
neededNames = new Set(effectiveMeta.columns.map(c => c.name));
8887
}
88+
if (query.vectorSearch) neededNames.add(query.vectorSearch.column);
89+
90+
let cols = effectiveMeta.columns.filter(c => neededNames.has(c.name));
8991

9092
// Build byte ranges for each page, skipping uniformly across all columns.
9193
// Uses canSkipPageMultiCol which handles both AND filters and OR filterGroups.

0 commit comments

Comments
 (0)