From 0351ade32c93e9360b11c7dd00b521cebb3c86dd Mon Sep 17 00:00:00 2001
From: Antonin Houska <ah@cybertec.at>
Date: Thu, 18 Apr 2024 15:28:36 +0200
Subject: [PATCH 2/5] Moved functions to uniquekey.c.

They are not called from other modules.
---
 src/backend/optimizer/path/equivclass.c | 48 ----------------------
 src/backend/optimizer/path/uniquekey.c  | 53 +++++++++++++++++++++++++
 src/include/optimizer/paths.h           |  6 ---
 3 files changed, 53 insertions(+), 54 deletions(-)

diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c
index 892cd0000c..1d6bedb399 100644
--- a/src/backend/optimizer/path/equivclass.c
+++ b/src/backend/optimizer/path/equivclass.c
@@ -755,54 +755,6 @@ get_eclass_for_sort_expr(PlannerInfo *root,
 	return newec;
 }
 
-/*
- * find_ec_position_matching_expr
- *		Locate the position of EquivalenceClass whose members matching
- *		the given expr, if any; return -1 if no match.
- */
-int
-find_ec_position_matching_expr(PlannerInfo *root,
-							   Expr *expr,
-							   RelOptInfo *baserel)
-{
-	int			i = -1;
-
-	while ((i = bms_next_member(baserel->eclass_indexes, i)) >= 0)
-	{
-		EquivalenceClass *ec = list_nth(root->eq_classes, i);
-
-		if (find_ec_member_matching_expr(ec, expr, baserel->relids))
-			return i;
-	}
-	return -1;
-}
-
-/*
- * build_ec_positions_for_exprs
- *
- *		Given a list of exprs, find the related EC positions for each of
- *		them. if any exprs has no EC related, return NULL;
- */
-Bitmapset *
-build_ec_positions_for_exprs(PlannerInfo *root, List *exprs, RelOptInfo *rel)
-{
-	ListCell   *lc;
-	Bitmapset  *res = NULL;
-
-	foreach(lc, exprs)
-	{
-		int			pos = find_ec_position_matching_expr(root, lfirst(lc), rel);
-
-		if (pos < 0)
-		{
-			bms_free(res);
-			return NULL;
-		}
-		res = bms_add_member(res, pos);
-	}
-	return res;
-}
-
 /*
  * find_ec_member_matching_expr
  *		Locate an EquivalenceClass member matching the given expr, if any;
diff --git a/src/backend/optimizer/path/uniquekey.c b/src/backend/optimizer/path/uniquekey.c
index ecc7c6d802..d3f9aaaac8 100644
--- a/src/backend/optimizer/path/uniquekey.c
+++ b/src/backend/optimizer/path/uniquekey.c
@@ -26,6 +26,11 @@ static bool add_uniquekey_for_uniqueindex(PlannerInfo *root,
 										  IndexOptInfo *unique_index,
 										  List *truncatable_exprs,
 										  List *expr_opfamilies);
+static Bitmapset *build_ec_positions_for_exprs(PlannerInfo *root, List *exprs,
+											   RelOptInfo *rel);
+static int find_ec_position_matching_expr(PlannerInfo *root,
+										  Expr *expr,
+										  RelOptInfo *baserel);
 static bool unique_ecs_useful_for_distinct(PlannerInfo *root, Bitmapset *ec_indexes);
 
 /* Helper functions to create UniqueKey. */
@@ -193,6 +198,54 @@ add_uniquekey_for_uniqueindex(PlannerInfo *root, IndexOptInfo *unique_index,
 	return false;
 }
 
+/*
+ * find_ec_position_matching_expr
+ *		Locate the position of EquivalenceClass whose members matching
+ *		the given expr, if any; return -1 if no match.
+ */
+static int
+find_ec_position_matching_expr(PlannerInfo *root,
+							   Expr *expr,
+							   RelOptInfo *baserel)
+{
+	int			i = -1;
+
+	while ((i = bms_next_member(baserel->eclass_indexes, i)) >= 0)
+	{
+		EquivalenceClass *ec = list_nth(root->eq_classes, i);
+
+		if (find_ec_member_matching_expr(ec, expr, baserel->relids))
+			return i;
+	}
+	return -1;
+}
+
+/*
+ * build_ec_positions_for_exprs
+ *
+ *		Given a list of exprs, find the related EC positions for each of
+ *		them. if any exprs has no EC related, return NULL;
+ */
+static Bitmapset *
+build_ec_positions_for_exprs(PlannerInfo *root, List *exprs, RelOptInfo *rel)
+{
+	ListCell   *lc;
+	Bitmapset  *res = NULL;
+
+	foreach(lc, exprs)
+	{
+		int			pos = find_ec_position_matching_expr(root, lfirst(lc), rel);
+
+		if (pos < 0)
+		{
+			bms_free(res);
+			return NULL;
+		}
+		res = bms_add_member(res, pos);
+	}
+	return res;
+}
+
 /*
  *	make_uniquekey
  *		Based on UnqiueKey rules, it is impossible for a UnqiueKey
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index f3c683b2c9..b3fadd2f05 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -142,17 +142,11 @@ extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root,
 extern EquivalenceMember *find_ec_member_matching_expr(EquivalenceClass *ec,
 													   Expr *expr,
 													   Relids relids);
-extern int	find_ec_position_matching_expr(PlannerInfo *root,
-										   Expr *expr,
-										   RelOptInfo *rel);
 extern EquivalenceMember *find_computable_ec_member(PlannerInfo *root,
 													EquivalenceClass *ec,
 													List *exprs,
 													Relids relids,
 													bool require_parallel_safe);
-extern Bitmapset *build_ec_positions_for_exprs(PlannerInfo *root,
-											   List *exprs,
-											   RelOptInfo *rel);
 extern bool relation_can_be_sorted_early(PlannerInfo *root, RelOptInfo *rel,
 										 EquivalenceClass *ec,
 										 bool require_parallel_safe);
-- 
2.44.0

