From 18e9c7db5695bf5386d552f4c396110eeff2f568 Mon Sep 17 00:00:00 2001
From: test <test>
Date: Tue, 9 Jun 2026 00:19:46 +0200
Subject: [PATCH v2 4/6] fix estimate_num_groups

---
 src/backend/utils/adt/selfuncs.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index d6efd07073a..5bd705c93ab 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -3915,7 +3915,10 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows,
 		if (varshere == NIL)
 		{
 			if (contain_volatile_functions(groupexpr))
+			{
+				list_free(varinfos);
 				return input_rows;
+			}
 			continue;
 		}
 
@@ -4033,6 +4036,7 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows,
 				}
 
 				/* we're done with this relation */
+				list_free(relvarinfos);
 				relvarinfos = NIL;
 			}
 		}
@@ -4119,6 +4123,9 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows,
 			numdistinct *= reldistinct;
 		}
 
+		list_free(varinfos);
+		list_free_deep(relvarinfos);
+
 		varinfos = newvarinfos;
 	} while (varinfos != NIL);
 
@@ -4134,6 +4141,8 @@ estimate_num_groups(PlannerInfo *root, List *groupExprs, double input_rows,
 	if (numdistinct < 1.0)
 		numdistinct = 1.0;
 
+	list_free(varinfos);
+
 	return numdistinct;
 }
 
-- 
2.54.0

