aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/planner.c
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2013-08-02 12:49:03 -0400
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2013-08-02 13:18:37 -0400
commit88c556680ca3faa40f7428c7705455d744a9859e (patch)
tree59b23b7cd6bd5e2b46f10ab517d9f54e06b9e9a5 /src/backend/optimizer/plan/planner.c
parent05ee328d66b700832cff61f59894ced7878fbfdb (diff)
downloadpostgresql-88c556680ca3faa40f7428c7705455d744a9859e.tar.gz
postgresql-88c556680ca3faa40f7428c7705455d744a9859e.zip
Fix crash in error report of invalid tuple lock
My tweak of these error messages in commit c359a1b082 contained the thinko that a query would always have rowMarks set for a query containing a locking clause. Not so: when declaring a cursor, for instance, rowMarks isn't set at the point we're checking, so we'd be dereferencing a NULL pointer. The fix is to pass the lock strength to the function raising the error, instead of trying to reverse-engineer it. The result not only is more robust, but it also seems cleaner overall. Per report from Robert Haas.
Diffstat (limited to 'src/backend/optimizer/plan/planner.c')
-rw-r--r--src/backend/optimizer/plan/planner.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 9ff8050080f..49bd9302fa5 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -1962,7 +1962,8 @@ preprocess_rowmarks(PlannerInfo *root)
* CTIDs invalid. This is also checked at parse time, but that's
* insufficient because of rule substitution, query pullup, etc.
*/
- CheckSelectLocking(parse);
+ CheckSelectLocking(parse, ((RowMarkClause *)
+ linitial(parse->rowMarks))->strength);
}
else
{