From be7fd36677d22eb535da9cb3a204e4f2bb3d7716 Mon Sep 17 00:00:00 2001
From: shihao zhong <zhong950419@gmail.com>
Date: Mon, 12 Oct 2026 03:14:06 -0400
Subject: [PATCH v1 2/2] Add test for jsonb_object_agg() as a window function.

A window use runs the final function once per row. Check that a
repeated key keeps its latest value.
---
 src/test/regress/expected/jsonb.out | 22 ++++++++++++++++++++++
 src/test/regress/sql/jsonb.sql      |  8 ++++++++
 2 files changed, 30 insertions(+)

diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out
index b1d2ce5f03a..7bc0af97972 100644
--- a/src/test/regress/expected/jsonb.out
+++ b/src/test/regress/expected/jsonb.out
@@ -1641,6 +1641,28 @@ SELECT jsonb_object_agg(DISTINCT 'a', 'abc');
  {"a": "abc"}
 (1 row)
 
+-- window use runs the final function once per row, repeated keys must 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)
+
 -- jsonb_object
 -- empty object, one dimension
 SELECT jsonb_object('{}');
diff --git a/src/test/regress/sql/jsonb.sql b/src/test/regress/sql/jsonb.sql
index d4e8d7d8c9e..371541d5927 100644
--- a/src/test/regress/sql/jsonb.sql
+++ b/src/test/regress/sql/jsonb.sql
@@ -424,6 +424,14 @@ SELECT jsonb_object_agg(name, type) FROM foo;
 -- edge case for parser
 SELECT jsonb_object_agg(DISTINCT 'a', 'abc');
 
+-- window use runs the final function once per row, repeated keys must 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;
+
 -- jsonb_object
 
 -- empty object, one dimension
-- 
2.37.1 (Apple Git-137.1)

