Normalize Actual Rows output in regression tests for PG18 compatibility (#8141)

DESCRIPTION: Normalize Actual Rows output in regression tests for PG18
compatibility

PostgreSQL 18 changed `EXPLAIN ANALYZE` to always print fractional row
counts (e.g. `1.00` instead of `1`).
95dbd827f2
This caused diffs across multiple output formats in Citus regression
tests:

* Text EXPLAIN: `actual rows=50.00` vs `actual rows=50`
* YAML: `Actual Rows: 1.00` vs `Actual Rows: 1`
* XML: `<Actual-Rows>1.00</Actual-Rows>` vs
`<Actual-Rows>1</Actual-Rows>`
* JSON: `"Actual Rows": 1.00` vs `"Actual Rows": 1`
* Placeholders: `rows=N.N` vs `rows=N`

This patch extends `normalize.sed` to strip trailing `.0…` from `Actual
Rows` in all supported formats and collapses placeholder values back to
`N`. With these changes, regression tests produce stable output across
PG15–PG18.

No functional changes to Citus itself — only test normalization was
updated.
pull/8144/head
Mehmet YILMAZ 2025-08-21 17:47:46 +03:00 committed by GitHub
parent f1f0b09f73
commit 86b5bc6a20
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 17 additions and 2 deletions

View File

@ -326,8 +326,23 @@ s/\| CHECK ([a-zA-Z])(.*)/| CHECK \(\1\2\)/g
/DEBUG: drop auto-cascades to type [a-zA-Z_]*.pg_temp_[0-9]*/d
# pg18 change: strip trailing “.00” (or “.0…”) from actual rows counts
s/(actual rows=[0-9]+)\.[0-9]+/\1/g
# PG18 change: strip trailing ".0..." from Actual Rows across formats
# Text EXPLAIN (simple case: "actual rows=50.00")
s/(actual[[:space:]]*rows[[:space:]]*[=:][[:space:]]*)([0-9]+)\.0+/\1\2/gI
# Text EXPLAIN (inside "(actual time=... rows=50.00 ...)")
s/(actual[^)]*rows[[:space:]]*=[[:space:]]*)([0-9]+)\.0+/\1\2/gI
# YAML (e.g., "Actual Rows: 1.00")
s/(Actual[[:space:]]+Rows:[[:space:]]*[0-9]+)\.0+/\1/gI
# XML (e.g., "<Actual-Rows>1.00</Actual-Rows>")
s/(<Actual-Rows>[0-9]+)\.0+(<\/Actual-Rows>)/\1\2/g
# JSON (e.g., '"Actual Rows": 1.00')
s/("Actual[[:space:]]+Rows":[[:space:]]*[0-9]+)\.0+/\1/gI
# JSON placeholder cleanup: '"Actual Rows": N.0...' -> N
s/("Actual[[:space:]]+Rows":[[:space:]]*)N\.N/\1N/gI
# Collapse placeholder in text EXPLAIN: "rows=N.N" -> "rows=N"
s/(rows[[:space:]]*=[[:space:]]*)N\.N/\1N/gI
# YAML placeholder: "Actual Rows: N.N" -> "Actual Rows: N"
s/(Actual[[:space:]]+Rows:[[:space:]]*)N\.N/\1N/gI
# pg18 “Disabled” change start
# ignore any “Disabled:” lines in test output