From 93b5a22ba060add59557bc081dc8837ca6064ce1 Mon Sep 17 00:00:00 2001 From: Justin Maier Date: Mon, 13 Apr 2026 01:10:03 -0600 Subject: [PATCH] debug: log which IN path fires for nsfwLevel complement investigation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traces show nsfwLevel IN takes 900ms with 41-bit accumulator — the complement path should make this instant. Adding diagnostic logging to determine whether complement or original path fires, and why. Temporary — remove after diagnosis. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/executor.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/executor.rs b/src/executor.rs index 97c0079..7ec4981 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -432,6 +432,10 @@ impl<'a> QueryExecutor<'a> { if !complement_keys.is_empty() && complement_keys.len() < in_keys.len() && loaded_count <= 64 { // Complement is smaller — subtract excluded values from acc. // Also subtract the null bitmap (nulls should not match IN). + eprintln!( + "[IN_COMPLEMENT] field={field} acc_len={} in_keys={} complement_keys={} loaded_count={loaded_count}", + acc.len(), in_keys.len(), complement_keys.len() + ); for &key in &complement_keys { if let Some(vb) = ff.get_versioned(key) { *acc -= vb.fused_cow().as_ref(); @@ -443,6 +447,10 @@ impl<'a> QueryExecutor<'a> { } else { // Original path: distribute AND over OR. // (acc & val1) | (acc & val2) | ... + eprintln!( + "[IN_ORIGINAL] field={field} acc_len={} in_keys={} complement_keys={} loaded_count={loaded_count} complement_empty={} complement_lt_in={}", + acc.len(), in_keys.len(), complement_keys.len(), complement_keys.is_empty(), complement_keys.len() < in_keys.len() + ); let mut union = RoaringBitmap::new(); for &key in &in_keys { if let Some(vb) = ff.get_versioned(key) {