From 8bc3ae171af9fddf55828ac01411a062aa3ad977 Mon Sep 17 00:00:00 2001
From: shihao zhong <zhong950419@gmail.com>
Date: Tue, 13 Oct 2026 23:13:26 -0400
Subject: [PATCH v2 2/3] Add tests for jsonb_object_agg() as a window function.

---
 src/test/regress/expected/jsonb.out | 26 ++++++++++++++++++++++++++
 src/test/regress/sql/jsonb.sql      | 11 +++++++++++
 2 files changed, 37 insertions(+)

diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out
index 82c31e2962b..2bdf3aa1e30 100644
--- a/src/test/regress/expected/jsonb.out
+++ b/src/test/regress/expected/jsonb.out
@@ -1614,6 +1614,32 @@ SELECT jsonb_object_agg_unique_strict(i, null) OVER (ORDER BY i)
  {}
 (10 rows)
 
+-- the final function runs once per row, so later pairs must still win
+SELECT g, jsonb_object_agg(k, v) OVER (ORDER BY g)
+  FROM (VALUES (1,'a',1),(1,'a',2),(1,'a',3),(1,'b',5),(2,'b',6),(3,'a',7)) t(g,k,v);
+ g | jsonb_object_agg 
+---+------------------
+ 1 | {"a": 3, "b": 5}
+ 1 | {"a": 3, "b": 5}
+ 1 | {"a": 3, "b": 5}
+ 1 | {"a": 3, "b": 5}
+ 2 | {"a": 3, "b": 6}
+ 3 | {"a": 7, "b": 6}
+(6 rows)
+
+SELECT count(*) FILTER (WHERE w IS DISTINCT FROM
+  (SELECT jsonb_object_agg('k' || (j % 8), j ORDER BY j) FROM generate_series(1, i) j))
+  FROM (SELECT i, jsonb_object_agg('k' || (i % 8), i) OVER (ORDER BY i) AS w
+        FROM generate_series(1, 120) i) s;
+ count 
+-------
+     0
+(1 row)
+
+-- and a null pair must still count as a duplicate key
+SELECT g, jsonb_object_agg_unique_strict(k, v) OVER (ORDER BY g)
+  FROM (VALUES (1, 'a', null::int), (2, 'a', 1)) t(g, k, v);
+ERROR:  duplicate JSON object key value
 CREATE TEMP TABLE foo (serial_num int, name text, type text);
 INSERT INTO foo VALUES (847001,'t15','GE1043');
 INSERT INTO foo VALUES (847002,'t16','GE1043');
diff --git a/src/test/regress/sql/jsonb.sql b/src/test/regress/sql/jsonb.sql
index 610ee28b97f..f2c7285d6e0 100644
--- a/src/test/regress/sql/jsonb.sql
+++ b/src/test/regress/sql/jsonb.sql
@@ -408,6 +408,17 @@ SELECT jsonb_object_agg_unique(i, null) OVER (ORDER BY i)
 SELECT jsonb_object_agg_unique_strict(i, null) OVER (ORDER BY i)
   FROM generate_series(1, 10) g(i);
 
+-- the final function runs once per row, so later pairs must still win
+SELECT g, jsonb_object_agg(k, v) OVER (ORDER BY g)
+  FROM (VALUES (1,'a',1),(1,'a',2),(1,'a',3),(1,'b',5),(2,'b',6),(3,'a',7)) t(g,k,v);
+SELECT count(*) FILTER (WHERE w IS DISTINCT FROM
+  (SELECT jsonb_object_agg('k' || (j % 8), j ORDER BY j) FROM generate_series(1, i) j))
+  FROM (SELECT i, jsonb_object_agg('k' || (i % 8), i) OVER (ORDER BY i) AS w
+        FROM generate_series(1, 120) i) s;
+-- and a null pair must still count as a duplicate key
+SELECT g, jsonb_object_agg_unique_strict(k, v) OVER (ORDER BY g)
+  FROM (VALUES (1, 'a', null::int), (2, 'a', 1)) t(g, k, v);
+
 CREATE TEMP TABLE foo (serial_num int, name text, type text);
 INSERT INTO foo VALUES (847001,'t15','GE1043');
 INSERT INTO foo VALUES (847002,'t16','GE1043');
-- 
2.37.1 (Apple Git-137.1)

