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
6 changes: 6 additions & 0 deletions test/check_ledger.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -2968,6 +2968,12 @@ native_parquet_pushdown native_parquet_pushdown predicate [val > 90000 AND val <
native_parquet_pushdown native_parquet_pushdown range in one group skips 3 15;16;17;18;19 2026-10-16 columnar_parquet_reader.c: pqfdw_compute_skip never marks a row group skippable
native_parquet_pushdown native_parquet_pushdown read_parquet same file == oracle 15;16;17;18;19 never -
native_parquet_pushdown native_parquet_pushdown reports 4 row groups 15;16;17;18;19 never -
native_parquet_pushdown native_parquet_pushdown row-group edge [id < 50001] == oracle 15;16;17;18;19 never -
native_parquet_pushdown native_parquet_pushdown row-group edge [id <= 50000] == oracle 15;16;17;18;19 2026-10-16 col <= const skipping a group whose min equals const (mutation, #1496 review)
native_parquet_pushdown native_parquet_pushdown row-group edge [id = 49999] == oracle 15;16;17;18;19 2026-10-16 col = const skipping a group whose max equals const (mutation, #1496 review)
native_parquet_pushdown native_parquet_pushdown row-group edge [id = 50000] == oracle 15;16;17;18;19 2026-10-16 col = const skipping a group whose min equals const (mutation, #1496 review)
native_parquet_pushdown native_parquet_pushdown row-group edge [id > 49998] == oracle 15;16;17;18;19 never -
native_parquet_pushdown native_parquet_pushdown row-group edge [id >= 49999] == oracle 15;16;17;18;19 2026-10-16 col >= const skipping a group whose max equals const (mutation, #1496 review)
native_parquet_pushdown native_parquet_pushdown spanning predicate skips 0 15;16;17;18;19 2026-10-16 columnar_parquet_reader.c: col < const skips the row groups that do hold matches
native_parquet_schema native_parquet_schema OPTIONAL column reports nullable=t 15;16;17;18;19 never -
native_parquet_schema native_parquet_schema REQUIRED column reports nullable=f 15;16;17;18;19 2026-10-16 columnar_parquet_reader.c: parquet_schema reports every column nullable
Expand Down
12 changes: 11 additions & 1 deletion test/check_ledger_budget.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3629,4 +3629,14 @@ suites_not_covered 185
# never 3079 - 1 = 3078
# dated 1369 + 1 = 1370
# 3078 + 1370 == 4448
checks_never_observed_red 3078
# #1496 review, native_parquet_pushdown's row-group edges (jdatcmd): 3078 -> 3080.
# Six oracle arms whose constants sit on a group's max (49999) or min (50000), where
# an inclusive bound read as exclusive skips the group holding the match. Four are
# dated by that mutation for >=, <=, and = at the max and at the min; "id > 49998"
# and "id < 50001" enter never, as no natural off-by-one over-skips them.
#
# ledger rows 4448 + 6 = 4454
# never 3078 + 2 = 3080
# dated 1370 + 4 = 1374
# 3080 + 1374 == 4454
checks_never_observed_red 3080
18 changes: 18 additions & 0 deletions test/native_parquet_pushdown.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,24 @@ do
"$(pgc_set_hash "SELECT * FROM h WHERE $pred")"
done

# ---- the row-group edges: an inclusive bound skips nothing it matches --------
# Group 0 ends at 49999 and group 1 starts at 50000. A predicate whose constant is
# a group's max or min is where an inclusive comparison read as exclusive skips a
# group that holds the matching row -- and every predicate above stays clear of
# them (#1496 review): with `col >= c` skipping on max <= c, this suite was green.
for pred in \
"id >= 49999" \
"id > 49998" \
"id <= 50000" \
"id < 50001" \
"id = 49999" \
"id = 50000"
do
check "row-group edge [$pred] == oracle" \
"$(pgc_set_hash "SELECT * FROM ft WHERE $pred")" \
"$(pgc_set_hash "SELECT * FROM h WHERE $pred")"
done

# ---- skipping actually happens (EXPLAIN ANALYZE counter) --------------------
skipped_for() { # skipped_for WHERE
q "EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF, SUMMARY OFF)
Expand Down
6 changes: 6 additions & 0 deletions test/pytest/test_native_parquet_pushdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ def test_skipping_never_changes_the_answer_and_really_skips(pgc_conn, server_dir
"id > 60000 AND id < 60010", "id <= 5 OR id >= 199995", "val > 90000 AND val < 90030"):
expect.text(_hash(cur, f"SELECT * FROM ft WHERE {pred}"), _hash(cur, f"SELECT * FROM h WHERE {pred}"),
f"predicate [{pred}] == oracle")
# THE ROW-GROUP EDGES (#1496 review): group 0 ends at 49999, group 1 starts at
# 50000, and an inclusive bound read as exclusive skips the group holding the
# match. Every predicate above stays clear of an edge.
for pred in ("id >= 49999", "id > 49998", "id <= 50000", "id < 50001", "id = 49999", "id = 50000"):
expect.text(_hash(cur, f"SELECT * FROM ft WHERE {pred}"), _hash(cur, f"SELECT * FROM h WHERE {pred}"),
f"row-group edge [{pred}] == oracle")

expect.text(_counter(cur, "ft", "id >= 0", "Row Groups:"), "4", "reports 4 row groups")
for name, where, want in (
Expand Down
Loading