diff options
Diffstat (limited to 'src/backend/optimizer/path/indxpath.c')
-rw-r--r-- | src/backend/optimizer/path/indxpath.c | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index bf42b54970c..07d55a59ad6 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -2329,8 +2329,8 @@ match_clause_to_indexcol(IndexOptInfo *index, { Expr *clause = rinfo->clause; Index index_relid = index->rel->relid; - Oid opfamily = index->opfamily[indexcol]; - Oid idxcollation = index->indexcollations[indexcol]; + Oid opfamily; + Oid idxcollation; Node *leftop, *rightop; Relids left_relids; @@ -2339,6 +2339,11 @@ match_clause_to_indexcol(IndexOptInfo *index, Oid expr_coll; bool plain_op; + Assert(indexcol < index->nkeycolumns); + + opfamily = index->opfamily[indexcol]; + idxcollation = index->indexcollations[indexcol]; + /* First check for boolean-index cases. */ if (IsBooleanOpfamily(opfamily)) { @@ -2678,8 +2683,8 @@ match_clause_to_ordering_op(IndexOptInfo *index, Expr *clause, Oid pk_opfamily) { - Oid opfamily = index->opfamily[indexcol]; - Oid idxcollation = index->indexcollations[indexcol]; + Oid opfamily; + Oid idxcollation; Node *leftop, *rightop; Oid expr_op; @@ -2687,6 +2692,10 @@ match_clause_to_ordering_op(IndexOptInfo *index, Oid sortfamily; bool commuted; + Assert(indexcol < index->nkeycolumns); + + opfamily = index->opfamily[indexcol]; + idxcollation = index->indexcollations[indexcol]; /* * Clause must be a binary opclause. */ @@ -2921,8 +2930,13 @@ ec_member_matches_indexcol(PlannerInfo *root, RelOptInfo *rel, { IndexOptInfo *index = ((ec_member_matches_arg *) arg)->index; int indexcol = ((ec_member_matches_arg *) arg)->indexcol; - Oid curFamily = index->opfamily[indexcol]; - Oid curCollation = index->indexcollations[indexcol]; + Oid curFamily; + Oid curCollation; + + Assert(indexcol < index->nkeycolumns); + + curFamily = index->opfamily[indexcol]; + curCollation = index->indexcollations[indexcol]; /* * If it's a btree index, we can reject it if its opfamily isn't @@ -3548,8 +3562,13 @@ expand_indexqual_conditions(IndexOptInfo *index, RestrictInfo *rinfo = (RestrictInfo *) lfirst(lcc); int indexcol = lfirst_int(lci); Expr *clause = rinfo->clause; - Oid curFamily = index->opfamily[indexcol]; - Oid curCollation = index->indexcollations[indexcol]; + Oid curFamily; + Oid curCollation; + + Assert(indexcol < index->nkeycolumns); + + curFamily = index->opfamily[indexcol]; + curCollation = index->indexcollations[indexcol]; /* First check for boolean cases */ if (IsBooleanOpfamily(curFamily)) @@ -3918,14 +3937,15 @@ adjust_rowcompare_for_index(RowCompareExpr *clause, /* * The Var side can match any column of the index. */ - for (i = 0; i < index->ncolumns; i++) + for (i = 0; i < index->nkeycolumns; i++) { if (match_index_to_operand(varop, i, index) && get_op_opfamily_strategy(expr_op, index->opfamily[i]) == op_strategy && IndexCollMatchesExprColl(index->indexcollations[i], lfirst_oid(collids_cell))) - break; + + break; } if (i >= index->ncolumns) break; /* no match found */ |