diff options
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r-- | src/backend/optimizer/path/indxpath.c | 8 | ||||
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 30 |
2 files changed, 10 insertions, 28 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index e0933fc24d0..3434219dbd1 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -2435,7 +2435,7 @@ match_clause_to_indexcol(PlannerInfo *root, { iclause = makeNode(IndexClause); iclause->rinfo = rinfo; - iclause->indexquals = NIL; + iclause->indexquals = list_make1(rinfo); iclause->lossy = false; iclause->indexcol = indexcol; iclause->indexcols = NIL; @@ -2599,7 +2599,7 @@ match_opclause_to_indexcol(PlannerInfo *root, { iclause = makeNode(IndexClause); iclause->rinfo = rinfo; - iclause->indexquals = NIL; + iclause->indexquals = list_make1(rinfo); iclause->lossy = false; iclause->indexcol = indexcol; iclause->indexcols = NIL; @@ -2819,7 +2819,7 @@ match_saopclause_to_indexcol(RestrictInfo *rinfo, IndexClause *iclause = makeNode(IndexClause); iclause->rinfo = rinfo; - iclause->indexquals = NIL; + iclause->indexquals = list_make1(rinfo); iclause->lossy = false; iclause->indexcol = indexcol; iclause->indexcols = NIL; @@ -3078,7 +3078,7 @@ expand_indexqual_rowcompare(RestrictInfo *rinfo, * usable as index quals. */ if (var_on_left && !iclause->lossy) - iclause->indexquals = NIL; + iclause->indexquals = list_make1(rinfo); else { /* diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index c7645acad2c..236f506cfb2 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -3075,11 +3075,8 @@ create_bitmap_subplan(PlannerInfo *root, Path *bitmapqual, Assert(!rinfo->pseudoconstant); subquals = lappend(subquals, rinfo->clause); - if (iclause->indexquals) - subindexquals = list_concat(subindexquals, - get_actual_clauses(iclause->indexquals)); - else - subindexquals = lappend(subindexquals, rinfo->clause); + subindexquals = list_concat(subindexquals, + get_actual_clauses(iclause->indexquals)); if (rinfo->parent_ec) subindexECs = lappend(subindexECs, rinfo->parent_ec); } @@ -4491,33 +4488,18 @@ fix_indexqual_references(PlannerInfo *root, IndexPath *index_path, { IndexClause *iclause = lfirst_node(IndexClause, lc); int indexcol = iclause->indexcol; + ListCell *lc2; - if (iclause->indexquals == NIL) + foreach(lc2, iclause->indexquals) { - /* rinfo->clause is directly usable as an indexqual */ - Node *clause = (Node *) iclause->rinfo->clause; + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc2); + Node *clause = (Node *) rinfo->clause; stripped_indexquals = lappend(stripped_indexquals, clause); clause = fix_indexqual_clause(root, index, indexcol, clause, iclause->indexcols); fixed_indexquals = lappend(fixed_indexquals, clause); } - else - { - /* Process the derived indexquals */ - ListCell *lc2; - - foreach(lc2, iclause->indexquals) - { - RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc2); - Node *clause = (Node *) rinfo->clause; - - stripped_indexquals = lappend(stripped_indexquals, clause); - clause = fix_indexqual_clause(root, index, indexcol, - clause, iclause->indexcols); - fixed_indexquals = lappend(fixed_indexquals, clause); - } - } } *stripped_indexquals_p = stripped_indexquals; |