v1-0001-minor-refactor-generate_saop_pathlist.no-cfbot

application/octet-stream

Filename: v1-0001-minor-refactor-generate_saop_pathlist.no-cfbot
Type: application/octet-stream
Part: 0
Message: Re: POC, WIP: OR-clause support for indexes
From 3a8d1a81a4153dbcf016c5c2c8610dbffae018da Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Fri, 9 Feb 2024 22:07:49 +0800
Subject: [PATCH v1 1/1] minor refactor generate_saop_pathlist

we only call generate_saop_pathlist when enable_or_transformation is true,
let do it this way.
---
 src/backend/optimizer/path/indxpath.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 8ff2ba96..cfb04b27 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -1327,10 +1327,6 @@ generate_saop_pathlist(PlannerInfo *root, RelOptInfo *rel,
 	List	   *indlist;
 	ListCell   *lc;
 
-	if (!enable_or_transformation)
-		return NIL;
-
-
 	/*
 	 * We must be able to match at least one index to each element of
 	 * the array, else we can't use it.
@@ -1388,8 +1384,14 @@ generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel,
 
 		if (restriction_is_saop_clause(rinfo))
 		{
-			pathlist = generate_saop_pathlist(root, rel, rinfo,
-											  all_clauses);
+			/*
+			 * if we enable enable_or_transformation, we may
+			 * tranformed multi OR expression to SAOP node,
+			 * but here, we need to "reverse" it back for generating bitmapor path
+			*/
+			if (enable_or_transformation)
+				pathlist = generate_saop_pathlist(root, rel, rinfo,
+												   all_clauses);
 		}
 		else if (!restriction_is_or_clause(rinfo))
 			/* Ignore RestrictInfos that aren't ORs */
@@ -1431,10 +1433,11 @@ generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel,
 
 					if (restriction_is_saop_clause(ri))
 					{
-						List *paths;
+						List *paths = NIL;
 
-						paths = generate_saop_pathlist(root, rel, ri,
-														 all_clauses);
+						if (enable_or_transformation)
+							paths = generate_saop_pathlist(root, rel, ri,
+															all_clauses);
 
 						if (paths != NIL)
 						{
-- 
2.34.1