diff options
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r-- | src/backend/optimizer/path/allpaths.c | 4 | ||||
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 6 | ||||
-rw-r--r-- | src/backend/optimizer/prep/prepjointree.c | 24 | ||||
-rw-r--r-- | src/backend/optimizer/prep/preptlist.c | 10 | ||||
-rw-r--r-- | src/backend/optimizer/prep/prepunion.c | 4 |
5 files changed, 14 insertions, 34 deletions
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 9ce72837b9c..f35e87962da 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.144 2006/03/05 15:58:28 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.145 2006/04/30 18:30:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -268,7 +268,7 @@ set_append_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, * currently supposes that every rowMark relation is involved in every * row returned by the query.) */ - if (list_member_int(root->parse->rowMarks, parentRTindex)) + if (get_rowmark(root->parse, parentRTindex)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("SELECT FOR UPDATE/SHARE is not supported for inheritance queries"))); diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 9750789f0c2..174b20f622a 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.209 2006/04/25 16:54:09 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.210 2006/04/30 18:30:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -843,7 +843,7 @@ create_indexscan_plan(PlannerInfo *root, if (best_path->indexinfo->indpred) { if (baserelid != root->parse->resultRelation && - !list_member_int(root->parse->rowMarks, baserelid)) + get_rowmark(root->parse, baserelid) == NULL) if (predicate_implied_by(clausel, best_path->indexinfo->indpred)) continue; @@ -962,7 +962,7 @@ create_bitmap_scan_plan(PlannerInfo *root, if (ipath->indexinfo->indpred) { if (baserelid != root->parse->resultRelation && - !list_member_int(root->parse->rowMarks, baserelid)) + get_rowmark(root->parse, baserelid) == NULL) if (predicate_implied_by(clausel, ipath->indexinfo->indpred)) continue; diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index ae538c9cc00..f3b6df46f21 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.37 2006/03/07 01:00:15 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.38 2006/04/30 18:30:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -409,29 +409,9 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte, /* * Pull up any FOR UPDATE/SHARE markers, too. (OffsetVarNodes - * already adjusted the marker values, so just list_concat the - * list.) - * - * Executor can't handle multiple FOR UPDATE/SHARE/NOWAIT flags, - * so complain if they are valid but different + * already adjusted the marker rtindexes, so just concat the lists.) */ - if (parse->rowMarks && subquery->rowMarks) - { - if (parse->forUpdate != subquery->forUpdate) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot use both FOR UPDATE and FOR SHARE in one query"))); - if (parse->rowNoWait != subquery->rowNoWait) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot use both wait and NOWAIT in one query"))); - } parse->rowMarks = list_concat(parse->rowMarks, subquery->rowMarks); - if (subquery->rowMarks) - { - parse->forUpdate = subquery->forUpdate; - parse->rowNoWait = subquery->rowNoWait; - } /* * We also have to fix the relid sets of any parent InClauseInfo diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index 5a37b86eb5b..0e06d0e8881 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -15,7 +15,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/prep/preptlist.c,v 1.81 2006/04/05 22:11:55 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/prep/preptlist.c,v 1.82 2006/04/30 18:30:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -116,7 +116,7 @@ preprocess_targetlist(PlannerInfo *root, List *tlist) * invalid. This is also checked at parse time, but that's * insufficient because of rule substitution, query pullup, etc. */ - CheckSelectLocking(parse, parse->forUpdate); + CheckSelectLocking(parse); /* * Currently the executor only supports FOR UPDATE/SHARE at top level @@ -128,19 +128,19 @@ preprocess_targetlist(PlannerInfo *root, List *tlist) foreach(l, parse->rowMarks) { - Index rti = lfirst_int(l); + RowMarkClause *rc = (RowMarkClause *) lfirst(l); Var *var; char *resname; TargetEntry *tle; - var = makeVar(rti, + var = makeVar(rc->rti, SelfItemPointerAttributeNumber, TIDOID, -1, 0); resname = (char *) palloc(32); - snprintf(resname, 32, "ctid%u", rti); + snprintf(resname, 32, "ctid%u", rc->rti); tle = makeTargetEntry((Expr *) var, list_length(tlist) + 1, diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 8c0457295c6..3b9e740cadf 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -22,7 +22,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.131 2006/03/05 15:58:31 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepunion.c,v 1.132 2006/04/30 18:30:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -816,7 +816,7 @@ expand_inherited_rtentry(PlannerInfo *root, RangeTblEntry *rte, Index rti) */ if (rti == parse->resultRelation) lockmode = RowExclusiveLock; - else if (list_member_int(parse->rowMarks, rti)) + else if (get_rowmark(parse, rti)) lockmode = RowShareLock; else lockmode = AccessShareLock; |