0001-A-little-cosmetic-to-convert_VALUES_to_ANY.patch

text/plain

Filename: 0001-A-little-cosmetic-to-convert_VALUES_to_ANY.patch
Type: text/plain
Part: 0
Message: A little cosmetic to convert_VALUES_to_ANY()
From 0eeb7487ba5bdacd260987514cd0a77eb8c88eaa Mon Sep 17 00:00:00 2001
From: Tender Wang <tndrwang@gmail.com>
Date: Sun, 27 Jul 2025 15:26:20 +0800
Subject: [PATCH] A little cosmetic to convert_VALUES_to_ANY().

In original logic, we have to do two passes iteration over the
values_lists. One is to check if have volatile functions, the other
one is to check if have no Const. We can merge above two iterations into
one. Also add a brace for better/more consistent style.
---
 src/backend/optimizer/plan/subselect.c    | 9 ++++++---
 src/backend/optimizer/prep/prepjointree.c | 4 ++--
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c
index d71ed958e31..7a275f430f2 100644
--- a/src/backend/optimizer/plan/subselect.c
+++ b/src/backend/optimizer/plan/subselect.c
@@ -1255,11 +1255,10 @@ convert_VALUES_to_ANY(PlannerInfo *root, Node *testexpr, Query *values)
 
 	/*
 	 * Also, check that only RTE corresponds to VALUES; the list of values has
-	 * at least two items and no volatile functions.
+	 * at least two items.
 	 */
 	if (rte->rtekind != RTE_VALUES ||
-		list_length(rte->values_lists) < 2 ||
-		contain_volatile_functions((Node *) rte->values_lists))
+		list_length(rte->values_lists) < 2)
 		return NULL;
 
 	foreach(lc, rte->values_lists)
@@ -1267,6 +1266,10 @@ convert_VALUES_to_ANY(PlannerInfo *root, Node *testexpr, Query *values)
 		List	   *elem = lfirst(lc);
 		Node	   *value = linitial(elem);
 
+		/* Must have no volatile functions */
+		if (contain_volatile_functions(value))
+			return NULL;
+
 		/*
 		 * Prepare an evaluation of the right side of the operator with
 		 * substitution of the given value.
diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c
index 35e8d3c183b..d9908d16d79 100644
--- a/src/backend/optimizer/prep/prepjointree.c
+++ b/src/backend/optimizer/prep/prepjointree.c
@@ -848,13 +848,13 @@ pull_up_sublinks_qual_recurse(PlannerInfo *root, Node *node,
 			if ((saop = convert_VALUES_to_ANY(root,
 											  sublink->testexpr,
 											  (Query *) sublink->subselect)) != NULL)
-
+			{
 				/*
 				 * The VALUES sequence was simplified.  Nothing more to do
 				 * here.
 				 */
 				return (Node *) saop;
-
+			}
 			if ((j = convert_ANY_sublink_to_join(root, sublink,
 												 available_rels1)) != NULL)
 			{
-- 
2.34.1