Expand description
Compiled expressions — PG’s ExprState idea (cut 30, extracted
from eval.rs; v7.32 perf knife D / architecture v2 P1).
Walk the tree ONCE per query, pre-resolve column positions and
collation-fold decisions (both row-invariant), emit a flat
post-order step program; per-row evaluation is a linear loop —
no tree dispatch, no name resolution, no collation lookups.
Anything the compiler doesn’t model becomes a Step::Subtree
that calls the interpreter for that node, so values AND error
behaviour stay bit-for-bit with eval_expr (invariant I3).
Statics§
- STEP_
VM_ BINARY_ FIRE - STEP_
VM_ CALL_ COUNT - v7.37.9 Phase 1A-ext-2 T1 — Step VM internal step-type counters. Read-only diagnostic; gates no behaviour. Used by counter_dump.rs to ground-truth subtree CSE / column-ref-push / multi-spec-combine attack ROI estimates.
- STEP_
VM_ CASE_ FIRE - STEP_
VM_ CAST_ FIRE - STEP_
VM_ COLUMN_ FIRE - STEP_
VM_ COLUMN_ HEAP_ ALLOC - v7.37.9 Round 3 — heap-alloc counters specifically for the T3 structural attack’s ROI estimate. Step::Column / Step::Lit hits pay a String alloc when the cell variant is heap-bearing (Text/Bytes/Json/Vector). T3 stack-lifetime push-by-borrow would eliminate these for the bulk of per-row work.
- STEP_
VM_ FASTPRED_ FIRE - v7.39 (round 481) — how many values the stack still holds when a call finishes, and how many are heap-bearing.
- STEP_
VM_ FUNCTION_ FIRE - STEP_
VM_ LIT_ FIRE - STEP_
VM_ LIT_ HEAP_ ALLOC - STEP_
VM_ STACK_ LEFTOVER - STEP_
VM_ STACK_ LEFTOVER_ HEAP - STEP_
VM_ STEPS_ TOTAL