From 3a8d1a81a4153dbcf016c5c2c8610dbffae018da Mon Sep 17 00:00:00 2001 From: jian he 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