v1.8.4 — CDX INDEX ON speedups (single-pass + OEM upper)
1.8.4 — 2026-07-09
CDX — further INDEX ON speedups (#128)
- Single-pass batching for sibling tag rebuilds using the new
Table::collect_keys_for_multiple_expressionsprototype. When multiple
tags in a bag need a full rebuild (common after ORDLSTCLEAR + repeated
INDEX ON), we now do one DBF scan instead of N. - Fast paths + OEM upper-casing for
UPPER(barefield)and similar common
expressions (skips per-row Parser + UTF-8 work; uses proper CP-852
upper table for NTXPL852/PL852 data). - Added
oem_upper/lookup_oem_upper_tablesupport in oem_collation. - More unit test coverage: wide tables (100+ cols), composite expressions,
additional FOR clauses, deleted records duringAdsCreateIndex61. - CI now builds and runs
dbf_cdx_benchas a multi-tag smoke on every job. - Enhanced
dbf_cdx_benchto time realistic 4-tagINDEX ONsequences.
These changes attack the remaining per-row expression cost and multi-tag
scan cost after the initial read-ahead fix.
1.8.3 — 2026-07-09
CDX — INDEX ON / REINDEX performance for local rddads (#128)
Significant speedup for local DBFCDX index creation when using Harbour
contrib/rddads (ADSCDX) or direct AdsCreateIndex* calls.
Root cause: Key collection for the bulk B+tree builder did
goto_record(r) for every record. This unconditionally called
invalidate_read_cache() on the CdxDriver and performed active index
cursor repositioning, defeating the 64 KB read-ahead block cache.
Fix:
- New internal helper
Table::load_record_for_bulk_scan(). - Changed the full-table scan loops in:
Full Changelog: v1.8.3...v1.8.4