Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,35 @@ true until the next version shipped.

### Changed

- Nine `index_am_support` arms now carry a mutation that reddens them (#1236).
No test changed and no code changed.

Its only dated rows were two premises about `docs/features.md`, reddened by a
**docs** mutation, which cannot reach one arm about what an index does. Eight
behaviour arms sat `never` beside them -- unattacked rather than vacuous, the
same shape as the first batch.

Two mutations with disjoint predicted sets, both confirmed exactly:

```
M-1 the build drops two rows in three, so the index misses entries
predicted the four "answers its operator" arms, NOT the build arms
observed exactly those four; CREATE INDEX still succeeds

M-2 the build errors, so CREATE INDEX fails
predicted the four "builds an index" arms
observed those four, plus the GiST overlap premise
```

**M-2 also shows a weakness in the four answer arms.** With no index in
existence they all stayed green: the arm compares a count taken with
`enable_seqscan = off` against one taken with the custom scan off, and
`enable_seqscan` is a preference rather than a prohibition -- so with no index
both sides fall back to the same scan and agree. An arm named *answers its
operator with the same rows the scan returns* can be satisfied without an index
scan happening. Reported on #1236 rather than repaired here, because this
change records evidence and alters no test.

- Fifteen `native_join_runtime_filter` arms now carry a mutation that reddens
them (#1236). No test changed and no code changed: the arms were attacked and
the ledger records what happened.
Expand Down
18 changes: 9 additions & 9 deletions test/check_ledger.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -1383,13 +1383,13 @@ harness_selftest 580-a-hand-rebuild-must-record premise: the hand rebuild tool i
harness_selftest 580-a-hand-rebuild-must-record premise: the shim redirects the install away from the real prefix 15;16;17;18;19 2026-09-23 the shim answers --pkglibdir with the real prefix, so the install is not redirected
harness_selftest 580-a-hand-rebuild-must-record the hand rebuild tool records what it installed rather than only naming it 15;16;17;18;19 2026-09-23 the record call removed from rebuild.sh, or the comment stripping removed
harness_selftest 580-a-hand-rebuild-must-record the recorder refuses when it is not told what was installed 15;16;17;18;19 2026-09-23 the argument guard removed from pgc_record_source_stamp
index_am_support index_am_support btree answers its operator with the same rows the scan returns 15;16;17;18;19 never -
index_am_support index_am_support btree builds an index over a columnar table 15;16;17;18;19 never -
index_am_support index_am_support gist answers its operator with the same rows the scan returns 15;16;17;18;19 never -
index_am_support index_am_support gist builds an index over a columnar table 15;16;17;18;19 never -
index_am_support index_am_support hash answers its operator with the same rows the scan returns 15;16;17;18;19 never -
index_am_support index_am_support hash builds an index over a columnar table 15;16;17;18;19 never -
index_am_support index_am_support premise: an overlap query reaches the row through a GiST index 15;16;17;18;19 never -
index_am_support index_am_support btree answers its operator with the same rows the scan returns 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan drops two rows in three, so the index misses entries
index_am_support index_am_support btree builds an index over a columnar table 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan errors, so CREATE INDEX fails
index_am_support index_am_support gist answers its operator with the same rows the scan returns 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan drops two rows in three, so the index misses entries
index_am_support index_am_support gist builds an index over a columnar table 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan errors, so CREATE INDEX fails
index_am_support index_am_support hash answers its operator with the same rows the scan returns 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan drops two rows in three, so the index misses entries
index_am_support index_am_support hash builds an index over a columnar table 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan errors, so CREATE INDEX fails
index_am_support index_am_support premise: an overlap query reaches the row through a GiST index 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan errors, so CREATE INDEX fails
index_am_support index_am_support premise: btree, which the page claims, has a probe in this suite 15;16;17;18;19 never -
index_am_support index_am_support premise: gist, which the page claims, has a probe in this suite 15;16;17;18;19 never -
index_am_support index_am_support premise: hash, which the page claims, has a probe in this suite 15;16;17;18;19 never -
Expand All @@ -1401,8 +1401,8 @@ index_am_support index_am_support premise: the fixture holds every row 15;16;17;
index_am_support index_am_support premise: the gist predicate matches rows at all 15;16;17;18;19 never -
index_am_support index_am_support premise: the hash predicate matches rows at all 15;16;17;18;19 never -
index_am_support index_am_support premise: the spgist predicate matches rows at all 15;16;17;18;19 never -
index_am_support index_am_support spgist answers its operator with the same rows the scan returns 15;16;17;18;19 never -
index_am_support index_am_support spgist builds an index over a columnar table 15;16;17;18;19 never -
index_am_support index_am_support spgist answers its operator with the same rows the scan returns 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan drops two rows in three, so the index misses entries
index_am_support index_am_support spgist builds an index over a columnar table 15;16;17;18;19 2026-09-23 pgcolumnar_index_build_range_scan errors, so CREATE INDEX fails
index_fetch_penalty_crossover index_fetch_penalty_crossover a 50000-row correlated range uses the custom scan, not a fetching index 15;16;17;18;19 never -
index_fetch_penalty_crossover index_fetch_penalty_crossover a selective point lookup still uses the index 15;16;17;18;19 never -
index_fetch_penalty_crossover index_fetch_penalty_crossover both paths return the same aggregate at 50000 15;16;17;18;19 never -
Expand Down
36 changes: 35 additions & 1 deletion test/check_ledger_budget.txt
Original file line number Diff line number Diff line change
Expand Up @@ -594,4 +594,38 @@ suites_not_covered 249
# YOU KNOW WHAT IS THERE.
#
# suites_not_covered does NOT move: catalog_plan_index is already covered.
checks_never_observed_red 1521
#
# 1521 -> 1512 for #1236's second batch: nine index_am_support arms attacked, after
# this branch was rebased onto a main carrying #1241. RE-DERIVED BY COUNTING on
# the composed tree -- the branch carried 1510 against the previous main and that
# number does not survive, because it described a tree that no longer exists:
#
# awk -F'\t' '$5=="never"' test/check_ledger.tsv | wc -l -> 1512
# 1606 rows total, 94 not `never`
#
# THE SAME SHAPE AS THE FIRST BATCH. index_am_support's only dated rows were two
# premises about docs/features.md, reddened by a DOCS mutation, which cannot
# reach one arm about what an index does. Eight behaviour arms sat `never` next
# to them, unattacked rather than vacuous.
#
# TWO MUTATIONS WITH DISJOINT PREDICTED SETS, both confirmed exactly:
#
# M-1 the build drops two rows in three, so the index misses entries
# predicted the four "answers its operator" arms and NOT the build arms
# observed exactly those four; CREATE INDEX still succeeds, so every
# "builds an index" arm stayed green
#
# M-2 the build errors, so CREATE INDEX fails
# predicted the four "builds an index" arms
# observed those four, plus the GiST overlap premise, which needs an
# index that can no longer be built
#
# AND M-2 SHOWS A WEAKNESS IN THE FOUR ANSWER ARMS, which is worth recording
# where the rows are. With NO index in existence they all stayed GREEN: the arm
# compares a count taken with `enable_seqscan = off` against one taken with the
# custom scan off, and `enable_seqscan` is a preference rather than a
# prohibition, so with no index both sides fall back to the same scan and agree.
# The arm is named "answers its operator with the same rows the scan returns"
# and can be satisfied without an index scan happening. Reported on #1236 rather
# than repaired here: this change records evidence and alters no test.
checks_never_observed_red 1512
Loading