mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
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.
This commit is contained in:
@ -1936,7 +1936,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
|
||||
{
|
||||
|
Reference in New Issue
Block a user