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
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