aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r--src/backend/optimizer/path/indxpath.c8
-rw-r--r--src/backend/optimizer/plan/createplan.c30
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;