# Changelog All notable changes to BloomPG are documented here. ## Unreleased ## 0.1.2 - 2026-08-22 - Add a PostgreSQL 18 Docker quickstart with an instant-sampling star-schema comparison, plus metadata that improves PGXN discovery. - Let the optimizer's internal subtransaction own cleanup of detached executors interrupted by an error. Calling `ExecutorEnd` before `ExecutorFinish` violated PostgreSQL's executor lifecycle under assertion builds; fallback now rolls the subtransaction back without touching the failed executor. - Size equality-domain and transfer matrices with PostgreSQL's checked `Size` arithmetic so relation-count products cannot overflow before allocation. - Skip InitPlan-dependent qualifiers in the lightweight sampling executor; exact materialization still evaluates them after PostgreSQL has populated their internal executor parameters. - Parallelize eligible transfer scans with relation-sized worker groups and preserve relation-local parallelism when an unrelated SubLink restricts the outer query. - Expose shared Memory inputs as parallel paths up to the configured worker ceiling and let PostgreSQL's normal costs choose serial or parallel P1. - Columnize scan output in workers, send vector packets through Gather, and bulk-import fixed-width and variable-width columns in the leader. - Use the same vector packets for shared Parallel Append waves, including relations with different projections, instead of reconstructing rows in the leader. - Build outgoing filters directly from arriving worker vectors, eliminating a second column-store pass on parallel materializations. - Enforce one query-wide materialization budget across column stores, parallel packet buffers, and P1 DSM copies; if it cannot be reserved, retain the native PostgreSQL plan instead of spilling. - Default that budget to one eighth of detected host/cgroup memory, capped at 2GB for the intended single-query analytical workload. - Bound backend-level prepared CTID and hydrated tuple caches and validate every serialized vector, selection, filter, and by-reference datum before worker access. - Preserve selective index-only paths, use exact-key PostgreSQL index/bitmap plans where appropriate when the experimental `index_transfer` feature is enabled. Stable transfer defaults to scan paths while index selection is refined independently. - Keep parallel replacement and filter state available below Gather, while separating Gather-shared cursors from worker-replicated nested-loop cursors so each rescan restarts at the correct executor lifecycle boundary. - Remove the emergency P1 nested-loop suppression switch now that parallel rescans follow PostgreSQL's CustomScan DSM lifecycle directly. - Initialize NULL bitmap-probe Datums before the null-aware fast path, avoiding undefined reads under compiler instrumentation. - Prune materialized projections through nested correlated SubLinks and retain fail-closed behavior for whole-row and system-column references. - Add assertion-enabled regression coverage for vector packets, toasted and NULL values, parallel safety, index guards, and correlated projection. ## 0.1.1 - 2026-08-16 - Stop an all-waiting index guard from performing an unbounded serial heap scan during planning; retain the already-built native PostgreSQL plan when no exact-key or parallel transfer path can make progress. - Let PostgreSQL choose Index, Index Only, Bitmap, or parallel access first for exact-key transfer queries, with BloomPG's direct bitmap probe retained as the fallback implementation. - Project correlated SubLink inputs by following outer Vars across arbitrary nesting levels. Whole-row and system-column references remain fail-closed. - Add structured native-fallback diagnostics and regression coverage for guard stalemates and correlated projection. - Add a 0.1.0-to-0.1.1 extension upgrade path, PGXN metadata, a security policy, and an automated upgrade smoke test. - Validate the release against complete indexed JOB 113 and TPC-H SF10 gates. ## 0.1.0 - 2026-08-16 - Initial PostgreSQL 18 release. - Adaptive exact Bloom/bitmap transfer with P0/P1 replanning. - Columnar Memory, TID, Filter, Empty, and native-fallback relation paths. - Index-aware delayed materialization and exact-key B-tree access. - Switchable `rows` / `ndv` transfer progress metric; `ndv` uses a containment-safe size-only equality-domain summary. - Structured optimizer/executor profiling and reproducible JOB/TPC-H runner. - Indexed TPC-H loading seals the static dataset with `VACUUM (ANALYZE)` so native and BloomPG index-only paths share the same visibility-map state.