index: guard the $in cartesian cap against u64 overflow; drop debug print
This commit is contained in:
@@ -1889,7 +1889,6 @@ test "indexed queries are equivalent to scans over a mixed corpus" {
|
||||
clear_id_list(testing.allocator, &scanned);
|
||||
try dispatch_find_ids(&tdb, io, "eq", f.pairs, &scanned);
|
||||
const indexed = indexed_results.items[fi];
|
||||
if (scanned.items.len != indexed.items.len) std.debug.print("MISMATCH(ab) filter {d}: scan={d} idx={d}\n", .{ fi, scanned.items.len, indexed.items.len });
|
||||
try testing.expectEqual(scanned.items.len, indexed.items.len);
|
||||
for (scanned.items, indexed.items) |a, b| try testing.expectEqualSlices(u8, a, b);
|
||||
}
|
||||
|
||||
@@ -706,6 +706,9 @@ fn evaluate_index(gpa: std.mem.Allocator, ix: *const Index, clauses: []const Cla
|
||||
}
|
||||
var combos: u64 = 1;
|
||||
for (0..run) |i| {
|
||||
// A single huge $in list (or a product over 100) falls back to a
|
||||
// scan; checking the factor first keeps the product from wrapping.
|
||||
if (counts[i] > max_combos) return null;
|
||||
combos *= counts[i];
|
||||
if (combos > max_combos) return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user