Skip to content

perf: drop per-row logging from column resolution - #88

Merged
TimelordUK merged 2 commits into
mainfrom
perf/where-path-per-row-logging
Sep 16, 2026
Merged

TimelordUK merged 2 commits into
mainfrom
perf/where-path-per-row-logging

Conversation

@TimelordUK

Copy link
Copy Markdown
Owner

Follow-up to the logging finding in R13 slice 4 (#87). That removed per-node logging inside the value evaluator; this removes the same thing one level down.

ExecutionContext::resolve_column_index logged every successful resolution. WHERE resolves each column operand of each row through it, and non-interactive mode records TRACE to a ring buffer and a log file, so the log cost more than the comparison it was resolving for — ~470 ms per column operand over 100k rows. Error paths keep their messages.

Effect

Best of 3 over trades_100000.csv, ~2.4 s of which is the CSV load:

query before after
WHERE price > quantity 3.34 s 2.42 s
WHERE price > 100 2.83 s 2.42 s
WHERE trader LIKE 'Trader0%' 2.87 s 2.43 s

All three now run in load time.

Verification

  • Parity report byte-identical to baseline (204 cases, contract holds).
  • ./run_all_tests.sh green: 826 lib + 498 integration Rust tests, 572 Python, all FORMAL examples. The one SMOKE failure (expander_rewriters query 7) also fails on main.

Still outstanding, noted in the R13 entry: window evaluation logs info! timings per row, which is outside R13's scope.

🤖 Generated with Claude Code

TimelordUK and others added 2 commits September 16, 2026 18:54
`ExecutionContext::resolve_column_index` logged every successful resolution.
WHERE resolves each column operand of each row through it, and non-interactive
mode records TRACE to a ring buffer and a log file, so the log cost more than
the comparison it resolved for. The error paths keep their messages.

Best of 3 over trades_100000.csv, ~2.4 s of which is the CSV load:

  WHERE price > quantity          3.34 s -> 2.42 s
  WHERE price > 100               2.83 s -> 2.42 s
  WHERE trader LIKE 'Trader0%'    2.87 s -> 2.43 s

All three now run in load time. Follow-up to the same finding in R13 slice 4
(per-node logging in the value evaluator); it was the ~1 s that WHERE's own
comparison path still carried afterwards.

Parity report byte-identical, 826 lib + 498 integration tests pass.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
@TimelordUK
TimelordUK merged commit e3d40b8 into main Sep 16, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant