Files
five/hbrtl
CharlesKWON 5dd212c761 perf(sqlscan): specialize four loop variants (DBF×WHERE matrix)
SqlScan's inner scan was written as a single loop with `if whereFn
!= nil` and a `keep` shadow variable. Branch-predictable for sure,
but still a few extra ops per row and it prevented Go from inlining
the non-nil interface call on the Area branch.

Split into four specialized loop bodies on the two axes that drive
per-row cost:

  1. dbfArea != nil && whereFn != nil
  2. dbfArea != nil && whereFn == nil       ← tightest path (SELECT *)
  3. dbfArea == nil && whereFn != nil       ← generic Area
  4. dbfArea == nil && whereFn == nil

Each body has exactly the instructions it needs — no dead branches,
no shadow variables, no interface dispatch where avoidable. Copy-paste
cost is real but each row save adds up at 50k iterations.

Bench impact (50k rows, 3-run steady state):

  No WHERE            9.1ms → 8.7ms   1.38x vs raw (was 1.47x)
  Numeric WHERE       6.9ms → 7.0ms   ~flat (within noise)
  String WHERE        6.2ms → 6.4ms   ~flat (within noise)
  Raw RDD             6.3ms baseline

Validation:
  - FiveSql2 43/43
  - Harbour compat 51/51
  - go test ./hbrtl/... PASS

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 14:04:48 +09:00
..