From bc54739291d33095ef867b35be1ddf84e6a32c12 Mon Sep 17 00:00:00 2001
From: shihao zhong <zhong950419@gmail.com>
Date: Mon, 5 Oct 2026 11:41:30 -0400
Subject: [PATCH v1 2/2] Add test for eager aggregation with a bpchar column

Rows whose bpchar value differs only in trailing spaces must not be
grouped together below a join that can tell them apart.

Discussion: https://postgr.es/m/19749-d46adf7c7d910b07@postgresql.org
---
 src/test/regress/expected/eager_aggregate.out | 36 +++++++++++++++++++
 src/test/regress/sql/eager_aggregate.sql      | 21 +++++++++++
 2 files changed, 57 insertions(+)

diff --git a/src/test/regress/expected/eager_aggregate.out b/src/test/regress/expected/eager_aggregate.out
index b420a125e1c..12f553a9e62 100644
--- a/src/test/regress/expected/eager_aggregate.out
+++ b/src/test/regress/expected/eager_aggregate.out
@@ -600,6 +600,42 @@ GROUP BY s1.a;
 
 DROP TABLE eager_agg_s1;
 DROP TABLE eager_agg_s2;
+-- Ensure eager aggregation is not applied to a bpchar key.  bpchar equality
+-- ignores trailing spaces, but LIKE does not.
+CREATE TABLE eager_agg_bpchar (c bpchar);
+INSERT INTO eager_agg_bpchar
+  SELECT CASE WHEN i % 2 = 0 THEN 'a' ELSE 'a  ' END
+  FROM generate_series(1, 1000) i;
+ANALYZE eager_agg_bpchar;
+EXPLAIN (COSTS OFF)
+SELECT v.k, count(*)
+  FROM (VALUES (1, 'a'), (2, 'a  ')) v (k, pat)
+  JOIN eager_agg_bpchar t ON t.c LIKE v.pat
+GROUP BY v.k ORDER BY v.k;
+                       QUERY PLAN                       
+--------------------------------------------------------
+ GroupAggregate
+   Group Key: "*VALUES*".column1
+   ->  Sort
+         Sort Key: "*VALUES*".column1
+         ->  Nested Loop
+               Join Filter: (t.c ~~ "*VALUES*".column2)
+               ->  Seq Scan on eager_agg_bpchar t
+               ->  Materialize
+                     ->  Values Scan on "*VALUES*"
+(9 rows)
+
+SELECT v.k, count(*)
+  FROM (VALUES (1, 'a'), (2, 'a  ')) v (k, pat)
+  JOIN eager_agg_bpchar t ON t.c LIKE v.pat
+GROUP BY v.k ORDER BY v.k;
+ k | count 
+---+-------
+ 1 |   500
+ 2 |   500
+(2 rows)
+
+DROP TABLE eager_agg_bpchar;
 DROP TABLE eager_agg_t1;
 DROP TABLE eager_agg_t2;
 DROP TABLE eager_agg_t3;
diff --git a/src/test/regress/sql/eager_aggregate.sql b/src/test/regress/sql/eager_aggregate.sql
index 7e3623aa6fd..b34a17233b9 100644
--- a/src/test/regress/sql/eager_aggregate.sql
+++ b/src/test/regress/sql/eager_aggregate.sql
@@ -226,6 +226,27 @@ GROUP BY s1.a;
 DROP TABLE eager_agg_s1;
 DROP TABLE eager_agg_s2;
 
+-- Ensure eager aggregation is not applied to a bpchar key.  bpchar equality
+-- ignores trailing spaces, but LIKE does not.
+CREATE TABLE eager_agg_bpchar (c bpchar);
+INSERT INTO eager_agg_bpchar
+  SELECT CASE WHEN i % 2 = 0 THEN 'a' ELSE 'a  ' END
+  FROM generate_series(1, 1000) i;
+ANALYZE eager_agg_bpchar;
+
+EXPLAIN (COSTS OFF)
+SELECT v.k, count(*)
+  FROM (VALUES (1, 'a'), (2, 'a  ')) v (k, pat)
+  JOIN eager_agg_bpchar t ON t.c LIKE v.pat
+GROUP BY v.k ORDER BY v.k;
+
+SELECT v.k, count(*)
+  FROM (VALUES (1, 'a'), (2, 'a  ')) v (k, pat)
+  JOIN eager_agg_bpchar t ON t.c LIKE v.pat
+GROUP BY v.k ORDER BY v.k;
+
+DROP TABLE eager_agg_bpchar;
+
 DROP TABLE eager_agg_t1;
 DROP TABLE eager_agg_t2;
 DROP TABLE eager_agg_t3;
-- 
2.37.1 (Apple Git-137.1)

