diff --git a/test/check_ledger.tsv b/test/check_ledger.tsv index ebf54e47a..74fcd205f 100644 --- a/test/check_ledger.tsv +++ b/test/check_ledger.tsv @@ -2279,7 +2279,7 @@ native_chunk_length_bound native_chunk_length_bound an index fetch of a chunk wh native_chunk_length_bound native_chunk_length_bound backend survived the sequential refusal 15;16;17;18;19 never - native_chunk_length_bound native_chunk_length_bound backend survived the truncated-length fetch 15;16;17;18;19 never - native_chunk_length_bound native_chunk_length_bound premise: a point lookup uses the index, not a sequential columnar scan 15;16;17;18;19 never - -native_chunk_length_bound native_chunk_length_bound premise: that fetch returns the row 15;16;17;18;19 never - +native_chunk_length_bound native_chunk_length_bound that fetch returns the row 15;16;17;18;19 2026-10-16 the index fetch treated a flushed row as not live, so the lookup returned no row (mutation, #1339) native_delete_visibility_paths native_delete_visibility_paths a DELETE whose qual deletes another row of the table succeeds and leaves heap's rows (#1394) 15;16;17;18;19 2026-10-14 PgColumnarUpsertDeleteVector without the command advance (main before #1394's fix) native_delete_visibility_paths native_delete_visibility_paths a deleted row is invisible via the index 15;16;17;18;19 never - native_delete_visibility_paths native_delete_visibility_paths a live row is visible via the index 15;16;17;18;19 never - diff --git a/test/check_ledger_budget.txt b/test/check_ledger_budget.txt index e3e62de0d..3f8e29cde 100644 --- a/test/check_ledger_budget.txt +++ b/test/check_ledger_budget.txt @@ -2933,4 +2933,14 @@ suites_not_covered 219 # never 2678 - 2 = 2676 # dated 941 + 2 = 943 # 2676 + 943 == 3619 -checks_never_observed_red 2676 +# +# #1339, native_chunk_length_bound's "that fetch returns the row" was a premise a +# product change reddens (jdatcmd): 2676 -> 2675. It becomes an arm, its row renamed +# with its history, dated by the index fetch treating a flushed row as not live. The +# plan premise beside it stays a premise. No row is added or removed. +# +# ledger rows 3619 + 0 = 3619 +# never 2676 - 1 = 2675 +# dated 943 + 1 = 944 +# 2675 + 944 == 3619 +checks_never_observed_red 2675 diff --git a/test/native_chunk_length_bound.sh b/test/native_chunk_length_bound.sh index 79eae8cf2..d35640606 100755 --- a/test/native_chunk_length_bound.sh +++ b/test/native_chunk_length_bound.sh @@ -49,7 +49,10 @@ fetch_val() { env PATH="$PGC_BINDIR:$PATH" psql -h 127.0.0.1 -p "$PGC_PORT" -U postgres -d "$PGC_DB" \ -Atq -c "$1" 2>&1 | grep -v '^SET$' | tail -1 } -check "premise: that fetch returns the row" \ +# An arm, not a premise (#1339, #1236): an index fetch that treats a flushed row as +# not live returns no row here. The plan premise above stays a premise: with the +# scans off, the planner, not this repository, chooses the index. +check "that fetch returns the row" \ "$(fetch_val "${FETCH} SELECT t FROM clb WHERE id = 1;")" "v1" q "UPDATE pgcolumnar.column_chunk SET page_length = page_length + 4294967296 diff --git a/test/pytest/test_native_chunk_length_bound.py b/test/pytest/test_native_chunk_length_bound.py index b9ab6b52d..0a73873df 100644 --- a/test/pytest/test_native_chunk_length_bound.py +++ b/test/pytest/test_native_chunk_length_bound.py @@ -53,8 +53,14 @@ def test_native_chunk_length_bound(pgc_conn, expect): cur.execute("SET enable_bitmapscan=off") cur.execute("SET pgcolumnar.enable_custom_scan=off") cur.execute("SELECT t FROM clb WHERE id = 1") - got = cur.fetchone()[0] - expect.text(got, "v1", "premise: that fetch returns the row") + # A missing row is this check's failure, by name (#1339): fetchone()[0] on + # no row raised TypeError, and the run never said which check it was. + row = cur.fetchone() + got = row[0] if row else "" + # An arm, not a premise (#1339, #1236): an index fetch that treats a flushed row + # as not live returns no row here. The plan premise above stays a premise: with + # the scans off, the planner, not this repository, chooses the index. + expect.text(got, "v1", "that fetch returns the row") with pgc_conn.cursor() as cur: cur.execute(