Skip to content

perf(delete): sequential ascending-PK batch resolution for legacy layouts - #380

Merged
MPCoreDeveloper merged 1 commit into
masterfrom
perf/legacy-seq-pk-delete
Sep 4, 2026
Merged

perf(delete): sequential ascending-PK batch resolution for legacy layouts#380
MPCoreDeveloper merged 1 commit into
masterfrom
perf/legacy-seq-pk-delete

Conversation

@MPCoreDeveloper

Copy link
Copy Markdown
Owner

Samenvatting

Sequentiële ascending-PK batch-resolutie voor het legacy DELETE-pad (Fase B: legacy fast paths).

DeleteMultipleKeys op een legacy (variabele-lengte, plaintext, niet-fixed-width) Columnar-tabel
resolved een strikt-oplopende INTEGER-PK literal-batch nu met één sequentiële decode-pass die
start op de positie van het eerste doel en vroeg stopt zodra alle doelen zijn gevonden — i.p.v.
één B-tree search + row-decode per doel.

Strikte gates (resultaat identiek aan de oude per-rij weg):

  • PageBased / fixed-width / encrypted layouts → fallback.
  • Niet-PK of niet-oplopende keys, duplicate keys → fallback.
  • Eerste→laatste target byte-span > 2 MB → fallback (sparse/full-file batches).
  • Fysiek ongesorteerde bestanden (gedetecteerd via monotonicity pre-pass vanaf offset 0) →
    fallback; tijdens de scan wordt bij een disorder doorgegaan tot EOF met set-matching.
  • Tombstone-markers worden overgeslagen met hun gecodeerde slot-span (|prefix|), zodat live rijen
    áchter een verwijderde rij nooit worden overgeslagen (regressie die de suite vond en vaste).

Validatie

  • Nieuwe regressietest LegacyUnorderedLayout_AscendingPkBatchDelete_StaysCorrectAcrossReopen
    (geschudde fysieke volgorde → set-scan tot EOF; exacte keyset + reopen).
  • Bestaande legacy prefix-delete-test hervalideert de nieuwe weg.
  • Full suite: 1766 tests, 0 failed (Release).
  • Fair-PK legacy DELETE blijft op deze harness binnen de ruis (de weg is bewust strikt gegated naar
    compacte plaintext variabele-lengte bestanden); dit is de correctheids-veilige fundering voor de
    volgende legacy-wide-row stap.

…outs

DeleteMultipleKeys on a legacy variable-length plaintext Columnar table resolved
pk-literal batches with one B-tree search + row decode per target. For a
strictly-ascending INTEGER-PK batch this is now one sequential decode pass that
starts at the first target's position and early-exits once all targets matched.

Strict gates keep results identical: PageBased/fixed-width/encrypted layouts,
non-PK or non-ascending keys, duplicate keys, batches whose first-to-last target
byte span exceeds 2 MB and physically unordered files (detected by a
monotonicity pre-pass from offset 0) all fall back to the existing per-row path.
Tombstone markers are skipped by their encoded slot span (|prefix|) so live
rows behind a deleted row are never skipped.

Regression: LegacyUnorderedLayout_AscendingPkBatchDelete_StaysCorrectAcrossReopen
(covers the set-based scan-to-EOF fallback when the physical layout is unordered)
plus the existing legacy prefix-delete test. Full suite 1766 tests, 0 failed.
Fair-PK legacy DELETE stays within noise on this harness (path is gated to
compact plaintext variable-length files); the fix removes a whole class of
mis-skip risks for the next legacy wide-row milestone.
@sonarqubecloud

sonarqubecloud Bot commented Sep 4, 2026

Copy link
Copy Markdown

@MPCoreDeveloper
MPCoreDeveloper merged commit 2d8108e into master Sep 4, 2026
13 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